Commit db41784e authored by “yiyousong”'s avatar “yiyousong”
parents c475638e 8667e872
...@@ -31,7 +31,8 @@ export default { ...@@ -31,7 +31,8 @@ export default {
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
#app { #app {
height:100vh;
.loading { .loading {
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -11,8 +11,8 @@ html * { ...@@ -11,8 +11,8 @@ html * {
} }
html, html,
body { body {
height: 100%; /* height: 100%; */
min-height: 100%; /* min-height: 100%; */
font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial, sans-serif; font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial, sans-serif;
} }
body { body {
......
...@@ -13,13 +13,13 @@ html * { ...@@ -13,13 +13,13 @@ html * {
html, html,
body { body {
height: 100%; // height: 100%;
min-height: 100%; // min-height: 100%;
font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial, font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial,
sans-serif; sans-serif;
} }
body { body {
overflow-y: scroll; // overflow-y: scroll;
} }
body, body,
div, div,
......
...@@ -8,12 +8,26 @@ export default { ...@@ -8,12 +8,26 @@ export default {
methods: { methods: {
// 渲染前置处理 // 渲染前置处理
beforeRender(data) { beforeRender(data) {
if (data.entity.attachmentPath) {
data.entity.attachmentPathList = [
{
url: data.entity.attachmentPath,
name: data.entity.attachmentPath,
},
];
}
console.log(data);
return data; return data;
}, },
// 渲染后置处理 // 渲染后置处理
afterRender(data) {}, afterRender(data) {},
// 提交表单的前置处理 // 提交表单的前置处理
beforeSubmit(data) { beforeSubmit(data) {
data.attachmentPathList && data.attachmentPathList.length > 0
? (data.attachmentPath = data.attachmentPathList[0].url)
: (data.attachmentPath = "");
console.log(data);
return data; return data;
}, },
// 提交表单的后置处理, 会阻断默认的回退行为 // 提交表单的后置处理, 会阻断默认的回退行为
...@@ -33,6 +47,7 @@ export default { ...@@ -33,6 +47,7 @@ export default {
// 默认拉取数据 // 默认拉取数据
getData() { getData() {
this.loading = true; this.loading = true;
this.$get(this.urls.currUrl || this.pageInfo.currUrl, this.query) this.$get(this.urls.currUrl || this.pageInfo.currUrl, this.query)
.then(({ data }) => { .then(({ data }) => {
const res = this.beforeRender(data); const res = this.beforeRender(data);
...@@ -43,6 +58,7 @@ export default { ...@@ -43,6 +58,7 @@ export default {
// //
res.entity = this.util_toDateStr(res.entity, this.toDate); res.entity = this.util_toDateStr(res.entity, this.toDate);
this.form = Object.assign({}, this.form, res.entity); this.form = Object.assign({}, this.form, res.entity);
this.dict = Object.assign({}, this.dict, res.dict); this.dict = Object.assign({}, this.dict, res.dict);
this.afterRender(res); this.afterRender(res);
}) })
......
...@@ -205,10 +205,26 @@ export default { ...@@ -205,10 +205,26 @@ export default {
<el-tag type={"success"} size="mini"> <el-tag type={"success"} size="mini">
{content} {content}
</el-tag> </el-tag>
) : row.checkStatus == 1 || row.processStatus == 1 ? (
row.subAddType == 1 && column.label.includes("分值") ? (
<el-link type={"info"}>(+{content})</el-link>
) : row.subAddType == 2 && column.label.includes("分值") ? (
<el-link type={"info"}>({-content})</el-link>
) : (
<p>{content}</p>
)
) : row.checkStatus == 2 || row.processStatus == 2 ? (
row.subAddType == 1 && column.label.includes("分值") ? (
<el-link>+{content}</el-link>
) : row.subAddType == 2 && column.label.includes("分值") ? (
<el-link>{-content}</el-link>
) : (
<p>{content}</p>
)
) : row.subAddType == 1 && column.label.includes("分值") ? ( ) : row.subAddType == 1 && column.label.includes("分值") ? (
<p>{content}</p> <el-link>+{content}</el-link>
) : row.subAddType == 2 && column.label.includes("分值") ? ( ) : row.subAddType == 2 && column.label.includes("分值") ? (
<p>{-content}</p> <el-link>{-content}</el-link>
) : ( ) : (
<p>{content}</p> <p>{content}</p>
) )
...@@ -330,7 +346,7 @@ export default { ...@@ -330,7 +346,7 @@ export default {
}, },
// 格式化单元格数据 // 格式化单元格数据
formatterDate(row, column) { formatterDate(row, column) {
console.log("date:",row,column) // console.log("date:",row,column)
return formatterDate(row, column); return formatterDate(row, column);
}, },
// 格式化单元格数据 只要年月日 // 格式化单元格数据 只要年月日
...@@ -457,13 +473,14 @@ export default { ...@@ -457,13 +473,14 @@ export default {
const regular = new RegExp(`.*\.${suffix}`); const regular = new RegExp(`.*\.${suffix}`);
if (regular.test(val)) { if (regular.test(val)) {
return ( return (
<el-image // <el-image
src={val.indexOf("http") == -1 ? baseUrl + val : val} // src={val.indexOf("http") == -1 ? baseUrl + val : val}
preview-src-list={ // preview-src-list={
val.indexOf("http") == -1 ? [baseUrl + val] : [val] // val.indexOf("http") == -1 ? [baseUrl + val] : [val]
} // }
style="width: 100px" // style="width: 100px"
></el-image> // ></el-image>
<filepReview src={val}/>
); );
} else { } else {
return <el-link type="primary">{val}</el-link>; return <el-link type="primary">{val}</el-link>;
...@@ -565,7 +582,7 @@ export default { ...@@ -565,7 +582,7 @@ export default {
}, },
// 查看 // 查看
toView(row, query) { toView(row, query) {
console.log(this.pageInfo.view); // console.log(this.pageInfo.view);
this.$router.push({ this.$router.push({
path: this.pageInfo.view, path: this.pageInfo.view,
query: Object.assign({}, { id: row.id }, query), query: Object.assign({}, { id: row.id }, query),
......
...@@ -15,6 +15,7 @@ import FileUpload from '@/components/FileUpload'; ...@@ -15,6 +15,7 @@ import FileUpload from '@/components/FileUpload';
import Editor from '@/components/Editor'; import Editor from '@/components/Editor';
import Map from '@/components/Map'; import Map from '@/components/Map';
import MapDetail from '@/components/MapDetail'; import MapDetail from '@/components/MapDetail';
import filepReview from '@/components/filepReview';
const Prototype = function() {}; const Prototype = function() {};
Prototype.install = (Vue, options) => { Prototype.install = (Vue, options) => {
...@@ -34,6 +35,7 @@ Prototype.install = (Vue, options) => { ...@@ -34,6 +35,7 @@ Prototype.install = (Vue, options) => {
Vue.component('Editor', Editor) // 富文本 Vue.component('Editor', Editor) // 富文本
Vue.component('Map', Map) // 地图 Vue.component('Map', Map) // 地图
Vue.component('MapDetail', MapDetail) // 地图 Vue.component('MapDetail', MapDetail) // 地图
Vue.component('filepReview', filepReview) // 图片文件预览
} }
export default Prototype; export default Prototype;
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
:empty-text="emptytxt ? emptytxt : emptyText" :empty-text="emptytxt ? emptytxt : emptyText"
border border
style="width: 100%" style="width: 100%"
height="530"
> >
<el-table-column <el-table-column
v-for="column in columns" v-for="column in columns"
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
:default-expand-all="expand" :default-expand-all="expand"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
height="520" height="630px"
> >
<el-table-column <el-table-column
......
...@@ -226,7 +226,6 @@ export default { ...@@ -226,7 +226,6 @@ export default {
}, },
maxLength: { maxLength: {
type: Number, type: Number,
default: 256,
}, },
}, },
methods: { methods: {
......
...@@ -226,7 +226,7 @@ export default { ...@@ -226,7 +226,7 @@ export default {
} }
} }
.controllBar { .controllBar {
background-color: rgba(170, 170, 170, 0.4); background-color: rgba(255, 255, 255, 0.2);
width: 120px; width: 120px;
height: 44px; height: 44px;
line-height: 44px; line-height: 44px;
......
...@@ -344,6 +344,7 @@ export default { ...@@ -344,6 +344,7 @@ export default {
let newData = { page: 1 }; let newData = { page: 1 };
Object.keys(data).forEach((item) => { Object.keys(data).forEach((item) => {
let val = data[item]; let val = data[item];
console.log(item,this.search)
this.search.forEach((obj) => { this.search.forEach((obj) => {
if ( if (
obj.name === item && obj.name === item &&
...@@ -363,6 +364,7 @@ export default { ...@@ -363,6 +364,7 @@ export default {
}); });
newData[item] = this.decodeVal(val); newData[item] = this.decodeVal(val);
}); });
return newData; return newData;
}, },
decodeVal(val) { decodeVal(val) {
......
<template>
<div class="img-flex">
<el-image
:src="urlVal(item)"
:preview-src-list="[urlVal(item)]" alt="" v-for="item in fileList" :key="item"/>
</div>
</template>
<script>
const baseUrl = process.env.VUE_APP_API_BASE_URL + "/";
export default {
props:['src'],
data() {
return {}
},
created() {
console.log(this.src)
},
computed: {
fileList:function(v){
return this.src?this.src.split(","):[]
}
},
methods: {
urlVal(val){
console.log(val,"2222")
return val.indexOf("http") == -1 ? baseUrl + val : val
}
},
}
</script>
<style lang="less" scoped>
.img-flex{
overflow: hidden;
display: inline-block;
vertical-align: middle;
.el-image{
width: 50px;
float: left;
border:1px solid #ddd;
margin: 2px;
}
}
</style>
\ No newline at end of file
<template> <template>
<div :style="menuPageCss" class="pages page-layout"> <div :style="menuPageCss" class="pages page-layout">
<LayoutHeader <LayoutHeader v-if="menuPage !== 'left'" @changePath="changePath"></LayoutHeader>
v-if="menuPage !== 'left'" <LayoutHeaderLeft @toggle="toggle" :isOpen="isOpen" v-if="menuPage === 'left'" />
@changePath="changePath" <div class="layout">
></LayoutHeader>
<LayoutHeaderLeft
@toggle="toggle"
:isOpen="isOpen"
v-if="menuPage === 'left'"
/>
<div style="padding:15px">
<router-view :class="{ active: !isOpen }" /> <router-view :class="{ active: !isOpen }" />
</div> </div>
</div> </div>
...@@ -57,6 +50,12 @@ export default { ...@@ -57,6 +50,12 @@ export default {
</script> </script>
<style lang="less"> <style lang="less">
.layout {
padding: 15px 15px 0 15px;
box-sizing: border-box;
}
.page { .page {
min-height: calc(100vh - 100px); min-height: calc(100vh - 100px);
width: 100%; width: 100%;
...@@ -65,12 +64,32 @@ export default { ...@@ -65,12 +64,32 @@ export default {
// var(--padding-top) 5px 5px 5px; // var(--padding-top) 5px 5px 5px;
// margin-left: 60px; // margin-left: 60px;
padding: 10px; padding: 10px;
&.active { &.active {
margin-left: var(--margin-left); margin-left: var(--margin-left);
} }
} }
.page-layout { .page-layout {
background: #eee; background: #eee;
height: 100vh;
overflow: auto;
} }
/* 侧边滚动条 */
.page-layout::-webkit-scrollbar {
width: 3px;
}
/* 滚动条上的滚动滑块 */
.page-layout::-webkit-scrollbar-thumb {
background: #CCCCCC;
border-radius: 4px;
}
/* 滚动条轨道 */
.page-layout::-webkit-scrollbar-track {
background: #EEEEEE;
border-radius: 4px;
}
</style> </style>
...@@ -239,7 +239,6 @@ ...@@ -239,7 +239,6 @@
return return
} }
if(arr.length > 1 && index>0){ if(arr.length > 1 && index>0){
console.log(11111)
// 上一次比较 // 上一次比较
let lastoffTime = transFormMinut(arr[index-1].offWorkDate) + let lastoffTime = transFormMinut(arr[index-1].offWorkDate) +
transFormMinut(arr[index - 1 ].offWorkDateAfter) transFormMinut(arr[index - 1 ].offWorkDateAfter)
......
...@@ -39,15 +39,16 @@ ...@@ -39,15 +39,16 @@
label="开始时间" label="开始时间"
prop="startTime" prop="startTime"
v-model="form.startTime" v-model="form.startTime"
type="date" type="datetime"
/> />
<Field <Field
disabled
label="结束时间" label="结束时间"
prop="endTime" prop="endTime"
v-model="form.endTime" v-model="form.endTime"
type="date" type="datetime"
disabled
/> />
<Field <Field
disabled disabled
label="时长,单位秒" label="时长,单位秒"
...@@ -66,8 +67,8 @@ ...@@ -66,8 +67,8 @@
<Field <Field
disabled disabled
label="审批负责人" label="审批负责人"
prop="approver" prop="approverId"
v-model="form.approver" v-model="form.approverId"
placeholder="请输入审批负责人" placeholder="请输入审批负责人"
/> />
<Field <Field
...@@ -147,6 +148,7 @@ export default { ...@@ -147,6 +148,7 @@ export default {
open: false, open: false,
// urls: { saveUrl: "/check/attend/record/examine" }, // urls: { saveUrl: "/check/attend/record/examine" },
toString: ["leaveType", "auditResult", "processStatus"], toString: ["leaveType", "auditResult", "processStatus"],
toDate: ["startTime", "endTime"],
// 表单校验 // 表单校验
rules: {}, rules: {},
}; };
...@@ -157,8 +159,11 @@ export default { ...@@ -157,8 +159,11 @@ export default {
edit(row) { edit(row) {
this.reset(); this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/edit"; // this.urls.currUrl = "attendance/leave/record/edit";
this.getData(); // this.getData();
this.$post("attendance/leave/record/edit", { id: row.id }).then((res) => {
console.log(res);
});
this.pageInfo.type = "edit"; this.pageInfo.type = "edit";
this.title = "修改请假记录信息"; this.title = "修改请假记录信息";
}, },
...@@ -176,8 +181,8 @@ export default { ...@@ -176,8 +181,8 @@ export default {
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/view"; this.urls.currUrl = "attendance/leave/record/view";
this.getData(); this.getData();
this.pageInfo.type = "view"; this.pageInfo.type = "check";
this.title = "请假记录信息详细"; this.title = "审核请假记录";
}, },
/**取消按钮 */ /**取消按钮 */
cancel() { cancel() {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
v-model="form.leavePerson" v-model="form.leavePerson"
placeholder="请输入请假人" placeholder="请输入请假人"
:maxLength="10" :maxLength="10"
:disabled="pageInfo.type == 'view'"
/> />
<Field <Field
label="所属部门" label="所属部门"
...@@ -24,6 +25,7 @@ ...@@ -24,6 +25,7 @@
type="select" type="select"
placeholder="请选择所属部门" placeholder="请选择所属部门"
:enumData="dict.deptId" :enumData="dict.deptId"
:disabled="pageInfo.type == 'view'"
/> />
<!-- <Field label="所属部门" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入所属部门"/> --> <!-- <Field label="所属部门" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入所属部门"/> -->
<Field <Field
...@@ -32,6 +34,7 @@ ...@@ -32,6 +34,7 @@
v-model="form.phoneNumber" v-model="form.phoneNumber"
placeholder="请输入电话号码" placeholder="请输入电话号码"
:maxLength="11" :maxLength="11"
:disabled="pageInfo.type == 'view'"
/> />
<Field <Field
label="请假类型" label="请假类型"
...@@ -40,13 +43,16 @@ ...@@ -40,13 +43,16 @@
type="select" type="select"
:enumData="dict.leaveType" :enumData="dict.leaveType"
placeholder="请选择请假类型" placeholder="请选择请假类型"
:disabled="pageInfo.type == 'view'"
/> />
<Field <Field
label="开始时间" label="开始时间"
prop="startTime" prop="startTime"
v-model="form.startTime" v-model="form.startTime"
type="datetime" type="datetime"
@change="changedate" @change="changedate"
:disabled="pageInfo.type == 'view'"
/> />
<Field <Field
label="结束时间" label="结束时间"
...@@ -54,6 +60,7 @@ ...@@ -54,6 +60,7 @@
v-model="form.endTime" v-model="form.endTime"
type="datetime" type="datetime"
@change="changedate" @change="changedate"
:disabled="pageInfo.type == 'view'"
/> />
<Field <Field
...@@ -70,6 +77,23 @@ ...@@ -70,6 +77,23 @@
v-model="form.reason" v-model="form.reason"
type="textarea" type="textarea"
placeholder="请输入请假事由" placeholder="请输入请假事由"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="审核结果"
prop="auditResult"
v-model="form.auditResult"
type="radio"
:enumData="dict.auditResult"
placeholder="请选择审核结果"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="审核说明"
prop="auditDesc"
v-model="form.auditDesc"
placeholder="请输入审核说明"
:disabled="pageInfo.type == 'view'"
/> />
<Field <Field
label="审批负责人" label="审批负责人"
...@@ -78,6 +102,7 @@ ...@@ -78,6 +102,7 @@
v-model="form.approverId" v-model="form.approverId"
placeholder="请选择审批负责人" placeholder="请选择审批负责人"
:enumData="dict.approverId" :enumData="dict.approverId"
:disabled="pageInfo.type == 'view'"
/> />
<!-- <Field label="审批负责人" prop="approver" v-model="form.approver" placeholder="请输入审批负责人"/> --> <!-- <Field label="审批负责人" prop="approver" v-model="form.approver" placeholder="请输入审批负责人"/> -->
<!-- <Field label="附件" prop="attachment" v-model="form.attachment" type="textarea" placeholder="请输入附件"/> --> <!-- <Field label="附件" prop="attachment" v-model="form.attachment" type="textarea" placeholder="请输入附件"/> -->
...@@ -87,16 +112,29 @@ ...@@ -87,16 +112,29 @@
v-model="form.remark" v-model="form.remark"
type="textarea" type="textarea"
placeholder="请输入备注" placeholder="请输入备注"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="申请时间"
prop="createTime"
v-model="form.createTime"
type="datetime"
disabled
/> />
</el-row> </el-row>
<el-form-item label="附件路径" prop="attachmentPath"> <el-form-item label="附件路径" prop="attachmentPathList">
<FileUpload <FileUpload
@input="uploadFn" @input="uploadFn"
:value="attachmentPath" :value="form.attachmentPathList"
:fileNumber="1" :fileNumber="1"
:disabled="pageInfo.type == 'view'"
/> />
</el-form-item> </el-form-item>
<form-buttons @submit="submitForm" noCancelBtn /> <form-buttons
@submit="submitForm"
noCancelBtn
v-if="pageInfo.type !== 'view'"
/>
</el-form> </el-form>
</div> </div>
</el-drawer> </el-drawer>
...@@ -123,8 +161,8 @@ export default { ...@@ -123,8 +161,8 @@ export default {
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
direction: "rtl", direction: "rtl",
toString: ["leaveType", "deptId", "approverId"], toString: ["leaveType", "deptId", "approverId", "auditResult"],
toDate: ["startTime", "endTime"], toDate: ["startTime", "endTime", "createTime"],
// 表单校验 // 表单校验
rules: { rules: {
leavePerson: [ leavePerson: [
...@@ -155,14 +193,17 @@ export default { ...@@ -155,14 +193,17 @@ export default {
approverId: [ approverId: [
{ required: true, message: "请选择审批人", trigger: "change" }, { required: true, message: "请选择审批人", trigger: "change" },
], ],
attachmentPath: [ // attachmentPathList: [
{ required: true, message: "请上传附件文件", trigger: "change" }, // { required: true, message: "请上传附件文件", trigger: "change" },
// ],
auditResult: [
{ required: true, message: "请选择审核结果", trigger: "change" },
], ],
}, },
attachmentPath: "", attachmentPath: "",
}; };
}, },
watch: {},
methods: { methods: {
// beforeSubmit() { // beforeSubmit() {
// if (this.form.endTime.valueOf() > this.form.startTime.valueOf()) { // if (this.form.endTime.valueOf() > this.form.startTime.valueOf()) {
...@@ -172,8 +213,8 @@ export default { ...@@ -172,8 +213,8 @@ export default {
// } // }
// }, // },
uploadFn(e) { uploadFn(e) {
this.attachmentPath = e; this.form.attachmentPathList = e;
this.form.attachmentPath = this.attachmentPath[0].url; this.$forceUpdate(this.form.attachmentPathList);
}, },
/** 编辑 */ /** 编辑 */
edit(row) { edit(row) {
...@@ -181,6 +222,23 @@ export default { ...@@ -181,6 +222,23 @@ export default {
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/edit"; this.urls.currUrl = "attendance/leave/record/edit";
this.getData(); this.getData();
// this.$get("attendance/leave/record/edit", { id: row.id }).then((res) => {
// if (res.code == 1) {
// this.form = res.data.entity;
// this.attachmentPath = res.data
// ? [
// {
// url: res.data.entity.attachmentPath,
// name: res.data.entity.attachmentPath,
// },
// ]
// : "";
// this.dict = res.data.dict;
// this.open = true;
// } else {
// this.reset();
// }
// });
this.pageInfo.type = "edit"; this.pageInfo.type = "edit";
this.title = "修改请假记录信息"; this.title = "修改请假记录信息";
}, },
...@@ -198,6 +256,7 @@ export default { ...@@ -198,6 +256,7 @@ export default {
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/view"; this.urls.currUrl = "attendance/leave/record/view";
this.getData(); this.getData();
this.pageInfo.type = "view"; this.pageInfo.type = "view";
this.title = "请假记录信息详细"; this.title = "请假记录信息详细";
}, },
......
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notDel> <LayoutTable :data="tableData" :config="tableConfig" notDel>
<el-button type="primary" @click="doExport" :disabled="isExport" <el-button
size="mini" slot="table-head-left2">导出 type="primary"
@click="doExport"
:disabled="isExport"
size="mini"
slot="table-head-left2"
>导出
</el-button> </el-button>
</LayoutTable> </LayoutTable>
<drawer-show ref="drawerform" @ok="getData"/> <drawer-show ref="drawerform" @ok="getData" />
<drawer-audit ref="draweraudit" @ok="getData"/> <drawer-audit ref="draweraudit" @ok="getData" />
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import drawerShow from "./drawershow"; import drawerShow from "./drawershow";
import drawerAudit from "./draweraudit";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "AttendanceLeaveRecordList", name: "AttendanceLeaveRecordList",
components: { components: {
drawerShow drawerShow,
drawerAudit,
}, },
mixins: [table], mixins: [table],
created() { created() {},
},
methods: { methods: {
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
...@@ -39,18 +44,24 @@ export default { ...@@ -39,18 +44,24 @@ export default {
}, },
audit(row) { audit(row) {
//todo 审核页面进行审核 //todo 审核页面进行审核
this.$refs.draweraudit.view(row); this.$refs.drawerform.edit(row);
// this.$refs.draweraudit.view(row);
}, },
doExport() { doExport() {
this.isExport = true; this.isExport = true;
this.$download("/attendance/leave/record/exportExcel", { this.$download(
"idList": this.selection, "/attendance/leave/record/exportExcel",
'name': this.$route.query['name'], {
}, {type: "excel"}).then(() => this.isExport = false).catch(error => { idList: this.selection,
this.isExport = false; name: this.$route.query["name"],
this.$message.error(error.message); },
}) { type: "excel" }
)
.then(() => (this.isExport = false))
.catch((error) => {
this.isExport = false;
this.$message.error(error.message);
});
}, },
}, },
data() { data() {
...@@ -63,101 +74,123 @@ export default { ...@@ -63,101 +74,123 @@ export default {
name: "leavePerson", name: "leavePerson",
type: "text", type: "text",
label: "请假人", label: "请假人",
fuzzy: true fuzzy: true,
}, },
{ {
name: "phoneNumber", name: "phoneNumber",
type: "text", type: "text",
label: "电话号码", label: "电话号码",
fuzzy: true fuzzy: true,
}, },
{ {
name: "deptId", name: "deptId",
type: "select", type: "select",
label: "全部部门", label: "全部部门",
fuzzy: false fuzzy: false,
}, },
{ {
name: "leaveType", name: "leaveType",
type: "select", type: "select",
label: "请假类型", label: "请假类型",
fuzzy: false fuzzy: false,
}, },
{ {
name: "startTime", name: "startTime",
type: "date", type: "date",
label: "开始时间", label: "开始时间",
fuzzy: false fuzzy: false,
}, },
{ {
name: "endTime", name: "endTime",
type: "date", type: "date",
label: "结束时间", label: "结束时间",
fuzzy: false fuzzy: false,
}, },
], ],
columns: [ columns: [
{type: "selection", width: 60}, { type: "selection", width: 60 },
{type: "index", label: "序号", width: 50}, { type: "index", label: "序号", width: 50 },
// {label: "请假人id", prop: "leavePersonId", formatter: this.formatter}, // {label: "请假人id", prop: "leavePersonId", formatter: this.formatter},
{label: "请假人", prop: "leavePerson"}, { label: "请假人", prop: "leavePerson" },
// {label: "所属部门id", prop: "deptId", formatter: this.formatter}, // {label: "所属部门id", prop: "deptId", formatter: this.formatter},
{label: "所属部门", prop: "deptName"}, { label: "所属部门", prop: "deptName" },
{label: "电话号码", prop: "phoneNumber"}, { label: "电话号码", prop: "phoneNumber" },
{label: "请假类型", prop: "leaveType", formatter: this.formatterLeaveType}, {
label: "请假类型",
prop: "leaveType",
formatter: this.formatterLeaveType,
},
{label: "开始时间", prop: "startTime", formatter: this.formatterDate}, {
label: "开始时间",
prop: "startTime",
formatter: this.formatterDate,
},
{label: "结束时间", prop: "endTime", formatter: this.formatterDate}, { label: "结束时间", prop: "endTime", formatter: this.formatterDate },
{label: "时长", prop: "duration", formatter: this.formatter}, { label: "时长", prop: "duration", formatter: this.formatter },
// {label: "审批负责人Id", prop: "approverId", formatter: this.formatter}, // {label: "审批负责人Id", prop: "approverId", formatter: this.formatter},
/* {label: "处理状态", prop: "processStatus", formatter: this.formatter},*/ /* {label: "处理状态", prop: "processStatus", formatter: this.formatter},*/
{label: "状态", prop: "auditResult", formatter: this.formatter}, { label: "状态", prop: "auditResult", formatter: this.formatter },
{label: "审批负责人", prop: "approver"}, { label: "审批负责人", prop: "approver" },
{label: "创建用户", prop: "createUserId", formatter: this.formatter}, {
label: "创建用户",
prop: "createUserId",
formatter: this.formatter,
},
{label: "创建时间", prop: "createTime", formatter: this.formatterDate}, {
label: "创建时间",
prop: "createTime",
formatter: this.formatterDate,
},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
formatter: row => { formatter: (row) => {
return ( return (
<div> <div>
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel}/> <table-buttons
<span> </span> noAdd
{row.processStatus === 1 ? ( row={row}
<el-button onEdit={this.toEdit}
size="mini" onView={this.toView}
type="text" onDel={this.toDel}
icon="el-icon-open" />
onClick={() => { <span> </span>
this.audit(row); {row.processStatus === 1 ? (
}} <el-button
> size="mini"
审核 type="text"
</el-button> icon="el-icon-open"
) : ( onClick={() => {
"" this.audit(row);
)} }}
</div> >
审核
</el-button>
) : (
""
)}
</div>
); );
} },
} },
] ],
} },
}; };
} },
}; };
</script> </script>
<template> <template>
<div class="page"> <div class="page">
<div style="margin:10px 0"> <div>
<tab-pane <tab-pane
:thirdList="thirdList" :thirdList="thirdList"
:activeName="activeName" :activeName="activeName"
...@@ -189,7 +189,7 @@ import drawerShow from "./drawershow"; ...@@ -189,7 +189,7 @@ import drawerShow from "./drawershow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
import TabPane from "@/components/tabPane.vue"; import TabPane from "@/components/tabPane.vue";
import { timestampToTime } from "@/assets/utils/dateFormat"; import { timestampToTime } from "@/assets/utils/dateFormat";
import {formatterDateOnly} from "@/assets/utils/table"; import { formatterDateOnly } from "@/assets/utils/table";
export default { export default {
name: "AttendanceRecordList", name: "AttendanceRecordList",
components: { components: {
...@@ -401,12 +401,30 @@ export default { ...@@ -401,12 +401,30 @@ export default {
/** 子表列元素 */ /** 子表列元素 */
columnSet: [ columnSet: [
{ prop: "shiftsName", label: "班次名称", width: 150 }, { prop: "shiftsName", label: "班次名称", width: 150 },
{ prop: "goWorkDate", label: "上班打卡时间", width: 100 , formatter: this.formatterDate}, {
{ prop: "goWorkResult", label: "上班打卡结果", width: 100, formatter: this.formatterString }, prop: "goWorkDate",
{ prop: "offWorkDate", label: "下班打卡时间", width: 100 , formatter: this.formatterDate}, label: "上班打卡时间",
{ prop: "offWorkResult", label: "下班打卡结果", width: 100 , formatter: this.formatterString} width: 100,
formatter: this.formatterDate,
},
{
prop: "goWorkResult",
label: "上班打卡结果",
width: 100,
formatter: this.formatterString,
},
{
prop: "offWorkDate",
label: "下班打卡时间",
width: 100,
formatter: this.formatterDate,
},
{
prop: "offWorkResult",
label: "下班打卡结果",
width: 100,
formatter: this.formatterString,
},
], ],
config: { config: {
search: [ search: [
...@@ -459,7 +477,6 @@ export default { ...@@ -459,7 +477,6 @@ export default {
label: "考勤结束时间", label: "考勤结束时间",
fuzzy: false, fuzzy: false,
}, },
], ],
columns: [ columns: [
{ type: "selection", width: 60 }, { type: "selection", width: 60 },
...@@ -479,24 +496,35 @@ export default { ...@@ -479,24 +496,35 @@ export default {
{ label: "部门", prop: "deptName", formatter: this.formatters }, { label: "部门", prop: "deptName", formatter: this.formatters },
{ label: "职位", prop: "positionName", formatter: this.formatters }, { label: "职位", prop: "positionName", formatter: this.formatters },
{ label: "班次", prop: "shiftsName", formatter: this.formatters }, { label: "班次", prop: "shiftsName", formatter: this.formatters },
{ label: "签到结果", prop: "signInResult", formatter: this.formatter }, {
{ label: "签退结果", prop: "signOutResult", formatter: this.formatter }, label: "签到结果",
prop: "signInResult",
formatter: this.formatter,
},
{
label: "签退结果",
prop: "signOutResult",
formatter: this.formatter,
},
{ label: "打卡结果", prop: "punchResult", formatter: this.formatter }, { label: "打卡结果", prop: "punchResult", formatter: this.formatter },
{ label: "考勤类型", prop: "attendType", formatter: this.formatter }, { label: "考勤类型", prop: "attendType", formatter: this.formatter },
{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-popover> 详细
); </el-button>
</el-popover>
);
}, },
}, },
// { // {
......
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notAdd notDel> <LayoutTable :data="tableData" :config="tableConfig" notAdd notDel>
<el-button <el-button
slot="table-head-left2" slot="table-head-left2"
style="margin-left: 10px" style="margin-left: 10px"
icon="el-icon-tickets" icon="el-icon-tickets"
size="mini" size="mini"
type="primary" type="primary"
@click="doExport" @click="doExport"
:disabled="isExport" :disabled="isExport"
>导出</el-button> >导出</el-button
<el-button >
slot="table-head-left2" <el-button
style="margin-left: 10px" slot="table-head-left2"
icon="el-icon-tickets" style="margin-left: 10px"
size="mini" icon="el-icon-tickets"
type="success" size="mini"
@click="lookexportHis" type="success"
>导出记录</el-button> @click="lookexportHis"
<el-button >导出记录</el-button
slot="table-head-left2" >
style="margin-left: 10px" <el-button
icon="el-icon-tickets" slot="table-head-left2"
size="mini" style="margin-left: 10px"
@click="setdialog" icon="el-icon-tickets"
>表格设置</el-button> size="mini"
</LayoutTable> @click="setdialog"
<dialog-show ref="dialogform" @ok="getData" /> >表格设置</el-button
<!-- 表格设置 --> >
<el-dialog :visible.sync="isdialog" title="导出表格设置"> </LayoutTable>
<div class="tipsword">请选择表格展示字段,导出的表格中的内容选中的字段将保持一致。</div> <dialog-show ref="dialogform" @ok="getData" />
<el-checkbox-group v-model="checkList"> <!-- 表格设置 -->
<el-checkbox v-for="(item,index) in setcolum" :key="index" :label="item.label"> <el-dialog :visible.sync="isdialog" title="导出表格设置">
</el-checkbox> <div class="tipsword">
</el-checkbox-group> 请选择表格展示字段,导出的表格中的内容选中的字段将保持一致。
<div class="mt20" style="text-align:right"> </div>
<el-button>取消</el-button> <el-checkbox-group v-model="checkList">
<el-button type="primary">确定</el-button> <el-checkbox
</div> v-for="(item, index) in setcolum"
</el-dialog> :key="index"
<!-- 导出记录查看 --> :label="item.label"
<el-drawer >
title="导出记录" </el-checkbox>
:visible.sync="drawerhistory" </el-checkbox-group>
:direction="direction"> <div class="mt20" style="text-align:right">
<div class="hisList"> <el-button>取消</el-button>
<div class="list mt10" v-for="item in 10" :key="item"> <el-button type="primary">确定</el-button>
<div class="flex flex-align-center flex-pack-justify"> </div>
<div>打卡记录汇总</div> </el-dialog>
<el-button type="text">导出成功</el-button> <!-- 导出记录查看 -->
</div> <el-drawer
<div class="times"> title="导出记录"
导出时间:2020-08-13 :visible.sync="drawerhistory"
</div> :direction="direction"
</div> >
</div> <div class="hisList">
</el-drawer> <div class="list mt10" v-for="item in 10" :key="item">
</div> <div class="flex flex-align-center flex-pack-justify">
<div>打卡记录汇总</div>
<el-button type="text">导出成功</el-button>
</div>
<div class="times">
导出时间:2020-08-13
</div>
</div>
</div>
</el-drawer>
</div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
import {getFirstDay,getLastDay,getdiffdate,timestampToTime,getMyDay} from '@/assets/utils/dateFormat.js' import {
export default { getFirstDay,
name: "AttendanceStatList", getLastDay,
components: { getdiffdate,
dialogShow timestampToTime,
}, getMyDay,
mixins: [table], } from "@/assets/utils/dateFormat.js";
created() { export default {
this.query.startTime = getFirstDay() name: "AttendanceStatList",
this.query.endTime = getLastDay() components: {
this.initalArr = this.config.columns dialogShow,
}, },
methods: { mixins: [table],
// 处理 created() {
handleArr(arr,currentTime){ this.query.startTime = getFirstDay();
let index = arr.findIndex(item => item.createTime === currentTime) this.query.endTime = getLastDay();
if(index > -1){ this.initalArr = this.config.columns;
return arr[index].attendanceSummary },
}else{ methods: {
return '-' // 处理
} handleArr(arr, currentTime) {
}, let index = arr.findIndex((item) => item.createTime === currentTime);
afterRender(data) { if (index > -1) {
this.addColumn = getdiffdate(this.query.startTime,this.query.endTime) return arr[index].attendanceSummary;
// 动态处理 } else {
let addobjArr = [] return "-";
this.addColumn.map((item,index) => { }
let obj = { },
label:item +'('+ getMyDay(new Date(item))+')', afterRender(data) {
prop:'attendanceStaffStatEntities', this.addColumn = getdiffdate(this.query.startTime, this.query.endTime);
formatter: (row) => { // 动态处理
if(row.attendanceStaffStatEntities.length>0){ let addobjArr = [];
return this.handleArr(row.attendanceStaffStatEntities,item) this.addColumn.map((item, index) => {
}else{ let obj = {
return '-' label: item + "(" + getMyDay(new Date(item)) + ")",
} prop: "attendanceStaffStatEntities",
} formatter: (row) => {
} if (row.attendanceStaffStatEntities.length > 0) {
addobjArr.push(obj) return this.handleArr(row.attendanceStaffStatEntities, item);
}) } else {
this.config.columns = [...this.initalArr,...addobjArr] return "-";
this.$forceUpdate()
},
beforeRender(row) {
row.data.forEach(element => {
if(element.attendanceStaffStatEntities.length>0){
element.attendanceStaffStatEntities.forEach(item1 => {
item1.createTime = timestampToTime(item1.createTime,3)
})
}
})
return row
},
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.dialogform.view(row);
},
setdialog(){
this.isdialog = true
this.setcolum = this.config.columns.filter(item => item.label&&item.prop)
},
lookexportHis(){
this.drawerhistory = true
},
/** 导出Excel */
doExport() {
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", {
...params
}, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false;
this.$message.error(error.message);
})
} }
},
};
addobjArr.push(obj);
});
this.config.columns = [...this.initalArr, ...addobjArr];
this.$forceUpdate();
},
beforeRender(row) {
row.data.forEach((element) => {
if (element.attendanceStaffStatEntities.length > 0) {
element.attendanceStaffStatEntities.forEach((item1) => {
item1.createTime = timestampToTime(item1.createTime, 3);
});
}
});
return row;
},
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.dialogform.view(row);
},
setdialog() {
this.isdialog = true;
this.setcolum = this.config.columns.filter(
(item) => item.label && item.prop
);
},
lookexportHis() {
this.drawerhistory = true;
},
/** 导出Excel */
doExport() {
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",
{
...params,
}, },
data() { { type: "excel" }
return { )
config: { .then(() => (this.isExport = false))
isshowTabPane:true, .catch((error) => {
search: [ this.isExport = false;
{ this.$message.error(error.message);
name: "deptId", });
type: "select", },
label: "全部部门", },
fuzzy: false data() {
}, return {
{ config: {
name: "groupId", isshowTabPane: true,
type: "select", search: [
label: "全部考勤组", {
fuzzy: false name: "deptId",
}, type: "select",
{ label: "全部部门",
name: "classId", fuzzy: false,
type: "select", },
label: "全部班次", {
fuzzy: false name: "groupId",
}, type: "select",
{ label: "全部考勤组",
name:'startTime', fuzzy: false,
type: "date", },
label: "考勤开始时间", {
fuzzy: false name: "classId",
}, type: "select",
{ label: "全部班次",
name:'endTime', fuzzy: false,
type: "date", },
label: "考勤结束时间", {
fuzzy: false name: "startTime",
}, type: "date",
{ label: "考勤开始时间",
name: "staffName", fuzzy: false,
type: "text", },
label: "员工姓名", {
fuzzy: true name: "endTime",
}, type: "date",
{ label: "考勤结束时间",
name: "phoneNumber", fuzzy: false,
type: "text", },
label: "手机号", {
fuzzy: true name: "staffName",
} type: "text",
], label: "员工姓名",
columns: [ fuzzy: true,
{type: "selection", width: 60,fixed:'left'}, },
{type: "index",label: "序号",width: 50,fixed:'left'}, {
name: "phoneNumber",
{label: "窗口类别", prop: "windowCategory",fixed:'left',width:100}, type: "text",
label: "手机号",
{label: "员工姓名", prop: "staffName",fixed:'left',width:100}, fuzzy: true,
{label:"部门",prop:"deptName"}, },
{label: "出勤天数", prop: "goTimes",formatter: this.formatter}, ],
columns: [
{label: "上午缺卡次数", prop: "morningTimes",formatter: this.formatter}, { type: "selection", width: 60, fixed: "left" },
{ type: "index", label: "序号", width: 50, fixed: "left" },
{label: "下午缺卡次数", prop: "afternoonTimes",formatter: this.formatter},
{label: "回单位(天)", prop: "backToUnit"}, {
label: "窗口类别",
{label: "因公请假(天)", prop: "onDutyLeave"}, prop: "windowCategory",
fixed: "left",
{label: "外出勘验(天)", prop: "outOfOffice"}, width: 100,
},
{label: "值班补班(天)", prop: "shiftCompensation"},
{ label: "员工姓名", prop: "staffName", fixed: "left", width: 100 },
{label: "体检(天)", prop: "physicalExamination"}, { label: "部门", prop: "deptName" },
{ label: "出勤天数", prop: "goTimes", formatter: this.formatter },
{label: "隔离(天)", prop: "quarantine"},
{
{label: "因公外出(与窗口工作无关/天)", prop: "businessTrip"}, label: "上午缺卡次数",
prop: "morningTimes",
{label: "公休(天)", prop: "publicHoliday"}, formatter: this.formatter,
},
{label: "病假(天)", prop: "sickLeave"},
{
label: "下午缺卡次数",
prop: "afternoonTimes",
formatter: this.formatter,
},
{ label: "回单位(天)", prop: "backToUnit" },
{ label: "因公请假(天)", prop: "onDutyLeave" },
{ label: "外出勘验(天)", prop: "outOfOffice" },
{ label: "值班补班(天)", prop: "shiftCompensation" },
{ label: "体检(天)", prop: "physicalExamination" },
{ label: "隔离(天)", prop: "quarantine" },
{ label: "因公外出(与窗口工作无关/天)", prop: "businessTrip" },
{ label: "公休(天)", prop: "publicHoliday" },
{ label: "病假(天)", prop: "sickLeave" },
{ label: "丧假(天)", prop: "funeralLeave" },
{ label: "婚假(天)", prop: "marriageLeave" },
{ label: "育儿假(天)", prop: "childRearingLeave" },
{ label: "产假(陪护假/天)", prop: "maternityLeave" },
{ label: "调回单位(或离职/天)", prop: "transferBack" },
{ label: "探亲假(天)", prop: "homeLeave" },
{ label: "事假(天)", prop: "personalLeave" },
{ label: "旷工(天)", prop: "absenteeismDays" },
{ label: "其他(天)", prop: "otherDays" },
{ label: "出勤率%", prop: "attendanceRate" },
{ label: "未按规定打卡(含忘记打卡)", prop: "nonCompliancePunch" },
{ label: "迟到(次)", prop: "lateTimes" },
{ label: "上网耍手机(次)", prop: "surfingMobileTimes" },
{label: "丧假(天)", prop: "funeralLeave"}, { label: "溜班(次)", prop: "overtimeTimes" },
{label: "婚假(天)", prop: "marriageLeave"}, { label: "空岗(次)", prop: "vacancy" },
{label: "育儿假(天)", prop: "childRearingLeave"}, { label: "未规范着装(次)", prop: "nonStandardDressTimes" },
{label: "产假(陪护假/天)", prop: "maternityLeave"}, { label: "无故缺席会议(次)", prop: "unexcusedMeetingAbsence" },
{label: "调回单位(或离职/天)", prop: "transferBack"}, { label: "会议早退", prop: "earlyLeaveMeeting" },
],
{label: "探亲假(天)", prop: "homeLeave"}, },
setcolum: [],
{label: "事假(天)", prop: "personalLeave"}, isdialog: false,
checkList: [],
{label: "旷工(天)", prop: "absenteeismDays"}, drawerhistory: false,
// 动态新增列表
{label: "其他(天)", prop: "otherDays"}, addColumn: [],
initalArr: [],
{label: "出勤率%", prop: "attendanceRate"}, };
},
{label: "未按规定打卡(含忘记打卡)", prop: "nonCompliancePunch"}, };
{label: "迟到(次)", prop: "lateTimes"},
{label: "上网耍手机(次)", prop: "surfingMobileTimes"},
{label: "溜班(次)", prop: "overtimeTimes"},
{label: "空岗(次)", prop: "vacancy"},
{label: "未规范着装(次)", prop: "nonStandardDressTimes"},
{label: "无故缺席会议(次)", prop: "unexcusedMeetingAbsence"},
{label: "会议早退", prop: "earlyLeaveMeeting"}
]
},
setcolum:[],
isdialog:false,
checkList:[],
drawerhistory:false,
// 动态新增列表
addColumn:[],
initalArr:[]
}
}
}
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.hisList{ .hisList {
padding: 15px; padding: 15px;
.list{ .list {
background-color: rgba(64, 158, 255, 0.1); background-color: rgba(64, 158, 255, 0.1);
font-size: 14px; font-size: 14px;
border-radius: 10px; border-radius: 10px;
padding: 10px; padding: 10px;
.times{ .times {
font-size: 12px; font-size: 12px;
color: #999; color: #999;
}
} }
}
} }
.tipsword{ .tipsword {
margin: 20px 0; margin: 20px 0;
color: #999; color: #999;
} }
</style> </style>
...@@ -69,10 +69,20 @@ ...@@ -69,10 +69,20 @@
{{ form.subAddType == 1 ? "加分人员:" : "扣分人员:" }} {{ form.subAddType == 1 ? "加分人员:" : "扣分人员:" }}
{{ form.deductPerson ? form.deductPerson : "--" }}</el-col {{ form.deductPerson ? form.deductPerson : "--" }}</el-col
> >
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
</el-row>
<el-row>
<el-col :span="12" <el-col :span="12"
>图片凭证: >图片凭证:
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -88,7 +98,8 @@ ...@@ -88,7 +98,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</el-col> </el-col>
</el-row> </el-row>
......
...@@ -83,9 +83,19 @@ ...@@ -83,9 +83,19 @@
{{ form.deductTime ? form.deductTime : "--" }}</el-col {{ form.deductTime ? form.deductTime : "--" }}</el-col
> >
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
</el-row>
<el-row>
<el-col :span="12" <el-col :span="12"
>图片凭证: >图片凭证:
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -101,7 +111,8 @@ ...@@ -101,7 +111,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</el-col> </el-col>
</el-row> </el-row>
......
...@@ -60,9 +60,17 @@ ...@@ -60,9 +60,17 @@
> >
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12">
图片凭证: 图片凭证:
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -78,7 +86,8 @@ ...@@ -78,7 +86,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</el-col> </el-col>
</el-row> </el-row>
......
...@@ -62,9 +62,17 @@ ...@@ -62,9 +62,17 @@
> >
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12">
图片凭证: 图片凭证:
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -80,7 +88,8 @@ ...@@ -80,7 +88,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</el-col> </el-col>
</el-row> </el-row>
......
...@@ -58,9 +58,17 @@ ...@@ -58,9 +58,17 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24" <el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12"
>图片凭证: >图片凭证:
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -76,7 +84,8 @@ ...@@ -76,7 +84,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</el-col> </el-col>
</el-row> </el-row>
......
...@@ -63,9 +63,17 @@ ...@@ -63,9 +63,17 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12" <el-col :span="12"
>图片凭证: >图片凭证:
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -81,7 +89,8 @@ ...@@ -81,7 +89,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</el-col> </el-col>
</el-row> </el-row>
...@@ -414,6 +423,7 @@ export default { ...@@ -414,6 +423,7 @@ export default {
kaoqinCateArr: [], kaoqinCateArr: [],
kaoqinArr: [], kaoqinArr: [],
urls: { saveUrl: "/check/review/record/examine" }, //重写核查地址 urls: { saveUrl: "/check/review/record/examine" }, //重写核查地址
baseUrl: process.env.VUE_APP_API_BASE_URL + "/",
}; };
}, },
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<el-button class="backBtn" size="small" @click="$router.back()">返回上一级</el-button> <el-button class="backBtn" size="small" @click="$router.back()">返回上一级</el-button>
<el-tabs v-model="tabs"> <el-tabs v-model="tabs">
<el-tab-pane label="设计问卷" name="1"> <el-tab-pane label="设计问卷" name="1">
<!-- 步骤1 填写问卷名称 -->
<div style="width: 800px;margin: 100px auto;" v-show="step"> <div style="width: 800px;margin: 100px auto;" v-show="step">
<el-form :model="titleForm" :rules="titleRules" ref="titleForm"> <el-form :model="titleForm" :rules="titleRules" ref="titleForm">
<el-form-item label="问卷名称:" prop="title" label-width="125px"> <el-form-item label="问卷名称:" prop="title" label-width="125px">
...@@ -20,20 +21,22 @@ ...@@ -20,20 +21,22 @@
</div> </div>
</el-form> </el-form>
</div> </div>
<!-- 动态表单配置 -->
<div v-show="!step"> <div v-show="!step">
<fc-designer style="height: 79vh;" ref="designer"> <fc-designer style="height: 79vh;" ref="designer">
<template slot="handle"> <template slot="handle">
<ElButton style="margin-left: 10px;" icon="el-icon-upload" type="primary" size="small" <ElButton style="margin-left: 10px;" icon="el-icon-upload" type="primary" size="small"
@click="issueBtn" round>问卷发布 @click="issueBtn" round>问卷配置发布
</ElButton> </ElButton>
<!-- <ElButton style="margin-left: 10px;" icon="el-icon-upload" type="primary" size="small" <ElButton style="margin-left: 10px;" icon="el-icon-position" type="warning" size="small"
@click="issueBtn" round>外部链接 @click="outsideBtn" round>外部链接发布
</ElButton> --> </ElButton>
<ElButton icon="el-icon-view" type="success" size="small" @click="showDrawer" round>手机模拟预览 <ElButton icon="el-icon-view" type="success" size="small" @click="showDrawer" round>手机预览
</ElButton> </ElButton>
</template> </template>
</fc-designer> </fc-designer>
</div> </div>
<!-- 手机模拟预览 -->
<el-drawer :visible.sync="drawer" title="预览"> <el-drawer :visible.sync="drawer" title="预览">
<div class="showPhone"> <div class="showPhone">
<div class="phone"> <div class="phone">
...@@ -44,13 +47,16 @@ ...@@ -44,13 +47,16 @@
</div> </div>
</div> </div>
</el-drawer> </el-drawer>
<!-- 问卷发布弹出框 -->
<el-dialog title="问卷发布" :visible.sync="issueDialog" width="30%" top="25vh"> <el-dialog title="问卷发布" :visible.sync="issueDialog" width="30%" top="25vh">
<el-form :model="issueForm" :rules="issueRules" ref="issueForm"> <el-form :model="issueForm" :rules="issueRules" ref="issueForm">
<el-form-item label="链接地址:" label-width="125px" prop="webUrl" v-if="weblink">
<el-input v-model="issueForm.webUrl" placeholder="请输入链接地址"></el-input>
</el-form-item>
<el-form-item label="问卷封面:" label-width="125px"> <el-form-item label="问卷封面:" label-width="125px">
<div style="display: flex;align-items: center;"> <div style="display: flex;align-items: center;">
<img style="width:80px; height: 80px; margin-right: 10px;cursor: pointer;" <img style="width:80px; height: 80px; margin-right: 10px;cursor: pointer;"
v-for="(i, j) in coverImg" :key="j" :src="ImgUrl + '/' + i.url" alt="" v-for="(i, j) in coverImg" :key="j" :src="showImgUrl + '/' + i.url" alt=""
:class="selImg == j ? 'selImg' : ''" @click="selImg = j"> :class="selImg == j ? 'selImg' : ''" @click="selImg = j">
<el-upload v-show="coverImg.length < 4" :action="ImgUrl + '/attendance/file/commonupload'" <el-upload v-show="coverImg.length < 4" :action="ImgUrl + '/attendance/file/commonupload'"
accept="image/jpeg,image/png,image/jpg" list-type="picture-card" class="upload" accept="image/jpeg,image/png,image/jpg" list-type="picture-card" class="upload"
...@@ -75,8 +81,8 @@ ...@@ -75,8 +81,8 @@
</div> </div>
</el-form> </el-form>
</el-dialog> </el-dialog>
<!-- 人员选择弹出框 -->
<el-dialog title="人员选择" :visible.sync="treeDialog"> <el-dialog title="人员选择" :visible.sync="treeDialog" width="40%">
<div class="treeDialog"> <div class="treeDialog">
<el-tree class="treeCss" :data="treeData" node-key="id" :props="defaultProps" <el-tree class="treeCss" :data="treeData" node-key="id" :props="defaultProps"
@node-click="handleNodeClick"></el-tree> @node-click="handleNodeClick"></el-tree>
...@@ -158,6 +164,10 @@ export default { ...@@ -158,6 +164,10 @@ export default {
issueRules: { issueRules: {
time: [ time: [
{ required: true, message: '请输入选择反馈期限', trigger: 'blur' }, { required: true, message: '请输入选择反馈期限', trigger: 'blur' },
],
webUrl: [
{ required: true, message: '请输入链接地址', trigger: 'blur' },
{ pattern: /^https?:\/\/((.)+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?.(\?)?)*)*$/i, message: '请输入正确的链接 例:https://www.baidu.com', trigger: 'change' }
] ]
}, },
treeData: [], treeData: [],
...@@ -175,7 +185,25 @@ export default { ...@@ -175,7 +185,25 @@ export default {
editStyle: false, editStyle: false,
loadingstate: false, loadingstate: false,
ImgUrl: process.env.VUE_APP_API_BASE_URL, ImgUrl: process.env.VUE_APP_API_BASE_URL,
coverImg: [] showImgUrl:'',
coverImg: [],
weblink: 0,
webUrl: '',
}
},
watch: {
issueDialog(val) { //监听关闭外联状态
if (!val) {
this.weblink = 0
}
}
},
created(){
if(process.env.NODE_ENV == "development"){
this.showImgUrl= process.env.VUE_APP_API_BASE_URL
}else{
this.showImgUrl=''
} }
}, },
mounted() { mounted() {
...@@ -199,6 +227,10 @@ export default { ...@@ -199,6 +227,10 @@ export default {
this.getFile() this.getFile()
}, },
methods: { methods: {
outsideBtn() {
this.weblink = 1
this.issueDialog = 1
},
handleUploadSuccess(res) { handleUploadSuccess(res) {
console.log(res) console.log(res)
this.coverImg.push(res) this.coverImg.push(res)
...@@ -250,7 +282,6 @@ export default { ...@@ -250,7 +282,6 @@ export default {
console.log(file) console.log(file)
} }
}, },
//获取问卷封面 //获取问卷封面
getFile() { getFile() {
this.$post('/feedback/file/list', { page: 1, size: 3 }).then(res => { this.$post('/feedback/file/list', { page: 1, size: 3 }).then(res => {
...@@ -357,12 +388,12 @@ export default { ...@@ -357,12 +388,12 @@ export default {
return JSON.stringify(FcDesignerOptions) return JSON.stringify(FcDesignerOptions)
}, },
issueFormBtn(formName) { issueFormBtn(formName) {
if (this.checkedUser.length < 1) {
this.$message.warning('请选择人员后发布问卷')
return
}
this.$refs[formName].validate((valid) => { this.$refs[formName].validate((valid) => {
if (valid) { if (valid) {
if (this.checkedUser.length < 1) {
this.$message.warning('请选择人员后发布问卷')
return
}
console.log(this.issueForm) console.log(this.issueForm)
this.Frule.forEach(i => { this.Frule.forEach(i => {
i.remark = i.field i.remark = i.field
...@@ -381,7 +412,8 @@ export default { ...@@ -381,7 +412,8 @@ export default {
}) })
let sub = { let sub = {
weblink: this.weblink,
webUrl: this.issueForm.webUrl,
staffList: this.checkedUser, staffList: this.checkedUser,
id: this.feedbackId, id: this.feedbackId,
...this.titleForm, ...this.titleForm,
......
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" notDel :config="tableConfig"> <LayoutTable :data="tableData" notDel :config="tableConfig"> </LayoutTable>
</LayoutTable> <drawer-show ref="drawerform" @ok="getData" />
<drawer-show ref="drawerform" @ok="getData" /> </div>
</div>
</template> </template>
<script> <script>
...@@ -11,140 +10,190 @@ ...@@ -11,140 +10,190 @@
import drawerShow from "./drawershow"; import drawerShow from "./drawershow";
import table from "@/assets/mixins/table"; import table from "@/assets/mixins/table";
export default { export default {
name: "FeedbackList", name: "FeedbackList",
components: { components: {
drawerShow drawerShow,
},
mixins: [table],
created() {},
methods: {
renderTable(tableData) {
return (
<el-table stripe data={tableData} class="total-table">
{this.columnSet.map((item) => this.renderTableColumn(item))}
</el-table>
);
}, },
mixins: [table], renderTableColumn(options) {
created() { return (
<el-table-column
prop={options.prop}
label={options.label}
width={options.width}
formatter={options.formatter}
></el-table-column>
);
}, },
methods: { /** 重写新增方法 */
renderTable(tableData) { toAdd(row) {
return ( // this.$refs.drawerform.add(row);
<el-table stripe data={tableData} class="total-table"> this.$router.push("/feedback/addQuestion/list");
{this.columnSet.map((item) => this.renderTableColumn(item))} },
</el-table> /** 重写编辑方法 */
); toEdit(row) {
}, // this.$refs.drawerform.edit(row);
renderTableColumn(options) { this.$router.push({ path: `/feedback/addQuestion/list?id=${row.id}` });
return ( localStorage.setItem("editFeedback", JSON.stringify(row));
<el-table-column },
prop={options.prop} /** 重写查看方法 */
label={options.label} toView(row) {
width={options.width} console.log(row);
formatter={options.formatter} localStorage.setItem("checkFeedbackId", row.id);
> // this.$refs.drawerform.view(row);
</el-table-column> this.$router.push("/feedback/questionnaire/list");
); },
}, goPage(path) {
/** 重写新增方法 */ this.$router.push(path);
toAdd(row) { },
// this.$refs.drawerform.add(row); },
this.$router.push("/feedback/addQuestion/list"); data() {
}, return {
/** 重写编辑方法 */ /** 子表列元素 */
toEdit(row) { columnSet: [
// this.$refs.drawerform.edit(row); {
this.$router.push({ path: `/feedback/addQuestion/list?id=${row.id}` }); label: "反馈问卷id号",
localStorage.setItem('editFeedback', JSON.stringify(row)) prop: "feedbackId",
}, formatter: this.formatter,
/** 重写查看方法 */
toView(row) {
console.log(row)
localStorage.setItem('checkFeedbackId', row.id)
// this.$refs.drawerform.view(row);
this.$router.push('/feedback/questionnaire/list')
}, },
goPage(path) { { label: "问题内容", prop: "content" },
this.$router.push(path) { label: "问题类型 ", prop: "questionType", formatter: this.formatter },
} { label: "是否必填", prop: "require", formatter: this.formatter },
{ label: "备注", prop: "remark" },
],
config: {
isshowTabPane: true,
search: [
{
name: "feedbackTimeStart",
type: "datetime",
label: "请选择日期",
fuzzy: false,
},
{
name: "title",
type: "text",
label: "输入问卷标题关键字搜索",
fuzzy: false,
},
],
columns: [
{ type: "selection", width: 60 },
{ type: "index", label: "序号", width: 50 },
}, { label: "问卷标题", prop: "title" },
data() {
return {
/** 子表列元素 */
columnSet: [
{ label: "反馈问卷id号", prop: "feedbackId", formatter: this.formatter },
{ label: "问题内容", prop: "content" },
{ label: "问题类型 ", prop: "questionType", formatter: this.formatter },
{ label: "是否必填", prop: "require", formatter: this.formatter },
{ label: "备注", prop: "remark" },
],
config: {
isshowTabPane: true,
search: [
],
columns: [
{ type: "selection", width: 60 },
{ type: "index", label: "序号", width: 50 },
{ label: "问卷标题", prop: "title" }, {
label: "更新时间",
prop: "createTime",
formatter: this.formatterDate,
},
{ label: "更新时间", prop: "createTime", formatter: this.formatterDate }, {
label: "反馈开始时间",
{ label: "反馈开始时间", prop: "feedbackTimeStart", formatter: this.formatterDate }, prop: "feedbackTimeStart",
formatter: this.formatterDate,
},
{ label: "反馈结束时间", prop: "feedbackTimeEnd", formatter: this.formatterDate }, {
label: "反馈结束时间",
prop: "feedbackTimeEnd",
formatter: this.formatterDate,
},
{ label: "邀请人数", prop: "inviteNum", formatter: this.formatter }, { label: "邀请人数", prop: "inviteNum", formatter: this.formatter },
{ label: "反馈人数", prop: "feedbackNum", formatter: this.formatter }, { label: "反馈人数", prop: "feedbackNum", formatter: this.formatter },
// { label: "创建用户", prop: "createUserId", formatter: this.formatter }, // { label: "创建用户", prop: "createUserId", formatter: this.formatter },
{ {
label: "状态", prop: "processStatus", formatter: (row) => { label: "状态",
let str = "未开始" prop: "processStatus",
if (row.processStatus == 1) { formatter: (row) => {
str = "进行中" let str = "未开始";
} else if (row.processStatus == 2) { if (row.processStatus == 1) {
str = "已结束" str = "进行中";
} } else if (row.processStatus == 2) {
return ( str = "已结束";
<el-tag type={row.processStatus ? row.processStatus == 2 ? 'success' : 'info' : 'danger'} size="small"> }
{str} return (
</el-tag> <el-tag
) type={
} row.processStatus
}, ? row.processStatus == 1
// { ? "success"
// label: "绩效反馈问题", : "info"
// width: 120, : "danger"
// prop: "subColumns", }
// formatter: (row) => { size="small"
// return pre + Number(cur.width); >
// }, 50); {str}
// return ( </el-tag>
// <el-popover placement="right" width={widthsize} trigger="click"> );
// {this.renderTable(row.feedbackQuestionList)} },
// <el-button type="text" slot="reference">详细</el-button> },
// </el-popover> // {
// ); // label: "绩效反馈问题",
// }, // width: 120,
// }, // prop: "subColumns",
{ // formatter: (row) => {
label: "操作", // return pre + Number(cur.width);
width: 240, // }, 50);
formatter: row => { // return (
if (row.processStatus == 0) { // <el-popover placement="right" width={widthsize} trigger="click">
return ( // {this.renderTable(row.feedbackQuestionList)}
<table-buttons noAdd noView row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> // <el-button type="text" slot="reference">详细</el-button>
); // </el-popover>
} else { // );
return ( // },
<table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> // },
); {
} label: "操作",
// return <table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> width: 240,
} formatter: (row) => {
} if (row.processStatus == 0) {
] return (
} <table-buttons
}; noAdd
} noView
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
);
} else {
return (
<table-buttons
noAdd
noEdit
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
);
}
// return <table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
},
},
],
},
};
},
}; };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
/deep/ .buttons { /deep/ .buttons {
margin-bottom: 10px; margin-bottom: 10px;
} }
</style> </style>
...@@ -15,9 +15,8 @@ ...@@ -15,9 +15,8 @@
</div> </div>
<div style="margin: 10px 0;"> <div style="margin: 10px 0;">
<el-tag <el-tag
:type="feedbackData.processStatus ? feedbackData.processStatus = 1 ? 'success' : 'info' : 'danger'"> :type="feedbackData.processStatus ? feedbackData.processStatus == 1 ? 'success' : 'info' : 'danger'">
{{ feedbackData.processStatus ? feedbackData.processStatus {{ feedbackData.processStatus ? feedbackData.processStatus == 1 ? '进行中' : '已结束' : '未开始' }}</el-tag>
== 1 ? '进行中' : '已结束' : '未开始' }}</el-tag>
反馈时间:{{ feedbackData.timeStart }} ~ {{ feedbackData.timeEnd }} 反馈时间:{{ feedbackData.timeStart }} ~ {{ feedbackData.timeEnd }}
</div> </div>
......
<template> <template>
<!-- 弹出框表单 --> <!-- 弹出框表单 -->
<el-drawer <el-drawer
:title="title" :title="title"
:visible.sync="open" :visible.sync="open"
:direction="direction" :direction="direction"
size="50%"> size="50%"
<el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:20px"> >
<el-row> <el-form
<Field v-if="from == 'job'" label="分组" prop="groupId" v-model="form.groupId" ref="form"
:enumData="dict.group" type="select" placeholder="请选择分组"/> :model="form"
:rules="rules"
label-width="120px"
style="padding:20px"
>
<el-row>
<Field
v-if="from == 'job'"
label="分组"
prop="groupId"
v-model="form.groupId"
:enumData="dict.groupId"
type="select"
placeholder="请选择分组"
/>
<Field label="分组名称" prop="groupName" v-model="form.groupName" placeholder="请输入分组名称" :maxLength="10" v-if="from == 'group'"/> <Field
label="分组名称"
prop="groupName"
v-model="form.groupName"
placeholder="请输入分组名称"
:maxLength="10"
v-if="from == 'group'"
/>
<Field label="职位编码" prop="jobCode" :maxLength="10" v-model="form.jobCode" placeholder="请输入职位编码" v-if="from == 'job'"/> <Field
<Field label="职位名称" prop="jobName" :maxLength="10" v-model="form.jobName" placeholder="请输入职位名称" v-if="from == 'job'" /> label="职位编码"
prop="jobCode"
:maxLength="10"
v-model="form.jobCode"
placeholder="请输入职位编码"
v-if="from == 'job'"
/>
<Field
label="职位名称"
prop="jobName"
:maxLength="10"
v-model="form.jobName"
placeholder="请输入职位名称"
v-if="from == 'job'"
/>
<Field label="类型" disabled prop="type" v-model="form.type" type="select" :enumData="dict.type" placeholder="请选择类型"/> <Field
<Field label="备注" prop="remark" :maxLength="50" v-model="form.remark" type="textarea" placeholder="请输入备注"/> label="类型"
</el-row> disabled
<form-buttons @submit='submitForm' noCancelBtn /> prop="type"
</el-form> v-model="form.type"
type="select"
</el-drawer> :enumData="dict.type"
placeholder="请选择类型"
/>
<Field
label="备注"
prop="remark"
:maxLength="50"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row>
<form-buttons @submit="submitForm" noCancelBtn />
</el-form>
</el-drawer>
</template> </template>
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
export default { export default {
name: "JobDetail", name: "JobDetail",
mixins: [form], mixins: [form],
components: { components: {},
created() {
}, this.changePath("job");
created() { },
this.changePath("job") data() {
}, return {
data() { // 遮罩层
return { loading: true,
// 遮罩层 // 弹出层标题
loading: true, title: "职位信息",
// 弹出层标题 // 是否显示弹出层
title: "职位信息", open: false,
// 是否显示弹出层 direction: "rtl",
open: false, toString: [],
direction:"rtl", toDate: [],
toString:[ // 表单校验
], rules: {
toDate:[ groupId: [{ required: true, message: "请选择分组", trigger: "change" }],
], },
// 表单校验 from: "",
rules: { };
}, },
from:''
};
},
methods: {
/** 编辑 */
edit(from,row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="job/edit";
this.getData();
this.pageInfo.type="edit"
this.from = from
this.title = from === 'group'?"修改分组信息":'修改职位信息'; methods: {
}, /** 编辑 */
/** 新增 */ edit(from, row) {
add(row) { this.reset();
console.log(row,'添加') this.query = { id: row.id };
this.from = row this.urls.currUrl = "job/edit";
this.title = row === 'group'?"新增分组信息":'新增职位信息'; this.getData();
this.reset() this.pageInfo.type = "edit";
this.urls.currUrl = "job/add"; this.from = from;
this.getData();
this.pageInfo.type="add"
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="job/view";
this.getData();
this.pageInfo.type="view"
this.title = "职位信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
// 固定新增类型 this.title = from === "group" ? "修改分组信息" : "修改职位信息";
if(this.from == 'group'){ },
this.form.type = '1' /** 新增 */
}else{ add(row) {
this.form.type = '2' console.log(row, "添加");
} this.from = row;
this.open = true; this.title = row === "group" ? "新增分组信息" : "新增职位信息";
}, this.reset();
afterSubmit(data) { this.urls.currUrl = "job/add";
this.open = false; this.getData();
this.$emit("ok"); this.pageInfo.type = "add";
}, },
/** 查看*/
view(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "job/view";
this.getData();
this.pageInfo.type = "view";
this.title = "职位信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
// 固定新增类型
if (this.from == "group") {
this.form.type = "1";
} else {
this.form.type = "2";
}
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.form = {
groupId : null, groupId: "",
groupName : "", groupName: "",
jobCode : "", jobCode: "",
jobName : "", jobName: "",
remark : "", remark: "",
}; };
this.resetForm("form"); this.resetForm("form");
}, },
resetForm(refName) { resetForm(refName) {
if (this.$refs[refName]) { if (this.$refs[refName]) {
this.$refs[refName].resetFields(); this.$refs[refName].resetFields();
} }
}, },
}, },
}; };
</script> </script>
...@@ -70,13 +70,27 @@ export default { ...@@ -70,13 +70,27 @@ export default {
color: "#000", color: "#000",
}, },
}, },
dataZoom: [
{
show: true,
realtime: true,
start: 0,
end: 100
},
{
type: 'inside',
realtime: true,
start: 0,
end: 100
}
],
tooltip: {}, tooltip: {},
xAxis: { xAxis: {
data: this.chartsData.map(i => { data: this.chartsData.map(i => {
// console.log(i) // console.log(i)
if(this.title == "申诉次数部门排名TOP20") return i.deptName if (this.title == "申诉次数部门排名TOP20") return i.deptName
if(this.title == "申诉次数个人排名TOP20") return i.staffName if (this.title == "申诉次数个人排名TOP20") return i.staffName
if(this.title == "申诉次数规则排名TOP20") return i.ruleName if (this.title == "申诉次数规则排名TOP20") return i.ruleName
// return i.ruleName || i.deptName || i.staffName // return i.ruleName || i.deptName || i.staffName
}) })
// this.title == "申诉次数部门排名TOP20" // this.title == "申诉次数部门排名TOP20"
...@@ -151,7 +165,7 @@ export default { ...@@ -151,7 +165,7 @@ export default {
grid: { grid: {
left: "5%", left: "5%",
right: "4%", right: "4%",
bottom: "2%", // bottom: "1%",
containLabel: true, containLabel: true,
}, },
// color:[ "#61a0a8",], // color:[ "#61a0a8",],
......
...@@ -122,7 +122,7 @@ ...@@ -122,7 +122,7 @@
<el-col :span="22"> <el-col :span="22">
<el-form-item label="图片凭证:"> <el-form-item label="图片凭证:">
<div v-if="form.view == '查看'"> <div v-if="form.view == '查看'">
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -138,7 +138,8 @@ ...@@ -138,7 +138,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<ImageUpload <ImageUpload
......
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
<el-col :span="22"> <el-col :span="22">
<el-form-item label="图片凭证:"> <el-form-item label="图片凭证:">
<div v-if="form.view == '查看'"> <div v-if="form.view == '查看'">
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -191,7 +191,8 @@ ...@@ -191,7 +191,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<ImageUpload <ImageUpload
......
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
<el-col :span="22"> <el-col :span="22">
<el-form-item label="图片凭证:"> <el-form-item label="图片凭证:">
<div v-if="form.view == '查看'"> <div v-if="form.view == '查看'">
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -166,7 +166,8 @@ ...@@ -166,7 +166,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<ImageUpload <ImageUpload
......
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
<el-col :span="22"> <el-col :span="22">
<el-form-item label="图片凭证:"> <el-form-item label="图片凭证:">
<div v-if="form.view == '查看'"> <div v-if="form.view == '查看'">
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -143,7 +143,8 @@ ...@@ -143,7 +143,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<ImageUpload <ImageUpload
......
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
<el-col :span="22"> <el-col :span="22">
<el-form-item label="图片凭证:"> <el-form-item label="图片凭证:">
<div v-if="form.view == '查看'"> <div v-if="form.view == '查看'">
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -103,7 +103,8 @@ ...@@ -103,7 +103,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<ImageUpload <ImageUpload
......
...@@ -140,7 +140,7 @@ ...@@ -140,7 +140,7 @@
<el-col :span="22"> <el-col :span="22">
<el-form-item label="图片凭证:"> <el-form-item label="图片凭证:">
<div v-if="form.view == '查看'"> <div v-if="form.view == '查看'">
<el-image <!-- <el-image
v-if="form.filePaths" v-if="form.filePaths"
style="width: 100px; height: 100px" style="width: 100px; height: 100px"
:src=" :src="
...@@ -156,7 +156,8 @@ ...@@ -156,7 +156,8 @@
: [form.filePaths] : [form.filePaths]
" "
> >
</el-image> </el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<ImageUpload <ImageUpload
......
...@@ -121,7 +121,7 @@ export default { ...@@ -121,7 +121,7 @@ export default {
{ label: "增减类型", prop: "subAddType", formatter: this.formatter }, { label: "增减类型", prop: "subAddType", formatter: this.formatter },
{ label: "分值", prop: "score" }, { label: "分值", prop: "score", formatter: this.formatter },
{ label: "负责人分值", prop: "ownerScore" }, { label: "负责人分值", prop: "ownerScore" },
...@@ -226,7 +226,9 @@ export default { ...@@ -226,7 +226,9 @@ export default {
type: this.activeName, type: this.activeName,
page: this.query.page, page: this.query.page,
orderColList: this.typeArr, orderColList: this.typeArr,
name: `%${this.searchValue}%`, andConditionList: [
{ content: `%${this.searchValue}%`, name: `%${this.searchValue}%` },
],
}).then((res) => { }).then((res) => {
if (res.code == 1) { if (res.code == 1) {
this.tableData = res.data; this.tableData = res.data;
......
<template> <template>
<!-- 弹出框表单 --> <!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body> <el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row> <el-row>
<Field label="员工姓名" prop="name" v-model="form.name" placeholder="请输入员工姓名"/> <Field
<Field label="性别" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="请选择性别"/> label="员工姓名"
<Field label="出生日期" prop="birthday" v-model="form.birthday" type="date" /> prop="name"
<Field label="照片" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="请输入照片"/> v-model="form.name"
<Field label="联系电话" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入联系电话"/> placeholder="请输入员工姓名"
<Field label="身份证号码" prop="idCard" v-model="form.idCard" placeholder="请输入身份证号码"/> />
<Field label="工号" prop="workNum" v-model="form.workNum" placeholder="请输入工号"/> <Field
<Field label="政治面貌 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="请选择政治面貌 "/> label="性别"
<Field label="所属部门" prop="deptId" v-model="form.deptId" placeholder="请输入所属部门"/> prop="gender"
<Field label="所属部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入所属部门名称"/> v-model="form.gender"
<Field label="职位ID" prop="positionId" v-model="form.positionId" placeholder="请输入职位ID"/> type="select"
<Field label="职位名称" prop="positionName" v-model="form.positionName" placeholder="请输入职位名称"/> :enumData="dict.gender"
<Field label="员工类型" prop="staffType" v-model="form.staffType" type="select" :enumData="dict.staffType" placeholder="请选择员工类型"/> placeholder="请选择性别"
<Field label="员工状态" prop="status" v-model="form.status" type="select" :enumData="dict.status" placeholder="请选择员工状态"/> />
<Field label="入职登记表" prop="registerPath" v-model="form.registerPath" type="textarea" placeholder="请输入入职登记表"/> <Field
<Field label="入职时间" prop="entryDate" v-model="form.entryDate" type="date" /> label="出生日期"
<Field label="转正时间" prop="regularDate" v-model="form.regularDate" type="date" /> prop="birthday"
<Field label="离职时间" prop="leaveDate" v-model="form.leaveDate" type="date" /> v-model="form.birthday"
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> type="date"
/>
</el-row> <Field
label="照片"
</el-form> prop="photoPath"
<div slot="footer" class="dialog-footer"> v-model="form.photoPath"
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button> type="textarea"
<el-button @click="cancel">取 消</el-button> placeholder="请输入照片"
</div> />
</el-dialog> <Field
label="联系电话"
prop="phoneNumber"
v-model="form.phoneNumber"
placeholder="请输入联系电话"
/>
<Field
label="身份证号码"
prop="idCard"
v-model="form.idCard"
placeholder="请输入身份证号码"
/>
<Field
label="工号"
prop="workNum"
v-model="form.workNum"
placeholder="请输入工号"
/>
<Field
label="政治面貌 "
prop="politicalstatus"
v-model="form.politicalstatus"
type="select"
:enumData="dict.politicalstatus"
placeholder="请选择政治面貌 "
/>
<Field
label="所属部门"
prop="deptId"
v-model="form.deptId"
placeholder="请输入所属部门"
/>
<Field
label="所属部门名称"
prop="deptName"
v-model="form.deptName"
placeholder="请输入所属部门名称"
/>
<Field
label="职位ID"
prop="positionId"
v-model="form.positionId"
placeholder="请输入职位ID"
/>
<Field
label="职位名称"
prop="positionName"
v-model="form.positionName"
placeholder="请输入职位名称"
/>
<Field
label="员工类型"
prop="staffType"
v-model="form.staffType"
type="select"
:enumData="dict.staffType"
placeholder="请选择员工类型"
/>
<Field
label="员工状态"
prop="status"
v-model="form.status"
type="select"
:enumData="dict.status"
placeholder="请选择员工状态"
/>
<Field
label="入职登记表"
prop="registerPath"
v-model="form.registerPath"
type="textarea"
placeholder="请输入入职登记表"
/>
<Field
label="入职时间"
prop="entryDate"
v-model="form.entryDate"
type="date"
/>
<Field
label="转正时间"
prop="regularDate"
v-model="form.regularDate"
type="date"
/>
<Field
label="离职时间"
prop="leaveDate"
v-model="form.leaveDate"
type="date"
/>
<Field
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
type="primary"
v-if="pageInfo.type !== 'view'"
@click="submitForm"
>确 定</el-button
>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</template> </template>
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
export default { export default {
mixins: [form], mixins: [form],
components: { components: {
dialogShow , dialogShow,
}, },
data() { data() {
return { return {
// 遮罩层 // 遮罩层
loading: true, loading: true,
// 弹出层标题 // 弹出层标题
title: "员工基本信息", title: "员工基本信息",
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
toString:[ toString: ["gender", "politicalstatus", "staffType", "status"],
"gender", // 表单校验
"politicalstatus", rules: {
"staffType", name: [
"status", { required: true, message: "请输入员工姓名", trigger: "blur" },
], { max: 64, message: "最多只能录入64个字符", trigger: "blur" },
// 表单校验 ],
rules: { createTime: [{ required: true, message: "请选择创建时间" }],
name: [ },
{required: true,message: "请输入员工姓名", trigger: "blur" }, };
{max: 64,message: "最多只能录入64个字符",trigger: "blur",}, },
],
createTime: [
{required: true,message: "请选择创建时间" },
],
}
};
},
methods: { methods: {
/** 编辑 */ /** 编辑 */
edit(row) { edit(row) {
this.reset() this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="staff/edit"; this.urls.currUrl = "staff/edit";
this.getData(); this.getData();
this.pageInfo.type="edit" this.pageInfo.type = "edit";
this.title = "修改员工基本信息"; this.title = "修改员工基本信息";
}, },
/** 新增 */ /** 新增 */
add(row) { add(row) {
this.reset() this.reset();
this.urls.currUrl = "staff/add"; this.urls.currUrl = "staff/add";
this.getData(); this.getData();
this.pageInfo.type="add" this.pageInfo.type = "add";
this.title = "新增员工基本信息"; this.title = "新增员工基本信息";
}, },
/** 查看*/ /** 查看*/
view(row) { view(row) {
this.reset() this.reset();
this.query = { id: row.id }; this.query = { id: row.id };
this.urls.currUrl ="staff/view"; this.urls.currUrl = "staff/view";
this.getData(); this.getData();
this.pageInfo.type="view" this.pageInfo.type = "view";
this.title = "员工基本信息详细"; this.title = "员工基本信息详细";
}, },
/**取消按钮 */ /**取消按钮 */
cancel() { cancel() {
this.open = false; this.open = false;
}, },
/**获取数据后弹框 */ /**获取数据后弹框 */
afterRender(data) { afterRender(data) {
this.open = true; this.open = true;
}, },
afterSubmit(data) { afterSubmit(data) {
this.open = false; this.open = false;
this.$emit("ok"); this.$emit("ok");
}, },
// 表单重置 // 表单重置
reset() { reset() {
this.form = { this.form = {
name : "", name: "",
gender : 1, gender: 1,
birthday : null, birthday: null,
photoPath : "", photoPath: "",
phoneNumber : "", phoneNumber: "",
idCard : "", idCard: "",
workNum : "", workNum: "",
politicalstatus : 1, politicalstatus: 1,
deptId : null, deptId: null,
deptName : "", deptName: "",
positionId : null, positionId: null,
positionName : "", positionName: "",
staffType : 1, staffType: 1,
status : 1, status: 1,
registerPath : "", registerPath: "",
entryDate : null, entryDate: null,
regularDate : null, regularDate: null,
leaveDate : null, leaveDate: null,
remark : "", remark: "",
}; };
this.resetForm("form"); this.resetForm("form");
}, },
resetForm(refName) { resetForm(refName) {
if (this.$refs[refName]) { if (this.$refs[refName]) {
this.$refs[refName].resetFields(); this.$refs[refName].resetFields();
} }
}, },
}, },
}; };
</script> </script>
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
:expand-on-click-node="false" :expand-on-click-node="false"
:render-content="renderContent" :render-content="renderContent"
@node-click="handleNodeClick" @node-click="handleNodeClick"
:default-expand-all="true"
> >
</el-tree> </el-tree>
</el-scrollbar> </el-scrollbar>
...@@ -151,13 +152,13 @@ ...@@ -151,13 +152,13 @@
<!-- 花名册记录查看 --> <!-- 花名册记录查看 -->
<el-drawer title="历史花名册" :visible.sync="drawerhistory" direction="rtl"> <el-drawer title="历史花名册" :visible.sync="drawerhistory" direction="rtl">
<div class="hisList"> <div class="hisList">
<div class="list mt10" v-for="item in 10" :key="item"> <div class="list mt10" v-for="item in 1" :key="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="times">
导出时间:2020-08-13 导出时间:2023-07-19
</div> </div>
</div> </div>
</div> </div>
...@@ -182,7 +183,12 @@ ...@@ -182,7 +183,12 @@
</div> </div>
</el-dialog> </el-dialog>
<drawer-show ref="drawerform" @ok="getData" :bumentree="areaData" :currentNode="currentNode"/> <drawer-show
ref="drawerform"
@ok="getData"
:bumentree="areaData"
:currentNode="currentNode"
/>
</div> </div>
</template> </template>
...@@ -248,7 +254,7 @@ export default { ...@@ -248,7 +254,7 @@ export default {
}, },
handleNodeClick(node) { handleNodeClick(node) {
console.log(node,123123); console.log(node, 123123);
this.currentNode = node; this.currentNode = node;
this.query = { deptId: node.id }; this.query = { deptId: node.id };
this.getData(); this.getData();
...@@ -327,13 +333,13 @@ export default { ...@@ -327,13 +333,13 @@ export default {
name: "name", name: "name",
type: "text", type: "text",
label: "员工姓名", label: "员工姓名",
fuzzy: false, fuzzy: true,
}, },
{ {
name: "phoneNumber", name: "phoneNumber",
type: "text", type: "text",
label: "手机号", label: "手机号",
fuzzy: false, fuzzy: true,
}, },
], ],
columns: [ columns: [
......
...@@ -80,7 +80,7 @@ export default { ...@@ -80,7 +80,7 @@ export default {
name: '目标线', name: '目标线',
yAxis: this.markLine, yAxis: this.markLine,
label: { label: {
formatter: '{b}:'+this.legendName+'不高于20.0%,', formatter: '{b}:' + this.legendName + '不高于20.0%,',
position: 'insideStartTop' position: 'insideStartTop'
}, },
lineStyle: { lineStyle: {
...@@ -188,6 +188,10 @@ export default { ...@@ -188,6 +188,10 @@ export default {
] ]
}) })
} }
myChart.on('click', (params)=>{
this.$emit("click",params)
})
}, },
}, },
}; };
......
...@@ -9,17 +9,8 @@ ...@@ -9,17 +9,8 @@
<el-radio-button :label="2">按个人</el-radio-button> <el-radio-button :label="2">按个人</el-radio-button>
</el-radio-group> </el-radio-group>
<div class="search_box"> <div class="search_box">
<el-select <el-select v-model="boardQuery.month" placeholder="请选择" style="margin: 0 10px;">
v-model="boardQuery.month" <el-option v-for="item in optionsMonths" :key="item.value" :label="item.label" :value="item.value">
placeholder="请选择"
style="margin: 0 10px;"
>
<el-option
v-for="item in optionsMonths"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<el-button type="primary">搜索</el-button> <el-button type="primary">搜索</el-button>
...@@ -28,60 +19,30 @@ ...@@ -28,60 +19,30 @@
<div class="mid"> <div class="mid">
<div class="mid_top"> <div class="mid_top">
<div class="jixiaozongfen"> <div class="jixiaozongfen">
<bar-charts <bar-charts :title="'绩效总分排名'" :id="'jixiaozongfen'" :legendName="'绩效总分'"
:title="'绩效总分排名'" :parameter="depStatObj.totalScore" :styleObj="{ width: '100%', height: '300px' }" />
:id="'jixiaozongfen'"
:legendName="'绩效总分'"
:parameter="depStatObj.totalScore"
:styleObj="{ width: '100%', height: '300px' }"
/>
</div> </div>
<div class="jixiaopingjunfen"> <div class="jixiaopingjunfen">
<line-charts <line-charts :title="'绩效平均分排名'" :id="'jixiaopingjunfen'" :parameter="depStatObj.averageScore"
:title="'绩效平均分排名'" :legendName="'绩效平均分'" :styleObj="{ width: '100%', height: '300px' }" />
:id="'jixiaopingjunfen'"
:parameter="depStatObj.averageScore"
:legendName="'绩效平均分'"
:styleObj="{ width: '100%', height: '300px' }"
/>
</div> </div>
</div> </div>
<div class="mid_down"> <div class="mid_down">
<div class="top_10 box"> <div class="top_10 box">
<bar-charts <bar-charts :title="'部门加分排名TOP10'" :id="'top_10'" :parameter="depStatObj.totalAddScore"
:title="'部门加分排名TOP10'" :legendName="'部门加分分值'" @click="rowClick" :styleObj="{ width: '100%', height: '300px' }" />
:id="'top_10'"
:parameter="depStatObj.totalAddScore"
:legendName="'部门加分分值'"
:styleObj="{ width: '100%', height: '300px' }"
/>
</div> </div>
<div class="jiafen box"> <div class="jiafen box">
<pie-charts <pie-charts :title="'部门加分整体分布'" :id="'jiafen'" :parameter="depStatObj.pieAddScore" :legendName="'部门加分'"
:title="'部门加分整体分布'" :styleObj="{ width: '100%', height: '300px' }" />
:id="'jiafen'"
:parameter="depStatObj.pieAddScore"
:legendName="'部门加分'"
:styleObj="{ width: '100%', height: '300px' }"
/>
</div> </div>
<div class="koufen_10 box"> <div class="koufen_10 box">
<bar-charts <bar-charts :title="'部门扣分排名TOP10'" :id="'koufen_10'" :parameter="depStatObj.totalSubScore"
:title="'部门扣分排名TOP10'" :legendName="'部门分值'" @click="rowClickSub" :styleObj="{ width: '100%', height: '300px' }" />
:id="'koufen_10'"
:parameter="depStatObj.totalSubScore"
:legendName="'部门分值'"
:styleObj="{ width: '100%', height: '300px' }"
/>
</div> </div>
<div class="koufen box"> <div class="koufen box">
<pie-charts <pie-charts :parameter="depStatObj.pieSubScore" :title="'部门扣分整体分布'" :id="'koufen'" :legendName="'部门扣分'"
:parameter="depStatObj.pieSubScore" :styleObj="{ onAssessmentScope2width: '100%', height: '300px' }" />
:title="'部门扣分整体分布'"
:id="'koufen'"
:legendName="'部门扣分'"
:styleObj="{ onAssessmentScope2width: '100%', height: '300px' }"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -96,41 +57,20 @@ ...@@ -96,41 +57,20 @@
</el-radio-group> </el-radio-group>
<div class="search_box"> <div class="search_box">
<el-select v-model="value" @change="deptList" placeholder="请选择"> <el-select v-model="value" @change="deptList" placeholder="请选择">
<el-option <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<el-select <el-select @change="deptList" v-model="StatQuery.month" placeholder="请选择" style="margin: 0 10px;">
@change="deptList" <el-option v-for="item in optionsMonths" :key="item.value" :label="item.label" :value="item.value">
v-model="StatQuery.month"
placeholder="请选择"
style="margin: 0 10px;"
>
<el-option
v-for="item in optionsMonths"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<el-button type="primary" @click="deptList">搜索</el-button> <el-button type="primary" @click="deptList">搜索</el-button>
</div> </div>
</div> </div>
<div class="bar_content"> <div class="bar_content">
<bar-charts <bar-charts :title="`${type1 == 1 ? '各部门' : '个人'}${StatQuery.month}月${alignmentName}对齐情况`" :id="'bar_content'"
:title="`${type1 == 1 ? '各部门' : '个人'}${StatQuery.month}月${alignmentName}对齐情况`" :legendName="alignmentName" :option="{ title: { left: 'center', textStyle: { fontSize: 24 } } }" :markLine="0.2"
:id="'bar_content'" :parameter="depStatObj.alignment" :styleObj="{ width: '1800px', height: '650px' }" />
:legendName="alignmentName"
:option="{title:{left:'center',textStyle:{fontSize:24}}}"
:markLine="0.2"
:parameter="depStatObj.alignment"
:styleObj="{ width: '1800px', height: '650px' }"
/>
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
...@@ -142,48 +82,34 @@ ...@@ -142,48 +82,34 @@
<el-radio-button :label="2">按个人</el-radio-button> <el-radio-button :label="2">按个人</el-radio-button>
</el-radio-group> </el-radio-group>
<el-button type="primary" style="margin: 0 20px;" @click="addGoal"> <el-button type="primary" style="margin: 0 20px;" @click="addGoal">
+ 创建目标</el-button + 创建目标</el-button>
>
</div> </div>
<div class="mid_content" style="height: auto;"> <div class="mid_content" style="height: auto;">
<div class="goal_box" v-for="(val, i) in dataList" :key="i"> <div class="goal_box" v-for="(val, i) in dataList" :key="i">
<div class="goal_title"> <div class="goal_title">
<img src="../../../../assets/images/u17641.svg" alt="" /> <img src="../../../../assets/images/u17641.svg" alt="" />
<span> <span>
{{dictString('assessmentType',val.assessmentType)}}{{dictString('compareScope',val.compareScope)}}{{val.ratio}}% {{ dictString('assessmentType', val.assessmentType) }}{{ dictString('compareScope', val.compareScope) }}{{ val.ratio }}%
</span> </span>
</div> </div>
<p class="goal_txt"> <p class="goal_txt">
<span>{{ type2 == 1 ? "目标部门:" : "目标个人:" }}</span <span>{{ type2 == 1 ? "目标部门:" : "目标个人:" }}</span><span>{{
><span>{{
type2 == 1 ? val.deptPerpose : val.staffPerpose type2 == 1 ? val.deptPerpose : val.staffPerpose
}}</span> }}</span>
</p> </p>
<p class="goal_txt"> <p class="goal_txt">
<span>周期:</span><span>{{val.year}} {{dictString('periodType',val.periodType)}}</span> <span>周期:</span><span>{{ val.year }} {{ dictString('periodType', val.periodType) }}</span>
</p> </p>
<p class="goal_txt"> <p class="goal_txt">
<span>负责人:</span><span>{{val.leaders}}</span> <span>负责人:</span><span>{{ val.leaders }}</span>
</p> </p>
<p class="goal_txt"> <p class="goal_txt">
<span>最近更新:</span><span>{{val.updateTime}}</span> <span>最近更新:</span><span>{{ val.updateTime }}</span>
</p> </p>
<p class="goal_txt"><span>更新人员:</span><span>{{dictString('updateUserId',val.updateUserId)}}</span></p> <p class="goal_txt"><span>更新人员:</span><span>{{ dictString('updateUserId', val.updateUserId) }}</span></p>
<div class="button_box"> <div class="button_box">
<el-button <el-button type="primary" style="width: 150px;" plain @click="hanleEdit(val)">编辑</el-button>
type="primary" <el-button type="danger" style="width: 150px;" plain @click="hanleDel(val)">删除</el-button>
style="width: 150px;"
plain
@click="hanleEdit(val)"
>编辑</el-button
>
<el-button
type="danger"
style="width: 150px;"
plain
@click="hanleDel(val)"
>删除</el-button
>
</div> </div>
</div> </div>
</div> </div>
...@@ -217,10 +143,10 @@ export default { ...@@ -217,10 +143,10 @@ export default {
}, },
methods: { methods: {
// 个人绩效分数统计 // 个人绩效分数统计
staffStatList(){ staffStatList() {
this.$post("/staff/perform/stat/list", this.boardQuery).then((res) => { this.$post("/staff/perform/stat/list", this.boardQuery).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
// this.statArr = row // this.statArr = row
const x = [] const x = []
...@@ -234,10 +160,10 @@ export default { ...@@ -234,10 +160,10 @@ export default {
} }
}); });
// 加分top10 // 加分top10
const top10 = {...this.boardQuery,size:10} const top10 = { ...this.boardQuery, size: 10 }
this.$post("/staff/perform/stat/list", top10).then((res) => { this.$post("/staff/perform/stat/list", top10).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
// this.statArr = row // this.statArr = row
const x = [] const x = []
...@@ -251,10 +177,10 @@ export default { ...@@ -251,10 +177,10 @@ export default {
} }
}); });
// 减分 // 减分
const top10Sub = {...this.boardQuery,size:10,orderColList:[{colName:'totalSubScore',sortKind:'desc'}]} const top10Sub = { ...this.boardQuery, size: 10, orderColList: [{ colName: 'totalSubScore', sortKind: 'desc' }] }
this.$post("/staff/perform/stat/list", top10Sub).then((res) => { this.$post("/staff/perform/stat/list", top10Sub).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
// this.statArr = row // this.statArr = row
const x = [] const x = []
...@@ -269,10 +195,10 @@ export default { ...@@ -269,10 +195,10 @@ export default {
}); });
}, },
// 部门绩效分数统计 // 部门绩效分数统计
statList(){ statList() {
this.$post("/dept/perform/stat/list",this.boardQuery).then((res) => { this.$post("/dept/perform/stat/list", this.boardQuery).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
// this.statArr = row // this.statArr = row
const x = [] const x = []
...@@ -292,10 +218,10 @@ export default { ...@@ -292,10 +218,10 @@ export default {
} }
}); });
// 加分top10 // 加分top10
const top10 = {...this.boardQuery,size:10,orderColList:[{colName:'totalAddScore',sortKind:'desc'}]} const top10 = { ...this.boardQuery, size: 10, orderColList: [{ colName: 'totalAddScore', sortKind: 'desc' }] }
this.$post("/dept/perform/stat/list", top10).then((res) => { this.$post("/dept/perform/stat/list", top10).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
// this.statArr = row // this.statArr = row
const x = [] const x = []
...@@ -306,14 +232,14 @@ export default { ...@@ -306,14 +232,14 @@ export default {
}); });
this.depStatObj.totalAddScore.x = x this.depStatObj.totalAddScore.x = x
this.depStatObj.totalAddScore.y = y this.depStatObj.totalAddScore.y = y
this.depStatObj.totalAddScore.row = row
} }
}); });
// 减分 // 减分
const top10Sub = {...this.boardQuery,size:10,orderColList:[{colName:'totalSubScore',sortKind:'desc'}]} const top10Sub = { ...this.boardQuery, size: 10, orderColList: [{ colName: 'totalSubScore', sortKind: 'desc' }] }
this.$post("/dept/perform/stat/list", top10Sub).then((res) => { this.$post("/dept/perform/stat/list", top10Sub).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
// this.statArr = row // this.statArr = row
const x = [] const x = []
...@@ -328,10 +254,10 @@ export default { ...@@ -328,10 +254,10 @@ export default {
}); });
}, },
// 部门目标对齐 // 部门目标对齐
deptList(){ deptList() {
this.$post("/perform/perpose/dept/stat/list", this.StatQuery).then((res) => { this.$post("/perform/perpose/dept/stat/list", this.StatQuery).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
const x = [] const x = []
const y = [] const y = []
...@@ -345,10 +271,10 @@ export default { ...@@ -345,10 +271,10 @@ export default {
}); });
}, },
// 个人对齐方式 // 个人对齐方式
staffList(){ staffList() {
this.$post("/perform/perpose/staff/stat/list", this.StatQuery).then((res) => { this.$post("/perform/perpose/staff/stat/list", this.StatQuery).then((res) => {
const {code,data,dict} = res const { code, data, dict } = res
if(code == 1){ if (code == 1) {
const row = data.data || [] const row = data.data || []
const x = [] const x = []
const y = [] const y = []
...@@ -379,9 +305,9 @@ export default { ...@@ -379,9 +305,9 @@ export default {
}, },
// 目标管理 // 目标管理
getData() { getData() {
this.$post("/perform/perpose/list",this.query).then((res) => { this.$post("/perform/perpose/list", this.query).then((res) => {
console.log(res,"@@@@@@@@@@@@"); console.log(res, "@@@@@@@@@@@@");
const {code,data,dict} = res const { code, data, dict } = res
this.dict = dict || {} this.dict = dict || {}
if (code == 1) { if (code == 1) {
this.dataList = data.data; this.dataList = data.data;
...@@ -391,39 +317,64 @@ export default { ...@@ -391,39 +317,64 @@ export default {
}); });
}, },
// 字典转换 // 字典转换
dictString(key,id){ dictString(key, id) {
const keyName = this.dict[key] const keyName = this.dict[key]
return keyName?keyName[id]:"" return keyName ? keyName[id] : ""
}, },
// TAB个人/法人 // TAB个人/法人
onAssessmentScope(v){ onAssessmentScope(v) {
if(v == 1){ if (v == 1) {
this.statList() this.statList()
}else{ } else {
this.staffStatList() this.staffStatList()
} }
}, },
// 目标看齐 // 目标看齐
onAssessmentScope1(v){ onAssessmentScope1(v) {
if(v == 1){ if (v == 1) {
this.deptList() this.deptList()
}else{ } else {
this.staffList() this.staffList()
} }
}, },
onAssessmentScope2(v){ onAssessmentScope2(v) {
if(v == 1){ if (v == 1) {
this.query.assessmentScope = 1 this.query.assessmentScope = 1
}else{ } else {
this.query.assessmentScope = 2 this.query.assessmentScope = 2
} }
this.getData() this.getData()
},
rowClick(row) {
const { dataIndex } = row
const {attendScoreAdd,reviewScoreAdd,goworkScoreAdd,effectScoreAdd,otherScoreAdd,complainScoreAdd} = this.depStatObj.totalAddScore.row[dataIndex]
this.depStatObj.pieAddScore = [
{ value: attendScoreAdd, name: '考勤绩效' },
{ value: reviewScoreAdd, name: '评价绩效' },
{ value: goworkScoreAdd, name: '办件绩效' },
{ value: effectScoreAdd, name: '效能绩效' },
{ value: complainScoreAdd, name: '投诉绩效' },
{ value: otherScoreAdd, name: '其它绩效' },
]
},
// 减分top10
rowClickSub(row) {
const { dataIndex } = row
const {attendScoreSub,reviewScoreSub,goworkScoreSub,effectScoreSub,complainScoreSub,otherScoreSub} = this.depStatObj.totalAddScore.row[dataIndex]
this.depStatObj.pieSubScore = [
{ value: attendScoreSub, name: '考勤绩效' },
{ value: reviewScoreSub, name: '评价绩效' },
{ value: goworkScoreSub, name: '办件绩效' },
{ value: effectScoreSub, name: '效能绩效' },
{ value: complainScoreSub, name: '投诉绩效' },
{ value: otherScoreSub, name: '其它绩效' },
]
} }
}, },
computed: { computed: {
alignmentName:function(){ alignmentName: function () {
const obj = this.options.find(v=>v.value == this.value) const obj = this.options.find(v => v.value == this.value)
return obj.label return obj.label
} }
}, },
...@@ -528,63 +479,63 @@ export default { ...@@ -528,63 +479,63 @@ export default {
], ],
value: "lateRate",//默认显示迟到类型 value: "lateRate",//默认显示迟到类型
dataList: [], dataList: [],
depStatObj:{ depStatObj: {
totalScore:{ totalScore: {
x:[], x: [],
y:[] y: []
},//绩效总分排名 },//绩效总分排名
averageScore:{ averageScore: {
x:[], x: [],
y:[] y: []
},//绩效平均排名 },//绩效平均排名
totalAddScore:{ totalAddScore: {
x:[], x: [],
y:[] y: []
},//加分 },//加分
totalSubScore:{ totalSubScore: {
x:[], x: [],
y:[] y: []
},//减分 },//减分
alignment:{ alignment: {
x:[], x: [],
y:[] y: []
},//目标对齐 },//目标对齐
pieAddScore:[ pieAddScore: [
{value:0,name:'考勤绩效'}, { value: 0, name: '考勤绩效' },
{value:0,name:'评价绩效'}, { value: 0, name: '评价绩效' },
{value:0,name:'办件绩效'}, { value: 0, name: '办件绩效' },
{value:0,name:'效能绩效'}, { value: 0, name: '效能绩效' },
{value:0,name:'投诉绩效'}, { value: 0, name: '投诉绩效' },
{value:0,name:'其它绩效'}, { value: 0, name: '其它绩效' },
],//部门加分分布 ],//部门加分分布
pieSubScore:[ pieSubScore: [
{value:0,name:'考勤绩效'}, { value: 0, name: '考勤绩效' },
{value:0,name:'评价绩效'}, { value: 0, name: '评价绩效' },
{value:0,name:'办件绩效'}, { value: 0, name: '办件绩效' },
{value:0,name:'效能绩效'}, { value: 0, name: '效能绩效' },
{value:0,name:'投诉绩效'}, { value: 0, name: '投诉绩效' },
{value:0,name:'其它绩效'}, { value: 0, name: '其它绩效' },
]//部门减分分布 ]//部门减分分布
},//按部门 },//按部门
month:"",//月份 month: "",//月份
boardQuery:{ boardQuery: {
page:1, page: 1,
size:-1, size: -1,
year:parseInt(moment().format('YYYY')), year: parseInt(moment().format('YYYY')),
month:parseInt(moment().format('MM')), month: parseInt(moment().format('MM')),
},//看板查询条件 },//看板查询条件
query:{ query: {
page:1, page: 1,
size:-1, size: -1,
assessmentScope:1//考核范围(1.部门,2.个人) assessmentScope: 1//考核范围(1.部门,2.个人)
},//目标管理查询条件 },//目标管理查询条件
StatQuery:{ StatQuery: {
page:1, page: 1,
size:-1, size: -1,
year:parseInt(moment().format('YYYY')), year: parseInt(moment().format('YYYY')),
month:parseInt(moment().format('MM')), month: parseInt(moment().format('MM')),
},//对齐方式入参 },//对齐方式入参
dict:{}//字典 dict: {}//字典
}; };
}, },
}; };
...@@ -594,55 +545,66 @@ export default { ...@@ -594,55 +545,66 @@ export default {
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
/deep/.el-tabs__item { /deep/.el-tabs__item {
width: 120px; width: 120px;
font-size: 14px; font-size: 14px;
text-align: center; text-align: center;
} }
.content { .content {
width: 100%; width: 100%;
height: 100%; height: 100%;
.search_top { .search_top {
width: 100%; width: 100%;
height: 1000%; height: 1000%;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
/deep/.el-radio-button { /deep/.el-radio-button {
width: 150px; width: 150px;
text-align: center; text-align: center;
border: 1px solid #eee; border: 1px solid #eee;
} }
/deep/.el-radio-button__inner { /deep/.el-radio-button__inner {
width: 150px; width: 150px;
} }
/deep/.el-radio-button__orig-radio:checked + .el-radio-button__inner {
/deep/.el-radio-button__orig-radio:checked+.el-radio-button__inner {
width: 150px; width: 150px;
border: none; border: none;
background: #1890ff; background: #1890ff;
color: #fff; color: #fff;
border: 1px solid #eee; border: 1px solid #eee;
} }
.top { .top {
width: 100%; width: 100%;
height: 60px; height: 60px;
} }
.mid { .mid {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.mid_top { .mid_top {
width: 100%; width: 100%;
height: 300px; height: 300px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.jixiaozongfen, .jixiaozongfen,
.jixiaopingjunfen { .jixiaopingjunfen {
width: 48%; width: 48%;
height: 100%; height: 100%;
} }
} }
.mid_down { .mid_down {
width: 100%; width: 100%;
height: 380px; height: 380px;
...@@ -656,16 +618,19 @@ export default { ...@@ -656,16 +618,19 @@ export default {
} }
} }
} }
.mid_content, .mid_content,
.bar_content { .bar_content {
width: 100%; width: 100%;
height: 700px; height: 700px;
overflow: hidden; overflow: hidden;
} }
.mid_content { .mid_content {
overflow-y: auto; overflow-y: auto;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
.goal_box { .goal_box {
width: 405px; width: 405px;
height: 238px; height: 238px;
...@@ -678,14 +643,17 @@ export default { ...@@ -678,14 +643,17 @@ export default {
-webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.117647058823529); -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.117647058823529);
margin: 10px 20px 20px 10px; margin: 10px 20px 20px 10px;
padding: 20px; padding: 20px;
.goal_title { .goal_title {
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
img { img {
margin-right: 10px; margin-right: 10px;
} }
} }
.goal_txt { .goal_txt {
font-family: "微软雅黑", sans-serif; font-family: "微软雅黑", sans-serif;
font-weight: 400; font-weight: 400;
...@@ -695,6 +663,7 @@ export default { ...@@ -695,6 +663,7 @@ export default {
width: 100%; width: 100%;
margin: 10px 0; margin: 10px 0;
} }
.button_box { .button_box {
width: 100%; width: 100%;
display: flex; display: flex;
......
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" notAdd notDel :config="tableConfig"> <LayoutTable :data="tableData" notAdd notDel :config="tableConfig">
<el-button <el-button slot="table-head-left2" style="margin-left: 10px" icon="el-icon-tickets" size="mini" @click="doExport"
slot="table-head-left2" :disabled="isExport">导出</el-button>
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
@click="doExport"
:disabled="isExport"
>导出</el-button
>
</LayoutTable> </LayoutTable>
<dialog-show ref="dialogform" @ok="getData" /> <dialog-show ref="dialogform" @ok="getData" />
...@@ -26,7 +19,7 @@ export default { ...@@ -26,7 +19,7 @@ export default {
dialogShow, dialogShow,
}, },
mixins: [table], mixins: [table],
created() {}, created() { },
methods: { methods: {
/** 导出Excel */ /** 导出Excel */
doExport() { doExport() {
...@@ -92,7 +85,7 @@ export default { ...@@ -92,7 +85,7 @@ export default {
{ label: "姓名", prop: "staffName" }, { label: "姓名", prop: "staffName" },
{ label: "工号", prop: "workNum" }, { label: "工号", prop: "workNum" },
{ label: "手机号", prop: "phoneNumber" }, { label: "手机号", prop: "phoneNumber" },
{ label: "所属部门", prop: "deptName" }, { label: "所属部门", prop: "deptName" },
...@@ -103,15 +96,16 @@ export default { ...@@ -103,15 +96,16 @@ export default {
}, },
}, },
{ label: "考勤绩效", prop: "attendScore", formatter: this.formatter }, { label: "考勤绩效指标分数", prop: "attendScore", formatter: this.formatter },
{ label: "评价绩效", prop: "assessScore", formatter: this.formatter }, { label: "评价绩效指标分数", prop: "reviewScore", formatter: this.formatter },
{ label: "投诉绩效指标分数", prop: "reviewScore", formatter: this.formatter },
{ label: "办件绩效", prop: "workScore", formatter: this.formatter }, { label: "办件绩效分数", prop: "workScore", formatter: this.formatter },
{ label: "效能绩效", prop: "effectScore", formatter: this.formatter }, { label: "效能绩效分数", prop: "effectScore", formatter: this.formatter },
{ label: "其它绩效", prop: "otherScore", formatter: this.formatter }, { label: "其它绩效分数", prop: "otherScore", formatter: this.formatter },
{ {
label: "累计异常分数", label: "累计异常分数",
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
resolved "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.9.tgz?cache=0&sync_timestamp=1627804534988&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.14.9.tgz" resolved "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.9.tgz?cache=0&sync_timestamp=1627804534988&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.14.9.tgz"
integrity sha1-rHmWzqr8+PQQEZyK8NHbTPkUohA= integrity sha1-rHmWzqr8+PQQEZyK8NHbTPkUohA=
"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@^7.9.6": "@babel/core@^7.11.0", "@babel/core@^7.9.6":
version "7.14.8" version "7.14.8"
resolved "https://registry.nlark.com/@babel/core/download/@babel/core-7.14.8.tgz" resolved "https://registry.nlark.com/@babel/core/download/@babel/core-7.14.8.tgz"
integrity sha1-IM33yEtdhtg/rIcQqLxgWnuj8BA= integrity sha1-IM33yEtdhtg/rIcQqLxgWnuj8BA=
...@@ -1057,7 +1057,7 @@ ...@@ -1057,7 +1057,7 @@
resolved "https://registry.nlark.com/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz" resolved "https://registry.nlark.com/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz"
integrity sha1-CnCVreoGckPOMoPhtWuKj0U7JCo= integrity sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=
"@hapi/hoek@^8.3.0", "@hapi/hoek@8.x.x": "@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
version "8.5.1" version "8.5.1"
resolved "https://registry.nlark.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz" resolved "https://registry.nlark.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz"
integrity sha1-/elgZMpEbeyMVajC8TCVewcMbgY= integrity sha1-/elgZMpEbeyMVajC8TCVewcMbgY=
...@@ -1408,7 +1408,7 @@ ...@@ -1408,7 +1408,7 @@
resolved "https://registry.nlark.com/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.13.tgz" resolved "https://registry.nlark.com/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.13.tgz"
integrity sha1-mGRti8HmnPbGpsui/tPqzgNWw2A= integrity sha1-mGRti8HmnPbGpsui/tPqzgNWw2A=
"@vue/cli-service@^3.0.0 || ^4.0.0-0", "@vue/cli-service@4.4.6": "@vue/cli-service@4.4.6":
version "4.4.6" version "4.4.6"
resolved "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.4.6.tgz" resolved "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.4.6.tgz"
integrity sha1-g8oFjQgesUW7wa4v6AadLZ3ffhg= integrity sha1-g8oFjQgesUW7wa4v6AadLZ3ffhg=
...@@ -1693,16 +1693,16 @@ acorn-walk@^7.1.1: ...@@ -1693,16 +1693,16 @@ acorn-walk@^7.1.1:
resolved "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1624951909442&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz" resolved "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1624951909442&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz"
integrity sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w= integrity sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^7.1.1, acorn@^7.2.0, acorn@^7.4.0:
version "7.4.1"
resolved "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1624526873403&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz"
integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=
acorn@^6.4.1: acorn@^6.4.1:
version "6.4.2" version "6.4.2"
resolved "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1624526873403&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz" resolved "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1624526873403&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz"
integrity sha1-NYZv1xBSjpLeEM8GAWSY5H454eY= integrity sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=
acorn@^7.1.1, acorn@^7.2.0, acorn@^7.4.0:
version "7.4.1"
resolved "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1624526873403&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz"
integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=
address@^1.1.2: address@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.nlark.com/address/download/address-1.1.2.tgz" resolved "https://registry.nlark.com/address/download/address-1.1.2.tgz"
...@@ -1739,7 +1739,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: ...@@ -1739,7 +1739,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
resolved "https://registry.nlark.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz" resolved "https://registry.nlark.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz"
integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0= integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0=
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1, ajv@>=5.0.0: ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
version "6.12.6" version "6.12.6"
resolved "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz" resolved "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz"
integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=
...@@ -1801,21 +1801,7 @@ ansi-styles@^2.2.1: ...@@ -1801,21 +1801,7 @@ ansi-styles@^2.2.1:
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz" resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz"
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
ansi-styles@^3.1.0: ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"
integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
dependencies:
color-convert "^1.9.0"
ansi-styles@^3.2.0:
version "3.2.1"
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"
integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
dependencies:
color-convert "^1.9.0"
ansi-styles@^3.2.1:
version "3.2.1" version "3.2.1"
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz" resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"
integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
...@@ -1882,16 +1868,16 @@ arr-union@^3.1.0: ...@@ -1882,16 +1868,16 @@ arr-union@^3.1.0:
resolved "https://registry.nlark.com/arr-union/download/arr-union-3.1.0.tgz" resolved "https://registry.nlark.com/arr-union/download/arr-union-3.1.0.tgz"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
array-flatten@^2.1.0:
version "2.1.2"
resolved "https://registry.nlark.com/array-flatten/download/array-flatten-2.1.2.tgz"
integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=
array-flatten@1.1.1: array-flatten@1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.nlark.com/array-flatten/download/array-flatten-1.1.1.tgz" resolved "https://registry.nlark.com/array-flatten/download/array-flatten-1.1.1.tgz"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
array-flatten@^2.1.0:
version "2.1.2"
resolved "https://registry.nlark.com/array-flatten/download/array-flatten-2.1.2.tgz"
integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=
array-union@^1.0.1, array-union@^1.0.2: array-union@^1.0.1, array-union@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz" resolved "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz"
...@@ -1926,7 +1912,7 @@ asn1@~0.2.3: ...@@ -1926,7 +1912,7 @@ asn1@~0.2.3:
dependencies: dependencies:
safer-buffer "~2.1.0" safer-buffer "~2.1.0"
assert-plus@^1.0.0, assert-plus@1.0.0: assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz" resolved "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz"
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
...@@ -2090,6 +2076,11 @@ balanced-match@^1.0.0: ...@@ -2090,6 +2076,11 @@ balanced-match@^1.0.0:
resolved "https://registry.nlark.com/balanced-match/download/balanced-match-1.0.2.tgz" resolved "https://registry.nlark.com/balanced-match/download/balanced-match-1.0.2.tgz"
integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=
base64-js@^1.0.2, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.nlark.com/base64-js/download/base64-js-1.5.1.tgz"
integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=
base@^0.11.1: base@^0.11.1:
version "0.11.2" version "0.11.2"
resolved "https://registry.nlark.com/base/download/base-0.11.2.tgz" resolved "https://registry.nlark.com/base/download/base-0.11.2.tgz"
...@@ -2103,11 +2094,6 @@ base@^0.11.1: ...@@ -2103,11 +2094,6 @@ base@^0.11.1:
mixin-deep "^1.2.0" mixin-deep "^1.2.0"
pascalcase "^0.1.1" pascalcase "^0.1.1"
base64-js@^1.0.2, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.nlark.com/base64-js/download/base64-js-1.5.1.tgz"
integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=
batch@0.6.1: batch@0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.nlark.com/batch/download/batch-0.6.1.tgz" resolved "https://registry.nlark.com/batch/download/batch-0.6.1.tgz"
...@@ -2155,6 +2141,13 @@ binary-extensions@^2.0.0: ...@@ -2155,6 +2141,13 @@ binary-extensions@^2.0.0:
resolved "https://registry.nlark.com/binary-extensions/download/binary-extensions-2.2.0.tgz" resolved "https://registry.nlark.com/binary-extensions/download/binary-extensions-2.2.0.tgz"
integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=
bindings@^1.5.0:
version "1.5.0"
resolved "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
dependencies:
file-uri-to-path "1.0.0"
blob.js@^1.0.1: blob.js@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.npmjs.org/blob.js/-/blob.js-1.0.1.tgz" resolved "https://registry.npmjs.org/blob.js/-/blob.js-1.0.1.tgz"
...@@ -2170,12 +2163,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: ...@@ -2170,12 +2163,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
resolved "https://registry.nlark.com/bn.js/download/bn.js-4.12.0.tgz" resolved "https://registry.nlark.com/bn.js/download/bn.js-4.12.0.tgz"
integrity sha1-d1s/J477uXGO7HNh9IP7Nvu/6og= integrity sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=
bn.js@^5.0.0: bn.js@^5.0.0, bn.js@^5.1.1:
version "5.2.0"
resolved "https://registry.nlark.com/bn.js/download/bn.js-5.2.0.tgz"
integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=
bn.js@^5.1.1:
version "5.2.0" version "5.2.0"
resolved "https://registry.nlark.com/bn.js/download/bn.js-5.2.0.tgz" resolved "https://registry.nlark.com/bn.js/download/bn.js-5.2.0.tgz"
integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI= integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=
...@@ -2237,14 +2225,7 @@ braces@^2.2.2, braces@^2.3.1, braces@^2.3.2: ...@@ -2237,14 +2225,7 @@ braces@^2.2.2, braces@^2.3.1, braces@^2.3.2:
split-string "^3.0.2" split-string "^3.0.2"
to-regex "^3.0.1" to-regex "^3.0.1"
braces@^3.0.1: braces@^3.0.1, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.nlark.com/braces/download/braces-3.0.2.tgz"
integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc=
dependencies:
fill-range "^7.0.1"
braces@~3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.nlark.com/braces/download/braces-3.0.2.tgz" resolved "https://registry.nlark.com/braces/download/braces-3.0.2.tgz"
integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc=
...@@ -2563,6 +2544,23 @@ cfb@^1.1.4: ...@@ -2563,6 +2544,23 @@ cfb@^1.1.4:
adler-32 "~1.3.0" adler-32 "~1.3.0"
crc-32 "~1.2.0" crc-32 "~1.2.0"
chalk@2.3.0:
version "2.3.0"
resolved "https://registry.nlark.com/chalk/download/chalk-2.3.0.tgz?cache=0&sync_timestamp=1627646614989&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.3.0.tgz"
integrity sha1-tepI78nBeT3MybR2fJORTT8tUro=
dependencies:
ansi-styles "^3.1.0"
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
chalk@4.1.0:
version "4.1.0"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz"
integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo=
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@^1.1.3: chalk@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz" resolved "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz"
...@@ -2574,16 +2572,7 @@ chalk@^1.1.3: ...@@ -2574,16 +2572,7 @@ chalk@^1.1.3:
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
supports-color "^2.0.0" supports-color "^2.0.0"
chalk@^2.0.0: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^2.0.1, chalk@^2.4.2:
version "2.4.2" version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz" resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
...@@ -2592,33 +2581,7 @@ chalk@^2.0.1, chalk@^2.4.2: ...@@ -2592,33 +2581,7 @@ chalk@^2.0.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" supports-color "^5.3.0"
chalk@^2.3.0: chalk@^4.0.0, chalk@^4.1.0:
version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^2.4.1:
version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.0.0:
version "4.1.2"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz"
integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@^4.1.0:
version "4.1.2" version "4.1.2"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz" resolved "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz"
integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=
...@@ -2626,23 +2589,6 @@ chalk@^4.1.0: ...@@ -2626,23 +2589,6 @@ chalk@^4.1.0:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
chalk@2.3.0:
version "2.3.0"
resolved "https://registry.nlark.com/chalk/download/chalk-2.3.0.tgz?cache=0&sync_timestamp=1627646614989&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.3.0.tgz"
integrity sha1-tepI78nBeT3MybR2fJORTT8tUro=
dependencies:
ansi-styles "^3.1.0"
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
chalk@4.1.0:
version "4.1.0"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz"
integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo=
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chardet@^0.7.0: chardet@^0.7.0:
version "0.7.0" version "0.7.0"
resolved "https://registry.nlark.com/chardet/download/chardet-0.7.0.tgz" resolved "https://registry.nlark.com/chardet/download/chardet-0.7.0.tgz"
...@@ -2653,6 +2599,21 @@ check-types@^8.0.3: ...@@ -2653,6 +2599,21 @@ check-types@^8.0.3:
resolved "https://registry.nlark.com/check-types/download/check-types-8.0.3.tgz" resolved "https://registry.nlark.com/check-types/download/check-types-8.0.3.tgz"
integrity sha1-M1bMoZyIlUTy16le1JzlCKDs9VI= integrity sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=
"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1:
version "3.5.2"
resolved "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz"
integrity sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
chokidar@^2.1.8: chokidar@^2.1.8:
version "2.1.8" version "2.1.8"
resolved "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz" resolved "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz"
...@@ -2672,36 +2633,6 @@ chokidar@^2.1.8: ...@@ -2672,36 +2633,6 @@ chokidar@^2.1.8:
optionalDependencies: optionalDependencies:
fsevents "^1.2.7" fsevents "^1.2.7"
chokidar@^3.4.1:
version "3.5.2"
resolved "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz"
integrity sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
"chokidar@>=2.0.0 <4.0.0":
version "3.5.2"
resolved "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz"
integrity sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
chownr@^1.1.1, chownr@^1.1.2: chownr@^1.1.1, chownr@^1.1.2:
version "1.1.4" version "1.1.4"
resolved "https://registry.nlark.com/chownr/download/chownr-1.1.4.tgz" resolved "https://registry.nlark.com/chownr/download/chownr-1.1.4.tgz"
...@@ -2895,16 +2826,16 @@ color-convert@^2.0.1: ...@@ -2895,16 +2826,16 @@ color-convert@^2.0.1:
dependencies: dependencies:
color-name "~1.1.4" color-name "~1.1.4"
color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz"
integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=
color-name@1.1.3: color-name@1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz" resolved "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz"
integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=
color-string@^1.6.0: color-string@^1.6.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.nlark.com/color-string/download/color-string-1.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolor-string%2Fdownload%2Fcolor-string-1.6.0.tgz" resolved "https://registry.nlark.com/color-string/download/color-string-1.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolor-string%2Fdownload%2Fcolor-string-1.6.0.tgz"
...@@ -2933,6 +2864,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: ...@@ -2933,6 +2864,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
commander@2.17.x, commander@~2.17.1:
version "2.17.1"
resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
commander@^2.18.0, commander@^2.19.0, commander@^2.20.0: commander@^2.18.0, commander@^2.19.0, commander@^2.20.0:
version "2.20.3" version "2.20.3"
resolved "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz" resolved "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz"
...@@ -2948,21 +2884,11 @@ commander@~2.14.1: ...@@ -2948,21 +2884,11 @@ commander@~2.14.1:
resolved "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz" resolved "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz"
integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==
commander@~2.17.1:
version "2.17.1"
resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
commander@~2.19.0: commander@~2.19.0:
version "2.19.0" version "2.19.0"
resolved "https://registry.nlark.com/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz" resolved "https://registry.nlark.com/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz"
integrity sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So= integrity sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=
commander@2.17.x:
version "2.17.1"
resolved "https://registry.nlark.com/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz"
integrity sha1-vXerfebelCBc6sxy8XFtKfIKd78=
commondir@^1.0.1: commondir@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.nlark.com/commondir/download/commondir-1.0.1.tgz" resolved "https://registry.nlark.com/commondir/download/commondir-1.0.1.tgz"
...@@ -3132,20 +3058,22 @@ core-js-pure@^3.30.2: ...@@ -3132,20 +3058,22 @@ core-js-pure@^3.30.2:
resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz" resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz"
integrity sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw== integrity sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==
core-js@3.8.1:
version "3.8.1"
resolved "https://registry.nlark.com/core-js/download/core-js-3.8.1.tgz"
integrity sha1-9RUjZorIopTRKFw7nbRAJf2mbUc=
core-js@^2.4.0: core-js@^2.4.0:
version "2.6.12" version "2.6.12"
resolved "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz" resolved "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz"
integrity sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw= integrity sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw=
core-js@^3.6.5: core-js@^3.6.5:
version "3.16.0" version "3.31.1"
resolved "https://registry.npmmirror.com/core-js/-/core-js-3.31.1.tgz#f2b0eea9be9da0def2c5fece71064a7e5d687653"
core-js@3.8.1: integrity sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==
version "3.8.1"
resolved "https://registry.nlark.com/core-js/download/core-js-3.8.1.tgz"
integrity sha1-9RUjZorIopTRKFw7nbRAJf2mbUc=
core-util-is@~1.0.0, core-util-is@1.0.2: core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz" resolved "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
...@@ -3253,7 +3181,7 @@ crypto-browserify@^3.11.0: ...@@ -3253,7 +3181,7 @@ crypto-browserify@^3.11.0:
randombytes "^2.0.0" randombytes "^2.0.0"
randomfill "^1.0.3" randomfill "^1.0.3"
css-color-names@^0.0.4, css-color-names@0.0.4: css-color-names@0.0.4, css-color-names@^0.0.4:
version "0.0.4" version "0.0.4"
resolved "https://registry.nlark.com/css-color-names/download/css-color-names-0.0.4.tgz" resolved "https://registry.nlark.com/css-color-names/download/css-color-names-0.0.4.tgz"
integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
...@@ -3266,7 +3194,7 @@ css-declaration-sorter@^4.0.1: ...@@ -3266,7 +3194,7 @@ css-declaration-sorter@^4.0.1:
postcss "^7.0.1" postcss "^7.0.1"
timsort "^0.3.0" timsort "^0.3.0"
css-loader@*, css-loader@^3.5.3: css-loader@^3.5.3:
version "3.6.0" version "3.6.0"
resolved "https://registry.nlark.com/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1626731974484&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz" resolved "https://registry.nlark.com/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1626731974484&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz"
integrity sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU= integrity sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=
...@@ -3311,14 +3239,6 @@ css-select@^4.1.3: ...@@ -3311,14 +3239,6 @@ css-select@^4.1.3:
domutils "^2.6.0" domutils "^2.6.0"
nth-check "^2.0.0" nth-check "^2.0.0"
css-tree@^1.1.2:
version "1.1.3"
resolved "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz"
integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=
dependencies:
mdn-data "2.0.14"
source-map "^0.6.1"
css-tree@1.0.0-alpha.37: css-tree@1.0.0-alpha.37:
version "1.0.0-alpha.37" version "1.0.0-alpha.37"
resolved "https://registry.nlark.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz" resolved "https://registry.nlark.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz"
...@@ -3327,6 +3247,14 @@ css-tree@1.0.0-alpha.37: ...@@ -3327,6 +3247,14 @@ css-tree@1.0.0-alpha.37:
mdn-data "2.0.4" mdn-data "2.0.4"
source-map "^0.6.1" source-map "^0.6.1"
css-tree@^1.1.2:
version "1.1.3"
resolved "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz"
integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=
dependencies:
mdn-data "2.0.14"
source-map "^0.6.1"
css-what@^3.2.1: css-what@^3.2.1:
version "3.4.2" version "3.4.2"
resolved "https://registry.nlark.com/css-what/download/css-what-3.4.2.tgz?cache=0&sync_timestamp=1622227191786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz" resolved "https://registry.nlark.com/css-what/download/css-what-3.4.2.tgz?cache=0&sync_timestamp=1622227191786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz"
...@@ -3434,28 +3362,21 @@ de-indent@^1.0.2: ...@@ -3434,28 +3362,21 @@ de-indent@^1.0.2:
resolved "https://registry.nlark.com/de-indent/download/de-indent-1.0.2.tgz" resolved "https://registry.nlark.com/de-indent/download/de-indent-1.0.2.tgz"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
debug@^2.2.0: debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9" version "2.6.9"
resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz" resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"
integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@^2.3.3: debug@=3.1.0:
version "2.6.9" version "3.1.0"
resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz" resolved "https://registry.nlark.com/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz"
integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@^3.1.1: debug@^3.1.1, debug@^3.2.6:
version "3.2.7"
resolved "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz"
integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=
dependencies:
ms "^2.1.1"
debug@^3.2.6:
version "3.2.7" version "3.2.7"
resolved "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz" resolved "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz"
integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o= integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=
...@@ -3469,20 +3390,6 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0: ...@@ -3469,20 +3390,6 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.nlark.com/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz"
integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=
dependencies:
ms "2.0.0"
debug@2.6.9:
version "2.6.9"
resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"
integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
dependencies:
ms "2.0.0"
decamelize@^1.2.0: decamelize@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.nlark.com/decamelize/download/decamelize-1.2.0.tgz" resolved "https://registry.nlark.com/decamelize/download/decamelize-1.2.0.tgz"
...@@ -3515,21 +3422,16 @@ deep-is@^0.1.3: ...@@ -3515,21 +3422,16 @@ deep-is@^0.1.3:
resolved "https://registry.nlark.com/deep-is/download/deep-is-0.1.3.tgz" resolved "https://registry.nlark.com/deep-is/download/deep-is-0.1.3.tgz"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
deepmerge@^1.2.0:
version "1.5.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.5.2.tgz"
integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M=
deepmerge@^1.5.2:
version "1.5.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.5.2.tgz"
integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M=
deepmerge@1.3.2: deepmerge@1.3.2:
version "1.3.2" version "1.3.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.3.2.tgz" resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.3.2.tgz"
integrity sha1-FmNpFinU2/42T6EqKk8KqGqjoFA= integrity sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=
deepmerge@^1.2.0, deepmerge@^1.5.2:
version "1.5.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.5.2.tgz"
integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M=
default-gateway@^4.2.0: default-gateway@^4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.nlark.com/default-gateway/download/default-gateway-4.2.0.tgz" resolved "https://registry.nlark.com/default-gateway/download/default-gateway-4.2.0.tgz"
...@@ -3682,6 +3584,14 @@ dom-converter@^0.2.0: ...@@ -3682,6 +3584,14 @@ dom-converter@^0.2.0:
dependencies: dependencies:
utila "~0.4" utila "~0.4"
dom-serializer@0:
version "0.2.2"
resolved "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz"
integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=
dependencies:
domelementtype "^2.0.1"
entities "^2.0.0"
dom-serializer@^1.0.1: dom-serializer@^1.0.1:
version "1.3.2" version "1.3.2"
resolved "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz" resolved "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz"
...@@ -3691,20 +3601,12 @@ dom-serializer@^1.0.1: ...@@ -3691,20 +3601,12 @@ dom-serializer@^1.0.1:
domhandler "^4.2.0" domhandler "^4.2.0"
entities "^2.0.0" entities "^2.0.0"
dom-serializer@0:
version "0.2.2"
resolved "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz"
integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=
dependencies:
domelementtype "^2.0.1"
entities "^2.0.0"
domain-browser@^1.1.1: domain-browser@^1.1.1:
version "1.2.0" version "1.2.0"
resolved "https://registry.nlark.com/domain-browser/download/domain-browser-1.2.0.tgz" resolved "https://registry.nlark.com/domain-browser/download/domain-browser-1.2.0.tgz"
integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto= integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=
domelementtype@^1.3.1, domelementtype@1: domelementtype@1, domelementtype@^1.3.1:
version "1.3.1" version "1.3.1"
resolved "https://registry.nlark.com/domelementtype/download/domelementtype-1.3.1.tgz" resolved "https://registry.nlark.com/domelementtype/download/domelementtype-1.3.1.tgz"
integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8= integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=
...@@ -3741,16 +3643,7 @@ domutils@^1.5.1, domutils@^1.7.0: ...@@ -3741,16 +3643,7 @@ domutils@^1.5.1, domutils@^1.7.0:
dom-serializer "0" dom-serializer "0"
domelementtype "1" domelementtype "1"
domutils@^2.5.2: domutils@^2.5.2, domutils@^2.6.0:
version "2.7.0"
resolved "https://registry.nlark.com/domutils/download/domutils-2.7.0.tgz"
integrity sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI=
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.2.0"
domhandler "^4.2.0"
domutils@^2.6.0:
version "2.7.0" version "2.7.0"
resolved "https://registry.nlark.com/domutils/download/domutils-2.7.0.tgz" resolved "https://registry.nlark.com/domutils/download/domutils-2.7.0.tgz"
integrity sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI= integrity sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI=
...@@ -3824,7 +3717,7 @@ echarts-wordcloud@^1.1.3: ...@@ -3824,7 +3717,7 @@ echarts-wordcloud@^1.1.3:
resolved "https://registry.nlark.com/echarts-wordcloud/download/echarts-wordcloud-1.1.3.tgz" resolved "https://registry.nlark.com/echarts-wordcloud/download/echarts-wordcloud-1.1.3.tgz"
integrity sha1-B7FAyLp2sZwxe0PDEPPV3Jkon/I= integrity sha1-B7FAyLp2sZwxe0PDEPPV3Jkon/I=
echarts@^4.8.0, echarts@^4.9.0, echarts@>3.0.0: echarts@^4.9.0:
version "4.9.0" version "4.9.0"
resolved "https://registry.npmjs.org/echarts/-/echarts-4.9.0.tgz" resolved "https://registry.npmjs.org/echarts/-/echarts-4.9.0.tgz"
integrity sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA== integrity sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==
...@@ -3922,7 +3815,7 @@ enhanced-resolve@^4.5.0: ...@@ -3922,7 +3815,7 @@ enhanced-resolve@^4.5.0:
memory-fs "^0.5.0" memory-fs "^0.5.0"
tapable "^1.0.0" tapable "^1.0.0"
enquirer@^2.3.5, enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3": enquirer@^2.3.5, enquirer@^2.3.6:
version "2.3.6" version "2.3.6"
resolved "https://registry.nlark.com/enquirer/download/enquirer-2.3.6.tgz" resolved "https://registry.nlark.com/enquirer/download/enquirer-2.3.6.tgz"
integrity sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00= integrity sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=
...@@ -4002,7 +3895,7 @@ escape-html@~1.0.3: ...@@ -4002,7 +3895,7 @@ escape-html@~1.0.3:
resolved "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz" resolved "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@1.0.5: escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.nlark.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz" resolved "https://registry.nlark.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
...@@ -4061,7 +3954,7 @@ eslint-visitor-keys@^2.0.0: ...@@ -4061,7 +3954,7 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz" resolved "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz"
integrity sha1-9lMoJZMFknOSyTjtROsKXJsr0wM= integrity sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=
"eslint@^6.2.0 || ^7.0.0", "eslint@>= 1.6.0", "eslint@>= 4.12.1", "eslint@>=1.6.0 <7.0.0", eslint@>=5.0.0, eslint@7.15.0: eslint@7.15.0:
version "7.15.0" version "7.15.0"
resolved "https://registry.nlark.com/eslint/download/eslint-7.15.0.tgz?cache=0&sync_timestamp=1627688614405&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint%2Fdownload%2Feslint-7.15.0.tgz" resolved "https://registry.nlark.com/eslint/download/eslint-7.15.0.tgz?cache=0&sync_timestamp=1627688614405&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint%2Fdownload%2Feslint-7.15.0.tgz"
integrity sha1-6xVfuO0IZfz12QP3a+Llts1+C8c= integrity sha1-6xVfuO0IZfz12QP3a+Llts1+C8c=
...@@ -4146,12 +4039,7 @@ estraverse@^4.1.1: ...@@ -4146,12 +4039,7 @@ estraverse@^4.1.1:
resolved "https://registry.nlark.com/estraverse/download/estraverse-4.3.0.tgz" resolved "https://registry.nlark.com/estraverse/download/estraverse-4.3.0.tgz"
integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=
estraverse@^5.1.0: estraverse@^5.1.0, estraverse@^5.2.0:
version "5.2.0"
resolved "https://registry.nlark.com/estraverse/download/estraverse-5.2.0.tgz"
integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA=
estraverse@^5.2.0:
version "5.2.0" version "5.2.0"
resolved "https://registry.nlark.com/estraverse/download/estraverse-5.2.0.tgz" resolved "https://registry.nlark.com/estraverse/download/estraverse-5.2.0.tgz"
integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA= integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA=
...@@ -4319,15 +4207,7 @@ extend-shallow@^2.0.1: ...@@ -4319,15 +4207,7 @@ extend-shallow@^2.0.1:
dependencies: dependencies:
is-extendable "^0.1.0" is-extendable "^0.1.0"
extend-shallow@^3.0.0: extend-shallow@^3.0.0, extend-shallow@^3.0.2:
version "3.0.2"
resolved "https://registry.nlark.com/extend-shallow/download/extend-shallow-3.0.2.tgz"
integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
dependencies:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
extend-shallow@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.nlark.com/extend-shallow/download/extend-shallow-3.0.2.tgz" resolved "https://registry.nlark.com/extend-shallow/download/extend-shallow-3.0.2.tgz"
integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
...@@ -4363,16 +4243,16 @@ extglob@^2.0.2, extglob@^2.0.4: ...@@ -4363,16 +4243,16 @@ extglob@^2.0.2, extglob@^2.0.4:
snapdragon "^0.8.1" snapdragon "^0.8.1"
to-regex "^3.0.1" to-regex "^3.0.1"
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.nlark.com/extsprintf/download/extsprintf-1.4.0.tgz"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
extsprintf@1.3.0: extsprintf@1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.nlark.com/extsprintf/download/extsprintf-1.3.0.tgz" resolved "https://registry.nlark.com/extsprintf/download/extsprintf-1.3.0.tgz"
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.nlark.com/extsprintf/download/extsprintf-1.4.0.tgz"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1: fast-deep-equal@^3.1.1:
version "3.1.3" version "3.1.3"
resolved "https://registry.nlark.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz" resolved "https://registry.nlark.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz"
...@@ -4431,7 +4311,7 @@ file-entry-cache@^6.0.0: ...@@ -4431,7 +4311,7 @@ file-entry-cache@^6.0.0:
dependencies: dependencies:
flat-cache "^3.0.4" flat-cache "^3.0.4"
file-loader@*, file-loader@^4.2.0: file-loader@^4.2.0:
version "4.3.0" version "4.3.0"
resolved "https://registry.nlark.com/file-loader/download/file-loader-4.3.0.tgz" resolved "https://registry.nlark.com/file-loader/download/file-loader-4.3.0.tgz"
integrity sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8= integrity sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=
...@@ -4439,15 +4319,20 @@ file-loader@*, file-loader@^4.2.0: ...@@ -4439,15 +4319,20 @@ file-loader@*, file-loader@^4.2.0:
loader-utils "^1.2.3" loader-utils "^1.2.3"
schema-utils "^2.5.0" schema-utils "^2.5.0"
file-saver@2.0.4:
version "2.0.4"
resolved "https://registry.npm.taobao.org/file-saver/download/file-saver-2.0.4.tgz?cache=0&sync_timestamp=1605790866952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-saver%2Fdownload%2Ffile-saver-2.0.4.tgz"
integrity sha1-RMQOg1MZyYNqhCIbTiVdS7TLe7U=
file-saver@^1.3.3: file-saver@^1.3.3:
version "1.3.8" version "1.3.8"
resolved "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz" resolved "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz"
integrity sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg== integrity sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==
file-saver@2.0.4: file-uri-to-path@1.0.0:
version "2.0.4" version "1.0.0"
resolved "https://registry.npm.taobao.org/file-saver/download/file-saver-2.0.4.tgz?cache=0&sync_timestamp=1605790866952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-saver%2Fdownload%2Ffile-saver-2.0.4.tgz" resolved "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha1-RMQOg1MZyYNqhCIbTiVdS7TLe7U= integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
filesize@^3.6.1: filesize@^3.6.1:
version "3.6.1" version "3.6.1"
...@@ -4471,19 +4356,6 @@ fill-range@^7.0.1: ...@@ -4471,19 +4356,6 @@ fill-range@^7.0.1:
dependencies: dependencies:
to-regex-range "^5.0.1" to-regex-range "^5.0.1"
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.2.tgz"
integrity sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=
dependencies:
debug "2.6.9"
encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.3"
statuses "~1.5.0"
unpipe "~1.0.0"
finalhandler@1.1.0: finalhandler@1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.0.tgz" resolved "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.0.tgz"
...@@ -4497,6 +4369,19 @@ finalhandler@1.1.0: ...@@ -4497,6 +4369,19 @@ finalhandler@1.1.0:
statuses "~1.3.1" statuses "~1.3.1"
unpipe "~1.0.0" unpipe "~1.0.0"
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.2.tgz"
integrity sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=
dependencies:
debug "2.6.9"
encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.3"
statuses "~1.5.0"
unpipe "~1.0.0"
find-cache-dir@^0.1.1: find-cache-dir@^0.1.1:
version "0.1.1" version "0.1.1"
resolved "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-0.1.1.tgz?cache=0&sync_timestamp=1618910407412&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-0.1.1.tgz" resolved "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-0.1.1.tgz?cache=0&sync_timestamp=1618910407412&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-0.1.1.tgz"
...@@ -4568,11 +4453,6 @@ flush-write-stream@^1.0.0: ...@@ -4568,11 +4453,6 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3" inherits "^2.0.3"
readable-stream "^2.3.6" readable-stream "^2.3.6"
follow-redirects@^1.0.0:
version "1.14.1"
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz"
integrity sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M=
follow-redirects@1.5.10: follow-redirects@1.5.10:
version "1.5.10" version "1.5.10"
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.5.10.tgz" resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.5.10.tgz"
...@@ -4580,6 +4460,11 @@ follow-redirects@1.5.10: ...@@ -4580,6 +4460,11 @@ follow-redirects@1.5.10:
dependencies: dependencies:
debug "=3.1.0" debug "=3.1.0"
follow-redirects@^1.0.0:
version "1.14.1"
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz"
integrity sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M=
for-in@^0.1.3: for-in@^0.1.3:
version "0.1.8" version "0.1.8"
resolved "https://registry.npmmirror.com/for-in/-/for-in-0.1.8.tgz" resolved "https://registry.npmmirror.com/for-in/-/for-in-0.1.8.tgz"
...@@ -4672,6 +4557,19 @@ fs.realpath@^1.0.0: ...@@ -4672,6 +4557,19 @@ fs.realpath@^1.0.0:
resolved "https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz" resolved "https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.2.7:
version "1.2.13"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
dependencies:
bindings "^1.5.0"
nan "^2.12.1"
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1: function-bind@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz" resolved "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz"
...@@ -4755,14 +4653,7 @@ glob-parent@^3.1.0: ...@@ -4755,14 +4653,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0" is-glob "^3.1.0"
path-dirname "^1.0.0" path-dirname "^1.0.0"
glob-parent@^5.0.0: glob-parent@^5.0.0, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760165717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz"
integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=
dependencies:
is-glob "^4.0.1"
glob-parent@~5.1.2:
version "5.1.2" version "5.1.2"
resolved "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760165717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz" resolved "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760165717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz"
integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=
...@@ -4975,7 +4866,7 @@ hash.js@^1.0.0, hash.js@^1.0.3: ...@@ -4975,7 +4866,7 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3" inherits "^2.0.3"
minimalistic-assert "^1.0.1" minimalistic-assert "^1.0.1"
he@^1.1.0, he@^1.1.1, he@1.2.x: he@1.2.x, he@^1.1.0, he@^1.1.1:
version "1.2.0" version "1.2.0"
resolved "https://registry.nlark.com/he/download/he-1.2.0.tgz" resolved "https://registry.nlark.com/he/download/he-1.2.0.tgz"
integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8=
...@@ -5057,7 +4948,7 @@ html-tags@^3.1.0: ...@@ -5057,7 +4948,7 @@ html-tags@^3.1.0:
resolved "https://registry.nlark.com/html-tags/download/html-tags-3.1.0.tgz" resolved "https://registry.nlark.com/html-tags/download/html-tags-3.1.0.tgz"
integrity sha1-e15vfmZen7QfMAB+2eDUHpf7IUA= integrity sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=
"html-webpack-plugin@^3.0.0 || ^4.0.0", html-webpack-plugin@^3.2.0, html-webpack-plugin@>=2.26.0: html-webpack-plugin@^3.2.0:
version "3.2.0" version "3.2.0"
resolved "https://registry.nlark.com/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&sync_timestamp=1624367726063&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz" resolved "https://registry.nlark.com/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&sync_timestamp=1624367726063&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz"
integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s=
...@@ -5097,6 +4988,17 @@ http-deceiver@^1.2.7: ...@@ -5097,6 +4988,17 @@ http-deceiver@^1.2.7:
resolved "https://registry.nlark.com/http-deceiver/download/http-deceiver-1.2.7.tgz" resolved "https://registry.nlark.com/http-deceiver/download/http-deceiver-1.2.7.tgz"
integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
http-errors@1.7.2:
version "1.7.2"
resolved "https://registry.nlark.com/http-errors/download/http-errors-1.7.2.tgz"
integrity sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=
dependencies:
depd "~1.1.2"
inherits "2.0.3"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-errors@~1.6.2: http-errors@~1.6.2:
version "1.6.3" version "1.6.3"
resolved "https://registry.nlark.com/http-errors/download/http-errors-1.6.3.tgz" resolved "https://registry.nlark.com/http-errors/download/http-errors-1.6.3.tgz"
...@@ -5118,17 +5020,6 @@ http-errors@~1.7.2: ...@@ -5118,17 +5020,6 @@ http-errors@~1.7.2:
statuses ">= 1.5.0 < 2" statuses ">= 1.5.0 < 2"
toidentifier "1.0.0" toidentifier "1.0.0"
http-errors@1.7.2:
version "1.7.2"
resolved "https://registry.nlark.com/http-errors/download/http-errors-1.7.2.tgz"
integrity sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=
dependencies:
depd "~1.1.2"
inherits "2.0.3"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-parser-js@>=0.5.1: http-parser-js@>=0.5.1:
version "0.5.3" version "0.5.3"
resolved "https://registry.nlark.com/http-parser-js/download/http-parser-js-0.5.3.tgz" resolved "https://registry.nlark.com/http-parser-js/download/http-parser-js-0.5.3.tgz"
...@@ -5172,7 +5063,7 @@ human-signals@^1.1.1: ...@@ -5172,7 +5063,7 @@ human-signals@^1.1.1:
resolved "https://registry.nlark.com/human-signals/download/human-signals-1.1.1.tgz" resolved "https://registry.nlark.com/human-signals/download/human-signals-1.1.1.tgz"
integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M= integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M=
iconv-lite@^0.4.24, iconv-lite@0.4.24: iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24" version "0.4.24"
resolved "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1621826522823&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz" resolved "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1621826522823&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz"
integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
...@@ -5277,7 +5168,7 @@ inflight@^1.0.4: ...@@ -5277,7 +5168,7 @@ inflight@^1.0.4:
once "^1.3.0" once "^1.3.0"
wrappy "1" wrappy "1"
inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4" version "2.0.4"
resolved "https://registry.nlark.com/inherits/download/inherits-2.0.4.tgz" resolved "https://registry.nlark.com/inherits/download/inherits-2.0.4.tgz"
integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
...@@ -5343,7 +5234,7 @@ ip@^1.1.0, ip@^1.1.5: ...@@ -5343,7 +5234,7 @@ ip@^1.1.0, ip@^1.1.5:
resolved "https://registry.nlark.com/ip/download/ip-1.1.5.tgz" resolved "https://registry.nlark.com/ip/download/ip-1.1.5.tgz"
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
ipaddr.js@^1.9.0, ipaddr.js@1.9.1: ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
version "1.9.1" version "1.9.1"
resolved "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz" resolved "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz"
integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=
...@@ -5684,7 +5575,7 @@ is-wsl@^2.1.1: ...@@ -5684,7 +5575,7 @@ is-wsl@^2.1.1:
dependencies: dependencies:
is-docker "^2.0.0" is-docker "^2.0.0"
isarray@^1.0.0, isarray@~1.0.0, isarray@1.0.0: isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.nlark.com/isarray/download/isarray-1.0.0.tgz" resolved "https://registry.nlark.com/isarray/download/isarray-1.0.0.tgz"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
...@@ -5699,14 +5590,7 @@ isexe@^2.0.0: ...@@ -5699,14 +5590,7 @@ isexe@^2.0.0:
resolved "https://registry.nlark.com/isexe/download/isexe-2.0.0.tgz" resolved "https://registry.nlark.com/isexe/download/isexe-2.0.0.tgz"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
isobject@^2.0.0: isobject@^2.0.0, isobject@^2.1.0:
version "2.1.0"
resolved "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz"
integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
dependencies:
isarray "1.0.0"
isobject@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz" resolved "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz"
integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
...@@ -5913,22 +5797,12 @@ kind-of@^4.0.0: ...@@ -5913,22 +5797,12 @@ kind-of@^4.0.0:
dependencies: dependencies:
is-buffer "^1.1.5" is-buffer "^1.1.5"
kind-of@^5.0.0: kind-of@^5.0.0, kind-of@^5.0.2:
version "5.1.0"
resolved "https://registry.nlark.com/kind-of/download/kind-of-5.1.0.tgz"
integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=
kind-of@^5.0.2:
version "5.1.0" version "5.1.0"
resolved "https://registry.nlark.com/kind-of/download/kind-of-5.1.0.tgz" resolved "https://registry.nlark.com/kind-of/download/kind-of-5.1.0.tgz"
integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=
kind-of@^6.0.0: kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
kind-of@^6.0.2:
version "6.0.3" version "6.0.3"
resolved "https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz" resolved "https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz"
integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=
...@@ -5957,7 +5831,7 @@ less-loader@^4.1.0: ...@@ -5957,7 +5831,7 @@ less-loader@^4.1.0:
loader-utils "^1.1.0" loader-utils "^1.1.0"
pify "^3.0.0" pify "^3.0.0"
"less@^2.3.1 || ^3.0.0", less@^3.0.4: less@^3.0.4:
version "3.13.1" version "3.13.1"
resolved "https://registry.nlark.com/less/download/less-3.13.1.tgz" resolved "https://registry.nlark.com/less/download/less-3.13.1.tgz"
integrity sha1-DryR0qDpwMZzW4PUlrCrBYMHeQk= integrity sha1-DryR0qDpwMZzW4PUlrCrBYMHeQk=
...@@ -6112,16 +5986,16 @@ lodash.uniq@^4.5.0: ...@@ -6112,16 +5986,16 @@ lodash.uniq@^4.5.0:
resolved "https://registry.nlark.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz" resolved "https://registry.nlark.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3:
version "4.17.21"
resolved "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1618910518249&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flodash%2Fdownload%2Flodash-4.17.21.tgz"
integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=
lodash@4.17.11: lodash@4.17.11:
version "4.17.11" version "4.17.11"
resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz" resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz"
integrity sha1-s56mIp72B+zYniyN8SU2iRysm40= integrity sha1-s56mIp72B+zYniyN8SU2iRysm40=
lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3:
version "4.17.21"
resolved "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1618910518249&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flodash%2Fdownload%2Flodash-4.17.21.tgz"
integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=
log-symbols@^2.2.0: log-symbols@^2.2.0:
version "2.2.0" version "2.2.0"
resolved "https://registry.nlark.com/log-symbols/download/log-symbols-2.2.0.tgz" resolved "https://registry.nlark.com/log-symbols/download/log-symbols-2.2.0.tgz"
...@@ -6185,16 +6059,9 @@ make-dir@^2.0.0, make-dir@^2.1.0: ...@@ -6185,16 +6059,9 @@ make-dir@^2.0.0, make-dir@^2.1.0:
integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=
dependencies: dependencies:
pify "^4.0.1" pify "^4.0.1"
semver "^5.6.0" semver "^5.6.0"
make-dir@^3.0.2:
version "3.1.0"
resolved "https://registry.nlark.com/make-dir/download/make-dir-3.1.0.tgz"
integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=
dependencies:
semver "^6.0.0"
make-dir@^3.1.0: make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.nlark.com/make-dir/download/make-dir-3.1.0.tgz" resolved "https://registry.nlark.com/make-dir/download/make-dir-3.1.0.tgz"
integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=
...@@ -6305,6 +6172,25 @@ microcli@1.3.3: ...@@ -6305,6 +6172,25 @@ microcli@1.3.3:
lodash "4.17.11" lodash "4.17.11"
microargs "1.1.2" microargs "1.1.2"
micromatch@3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.0.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.0.tgz"
integrity sha1-UQLU6vILaZfWAI46z+HESj+oFeI=
dependencies:
arr-diff "^4.0.0"
array-unique "^0.3.2"
braces "^2.2.2"
define-property "^1.0.0"
extend-shallow "^2.0.1"
extglob "^2.0.2"
fragment-cache "^0.2.1"
kind-of "^5.0.2"
nanomatch "^1.2.1"
object.pick "^1.3.0"
regex-not "^1.0.0"
snapdragon "^0.8.1"
to-regex "^3.0.1"
micromatch@^3.1.10, micromatch@^3.1.4: micromatch@^3.1.10, micromatch@^3.1.4:
version "3.1.10" version "3.1.10"
resolved "https://registry.nlark.com/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618910283285&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz" resolved "https://registry.nlark.com/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618910283285&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz"
...@@ -6332,25 +6218,6 @@ micromatch@^4.0.2: ...@@ -6332,25 +6218,6 @@ micromatch@^4.0.2:
braces "^3.0.1" braces "^3.0.1"
picomatch "^2.2.3" picomatch "^2.2.3"
micromatch@3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.0.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.0.tgz"
integrity sha1-UQLU6vILaZfWAI46z+HESj+oFeI=
dependencies:
arr-diff "^4.0.0"
array-unique "^0.3.2"
braces "^2.2.2"
define-property "^1.0.0"
extend-shallow "^2.0.1"
extglob "^2.0.2"
fragment-cache "^0.2.1"
kind-of "^5.0.2"
nanomatch "^1.2.1"
object.pick "^1.3.0"
regex-not "^1.0.0"
snapdragon "^0.8.1"
to-regex "^3.0.1"
miller-rabin@^4.0.0: miller-rabin@^4.0.0:
version "4.0.1" version "4.0.1"
resolved "https://registry.nlark.com/miller-rabin/download/miller-rabin-4.0.1.tgz" resolved "https://registry.nlark.com/miller-rabin/download/miller-rabin-4.0.1.tgz"
...@@ -6359,7 +6226,7 @@ miller-rabin@^4.0.0: ...@@ -6359,7 +6226,7 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0" bn.js "^4.0.0"
brorand "^1.0.1" brorand "^1.0.1"
"mime-db@>= 1.43.0 < 2", mime-db@1.49.0: mime-db@1.49.0, "mime-db@>= 1.43.0 < 2":
version "1.49.0" version "1.49.0"
resolved "https://registry.nlark.com/mime-db/download/mime-db-1.49.0.tgz" resolved "https://registry.nlark.com/mime-db/download/mime-db-1.49.0.tgz"
integrity sha1-89/eYMmenPO8lwHWh3ePU3ABy+0= integrity sha1-89/eYMmenPO8lwHWh3ePU3ABy+0=
...@@ -6371,7 +6238,7 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: ...@@ -6371,7 +6238,7 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
dependencies: dependencies:
mime-db "1.49.0" mime-db "1.49.0"
mime@^1.4.1, mime@1.6.0: mime@1.6.0, mime@^1.4.1:
version "1.6.0" version "1.6.0"
resolved "https://registry.nlark.com/mime/download/mime-1.6.0.tgz" resolved "https://registry.nlark.com/mime/download/mime-1.6.0.tgz"
integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=
...@@ -6512,11 +6379,6 @@ move-concurrently@^1.0.1: ...@@ -6512,11 +6379,6 @@ move-concurrently@^1.0.1:
rimraf "^2.5.4" rimraf "^2.5.4"
run-queue "^1.0.3" run-queue "^1.0.3"
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.nlark.com/ms/download/ms-2.1.3.tgz"
integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=
ms@2.0.0: ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.nlark.com/ms/download/ms-2.0.0.tgz" resolved "https://registry.nlark.com/ms/download/ms-2.0.0.tgz"
...@@ -6532,6 +6394,11 @@ ms@2.1.2: ...@@ -6532,6 +6394,11 @@ ms@2.1.2:
resolved "https://registry.nlark.com/ms/download/ms-2.1.2.tgz" resolved "https://registry.nlark.com/ms/download/ms-2.1.2.tgz"
integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.nlark.com/ms/download/ms-2.1.3.tgz"
integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=
multicast-dns-service-types@^1.1.0: multicast-dns-service-types@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.nlark.com/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz" resolved "https://registry.nlark.com/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz"
...@@ -6559,6 +6426,11 @@ mz@^2.4.0: ...@@ -6559,6 +6426,11 @@ mz@^2.4.0:
object-assign "^4.0.1" object-assign "^4.0.1"
thenify-all "^1.0.0" thenify-all "^1.0.0"
nan@^2.12.1:
version "2.17.0"
resolved "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
nanoid@^3.1.23: nanoid@^3.1.23:
version "3.1.23" version "3.1.23"
resolved "https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz" resolved "https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz"
...@@ -6700,11 +6572,6 @@ normalize-range@^0.1.2: ...@@ -6700,11 +6572,6 @@ normalize-range@^0.1.2:
resolved "https://registry.nlark.com/normalize-range/download/normalize-range-0.1.2.tgz" resolved "https://registry.nlark.com/normalize-range/download/normalize-range-0.1.2.tgz"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
normalize-url@^3.0.0:
version "3.3.0"
resolved "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz"
integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk=
normalize-url@1.9.1: normalize-url@1.9.1:
version "1.9.1" version "1.9.1"
resolved "https://registry.nlark.com/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz" resolved "https://registry.nlark.com/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz"
...@@ -6715,6 +6582,11 @@ normalize-url@1.9.1: ...@@ -6715,6 +6582,11 @@ normalize-url@1.9.1:
query-string "^4.1.0" query-string "^4.1.0"
sort-keys "^1.0.0" sort-keys "^1.0.0"
normalize-url@^3.0.0:
version "3.3.0"
resolved "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz"
integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk=
normalize-wheel@^1.0.1: normalize-wheel@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.nlark.com/normalize-wheel/download/normalize-wheel-1.0.1.tgz" resolved "https://registry.nlark.com/normalize-wheel/download/normalize-wheel-1.0.1.tgz"
...@@ -7143,12 +7015,7 @@ path-key@^2.0.0, path-key@^2.0.1: ...@@ -7143,12 +7015,7 @@ path-key@^2.0.0, path-key@^2.0.1:
resolved "https://registry.nlark.com/path-key/download/path-key-2.0.1.tgz" resolved "https://registry.nlark.com/path-key/download/path-key-2.0.1.tgz"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-key@^3.0.0: path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.nlark.com/path-key/download/path-key-3.1.1.tgz"
integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=
path-key@^3.1.0:
version "3.1.1" version "3.1.1"
resolved "https://registry.nlark.com/path-key/download/path-key-3.1.1.tgz" resolved "https://registry.nlark.com/path-key/download/path-key-3.1.1.tgz"
integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=
...@@ -7603,12 +7470,7 @@ postcss-value-parser@^3.0.0: ...@@ -7603,12 +7470,7 @@ postcss-value-parser@^3.0.0:
resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz" resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz"
integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE= integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE=
postcss-value-parser@^4.0.2: postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
version "4.1.0"
resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz"
integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss=
postcss-value-parser@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz" resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz"
integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss= integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss=
...@@ -7792,6 +7654,11 @@ pumpify@^1.3.3: ...@@ -7792,6 +7654,11 @@ pumpify@^1.3.3:
inherits "^2.0.3" inherits "^2.0.3"
pump "^2.0.0" pump "^2.0.0"
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.nlark.com/punycode/download/punycode-1.3.2.tgz"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
punycode@^1.2.4: punycode@^1.2.4:
version "1.4.1" version "1.4.1"
resolved "https://registry.nlark.com/punycode/download/punycode-1.4.1.tgz" resolved "https://registry.nlark.com/punycode/download/punycode-1.4.1.tgz"
...@@ -7802,11 +7669,6 @@ punycode@^2.1.0, punycode@^2.1.1: ...@@ -7802,11 +7669,6 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz" resolved "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz"
integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew=
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.nlark.com/punycode/download/punycode-1.3.2.tgz"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
q@^1.1.2: q@^1.1.2:
version "1.5.1" version "1.5.1"
resolved "https://registry.nlark.com/q/download/q-1.5.1.tgz" resolved "https://registry.nlark.com/q/download/q-1.5.1.tgz"
...@@ -7825,16 +7687,16 @@ qrcode@^1.4.4: ...@@ -7825,16 +7687,16 @@ qrcode@^1.4.4:
pngjs "^3.3.0" pngjs "^3.3.0"
yargs "^13.2.4" yargs "^13.2.4"
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.nlark.com/qs/download/qs-6.5.2.tgz"
integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
qs@6.7.0: qs@6.7.0:
version "6.7.0" version "6.7.0"
resolved "https://registry.nlark.com/qs/download/qs-6.7.0.tgz" resolved "https://registry.nlark.com/qs/download/qs-6.7.0.tgz"
integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw= integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.nlark.com/qs/download/qs-6.5.2.tgz"
integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
query-string@^4.1.0, query-string@^4.3.2: query-string@^4.1.0, query-string@^4.3.2:
version "4.3.4" version "4.3.4"
resolved "https://registry.nlark.com/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1624297110017&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz" resolved "https://registry.nlark.com/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1624297110017&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz"
...@@ -7924,7 +7786,7 @@ read-pkg@^5.1.1: ...@@ -7924,7 +7786,7 @@ read-pkg@^5.1.1:
parse-json "^5.0.0" parse-json "^5.0.0"
type-fest "^0.6.0" type-fest "^0.6.0"
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6, "readable-stream@1 || 2": "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7" version "2.3.7"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz" resolved "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz"
integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=
...@@ -7937,25 +7799,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable ...@@ -7937,25 +7799,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable
string_decoder "~1.1.1" string_decoder "~1.1.1"
util-deprecate "~1.0.1" util-deprecate "~1.0.1"
readable-stream@^3.0.6: readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg=
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
readable-stream@^3.1.1:
version "3.6.0"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg=
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
readable-stream@^3.6.0:
version "3.6.0" version "3.6.0"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz" resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg=
...@@ -8248,20 +8092,15 @@ rxjs@^6.6.0, rxjs@^6.6.7: ...@@ -8248,20 +8092,15 @@ rxjs@^6.6.0, rxjs@^6.6.7:
dependencies: dependencies:
tslib "^1.9.0" tslib "^1.9.0"
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0: safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.2.1"
resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.2.1.tgz"
integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2" version "5.1.2"
resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz" resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz"
integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
safe-buffer@5.1.2: safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
version "5.1.2" version "5.2.1"
resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz" resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.2.1.tgz"
integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=
safe-regex@^1.1.0: safe-regex@^1.1.0:
version "1.1.0" version "1.1.0"
...@@ -8270,7 +8109,7 @@ safe-regex@^1.1.0: ...@@ -8270,7 +8109,7 @@ safe-regex@^1.1.0:
dependencies: dependencies:
ret "~0.1.10" ret "~0.1.10"
safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0: "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2" version "2.1.2"
resolved "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz" resolved "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz"
integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo= integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=
...@@ -8308,43 +8147,7 @@ schema-utils@^1.0.0: ...@@ -8308,43 +8147,7 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0" ajv-errors "^1.0.0"
ajv-keywords "^3.1.0" ajv-keywords "^3.1.0"
schema-utils@^2.0.0: schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.5.0:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.6.5:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.6.6:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.7.0:
version "2.7.1" version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz" resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc= integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
...@@ -8394,45 +8197,28 @@ semver-compare@^1.0.0: ...@@ -8394,45 +8197,28 @@ semver-compare@^1.0.0:
resolved "https://registry.nlark.com/semver-compare/download/semver-compare-1.0.0.tgz" resolved "https://registry.nlark.com/semver-compare/download/semver-compare-1.0.0.tgz"
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
semver@^5.5.0: "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
version "5.7.1" version "5.7.1"
resolved "https://registry.nlark.com/semver/download/semver-5.7.1.tgz" resolved "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
semver@^5.6.0: semver@7.0.0:
version "5.7.1" version "7.0.0"
resolved "https://registry.nlark.com/semver/download/semver-5.7.1.tgz" resolved "https://registry.nlark.com/semver/download/semver-7.0.0.tgz"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc= integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=
semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
version "6.3.0" version "6.3.0"
resolved "https://registry.nlark.com/semver/download/semver-6.3.0.tgz" resolved "https://registry.nlark.com/semver/download/semver-6.3.0.tgz"
integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0= integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=
semver@^7.2.1: semver@^7.2.1, semver@^7.3.2:
version "7.3.5"
resolved "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1618910479221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz"
integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=
dependencies:
lru-cache "^6.0.0"
semver@^7.3.2:
version "7.3.5" version "7.3.5"
resolved "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1618910479221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz" resolved "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1618910479221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz"
integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc= integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=
dependencies: dependencies:
lru-cache "^6.0.0" lru-cache "^6.0.0"
"semver@2 || 3 || 4 || 5":
version "5.7.1"
resolved "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
semver@7.0.0:
version "7.0.0"
resolved "https://registry.nlark.com/semver/download/semver-7.0.0.tgz"
integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=
send@0.17.1: send@0.17.1:
version "0.17.1" version "0.17.1"
resolved "https://registry.nlark.com/send/download/send-0.17.1.tgz" resolved "https://registry.nlark.com/send/download/send-0.17.1.tgz"
...@@ -8713,12 +8499,7 @@ source-map-url@^0.4.0: ...@@ -8713,12 +8499,7 @@ source-map-url@^0.4.0:
resolved "https://registry.nlark.com/source-map-url/download/source-map-url-0.4.1.tgz" resolved "https://registry.nlark.com/source-map-url/download/source-map-url-0.4.1.tgz"
integrity sha1-CvZmBadFpaL5HPG7+KevvCg97FY= integrity sha1-CvZmBadFpaL5HPG7+KevvCg97FY=
source-map@^0.5.0: source-map@^0.5.0, source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.5.6:
version "0.5.7" version "0.5.7"
resolved "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz" resolved "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
...@@ -8891,20 +8672,6 @@ strict-uri-encode@^1.0.0: ...@@ -8891,20 +8672,6 @@ strict-uri-encode@^1.0.0:
resolved "https://registry.nlark.com/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz" resolved "https://registry.nlark.com/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz"
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.3.0.tgz"
integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=
dependencies:
safe-buffer "~5.2.0"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz"
integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=
dependencies:
safe-buffer "~5.1.0"
string-argv@0.3.1: string-argv@0.3.1:
version "0.3.1" version "0.3.1"
resolved "https://registry.npm.taobao.org/string-argv/download/string-argv-0.3.1.tgz" resolved "https://registry.npm.taobao.org/string-argv/download/string-argv-0.3.1.tgz"
...@@ -8952,6 +8719,20 @@ string.prototype.trimstart@^1.0.4: ...@@ -8952,6 +8719,20 @@ string.prototype.trimstart@^1.0.4:
call-bind "^1.0.2" call-bind "^1.0.2"
define-properties "^1.1.3" define-properties "^1.1.3"
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.3.0.tgz"
integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=
dependencies:
safe-buffer "~5.2.0"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz"
integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=
dependencies:
safe-buffer "~5.1.0"
stringify-object@^3.3.0: stringify-object@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz" resolved "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz"
...@@ -8961,14 +8742,7 @@ stringify-object@^3.3.0: ...@@ -8961,14 +8742,7 @@ stringify-object@^3.3.0:
is-obj "^1.0.1" is-obj "^1.0.1"
is-regexp "^1.0.0" is-regexp "^1.0.0"
strip-ansi@^3.0.0: strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz" resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
...@@ -8982,14 +8756,7 @@ strip-ansi@^4.0.0: ...@@ -8982,14 +8756,7 @@ strip-ansi@^4.0.0:
dependencies: dependencies:
ansi-regex "^3.0.0" ansi-regex "^3.0.0"
strip-ansi@^5: strip-ansi@^5, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz"
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
dependencies:
ansi-regex "^4.1.0"
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0" version "5.2.0"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz" resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz"
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
...@@ -9226,11 +8993,6 @@ throttle-debounce@^1.0.1: ...@@ -9226,11 +8993,6 @@ throttle-debounce@^1.0.1:
resolved "https://registry.nlark.com/throttle-debounce/download/throttle-debounce-1.1.0.tgz" resolved "https://registry.nlark.com/throttle-debounce/download/throttle-debounce-1.1.0.tgz"
integrity sha1-UYU9o3vmihVctugns1FKPEIuic0= integrity sha1-UYU9o3vmihVctugns1FKPEIuic0=
through@^2.3.6, through@^2.3.8:
version "2.3.8"
resolved "https://registry.nlark.com/through/download/through-2.3.8.tgz"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
through2@^2.0.0: through2@^2.0.0:
version "2.0.5" version "2.0.5"
resolved "https://registry.nlark.com/through2/download/through2-2.0.5.tgz" resolved "https://registry.nlark.com/through2/download/through2-2.0.5.tgz"
...@@ -9239,6 +9001,11 @@ through2@^2.0.0: ...@@ -9239,6 +9001,11 @@ through2@^2.0.0:
readable-stream "~2.3.6" readable-stream "~2.3.6"
xtend "~4.0.1" xtend "~4.0.1"
through@^2.3.6, through@^2.3.8:
version "2.3.8"
resolved "https://registry.nlark.com/through/download/through-2.3.8.tgz"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
thunky@^1.0.2: thunky@^1.0.2:
version "1.1.0" version "1.1.0"
resolved "https://registry.nlark.com/thunky/download/thunky-1.1.0.tgz" resolved "https://registry.nlark.com/thunky/download/thunky-1.1.0.tgz"
...@@ -9490,7 +9257,7 @@ universalify@^0.1.0: ...@@ -9490,7 +9257,7 @@ universalify@^0.1.0:
resolved "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz" resolved "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz"
integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=
unpipe@~1.0.0, unpipe@1.0.0: unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.nlark.com/unpipe/download/unpipe-1.0.0.tgz" resolved "https://registry.nlark.com/unpipe/download/unpipe-1.0.0.tgz"
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
...@@ -9579,6 +9346,14 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: ...@@ -9579,6 +9346,14 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
resolved "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz" resolved "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
util.promisify@1.0.0:
version "1.0.0"
resolved "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.0.tgz"
integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=
dependencies:
define-properties "^1.1.2"
object.getownpropertydescriptors "^2.0.3"
util.promisify@~1.0.0: util.promisify@~1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.1.tgz" resolved "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.1.tgz"
...@@ -9589,13 +9364,12 @@ util.promisify@~1.0.0: ...@@ -9589,13 +9364,12 @@ util.promisify@~1.0.0:
has-symbols "^1.0.1" has-symbols "^1.0.1"
object.getownpropertydescriptors "^2.1.0" object.getownpropertydescriptors "^2.1.0"
util.promisify@1.0.0: util@0.10.3:
version "1.0.0" version "0.10.3"
resolved "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.0.tgz" resolved "https://registry.nlark.com/util/download/util-0.10.3.tgz"
integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA= integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
dependencies: dependencies:
define-properties "^1.1.2" inherits "2.0.1"
object.getownpropertydescriptors "^2.0.3"
util@^0.11.0: util@^0.11.0:
version "0.11.1" version "0.11.1"
...@@ -9604,13 +9378,6 @@ util@^0.11.0: ...@@ -9604,13 +9378,6 @@ util@^0.11.0:
dependencies: dependencies:
inherits "2.0.3" inherits "2.0.3"
util@0.10.3:
version "0.10.3"
resolved "https://registry.nlark.com/util/download/util-0.10.3.tgz"
integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
dependencies:
inherits "2.0.1"
utila@~0.4: utila@~0.4:
version "0.4.0" version "0.4.0"
resolved "https://registry.nlark.com/utila/download/utila-0.4.0.tgz" resolved "https://registry.nlark.com/utila/download/utila-0.4.0.tgz"
...@@ -9752,7 +9519,7 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.2: ...@@ -9752,7 +9519,7 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
hash-sum "^1.0.2" hash-sum "^1.0.2"
loader-utils "^1.0.2" loader-utils "^1.0.2"
vue-template-compiler@^2.0.0, vue-template-compiler@^2.6.14: vue-template-compiler@^2.6.14:
version "2.6.14" version "2.6.14"
resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz" resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz"
integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g== integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==
...@@ -9765,16 +9532,16 @@ vue-template-es2015-compiler@^1.9.0: ...@@ -9765,16 +9532,16 @@ vue-template-es2015-compiler@^1.9.0:
resolved "https://registry.nlark.com/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz" resolved "https://registry.nlark.com/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz"
integrity sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU= integrity sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=
vue@*, "vue@^2 || ^3.0.0-0", vue@^2.0.0, vue@^2.2.0, vue@^2.5.17, vue@^2.5.4, vue@^2.6.0, vue@^2.6.14, vue@>2.0.0:
version "2.6.14"
resolved "https://registry.nlark.com/vue/download/vue-2.6.14.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue%2Fdownload%2Fvue-2.6.14.tgz"
integrity sha1-5RqlJQJQ1Wmj+606ilpofWA24jU=
vue2-org-tree@^1.3.5: vue2-org-tree@^1.3.5:
version "1.3.5" version "1.3.5"
resolved "https://registry.npm.taobao.org/vue2-org-tree/download/vue2-org-tree-1.3.5.tgz" resolved "https://registry.npm.taobao.org/vue2-org-tree/download/vue2-org-tree-1.3.5.tgz"
integrity sha1-RGpSjCMTo5tTIKEbMIORbbi13GI= integrity sha1-RGpSjCMTo5tTIKEbMIORbbi13GI=
vue@^2.6.14:
version "2.6.14"
resolved "https://registry.nlark.com/vue/download/vue-2.6.14.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue%2Fdownload%2Fvue-2.6.14.tgz"
integrity sha1-5RqlJQJQ1Wmj+606ilpofWA24jU=
vuex@3.6.0: vuex@3.6.0:
version "3.6.0" version "3.6.0"
resolved "https://registry.nlark.com/vuex/download/vuex-3.6.0.tgz" resolved "https://registry.nlark.com/vuex/download/vuex-3.6.0.tgz"
...@@ -9926,7 +9693,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- ...@@ -9926,7 +9693,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-
source-list-map "^2.0.0" source-list-map "^2.0.0"
source-map "~0.6.1" source-map "~0.6.1"
"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", webpack@^4.0.0, "webpack@^4.0.0 || ^5.0.0", webpack@^4.4.0, webpack@>=2, "webpack@>=2.0.0 <5.0.0", webpack@>=4.0.0: webpack@^4.0.0:
version "4.46.0" version "4.46.0"
resolved "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1627568684063&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz" resolved "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1627568684063&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz"
integrity sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI= integrity sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=
...@@ -9955,7 +9722,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- ...@@ -9955,7 +9722,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-
watchpack "^1.7.4" watchpack "^1.7.4"
webpack-sources "^1.4.1" webpack-sources "^1.4.1"
websocket-driver@^0.7.4, websocket-driver@>=0.5.1: websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
version "0.7.4" version "0.7.4"
resolved "https://registry.nlark.com/websocket-driver/download/websocket-driver-0.7.4.tgz" resolved "https://registry.nlark.com/websocket-driver/download/websocket-driver-0.7.4.tgz"
integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A= integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=
...@@ -10162,7 +9929,7 @@ yorkie@^2.0.0: ...@@ -10162,7 +9929,7 @@ yorkie@^2.0.0:
normalize-path "^1.0.0" normalize-path "^1.0.0"
strip-indent "^2.0.0" strip-indent "^2.0.0"
zrender@^4.3.1, zrender@4.3.2: zrender@4.3.2:
version "4.3.2" version "4.3.2"
resolved "https://registry.nlark.com/zrender/download/zrender-4.3.2.tgz" resolved "https://registry.nlark.com/zrender/download/zrender-4.3.2.tgz"
integrity sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY= integrity sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY=
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
<profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret> <profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret>
<profiles.dingtalk.domain>https://oapi.dingtalk.com</profiles.dingtalk.domain> <profiles.dingtalk.domain>https://oapi.dingtalk.com</profiles.dingtalk.domain>
<profiles.dingtalk.oaUrl>api.dingtalk.com</profiles.dingtalk.oaUrl>
<profiles.dingtalk.agentId>2652674890</profiles.dingtalk.agentId> <profiles.dingtalk.agentId>2652674890</profiles.dingtalk.agentId>
<profiles.dingtalk.appKey>dingpqzradgfr4efdi2j</profiles.dingtalk.appKey> <profiles.dingtalk.appKey>dingpqzradgfr4efdi2j</profiles.dingtalk.appKey>
<profiles.dingtalk.appSecret>bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd</profiles.dingtalk.appSecret> <profiles.dingtalk.appSecret>bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd</profiles.dingtalk.appSecret>
...@@ -98,6 +99,7 @@ ...@@ -98,6 +99,7 @@
<profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret> <profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret>
<profiles.dingtalk.domain>http://172.15.28.113:8918</profiles.dingtalk.domain> <profiles.dingtalk.domain>http://172.15.28.113:8918</profiles.dingtalk.domain>
<profiles.dingtalk.oaUrl>172.15.28.113:8919</profiles.dingtalk.oaUrl>
<profiles.dingtalk.agentId>2652674890</profiles.dingtalk.agentId> <profiles.dingtalk.agentId>2652674890</profiles.dingtalk.agentId>
<profiles.dingtalk.appKey>dingpqzradgfr4efdi2j</profiles.dingtalk.appKey> <profiles.dingtalk.appKey>dingpqzradgfr4efdi2j</profiles.dingtalk.appKey>
<profiles.dingtalk.appSecret>bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd</profiles.dingtalk.appSecret> <profiles.dingtalk.appSecret>bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd</profiles.dingtalk.appSecret>
......
...@@ -158,11 +158,12 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -158,11 +158,12 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
homeStatInfo.setTotalDeptNum(totalDeptNum); homeStatInfo.setTotalDeptNum(totalDeptNum);
//todo //todo
homeStatInfo.setAttendRadio(new BigDecimal(91.00)); homeStatInfo.setAttendRadio(new BigDecimal(98.00));
homeStatInfo.setLevealPersonNum(6); homeStatInfo.setLevealPersonNum(6);
homeStatInfo.setLatePersonNum(2); homeStatInfo.setLatePersonNum(2);
homeStatInfo.setLeftEarlyPersonNum(1); homeStatInfo.setLeftEarlyPersonNum(1);
homeStatInfo.setMissCardPersonNum(0); homeStatInfo.setMissCardPersonNum(23);
homeStatInfo.setAttendPersonNum(426);
data.put("homeStat", homeStatInfo); data.put("homeStat", homeStatInfo);
data.put("token", token); data.put("token", token);
......
...@@ -19,8 +19,6 @@ public abstract class BaseReq implements Serializable { ...@@ -19,8 +19,6 @@ public abstract class BaseReq implements Serializable {
*/ */
private Integer size; private Integer size;
/** /**
* 工号 * 工号
*/ */
......
...@@ -16,7 +16,9 @@ import com.mortals.xhx.base.system.user.model.UserEntity; ...@@ -16,7 +16,9 @@ import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserQuery; import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.module.dept.model.DeptEntity; import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptPerformStatEntity;
import com.mortals.xhx.module.dept.model.DeptQuery; import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptPerformStatService;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.hik.face.model.req.img.ImgReq; import com.mortals.xhx.module.hik.face.model.req.img.ImgReq;
import com.mortals.xhx.module.hik.face.service.IHikFaceService; import com.mortals.xhx.module.hik.face.service.IHikFaceService;
...@@ -26,10 +28,8 @@ import com.mortals.xhx.module.perform.model.PerformPerposeStaffStatEntity; ...@@ -26,10 +28,8 @@ import com.mortals.xhx.module.perform.model.PerformPerposeStaffStatEntity;
import com.mortals.xhx.module.perform.service.PerformPerposeDeptStatService; import com.mortals.xhx.module.perform.service.PerformPerposeDeptStatService;
import com.mortals.xhx.module.perform.service.PerformPerposeStaffService; import com.mortals.xhx.module.perform.service.PerformPerposeStaffService;
import com.mortals.xhx.module.perform.service.PerformPerposeStaffStatService; import com.mortals.xhx.module.perform.service.PerformPerposeStaffStatService;
import com.mortals.xhx.module.staff.model.StaffEntity; import com.mortals.xhx.module.staff.model.*;
import com.mortals.xhx.module.staff.model.StaffPerformSummaryEntity; import com.mortals.xhx.module.staff.service.StaffPerformStatService;
import com.mortals.xhx.module.staff.model.StaffPerformSummaryQuery;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffPerformSummaryService; import com.mortals.xhx.module.staff.service.StaffPerformSummaryService;
import com.mortals.xhx.module.staff.service.StaffService; import com.mortals.xhx.module.staff.service.StaffService;
import com.mortals.xhx.module.workman.model.WorkmanEntity; import com.mortals.xhx.module.workman.model.WorkmanEntity;
...@@ -80,7 +80,10 @@ public class MockDataController { ...@@ -80,7 +80,10 @@ public class MockDataController {
private PerformPerposeDeptStatService perposeDeptStatService; private PerformPerposeDeptStatService perposeDeptStatService;
@Autowired @Autowired
private StaffPerformSummaryService summaryService; private StaffPerformSummaryService summaryService;
@Autowired
private StaffPerformStatService staffPerformStatService;
@Autowired
private DeptPerformStatService deptPerformStatService;
/** /**
* 生成模拟数据 * 生成模拟数据
...@@ -196,15 +199,15 @@ public class MockDataController { ...@@ -196,15 +199,15 @@ public class MockDataController {
statEntity.setWorkNum(item.getWorkNum()); statEntity.setWorkNum(item.getWorkNum());
statEntity.setDeptId(item.getDeptId()); statEntity.setDeptId(item.getDeptId());
statEntity.setDeptName(item.getDeptName()); statEntity.setDeptName(item.getDeptName());
BigDecimal attendScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal attendScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal reviewScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal complainScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal goworkScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal effectScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal otherScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal errorScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING); BigDecimal errorScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal totalScore =attendScore.add(reviewScore).add(complainScore).add(goworkScore).add(effectScore).add(otherScore).add(errorScore); BigDecimal totalScore = attendScore.add(reviewScore).add(complainScore).add(goworkScore).add(effectScore).add(otherScore).add(errorScore);
statEntity.setAttendScore(attendScore); statEntity.setAttendScore(attendScore);
statEntity.setReviewScore(reviewScore); statEntity.setReviewScore(reviewScore);
...@@ -228,6 +231,159 @@ public class MockDataController { ...@@ -228,6 +231,159 @@ public class MockDataController {
} }
/**
* 生成模拟数据
* mortals_xhx_staff_perform_stat
*
* @return
*/
@GetMapping("randomStaffPerformStatData")
@UnAuth
public Rest<Void> randomStaffPerformStatData() {
List<StaffEntity> cacheList = staffService.getCacheList();
//最近两月模拟数据
DateTime beforeStartDate = DateUtil.offsetDay(new Date(), -60);
for (int i = 1; i <= 60; i++) {
DateTime curDate = DateUtil.offsetDay(beforeStartDate, i);
List<StaffPerformStatEntity> collect = cacheList.stream().map(item -> {
StaffPerformStatEntity statEntity = new StaffPerformStatEntity();
statEntity.initAttrValue();
statEntity.setStaffId(item.getId());
statEntity.setStaffName(item.getName());
BigDecimal attendScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal attendScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
statEntity.setAttendScoreAdd(attendScoreAdd);
statEntity.setAttendScoreSub(attendScoreSub);
statEntity.setReviewScoreAdd(reviewScoreAdd);
statEntity.setReviewScoreSub(reviewScoreSub);
statEntity.setComplainScoreAdd(complainScoreAdd);
statEntity.setComplainScoreSub(complainScoreSub);
statEntity.setGoworkScoreAdd(goworkScoreAdd);
statEntity.setGoworkScoreSub(goworkScoreSub);
statEntity.setEffectScoreAdd(effectScoreAdd);
statEntity.setEffectScoreSub(effectScoreSub);
statEntity.setOtherScoreAdd(otherScoreAdd);
statEntity.setOtherScoreSub(otherScoreSub);
BigDecimal totalScoreAdd = attendScoreAdd.add(reviewScoreAdd).add(complainScoreAdd)
.add(goworkScoreAdd).add(effectScoreAdd).add(otherScoreAdd);
BigDecimal totalScoreSub = attendScoreSub.add(reviewScoreSub).add(complainScoreSub)
.add(goworkScoreSub).add(effectScoreSub).add(otherScoreSub);
statEntity.setTotalAddScore(totalScoreAdd);
statEntity.setTotalSubScore(totalScoreSub);
BigDecimal subtract = statEntity.getTotalAddScore().subtract(statEntity.getTotalSubScore());
statEntity.setTotalScore(subtract.compareTo(BigDecimal.ZERO) > 0 ? subtract : BigDecimal.ZERO);
statEntity.setYear(DateUtil.year(curDate));
statEntity.setMonth(DateUtil.month(curDate) + 1);
statEntity.setDay(DateUtil.dayOfMonth(curDate));
return statEntity;
}).collect(Collectors.toList());
staffPerformStatService.save(collect);
}
return Rest.ok();
}
/**
* 生成模拟数据
* mortals_xhx_dept_perform_stat
*
* @return
*/
@GetMapping("randomDeptPerformStatData")
@UnAuth
public Rest<Void> randomDeptPerformStatData() {
List<DeptEntity> deptEntityList = deptService.find(new DeptQuery());
//最近两月模拟数据
DateTime beforeStartDate = DateUtil.offsetDay(new Date(), -60);
for (int i = 1; i <= 60; i++) {
DateTime curDate = DateUtil.offsetDay(beforeStartDate, i);
List<DeptPerformStatEntity> collect = deptEntityList.stream().map(item -> {
DeptPerformStatEntity statEntity = new DeptPerformStatEntity();
statEntity.initAttrValue();
statEntity.setDeptId(item.getId());
statEntity.setDeptName(item.getDeptName());
int personNum = staffService.count(new StaffQuery().deptId(item.getId()), null);
BigDecimal attendScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal attendScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
statEntity.setAttendScoreAdd(attendScoreAdd);
statEntity.setAttendScoreSub(attendScoreSub);
statEntity.setReviewScoreAdd(reviewScoreAdd);
statEntity.setReviewScoreSub(reviewScoreSub);
statEntity.setComplainScoreAdd(complainScoreAdd);
statEntity.setComplainScoreSub(complainScoreSub);
statEntity.setGoworkScoreAdd(goworkScoreAdd);
statEntity.setGoworkScoreSub(goworkScoreSub);
statEntity.setEffectScoreAdd(effectScoreAdd);
statEntity.setEffectScoreSub(effectScoreSub);
statEntity.setOtherScoreAdd(otherScoreAdd);
statEntity.setOtherScoreSub(otherScoreSub);
BigDecimal totalScoreAdd = attendScoreAdd.add(reviewScoreAdd).add(complainScoreAdd)
.add(goworkScoreAdd).add(effectScoreAdd).add(otherScoreAdd);
BigDecimal totalScoreSub = attendScoreSub.add(reviewScoreSub).add(complainScoreSub)
.add(goworkScoreSub).add(effectScoreSub).add(otherScoreSub);
statEntity.setTotalAddScore(totalScoreAdd);
statEntity.setTotalSubScore(totalScoreSub);
BigDecimal subtract = statEntity.getTotalAddScore().subtract(statEntity.getTotalSubScore());
statEntity.setTotalScore(subtract.compareTo(BigDecimal.ZERO) > 0 ? subtract : BigDecimal.ZERO);
if (personNum > 0) {
BigDecimal aver = statEntity.getTotalScore().divide(new BigDecimal(personNum), 2, BigDecimal.ROUND_CEILING);
statEntity.setAverageScore(aver);
} else {
statEntity.setAverageScore(BigDecimal.ZERO);
}
statEntity.setYear(DateUtil.year(curDate));
statEntity.setMonth(DateUtil.month(curDate) + 1);
statEntity.setDay(DateUtil.dayOfMonth(curDate));
return statEntity;
}).collect(Collectors.toList());
deptPerformStatService.save(collect);
}
return Rest.ok();
}
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING)); System.out.println(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING));
} }
......
...@@ -3,18 +3,33 @@ package com.mortals.xhx.busiz; ...@@ -3,18 +3,33 @@ package com.mortals.xhx.busiz;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth; import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICacheService; import com.mortals.framework.service.ICacheService;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.utils.ServletUtils; import com.mortals.framework.utils.ServletUtils;
import com.mortals.xhx.base.system.idgenerator.service.IdgeneratorService; import com.mortals.xhx.base.system.idgenerator.service.IdgeneratorService;
import com.mortals.xhx.base.system.upload.service.UploadService; import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.base.system.user.model.UserEntity; import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserQuery; import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.busiz.h5.rsp.ApiResp;
import com.mortals.xhx.common.code.ApiRespCodeEnum;
import com.mortals.xhx.common.code.YesNoEnum; import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq;
import com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo;
import com.mortals.xhx.module.hik.door.service.IHikDoorService;
import com.mortals.xhx.module.hik.face.model.req.img.ImgReq; import com.mortals.xhx.module.hik.face.model.req.img.ImgReq;
import com.mortals.xhx.module.hik.face.service.IHikFaceService; import com.mortals.xhx.module.hik.face.service.IHikFaceService;
import com.mortals.xhx.module.perform.service.PerformPerposeStaffService; import com.mortals.xhx.module.perform.service.PerformPerposeStaffService;
...@@ -25,17 +40,13 @@ import com.mortals.xhx.module.workman.model.WorkmanEntity; ...@@ -25,17 +40,13 @@ import com.mortals.xhx.module.workman.model.WorkmanEntity;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap; import java.util.stream.Collectors;
import java.util.List;
import java.util.Map;
/** /**
...@@ -62,26 +73,234 @@ public class TestController { ...@@ -62,26 +73,234 @@ public class TestController {
private IHikFaceService faceService; private IHikFaceService faceService;
@Autowired @Autowired
private UploadService uploadService; private UploadService uploadService;
@Autowired
private DeptService deptService;
@Autowired @Autowired
private PerformPerposeStaffService performPerposeStaffService; private PerformPerposeStaffService performPerposeStaffService;
@Autowired
private AttendanceRecordHikService recordHikService;
@Autowired
private IHikDoorService hikDoorService;
/**
* 同步指定日期的海康数据
*
* @param req
* @return
*/
@PostMapping("hik")
public String register(@RequestBody TestReq req) {
log.info("【测试消息】【请求体】--> " + JSONObject.toJSONString(req));
DoorEventReq doorEventReq = new DoorEventReq();
List<Integer> eventTypes = new ArrayList<>();
eventTypes.add(196885);
eventTypes.add(196887);
eventTypes.add(196893);
eventTypes.add(196888);
eventTypes.add(196889);
eventTypes.add(196890);
eventTypes.add(196891);
doorEventReq.setEventTypes(eventTypes);
doorEventReq.setStartTime(req.getCreateTimeStart());
doorEventReq.setEndTime(req.getCreateTimeEnd());
doorEventReq.setPageNo(1);
doorEventReq.setPageSize(1);
Rest<DoorEventDataInfo> doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{}", doorEventsRest.getCode(), doorEventsRest.getMsg());
if (doorEventsRest.getCode() == YesNoEnum.YES.getValue()) {
//分页获取考勤数据
Integer total = doorEventsRest.getData().getTotal();
int pageCount = PageUtil.totalPage(total, 1000);
for (int i = 1; i <= pageCount; i++) {
doorEventReq.setPageNo(i);
doorEventReq.setPageSize(1000);
doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{},page:{}", doorEventsRest.getCode(), doorEventsRest.getMsg(), doorEventReq.getPageNo());
getDoorEvents(doorEventsRest);
}
}
return "ok";
}
private void getDoorEvents(Rest<DoorEventDataInfo> doorEventsRest) {
//同步当前考勤数据
List<AttendanceRecordHikEntity> attRecords = doorEventsRest.getData().getList().stream().map(item -> {
AttendanceRecordHikEntity recordHikEntity = new AttendanceRecordHikEntity();
recordHikEntity.initAttrValue();
StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
if (ObjectUtils.isEmpty(staffCache)) {
log.info("staff is null !staffCode:{}", item.getJobNo());
return null;
}
recordHikEntity.setStaffId(staffCache.getId());
recordHikEntity.setStaffName(staffCache.getName());
recordHikEntity.setWorkNum(staffCache.getWorkNum());
recordHikEntity.setDeptId(staffCache.getDeptId());
recordHikEntity.setDeptName(staffCache.getDeptName());
recordHikEntity.setPositionId(staffCache.getPositionId());
recordHikEntity.setPositionName(staffCache.getPositionName());
recordHikEntity.setAttendanceDate(item.getEventTime());
recordHikEntity.setAttendanceAddress(item.getDoorName());
recordHikEntity.setEventSource("门禁点");
recordHikEntity.setRemark(item.getEventId());
recordHikEntity.setCreateTime(item.getEventTime());
recordHikEntity.setCreateUserName("system");
recordHikEntity.setCreateUserId(1L);
return recordHikEntity;
}).filter(f -> f != null).collect(Collectors.toList());
log.info("attRecords size:{}", attRecords.size());
if (!ObjectUtils.isEmpty(attRecords)) {
for (AttendanceRecordHikEntity attRecord : attRecords) {
//recordHikService.save(attRecord);
try {
recordHikService.getDao().insert(attRecord);
}catch (Exception e){
log.error("异常",e);
}
}
}
/*
List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
//查询当天考勤记录是否有重复的 有的 则不添加
AttendanceRecordHikQuery recordHikQuery = new AttendanceRecordHikQuery();
recordHikQuery.setAttendanceDateStart(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setAttendanceDateEnd(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setRemarkList(eventIds);
Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(saveRecordList)) {
recordHikService.save(saveRecordList);
}
log.info("saveRecordList size:{}", saveRecordList.size());*/
}
@GetMapping("updateDeptNum")
@UnAuth
public String updateDeptNum() {
log.info("更新部门用户数量");
Map<Long, Long> collect = staffService.find(new StaffQuery()).stream().collect(Collectors.groupingBy(x -> x.getDeptId(), Collectors.counting()));
DeptEntity deptEntity1 = new DeptEntity();
deptEntity1.setPersonNum(0);
deptService.getDao().update(deptEntity1, new HashMap<>());
collect.entrySet().stream().forEach(item -> {
Long deptId = item.getKey();
Long count = item.getValue();
log.info("deptId:{},num:{}", deptId, count);
DeptEntity deptEntity = deptService.get(deptId);
if (!ObjectUtils.isEmpty(deptEntity)) {
deptEntity.setPersonNum(count.intValue());
deptService.update(deptEntity);
}
});
// @GetMapping("webservice")@GetMapping("idGens")
// public String idGens() {
// log.info("测试id生成");
//
// String stringId = idgeneratorService.getLongId(IdgeneratorServiceImpl.IdGeneratorKey.EFFECT).toString();
//
//
// return stringId;
// }
public String webservice() {
log.info("测试");
for (Map.Entry<Long, Long> item : collect.entrySet()) {
Long deptId = item.getKey();
if (deptId == -1) continue;
DeptEntity deptEntity = deptService.get(deptId);
if (!ObjectUtils.isEmpty(deptEntity)) {
//查询当前父节点的所有子部门
DeptQuery deptQuery = new DeptQuery();
deptQuery.setParentId(deptEntity.getParentId());
int sum = deptService.find(new DeptQuery().parentId(deptEntity.getParentId())).stream().map(i -> i.getPersonNum()).reduce(0, Integer::sum);
;
DeptEntity parentDept = deptService.get(deptEntity.getParentId());
log.info("dept:{},sum:{}", parentDept.getDeptName(), sum);
if (!ObjectUtils.isEmpty(parentDept)) {
log.info("parentDept:{},sum:{}", parentDept.getDeptName(), sum);
parentDept.setPersonNum(sum);
deptService.update(parentDept);
// updateDeptPersonNum(parentDept);
}
}
}
/*
//更新父部门的人数归集
collect.entrySet().stream().forEach(item -> {
Long deptId = item.getKey();
DeptEntity deptEntity = deptService.get(deptId);
if (!ObjectUtils.isEmpty(deptEntity) && !ObjectUtils.isEmpty(deptEntity.getParentId())) {
int sum = deptService.find(new DeptQuery().parentId(deptEntity.getId())).stream().mapToInt(i -> i.getPersonNum()).sum();
DeptEntity parentDept = deptService.get(deptEntity.getParentId());
if (ObjectUtils.isEmpty(parentDept)) {
parentDept.setPersonNum(sum);
deptService.update(parentDept);
updateDeptPersonNum(parentDept);
}
}
// updateDeptPersonNum(deptEntity);
});*/
return "ok"; return "ok";
} }
public static void calculateParentValue(DeptEntity root) {
if (root == null) {
return;
}
// 递归处理叶子节点
if (root.getChildren().isEmpty()) {
return;
}
// 递归计算所有子节点的值之和
int sum = 0;
for (DeptEntity child : root.getChildren()) {
calculateParentValue(child);
sum += child.getPersonNum();
}
// 更新当前节点的值为所有子节点值之和
root.setPersonNum(sum);
}
private void updateDeptPersonNum(DeptEntity deptEntity) {
if (!ObjectUtils.isEmpty(deptEntity) && !ObjectUtils.isEmpty(deptEntity.getParentId())) {
int sum = deptService.find(new DeptQuery().parentId(deptEntity.getId())).stream().mapToInt(i -> i.getPersonNum()).sum();
DeptEntity parentDept = deptService.get(deptEntity.getParentId());
if (ObjectUtils.isEmpty(parentDept)) {
parentDept.setPersonNum(sum);
deptService.update(parentDept);
updateDeptPersonNum(parentDept);
}
}
}
// //
@GetMapping("updatePersons") @GetMapping("updatePersons")
@UnAuth @UnAuth
...@@ -211,7 +430,8 @@ public class TestController { ...@@ -211,7 +430,8 @@ public class TestController {
/** /**
* 生成模拟数据 * 生成模拟数据
* mortals_xhx_perform_perpose_staff_stat * mortals_xhx_perform_perpose_staff_stat
*
* @return * @return
*/ */
@GetMapping("randomStatPerposeStaffData") @GetMapping("randomStatPerposeStaffData")
......
package com.mortals.xhx.busiz;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class TestReq {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeStart;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeEnd;
}
...@@ -27,4 +27,9 @@ public class EffectSaveReq extends BaseReq { ...@@ -27,4 +27,9 @@ public class EffectSaveReq extends BaseReq {
* 报警时间 * 报警时间
*/ */
private Date alarmTime; private Date alarmTime;
/**
* 窗口编号
*/
private String windowNum;
} }
...@@ -28,6 +28,9 @@ public class ReviewSaveReq extends BaseReq { ...@@ -28,6 +28,9 @@ public class ReviewSaveReq extends BaseReq {
*/ */
private String reviewDevice; private String reviewDevice;
/**
* 窗口编号
*/
private String windowNum;
} }
...@@ -219,7 +219,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -219,7 +219,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName()); recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId()); recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName()); recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin"); recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date()); recordEntity.setDeductTime(new Date());
recordEntity.setCreateUserId(1L); recordEntity.setCreateUserId(1L);
recordEntity.setCreateTime(new Date()); recordEntity.setCreateTime(new Date());
...@@ -254,11 +254,12 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -254,11 +254,12 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName()); recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId()); recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName()); recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin"); recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date()); recordEntity.setDeductTime(new Date());
recordEntity.setCreateUserId(1L); recordEntity.setCreateUserId(1L);
recordEntity.setCreateTime(new Date()); recordEntity.setCreateTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum()); recordEntity.setWorkNum(staffEntity.getWorkNum());
recordEntity.setWindowNum(req.getWindowNum());
PerformRulesCategoryEntity categoryEntity = categoryService.get(rule.getCategoryId()); PerformRulesCategoryEntity categoryEntity = categoryService.get(rule.getCategoryId());
recordEntity.setCategoryName(categoryEntity == null ? "" : categoryEntity.getName()); recordEntity.setCategoryName(categoryEntity == null ? "" : categoryEntity.getName());
PerformReviewRecordEntity save = reviewRecordService.save(recordEntity); PerformReviewRecordEntity save = reviewRecordService.save(recordEntity);
...@@ -285,7 +286,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -285,7 +286,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName()); recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId()); recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName()); recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin"); recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date()); recordEntity.setDeductTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum()); recordEntity.setWorkNum(staffEntity.getWorkNum());
...@@ -317,7 +318,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -317,7 +318,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName()); recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId()); recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName()); recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin"); recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date()); recordEntity.setDeductTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum()); recordEntity.setWorkNum(staffEntity.getWorkNum());
...@@ -350,10 +351,12 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -350,10 +351,12 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName()); recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId()); recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName()); recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin"); recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date()); recordEntity.setDeductTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum()); recordEntity.setWorkNum(staffEntity.getWorkNum());
recordEntity.setWindowNum(req.getWindowNum());
recordEntity.setCreateUserId(1L); recordEntity.setCreateUserId(1L);
recordEntity.setCreateTime(new Date()); recordEntity.setCreateTime(new Date());
PerformRulesCategoryEntity categoryEntity = categoryService.get(rule.getCategoryId()); PerformRulesCategoryEntity categoryEntity = categoryService.get(rule.getCategoryId());
...@@ -384,7 +387,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -384,7 +387,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setCategoryName(rule.getCategoryName()); recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setWorkNum(staffEntity.getWorkNum()); recordEntity.setWorkNum(staffEntity.getWorkNum());
recordEntity.setDeductPerson("admin"); recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date()); recordEntity.setDeductTime(new Date());
recordEntity.setCreateUserId(1L); recordEntity.setCreateUserId(1L);
......
...@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo; import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result; import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.AppealReq; import com.mortals.xhx.busiz.h5.req.AppealReq;
...@@ -29,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -29,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -131,6 +133,7 @@ public class AppealApiController extends AbstractBaseController<PerformReq> { ...@@ -131,6 +133,7 @@ public class AppealApiController extends AbstractBaseController<PerformReq> {
query.setCreateTimeStart(appealReq.getApperalStartDate()); query.setCreateTimeStart(appealReq.getApperalStartDate());
query.setCreateTimeEnd(appealReq.getAppealEndDate()); query.setCreateTimeEnd(appealReq.getAppealEndDate());
query.setStaffId(context.getUser().getCustomerId()); query.setStaffId(context.getUser().getCustomerId());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<PerformAttendAppealEntity> result = appealService.find(query, pageInfo, context); Result<PerformAttendAppealEntity> result = appealService.find(query, pageInfo, context);
model.put(KEY_RESULT_DATA, result.getList()); model.put(KEY_RESULT_DATA, result.getList());
......
...@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo; import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result; import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.FeedbackReq; import com.mortals.xhx.busiz.h5.req.FeedbackReq;
...@@ -93,6 +94,8 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> { ...@@ -93,6 +94,8 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> {
feedbackQuery.setIdList(feedbackIdList); feedbackQuery.setIdList(feedbackIdList);
feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate()); feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate());
feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate()); feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate());
feedbackQuery.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null); Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null);
model.put(PAGEINFO_KEY, result.getPageInfo()); model.put(PAGEINFO_KEY, result.getPageInfo());
model.put(KEY_RESULT_DATA, result.getList()); model.put(KEY_RESULT_DATA, result.getList());
...@@ -113,6 +116,7 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> { ...@@ -113,6 +116,7 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> {
feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate()); feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate());
feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate()); feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate());
feedbackQuery.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null); Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null);
...@@ -136,6 +140,7 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> { ...@@ -136,6 +140,7 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> {
feedbackQuery.setIdList(unfinFeedbackList); feedbackQuery.setIdList(unfinFeedbackList);
feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate()); feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate());
feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate()); feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate());
feedbackQuery.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null); Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null);
model.put(PAGEINFO_KEY, result.getPageInfo()); model.put(PAGEINFO_KEY, result.getPageInfo());
model.put(KEY_RESULT_DATA, result.getList()); model.put(KEY_RESULT_DATA, result.getList());
......
...@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo; import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result; import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.InspectSaveReq; import com.mortals.xhx.busiz.h5.req.InspectSaveReq;
...@@ -164,6 +165,7 @@ public class InspectApiController extends AbstractBaseController<PerformReq> { ...@@ -164,6 +165,7 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
query.setCreateTimeEnd(performReq.getPerformEndDate()); query.setCreateTimeEnd(performReq.getPerformEndDate());
query.setCreateUserId(context.getUser().getId()); query.setCreateUserId(context.getUser().getId());
query.setSubMethod(SubMethodEnum.大厅巡查.getValue()); query.setSubMethod(SubMethodEnum.大厅巡查.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
log.info("inspect query:{}",JSONObject.toJSONString(query)); log.info("inspect query:{}",JSONObject.toJSONString(query));
......
...@@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo; import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result; import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.PerformReq; import com.mortals.xhx.busiz.h5.req.PerformReq;
...@@ -36,10 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -36,10 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.mortals.framework.ap.SysConstains.*; import static com.mortals.framework.ap.SysConstains.*;
...@@ -182,6 +180,7 @@ public class PerformApiController extends AbstractBaseController<PerformReq> { ...@@ -182,6 +180,7 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate()); query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId()); query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue()); query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckAllRecordVo> result = checkAllRecordService.getAllCheckRecord(query, pageInfo); Result<CheckAllRecordVo> result = checkAllRecordService.getAllCheckRecord(query, pageInfo);
List<CheckAllRecordVo> allCheckRecord = result.getList(); List<CheckAllRecordVo> allCheckRecord = result.getList();
...@@ -202,6 +201,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> { ...@@ -202,6 +201,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate()); query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId()); query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue()); query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckAttendRecordEntity> result = checkAttendRecordService.find(query, pageInfo, context); Result<CheckAttendRecordEntity> result = checkAttendRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> { List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo(); PerformInfo performInfo = new PerformInfo();
...@@ -222,6 +223,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> { ...@@ -222,6 +223,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate()); query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId()); query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue()); query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckReviewRecordEntity> result = checkReviewRecordService.find(query, pageInfo, context); Result<CheckReviewRecordEntity> result = checkReviewRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> { List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo(); PerformInfo performInfo = new PerformInfo();
...@@ -242,6 +245,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> { ...@@ -242,6 +245,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate()); query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId()); query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue()); query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckComplainRecordEntity> result = checkComplainRecordService.find(query, pageInfo, context); Result<CheckComplainRecordEntity> result = checkComplainRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> { List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo(); PerformInfo performInfo = new PerformInfo();
...@@ -262,6 +267,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> { ...@@ -262,6 +267,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate()); query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId()); query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue()); query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckGoworkRecordEntity> result = checkGoworkRecordService.find(query, pageInfo, context); Result<CheckGoworkRecordEntity> result = checkGoworkRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> { List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo(); PerformInfo performInfo = new PerformInfo();
...@@ -282,6 +289,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> { ...@@ -282,6 +289,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate()); query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId()); query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue()); query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckEffectRecordEntity> result = checkEffectRecordService.find(query, pageInfo, context); Result<CheckEffectRecordEntity> result = checkEffectRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> { List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo(); PerformInfo performInfo = new PerformInfo();
......
package com.mortals.xhx.daemon.task;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService;
import com.mortals.framework.util.DateUtils;
import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
import com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq;
import com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo;
import com.mortals.xhx.module.hik.door.service.IHikDoorService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 同步获取下午海康门禁事件
*/
@Slf4j
@Service("SyncDoorsEventAfterTask")
public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService {
@Autowired
private AttendanceRecordHikService recordHikService;
@Autowired
private StaffService staffService;
@Autowired
private IHikDoorService hikDoorService;
@Override
public void excuteTask(ITask task) throws AppException {
syncDoorEvents();
calculateAttendByDay();
}
private void calculateAttendByDay() {
Context context = new Context();
UserEntity userEntity = new UserEntity();
userEntity.setCreateUserId(1L);
userEntity.setCreateUserName("system");
userEntity.setCreateTime(new Date());
context.setUser(userEntity);
AttendanceRecordHikQuery recordHikEntity = new AttendanceRecordHikQuery();
// Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
recordHikEntity.setAttendanceDateStart(DateUtil.offsetHour(new Date(), -5).toString());
recordHikEntity.setAttendanceDateEnd(DateUtils.getCurrStrDate());
try {
recordHikService.addAttendanceRecordByQuery(recordHikEntity, context);
} catch (Exception e) {
log.error("计算考勤异常", e);
}
}
private void syncDoorEvents() {
DoorEventReq doorEventReq = new DoorEventReq();
List<Integer> eventTypes = new ArrayList<>();
eventTypes.add(196885);
eventTypes.add(196887);
eventTypes.add(196893);
eventTypes.add(196888);
eventTypes.add(196889);
eventTypes.add(196890);
eventTypes.add(196891);
doorEventReq.setEventTypes(eventTypes);
// 获取当天的开始时间
Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// Date todayStart = DateUtil.beginOfDay(new Date());
// 获取当天的结束时间
Date todayEnd = DateUtil.endOfDay(new Date());
doorEventReq.setStartTime(todayStart);
doorEventReq.setEndTime(todayEnd);
doorEventReq.setPageNo(1);
doorEventReq.setPageSize(1);
Rest<DoorEventDataInfo> doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{}", doorEventsRest.getCode(), doorEventsRest.getMsg());
if (doorEventsRest.getCode() == YesNoEnum.YES.getValue()) {
//分页获取考勤数据
Integer total = doorEventsRest.getData().getTotal();
int pageCount = PageUtil.totalPage(total, 1000);
for (int i = 1; i <= pageCount; i++) {
doorEventReq.setPageNo(i);
doorEventReq.setPageSize(1000);
doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{},page:{}", doorEventsRest.getCode(), doorEventsRest.getMsg(), doorEventReq.getPageNo());
getDoorEvents(doorEventsRest);
}
}
}
private void getDoorEvents(Rest<DoorEventDataInfo> doorEventsRest) {
//同步当前考勤数据
List<AttendanceRecordHikEntity> attRecords = doorEventsRest.getData().getList().stream().map(item -> {
AttendanceRecordHikEntity recordHikEntity = new AttendanceRecordHikEntity();
recordHikEntity.initAttrValue();
StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
if (ObjectUtils.isEmpty(staffCache)) {
log.info("staff is null !staffCode:{}", item.getJobNo());
return null;
}
recordHikEntity.setStaffId(staffCache.getId());
recordHikEntity.setStaffName(staffCache.getName());
recordHikEntity.setWorkNum(staffCache.getWorkNum());
recordHikEntity.setDeptId(staffCache.getDeptId());
recordHikEntity.setDeptName(staffCache.getDeptName());
recordHikEntity.setPositionId(staffCache.getPositionId());
recordHikEntity.setPositionName(staffCache.getPositionName());
recordHikEntity.setAttendanceDate(item.getEventTime());
recordHikEntity.setAttendanceAddress(item.getDoorName());
recordHikEntity.setEventSource("门禁点");
recordHikEntity.setRemark(item.getEventId());
recordHikEntity.setCreateTime(new Date());
recordHikEntity.setCreateUserName("系统管理员");
recordHikEntity.setCreateUserId(1L);
return recordHikEntity;
}).filter(f -> f != null).collect(Collectors.toList());
log.info("attRecords size:{}", attRecords.size());
List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
//查询当天考勤记录是否有重复的 有的 则不添加
AttendanceRecordHikQuery recordHikQuery = new AttendanceRecordHikQuery();
recordHikQuery.setAttendanceDateStart(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setAttendanceDateEnd(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setRemarkList(eventIds);
Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
//去重 时分秒打卡的 也要去掉重复。
List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(saveRecordList)) {
//单个插入 去掉重复时间段的打卡记录
for (AttendanceRecordHikEntity recordHikEntity : saveRecordList) {
try {
recordHikService.save(recordHikEntity);
} catch (Exception e) {
log.error("基础考勤数据保存异常", e.getMessage());
}
}
// recordHikService.save(saveRecordList);
}
log.info("saveRecordList size:{}", saveRecordList.size());
}
@Override
public void stopTask(ITask task) throws AppException {
}
}
...@@ -3,8 +3,6 @@ package com.mortals.xhx.daemon.task; ...@@ -3,8 +3,6 @@ package com.mortals.xhx.daemon.task;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.PageUtil; import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
...@@ -22,12 +20,10 @@ import com.mortals.xhx.module.hik.door.service.IHikDoorService; ...@@ -22,12 +20,10 @@ import com.mortals.xhx.module.hik.door.service.IHikDoorService;
import com.mortals.xhx.module.staff.model.StaffEntity; import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.service.StaffService; import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.time.Year;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -66,10 +62,13 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -66,10 +62,13 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
userEntity.setCreateTime(new Date()); userEntity.setCreateTime(new Date());
context.setUser(userEntity); context.setUser(userEntity);
AttendanceRecordHikQuery recordHikEntity = new AttendanceRecordHikQuery(); AttendanceRecordHikQuery recordHikEntity = new AttendanceRecordHikQuery();
recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
// Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
recordHikEntity.setAttendanceDateStart(DateUtil.offsetHour(new Date(), -5).toString());
recordHikEntity.setAttendanceDateEnd(DateUtils.getCurrStrDate()); recordHikEntity.setAttendanceDateEnd(DateUtils.getCurrStrDate());
try { try {
recordHikService.addAttendanceRecord(recordHikEntity, context); recordHikService.addAttendanceRecordByQuery(recordHikEntity, context);
} catch (Exception e) { } catch (Exception e) {
log.error("计算考勤异常", e); log.error("计算考勤异常", e);
} }
...@@ -87,7 +86,8 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -87,7 +86,8 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
eventTypes.add(196891); eventTypes.add(196891);
doorEventReq.setEventTypes(eventTypes); doorEventReq.setEventTypes(eventTypes);
// 获取当天的开始时间 // 获取当天的开始时间
Date todayStart = DateUtil.beginOfDay(new Date()); Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// Date todayStart = DateUtil.beginOfDay(new Date());
// 获取当天的结束时间 // 获取当天的结束时间
Date todayEnd = DateUtil.endOfDay(new Date()); Date todayEnd = DateUtil.endOfDay(new Date());
doorEventReq.setStartTime(todayStart); doorEventReq.setStartTime(todayStart);
...@@ -118,7 +118,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -118,7 +118,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikEntity.initAttrValue(); recordHikEntity.initAttrValue();
StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0")); StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
if (ObjectUtils.isEmpty(staffCache)) { if (ObjectUtils.isEmpty(staffCache)) {
log.info("staff is null !staffCode:{}",item.getJobNo()); log.info("staff is null !staffCode:{}", item.getJobNo());
return null; return null;
} }
...@@ -135,13 +135,11 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -135,13 +135,11 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikEntity.setEventSource("门禁点"); recordHikEntity.setEventSource("门禁点");
recordHikEntity.setRemark(item.getEventId()); recordHikEntity.setRemark(item.getEventId());
recordHikEntity.setCreateTime(new Date()); recordHikEntity.setCreateTime(new Date());
recordHikEntity.setCreateUserName("system"); recordHikEntity.setCreateUserName("系统管理员");
recordHikEntity.setCreateUserId(1L); recordHikEntity.setCreateUserId(1L);
return recordHikEntity; return recordHikEntity;
}).filter(f->f!=null).collect(Collectors.toList()); }).filter(f -> f != null).collect(Collectors.toList());
log.info("attRecords size:{}", attRecords.size()); log.info("attRecords size:{}", attRecords.size());
List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList()); List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
//查询当天考勤记录是否有重复的 有的 则不添加 //查询当天考勤记录是否有重复的 有的 则不添加
...@@ -151,9 +149,18 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -151,9 +149,18 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikQuery.setRemarkList(eventIds); recordHikQuery.setRemarkList(eventIds);
Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet()); Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
//去重 时分秒打卡的 也要去掉重复。
List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList()); List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(saveRecordList)) { if (!ObjectUtils.isEmpty(saveRecordList)) {
recordHikService.save(saveRecordList); //单个插入 去掉重复时间段的打卡记录
for (AttendanceRecordHikEntity recordHikEntity : saveRecordList) {
try {
recordHikService.save(recordHikEntity);
} catch (Exception e) {
log.error("基础考勤数据保存异常", e.getMessage());
}
}
// recordHikService.save(saveRecordList);
} }
log.info("saveRecordList size:{}", saveRecordList.size()); log.info("saveRecordList size:{}", saveRecordList.size());
} }
...@@ -163,20 +170,4 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService { ...@@ -163,20 +170,4 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
public void stopTask(ITask task) throws AppException { public void stopTask(ITask task) throws AppException {
} }
public static void main(String[] args) {
// 获取当前时间的小时数
int hour = DateUtil.hour(new Date(), true);
// 获取当前时间所在小时的开始时间和结束时间
Date startTime = DateUtil.beginOfHour(new Date());
Date endTime = DateUtil.endOfHour(new Date());
// 格式化时间为指定格式
String startTimeStr = DateUtil.format(startTime, "yyyy-MM-dd HH:00:00");
String endTimeStr = DateUtil.format(endTime, "yyyy-MM-dd HH:59:59");
// 输出结果
System.out.println("当前时间所在小时的开始时间:" + startTimeStr);
System.out.println("当前时间所在小时的结束时间:" + endTimeStr);
}
} }
...@@ -74,7 +74,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -74,7 +74,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
for (PersonInfo personInfo : personInfoList) { for (PersonInfo personInfo : personInfoList) {
StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(personInfo.getJobNo(), 8, "0")); StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(personInfo.getJobNo(), 8, "0"));
DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(personInfo.getOrgIndexCode())); DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(personInfo.getOrgIndexCode()));
// AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId())); // AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
// AttendanceStatEntity statEntity = attendanceStatService.selectOne(new AttendanceStatQuery().staffId(staffEntity.getId())); // AttendanceStatEntity statEntity = attendanceStatService.selectOne(new AttendanceStatQuery().staffId(staffEntity.getId()));
//判断本地数据是否为空 //判断本地数据是否为空
if (ObjectUtils.isEmpty(staffEntity)) { if (ObjectUtils.isEmpty(staffEntity)) {
...@@ -106,7 +106,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -106,7 +106,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
balanceEntity.setCreateUserId(1L); balanceEntity.setCreateUserId(1L);
balanceEntity.setCreateTime(new Date()); balanceEntity.setCreateTime(new Date());
balanceService.save(balanceEntity); balanceService.save(balanceEntity);
//AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId())); //AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
AttendanceStatEntity attendanceStatEntity = new AttendanceStatEntity(); AttendanceStatEntity attendanceStatEntity = new AttendanceStatEntity();
attendanceStatEntity.initAttrValue(); attendanceStatEntity.initAttrValue();
...@@ -139,16 +139,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -139,16 +139,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
attendanceStatEntity.setHomeLeave(balanceEntity.getHomeLeave()); attendanceStatEntity.setHomeLeave(balanceEntity.getHomeLeave());
attendanceStatEntity.setPersonalLeave(balanceEntity.getPersonalLeaveDays()); attendanceStatEntity.setPersonalLeave(balanceEntity.getPersonalLeaveDays());
attendanceStatService.save(attendanceStatEntity); attendanceStatService.save(attendanceStatEntity);
//统计各级部门员工数量 todo 优化统计
String ancestor = deptEntity.getAncestors().split(",", 2)[1];
String[] ancestors = ancestor.split(",");
for (String newAncestor : ancestors) {
DeptEntity deptEntity2 = deptService.get(Long.valueOf(newAncestor));
if (Objects.nonNull(deptEntity2)) {
deptEntity2.setPersonNum(deptEntity2.getPersonNum() + 1);
deptService.update(deptEntity2);
}
}
} else { } else {
//更新 //更新
if (!ObjectUtils.isEmpty(deptEntity)) { if (!ObjectUtils.isEmpty(deptEntity)) {
...@@ -165,16 +156,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -165,16 +156,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
staffEntity.setUpdateUserId(1L); staffEntity.setUpdateUserId(1L);
staffEntity.setUpdateTime(new Date()); staffEntity.setUpdateTime(new Date());
staffService.update(staffEntity); staffService.update(staffEntity);
//统计各级部门员工数量
String ancestor = deptEntity.getAncestors().split(",", 2)[1];
String[] ancestors = ancestor.split(",");
for (String newAncestor : ancestors) {
DeptEntity deptEntity2 = deptService.get(Long.valueOf(newAncestor));
if (Objects.nonNull(deptEntity2)) {
deptEntity2.setPersonNum(deptEntity2.getPersonNum() + 1);
deptService.update(deptEntity2);
}
}
} }
} }
} }
...@@ -220,6 +202,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -220,6 +202,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
} }
} }
} }
@Override @Override
public void stopTask(ITask task) throws AppException { public void stopTask(ITask task) throws AppException {
......
...@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity; ...@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery; import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery;
import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService; import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService;
import com.mortals.xhx.module.dingding.personal.service.IDingPersonService; import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.poi.ss.formula.functions.T; import org.apache.poi.ss.formula.functions.T;
...@@ -54,7 +57,8 @@ public class DingMessageController { ...@@ -54,7 +57,8 @@ public class DingMessageController {
private IDingPersonService dingPersonService; private IDingPersonService dingPersonService;
@Autowired @Autowired
private AttendanceLeaveRecordService attendanceLeaveRecordService; private AttendanceLeaveRecordService attendanceLeaveRecordService;
@Autowired
private StaffService staffService;
/** /**
* appKey * appKey
...@@ -109,136 +113,170 @@ public class DingMessageController { ...@@ -109,136 +113,170 @@ public class DingMessageController {
AttendanceLeaveRecordEntity leaveRecordEntity = new AttendanceLeaveRecordEntity(); AttendanceLeaveRecordEntity leaveRecordEntity = new AttendanceLeaveRecordEntity();
leaveRecordEntity.initAttrValue(); leaveRecordEntity.initAttrValue();
leaveRecordEntity.setRemark(processInstanceId); //将钉钉的事物id作为备注填入数据库 leaveRecordEntity.setRemark(processInstanceId); //将钉钉的事物id作为备注填入数据库
leaveRecordEntity.setLeavePersonId(Long.parseLong(result.getOriginatorUserId()));
leaveRecordEntity.setLeavePerson(result.getTitle().substring(0,result.getTitle().indexOf("提交")));
leaveRecordEntity.setDeptId(Long.parseLong(result.getOriginatorDeptId()));
leaveRecordEntity.setDeptName(result.getOriginatorDeptName());
Rest<String> mobileRest = dingPersonService.getPersonById(result.getOriginatorUserId());
if(mobileRest.getCode() == Rest.SUCCESS) {
String mobile = mobileRest.getData();
StaffEntity staffEntity = staffService.selectOne(new StaffQuery().phoneNumber(mobile));
if(!ObjectUtils.isEmpty(staffEntity)){
leaveRecordEntity.setLeavePersonId(staffEntity.getId());
leaveRecordEntity.setLeavePerson(staffEntity.getName());
leaveRecordEntity.setDeptId(staffEntity.getDeptId());
leaveRecordEntity.setDeptName(staffEntity.getDeptName());
leaveRecordEntity.setPhoneNumber(staffEntity.getPhoneNumber());
if(result.getTasks().size() >0 ){
Date startTime = dateFormat(result.getTasks().get(0).getCreateTime());
Date endTime = dateFormat(result.getTasks().get(0).getFinishTime());
leaveRecordEntity.setStartTime(startTime);
leaveRecordEntity.setEndTime(endTime);
leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
}
if(result.getFormComponentValues().size() > 0 ){
JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue());
if(jsonArray.size() > 0){
Date startTime1 = dateFormat(jsonArray.get(0).toString());
leaveRecordEntity.setStartTime(startTime1);
}
if(jsonArray.size() > 1){
Date endTime1 = dateFormat(jsonArray.get(1).toString());
leaveRecordEntity.setEndTime(endTime1);
}
if(jsonArray.size() > 2){
leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60));
}
if(jsonArray.size() > 4){
switch (jsonArray.get(4).toString()){
case "调休":
leaveRecordEntity.setLeaveType(2);
break;
case "病假":
leaveRecordEntity.setLeaveType(3);
break;
case "年假":
leaveRecordEntity.setLeaveType(4);
break;
case "产假":
leaveRecordEntity.setLeaveType(5);
break;
case "陪产假":
leaveRecordEntity.setLeaveType(6);
break;
case "婚假":
leaveRecordEntity.setLeaveType(7);
break;
case "例假":
leaveRecordEntity.setLeaveType(8);
break;
case "哺乳假":
leaveRecordEntity.setLeaveType(9);
break;
case "丧假":
leaveRecordEntity.setLeaveType(10);
break;
case "回单位":
leaveRecordEntity.setLeaveType(11);
break;
case "因公请假":
leaveRecordEntity.setLeaveType(12);
break;
case "外出勘验":
leaveRecordEntity.setLeaveType(13);
break;
case "值班补班":
leaveRecordEntity.setLeaveType(14);
break;
case "体检":
leaveRecordEntity.setLeaveType(15);
break;
case "隔离":
leaveRecordEntity.setLeaveType(16);
break;
case "因公外出":
leaveRecordEntity.setLeaveType(17);
break;
case "公休":
leaveRecordEntity.setLeaveType(18);
break;
case "育儿假":
leaveRecordEntity.setLeaveType(19);
break;
case "调回单位":
leaveRecordEntity.setLeaveType(20);
break;
case "探亲假":
leaveRecordEntity.setLeaveType(21);
break;
default:
leaveRecordEntity.setLeaveType(1); //默认事假
break;
}
}
} else if (result.getFormComponentValues().size() > 1) { //请假理由
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues resonEntity = result.getFormComponentValues().get(1);
if(resonEntity.getName().equals("请假事由")){
leaveRecordEntity.setReason(resonEntity.getValue());
}
}else if (result.getFormComponentValues().size() > 2) { //上传的附件
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues picEntity = result.getFormComponentValues().get(2);
if(picEntity.getName().equals("图片") && picEntity.getValue() != null){
leaveRecordEntity.setReason(picEntity.getValue());
}
}
if(result.getTasks().size() >0 ){
Date startTime = dateFormat(result.getTasks().get(0).getCreateTime());
Date endTime = dateFormat(result.getTasks().get(0).getFinishTime());
leaveRecordEntity.setStartTime(startTime);
leaveRecordEntity.setEndTime(endTime);
leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
}
if(result.getFormComponentValues().size() > 0 ){ if(result.getStatus().compareToIgnoreCase("NEW") == 0 || result.getStatus().compareToIgnoreCase("RUNNING") == 0){
JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue()); leaveRecordEntity.setProcessStatus(1);
if(jsonArray.size() > 0){ }else if(result.getStatus().compareToIgnoreCase("COMPLETED") == 0 || result.getStatus().compareToIgnoreCase("CANCELED") == 0
Date startTime1 = dateFormat(jsonArray.get(0).toString()); || result.getStatus().compareToIgnoreCase("TERMINATED") == 0){
leaveRecordEntity.setStartTime(startTime1); leaveRecordEntity.setProcessStatus(2);
} }
if(jsonArray.size() > 1){
Date endTime1 = dateFormat(jsonArray.get(1).toString());
leaveRecordEntity.setEndTime(endTime1);
}
if(jsonArray.size() > 2){
leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60));
}
if(jsonArray.size() > 4){
switch (jsonArray.get(4).toString()){
case "调休":
leaveRecordEntity.setLeaveType(2);
break;
case "病假":
leaveRecordEntity.setLeaveType(3);
break;
case "年假":
leaveRecordEntity.setLeaveType(4);
break;
case "产假":
leaveRecordEntity.setLeaveType(5);
break;
case "陪产假":
leaveRecordEntity.setLeaveType(6);
break;
case "婚假":
leaveRecordEntity.setLeaveType(7);
break;
case "例假":
leaveRecordEntity.setLeaveType(8);
break;
case "哺乳假":
leaveRecordEntity.setLeaveType(9);
break;
case "丧假":
leaveRecordEntity.setLeaveType(10);
break;
case "回单位":
leaveRecordEntity.setLeaveType(11);
break;
case "因公请假":
leaveRecordEntity.setLeaveType(12);
break;
case "外出勘验":
leaveRecordEntity.setLeaveType(13);
break;
case "值班补班":
leaveRecordEntity.setLeaveType(14);
break;
case "体检":
leaveRecordEntity.setLeaveType(15);
break;
case "隔离":
leaveRecordEntity.setLeaveType(16);
break;
case "因公外出":
leaveRecordEntity.setLeaveType(17);
break;
case "公休":
leaveRecordEntity.setLeaveType(18);
break;
case "育儿假":
leaveRecordEntity.setLeaveType(19);
break;
case "调回单位":
leaveRecordEntity.setLeaveType(20);
break;
case "探亲假":
leaveRecordEntity.setLeaveType(21);
break;
default:
leaveRecordEntity.setLeaveType(1); //默认事假
break;
if(result.getResult().compareToIgnoreCase("AGREE") == 0){
leaveRecordEntity.setAuditResult(1);
}else {
leaveRecordEntity.setAuditResult(2);
} }
} log.info("钉钉返回的result:"+result.getResult()+"\nauditresult:"+leaveRecordEntity.getAuditResult());
leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
} AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
if(ObjectUtils.isEmpty(recordEntity)){
if(result.getStatus().equals("NEW") || result.getStatus().equals("RUNNING")){ leaveRecordEntity.setCreateTime(new Date());
leaveRecordEntity.setProcessStatus(1); leaveRecordEntity.setCreateUserId(1L);
}else if(result.getStatus().equals("COMPLETED") || result.getStatus().equals("CANCELED") || result.getStatus().equals("TERMINATED")){ attendanceLeaveRecordService.save(leaveRecordEntity);
leaveRecordEntity.setProcessStatus(2); }else{
} leaveRecordEntity.setId(recordEntity.getId());
if(result.getResult().equals("AGREE")){ leaveRecordEntity.setUpdateUserId(1L);
leaveRecordEntity.setAuditResult(1); leaveRecordEntity.setUpdateTime(new Date());
}else {
leaveRecordEntity.setAuditResult(2); attendanceLeaveRecordService.update(leaveRecordEntity);
} }
leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
if(ObjectUtils.isEmpty(recordEntity)){
leaveRecordEntity.setCreateTime(new Date()); }else {
leaveRecordEntity.setCreateUserId(1L); log.info("该号码("+mobile +")未在本系统绑定");
attendanceLeaveRecordService.save(leaveRecordEntity); }
}else{
leaveRecordEntity.setId(recordEntity.getId());
leaveRecordEntity.setUpdateUserId(1L);
leaveRecordEntity.setUpdateTime(new Date());
attendanceLeaveRecordService.update(leaveRecordEntity); }else {
log.info("根据id在钉钉平台查询电话失败"+mobileRest.getMsg());
} }
} }
} }
......
package com.mortals.xhx.module.attendance.model; package com.mortals.xhx.module.attendance.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel; import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong; import com.mortals.framework.model.BaseEntityLong;
...@@ -29,6 +32,7 @@ public class AttendanceStatEntity extends AttendanceStatVo { ...@@ -29,6 +32,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
/** /**
* 员工姓名 * 员工姓名
*/ */
@Excel(name = "员工姓名")
private String staffName; private String staffName;
/** /**
* 所属部门 * 所属部门
...@@ -37,6 +41,7 @@ public class AttendanceStatEntity extends AttendanceStatVo { ...@@ -37,6 +41,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
/** /**
* 所属部门名称 * 所属部门名称
*/ */
@Excel(name = "部门名称")
private String deptName; private String deptName;
/** /**
* 回单位(天) * 回单位(天)
...@@ -312,11 +317,11 @@ public class AttendanceStatEntity extends AttendanceStatVo { ...@@ -312,11 +317,11 @@ public class AttendanceStatEntity extends AttendanceStatVo {
this.earlyLeaveMeeting = BigDecimal.valueOf(0); this.earlyLeaveMeeting = BigDecimal.valueOf(0);
this.year = -1; this.year = DateUtil.year(new Date());
this.month = -1; this.month = DateUtil.month(new Date())+1;
this.day = -1; this.day = DateUtil.dayOfMonth(new Date());
this.remark = ""; this.remark = "";
...@@ -338,4 +343,8 @@ public class AttendanceStatEntity extends AttendanceStatVo { ...@@ -338,4 +343,8 @@ public class AttendanceStatEntity extends AttendanceStatVo {
this.afternoonTimes = 0; this.afternoonTimes = 0;
} }
public static void main(String[] args) {
System.out.println(DateUtil.dayOfMonth(new Date()));
}
} }
\ No newline at end of file
package com.mortals.xhx.module.attendance.service; package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity; import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import java.util.List;
/** /**
* AttendanceRecordHikService * AttendanceRecordHikService
* *
...@@ -13,10 +16,29 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity; ...@@ -13,10 +16,29 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
*/ */
public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecordHikEntity,Long>{ public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecordHikEntity,Long>{
AttendanceRecordHikDao getDao();
/**
* 根据查询条件生成打卡记录
* @param attendanceRecordHikQuery
*/
void addAttendanceRecordByQuery(AttendanceRecordHikEntity attendanceRecordHikQuery, Context context) throws Exception;
/** /**
* 将原始数据导入打卡记录表 * 根据查询条件生成打卡记录
* @param entity * @param hikEntity
*/ */
void addAttendanceRecord(AttendanceRecordHikEntity entity, Context context) throws Exception; void addAttendanceRecord(AttendanceRecordHikEntity hikEntity, Context context) throws Exception;
/**
* 根据查原始记录列表生成打卡记录
* @param hikEntityList
*/
void addAttendanceRecordList(List<AttendanceRecordHikEntity> hikEntityList, Context context) throws Exception;
} }
...@@ -6,6 +6,7 @@ import com.mortals.framework.service.IUser; ...@@ -6,6 +6,7 @@ import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.base.system.upload.service.UploadService; import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.common.code.*; import com.mortals.xhx.common.code.*;
import com.mortals.xhx.common.utils.BeanUtil;
import com.mortals.xhx.module.attendance.model.*; import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.*; import com.mortals.xhx.module.attendance.service.*;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
...@@ -14,6 +15,7 @@ import com.mortals.xhx.module.staff.model.StaffQuery; ...@@ -14,6 +15,7 @@ import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService; import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
...@@ -60,16 +62,200 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -60,16 +62,200 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
@Autowired @Autowired
private AttendanceRecordErrorService errorService; private AttendanceRecordErrorService errorService;
@Override @Override
public void addAttendanceRecord(AttendanceRecordHikEntity entity, Context context) throws Exception { public void addAttendanceRecord(AttendanceRecordHikEntity hikEntity, Context context) throws Exception {
List<AttendanceRecordHikEntity> hikEntityList = new ArrayList<>();
addAttendanceRecordList(hikEntityList, context);
}
List<AttendanceRecordHikEntity> hikEntityList = attendanceRecordHikService.find(entity); @Override
public void addAttendanceRecordByQuery(AttendanceRecordHikEntity attendanceRecordHikQuery, Context context) throws Exception {
List<AttendanceRecordHikEntity> hikEntityList = attendanceRecordHikService.find(attendanceRecordHikQuery);
addAttendanceRecordList(hikEntityList, context);
}
public void addAttendanceRecordList(List<AttendanceRecordHikEntity> hikEntityList, Context context) throws Exception {
//对考勤数据根据考勤时间进行排序 //对考勤数据根据考勤时间进行排序
List<AttendanceRecordHikEntity> collect = hikEntityList.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList()); List<AttendanceRecordHikEntity> collect = hikEntityList.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList());
//根据工号对考勤数据进行分组 //根据工号对考勤数据进行分组
Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum)); Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum));
//Map<String, Map<String, List<AttendanceRecordHikEntity>>> groupMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum, Collectors.groupingBy(x -> com.mortals.framework.util.DateUtils.getDateTimeStr(x.getAttendanceDate(), "yyyy-MM-dd")))); //Map<String, Map<String, List<AttendanceRecordHikEntity>>> groupMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum, Collectors.groupingBy(x -> com.mortals.framework.util.DateUtils.getDateTimeStr(x.getAttendanceDate(), "yyyy-MM-dd"))));
//map遍历.先把所有键取出来 for (Map.Entry<String, List<AttendanceRecordHikEntity>> itemEntry : listMap.entrySet()) {
String workNum = itemEntry.getKey();
List<AttendanceRecordHikEntity> recordHikEntityList = itemEntry.getValue();
//对按照工号分组了的数据recordHikEntityList进行时间分组
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Map<String, List<AttendanceRecordHikEntity>> dateRecordMap = recordHikEntityList.stream().collect(Collectors.groupingBy(hikEntity -> DateUtil.formatDate(hikEntity.getAttendanceDate())));
for (Map.Entry<String, List<AttendanceRecordHikEntity>> dateEntry : dateRecordMap.entrySet()) {
String dateStr = dateEntry.getKey();
List<AttendanceRecordHikEntity> attendanceRecordHikEntities = dateEntry.getValue();
//对相同工号的人员进行遍历判断考勤规则
AttendanceRecordEntity attendanceRecordEntity = new AttendanceRecordEntity();
attendanceRecordEntity.initAttrValue();
List<AttendanceRecordDetailEntity> detailEntityList = new ArrayList<>();
for (AttendanceRecordHikEntity item : attendanceRecordHikEntities) {
//对主表的对象进行赋值
attendanceRecordEntity.setStaffId(item.getStaffId());
attendanceRecordEntity.setStaffName(item.getStaffName());
attendanceRecordEntity.setDeptId(item.getDeptId());
attendanceRecordEntity.setDeptName(item.getDeptName());
attendanceRecordEntity.setPositionId(item.getPositionId());
attendanceRecordEntity.setPositionName(item.getPositionName());
attendanceRecordEntity.setWorkNum(item.getWorkNum());
attendanceRecordEntity.setAttendanceDate(item.getAttendanceDate());
attendanceRecordEntity.setCreateTime(new Date());
attendanceRecordEntity.setCreateUserId(this.getContextUserId(context));
//获取考勤打卡时间
Date attendanceDate = item.getAttendanceDate();
//通过工号查询员工信息
StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(item.getWorkNum(), 8, "0"));
if (ObjectUtils.isEmpty(staffEntity)) {
log.info("staffEntity is null ,workNum:{}", StrUtil.padPre(item.getWorkNum(), 8, "0"));
continue;
}
//通过员工id查询考勤组人员信息
List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staffEntity.getId()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if (!ObjectUtils.isEmpty(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size() == 1)
checkAttendGroupByOne(attendanceRecordEntity, detailEntityList, attendanceDate, attendanceGroupStaffEntities.get(0), context);
//如果考勤人员信息list长度大于1 则该考勤人员有多个考勤组.
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size() > 1) {
for (AttendanceGroupStaffEntity groupStaffEntity : attendanceGroupStaffEntities) {
//多考勤组 todo 暂时和单一覆盖
checkAttendGroupByOne(attendanceRecordEntity, detailEntityList, attendanceDate, groupStaffEntity, context);
}
}
}
//处理异常打卡,所以异常打卡的 都新增一条记录
List<AttendanceRecordErrorEntity> errorEntityList = new ArrayList<>();
for (AttendanceRecordDetailEntity recordDetailEntity : detailEntityList) {
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//SimpleDateFormat sdft = new SimpleDateFormat("HH:mm:ss");
Integer goWorkResult = recordDetailEntity.getGoWorkResult();
Integer offWorkResult = recordDetailEntity.getOffWorkResult();
//判断上班
if (GoWorkResultEnum.正常.getValue() != goWorkResult) {
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
BeanUtils.copyProperties(attendanceRecordEntity, errorEntity, new String[]{"id"});
Date goWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getGoWorkDate();
errorEntity.setGoOffDateTime(goWorkDate);
if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
} else {
errorEntity.setErrorDateTime(goWorkDate);
}
if (GoWorkResultEnum.早退.getValue() == recordDetailEntity.getGoWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.早退.getValue());
}
if (GoWorkResultEnum.迟到.getValue() == recordDetailEntity.getGoWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.迟到.getValue());
}
if (GoWorkResultEnum.缺卡.getValue() == recordDetailEntity.getGoWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.缺卡.getValue());
}
errorEntity.setProcessStatus(YesNoEnum.NO.getValue());
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(this.getContextUserId(context));
errorEntityList.add(errorEntity);
}
//判断下班
if (OffWorkResultEnum.正常.getValue() != offWorkResult) {
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
errorEntity.initAttrValue();
BeanUtils.copyProperties(attendanceRecordEntity, errorEntity, new String[]{"id"});
Date offWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getOffWorkDate();
errorEntity.setGoOffDateTime(offWorkDate);
if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
} else {
errorEntity.setErrorDateTime(offWorkDate);
}
if (OffWorkResultEnum.缺卡.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.缺卡.getValue());
}
if (OffWorkResultEnum.早退.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.早退.getValue());
}
if (OffWorkResultEnum.迟到.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.迟到.getValue());
}
errorEntity.setProcessStatus(YesNoEnum.NO.getValue());
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(this.getContextUserId(context));
errorEntityList.add(errorEntity);
}
}
if (!ObjectUtils.isEmpty(detailEntityList)) {
if (!ObjectUtils.isEmpty(detailEntityList)) {
errorService.save(errorEntityList, context);
}
attendanceRecordEntity.setShiftsName(detailEntityList.get(0).getShiftsName());
attendanceRecordEntity.setShiftsId(detailEntityList.get(0).getShiftsId());
attendanceRecordEntity.setAttendanceRecordDetailList(detailEntityList);
//判断签到 只要存在一次正常打卡详细记录 就判断签到
for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
if (GoWorkResultEnum.正常.getValue() == detailEntity.getGoWorkResult() || GoWorkResultEnum.迟到.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setSignInResult(YesNoEnum.YES.getValue());
break;
}
}
for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
if (OffWorkResultEnum.正常.getValue() == detailEntity.getOffWorkResult() || OffWorkResultEnum.早退.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setSignOutResult(YesNoEnum.YES.getValue());
break;
}
}
for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
if (OffWorkResultEnum.缺卡.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setPunchResult(YesNoEnum.NO.getValue());
break;
}
if (OffWorkResultEnum.缺卡.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setPunchResult(YesNoEnum.NO.getValue());
break;
}
}
if (YesNoEnum.YES.getValue() == attendanceRecordEntity.getSignInResult() && YesNoEnum.YES.getValue() == attendanceRecordEntity.getSignOutResult()) {
attendanceRecordEntity.setPunchResult(YesNoEnum.YES.getValue());
}
attendanceRecordEntity.setAttendType("现场打卡");
//判断是否存在记录 如果存在 则更新 维度 staffId attendanceDate shiftsId attendanceGroupId
AttendanceRecordQuery query = new AttendanceRecordQuery();
query.setStaffId(attendanceRecordEntity.getStaffId());
query.setShiftsId(attendanceRecordEntity.getShiftsId());
query.setAttendanceGroupId(attendanceRecordEntity.getAttendanceGroupId());
query.setAttendanceDate(attendanceRecordEntity.getAttendanceDate());
AttendanceRecordEntity recordEntity = attendanceRecordService.selectOne(query);
if (!ObjectUtils.isEmpty(recordEntity)) {
attendanceRecordEntity.setId(recordEntity.getId());
attendanceRecordEntity.setUpdateTime(new Date());
attendanceRecordEntity.setUpdateUserId(this.getContextUserId(context));
attendanceRecordService.update(attendanceRecordEntity, context);
} else {
attendanceRecordService.save(attendanceRecordEntity, context);
}
}
}
}
/* //map遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet(); Set<String> workNumSet = listMap.keySet();
//根据键取出value //根据键取出value
for (String workNum : workNumSet) { for (String workNum : workNumSet) {
...@@ -119,7 +305,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -119,7 +305,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId())); AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity.getId()); attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity.getId());
attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity.getGroupName()); attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity.getGroupName());
//log.info("attendanceGroupEntity.getId()=={}", attendanceGroupEntity.getId()); //log.info("attendanceGroupEntity.getId()=={}", attendanceGroupEntity.getId());
//查询考勤组详细信息获取班次 //查询考勤组详细信息获取班次
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery() AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
...@@ -455,17 +640,117 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -455,17 +640,117 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
attendanceRecordService.save(attendanceRecordEntity, context); attendanceRecordService.save(attendanceRecordEntity, context);
} }
} }
} }
}*/
}
private void checkAttendGroupByOne(AttendanceRecordEntity attendanceRecordEntity, List<AttendanceRecordDetailEntity> detailEntityList, Date attendanceDate, AttendanceGroupStaffEntity attendanceGroupStaffEntity, Context context) {
//查询考勤组
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.get(attendanceGroupStaffEntity.getGroupId(), context);
attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity == null ? 0L : attendanceGroupEntity.getId());
attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity == null ? "" : attendanceGroupEntity.getGroupName());
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
String week = this.getWeek(attendanceDate);
//log.info("week:{}", week);
//通过考勤日期的星期拿到班次id.
if (ObjectUtils.isEmpty(attendanceGroupFixedworkEntity)) {
log.info("attendanceGroupFixedworkEntity is null ! groupId:{}", attendanceGroupEntity.getId());
return;
}
Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
//log.info("weekClassId:{}", weekClassId);
//weekClassId为-1 则不在考勤
if (weekClassId == -1L) {
//跳过本次循环
return;
}
//获取班次信息
AttendanceClassEntity attendanceClassEntity = attendanceClassService.get(weekClassId);
if (ObjectUtils.isEmpty(attendanceClassEntity)) {
log.info("attendanceClassEntity is null ,weekClassId:{}", weekClassId);
return;
}
//获取班次详细信息
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceClassEntity.getId()));
Integer orderNum = 0;
//构造数据
if (ObjectUtils.isEmpty(detailEntityList)) {
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.setShiftsId(classDetailEntity.getId());
recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
recordDetailEntity.setGoWorkResult(GoWorkResultEnum.缺卡.getValue());
recordDetailEntity.setOffWorkResult(GoWorkResultEnum.缺卡.getValue());
recordDetailEntity.setOrderNum(orderNum);
detailEntityList.add(recordDetailEntity);
}
}
for (AttendanceClassDetailEntity classDetail : attendanceClassDetailEntities) {
//计算区间范围
//上班打卡前时间
Date goWorkDateBefore = DateUtil.offsetMinute(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore());
//上班打卡后时间
Date goWorkDateAfter = DateUtil.offsetMinute(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter());
// 下班打卡前时间
Date offWorkDateBefore = DateUtil.offsetMinute(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore());
//下班打卡后时间
Date offWorkDateAfter = DateUtil.offsetMinute(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter());
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean goInTime = DateUtil.isIn(attendanceDate, goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = DateUtil.isIn(attendanceDate, offWorkDateBefore, offWorkDateAfter);
if (goInTime == false && offInTime == false) {
log.info("考勤时间不在上班区间与下班区间中,不做处理!attendDate:{}", DateUtil.formatDateTime(attendanceDate));
continue;
}
if (goInTime) {
//如果是上班打卡区间范围,判断是否迟到
boolean inTime = DateUtil.isIn(attendanceDate, goWorkDateBefore, classDetail.getGoWorkDate());
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getClassId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getClassId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.迟到.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if (offInTime) {
boolean inTime = DateUtil.isIn(attendanceDate, classDetail.getOffWorkDate(), offWorkDateAfter);
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()) {
attendanceRecordDetailEntity.setOffWorkResult(GoWorkResultEnum.早退.getValue());
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
} }
} }
public String getWeek(Date date) {
public String getWeek(Date date) {
// Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday) // Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int dayOfWeek = DateUtil.dayOfWeek(date); int dayOfWeek = DateUtil.dayOfWeek(date);
// Map the numeric day of the week to its corresponding Chinese name // Map the numeric day of the week to its corresponding Chinese name
String[] dayOfWeekNames = new String[]{ String[] dayOfWeekNames = new String[]{
"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"
...@@ -473,74 +758,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte ...@@ -473,74 +758,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
// Get the Chinese name of the day of the week // Get the Chinese name of the day of the week
String dayOfWeekName = dayOfWeekNames[dayOfWeek - 1]; String dayOfWeekName = dayOfWeekNames[dayOfWeek - 1];
return dayOfWeekName; return dayOfWeekName;
//
// SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
// String week = sdf.format(date);
// return week;
} }
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
*
* @return
*/
/* public Long getWeekClassId(AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity, String week) {
Long weekClassId = 0L;
switch (week) {
case "星期一":
if (attendanceGroupFixedworkEntity.getMonday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getMondayClassId();
break;
case "星期二":
if (attendanceGroupFixedworkEntity.getTuesday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getTuesdayClassId();
break;
case "星期三":
if (attendanceGroupFixedworkEntity.getWednesday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getWednesdayClassId();
break;
case "星期四":
if (attendanceGroupFixedworkEntity.getThursday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getThursdayClassId();
break;
case "星期五":
if (attendanceGroupFixedworkEntity.getFriday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getFridayClassId();
break;
case "星期六":
if (attendanceGroupFixedworkEntity.getSaturday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSaturdayClassId();
break;
case "星期日":
if (attendanceGroupFixedworkEntity.getSunday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSundayClassId();
break;
}
return weekClassId;
}*/
/** /**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤 * 获取通过星期获取班次id 如果返参为-1 则不在考勤
* *
......
package com.mortals.xhx.module.attendance.web; package com.mortals.xhx.module.attendance.web;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -47,5 +50,13 @@ public class AttendanceExportRecordController extends BaseCRUDJsonBodyMappingCon ...@@ -47,5 +50,13 @@ public class AttendanceExportRecordController extends BaseCRUDJsonBodyMappingCon
super.init(model, context); super.init(model, context);
} }
@Override
protected void doListBefore(AttendanceExportRecordEntity query, Map<String, Object> model, Context context) throws AppException {
if (ObjectUtils.isEmpty(query.getOrderColList())) {
query.setOrderColList(Arrays.asList(new OrderCol("createTime", OrderCol.DESCENDING),new OrderCol("staffName", OrderCol.DESCENDING)));
} else {
query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING));
}
}
} }
package com.mortals.xhx.module.attendance.web; package com.mortals.xhx.module.attendance.web;
import com.mortals.framework.annotation.UnAuth; import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
...@@ -19,8 +20,10 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -19,8 +20,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
...@@ -28,20 +31,22 @@ import com.mortals.framework.util.StringUtils; ...@@ -28,20 +31,22 @@ import com.mortals.framework.util.StringUtils;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*; import static com.mortals.framework.ap.SysConstains.*;
/** /**
* * 考勤打卡记录异常信息
* 考勤打卡记录异常信息 *
* * @author zxfei
* @author zxfei * @date 2023-04-08
* @date 2023-04-08 */
*/
@RestController @RestController
@RequestMapping("attendance/record/error") @RequestMapping("attendance/record/error")
public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingController<AttendanceRecordErrorService,AttendanceRecordErrorEntity,Long> { public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingController<AttendanceRecordErrorService, AttendanceRecordErrorEntity, Long> {
@Autowired @Autowired
private ParamService paramService; private ParamService paramService;
...@@ -67,17 +72,17 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -67,17 +72,17 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
@Autowired @Autowired
private AttendanceRecordErrorService errorService; private AttendanceRecordErrorService errorService;
public AttendanceRecordErrorController(){ public AttendanceRecordErrorController() {
super.setModuleDesc( "考勤打卡记录异常信息"); super.setModuleDesc("考勤打卡记录异常信息");
} }
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "errorStatus", ErrorStatusEnum.getEnumMap()); this.addDict(model, "errorStatus", ErrorStatusEnum.getEnumMap());
this.addDict(model, "processStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","processStatus")); this.addDict(model, "processStatus", paramService.getParamBySecondOrganize("AttendanceRecordError", "processStatus"));
this.addDict(model,"deptId",deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getDeptName()))); this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
this.addDict(model,"groupId",attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName()))); this.addDict(model, "groupId", attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getGroupName())));
this.addDict(model,"classId",attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getClassName()))); this.addDict(model, "classId", attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getClassName())));
super.init(model, context); super.init(model, context);
} }
...@@ -92,11 +97,11 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -92,11 +97,11 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
query.setProcessResult("已撤销处理"); query.setProcessResult("已撤销处理");
errorService.update(query); errorService.update(query);
DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd); DateUtils.convertTime2Str(query.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd);
AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery(); AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
attendanceRecordQuery.setStaffId(query.getStaffId()); attendanceRecordQuery.setStaffId(query.getStaffId());
attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd)); attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd)); attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery); AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery);
AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery(); AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery();
detailQuery.setRecordId(attendanceRecordEntity.getId()); detailQuery.setRecordId(attendanceRecordEntity.getId());
...@@ -104,25 +109,25 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -104,25 +109,25 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery); List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery);
for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) { for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
if (query.getGoOrOff().equals("上班")){ if (query.getGoOrOff().equals("上班")) {
if (query.getErrorStatus()==0){ if (query.getErrorStatus() == 0) {
recordDetailEntity.setGoWorkResult(3); recordDetailEntity.setGoWorkResult(3);
} }
if (query.getErrorStatus()==2){ if (query.getErrorStatus() == 2) {
recordDetailEntity.setGoWorkResult(4); recordDetailEntity.setGoWorkResult(4);
} }
} }
if (query.getGoOrOff().equals("下班")){ if (query.getGoOrOff().equals("下班")) {
if (query.getErrorStatus()==0){ if (query.getErrorStatus() == 0) {
recordDetailEntity.setOffWorkResult(3); recordDetailEntity.setOffWorkResult(3);
} }
if (query.getErrorStatus()==1){ if (query.getErrorStatus() == 1) {
recordDetailEntity.setOffWorkResult(5); recordDetailEntity.setOffWorkResult(5);
} }
} }
} }
return Rest.ok(); return Rest.ok();
} }
...@@ -139,11 +144,11 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -139,11 +144,11 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
this.batchSave(entity.getRecordErrorEntities()); this.batchSave(entity.getRecordErrorEntities());
for (AttendanceRecordErrorEntity item : entity.getRecordErrorEntities()) { for (AttendanceRecordErrorEntity item : entity.getRecordErrorEntities()) {
DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd); DateUtils.convertTime2Str(item.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd);
AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery(); AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
attendanceRecordQuery.setStaffId(item.getStaffId()); attendanceRecordQuery.setStaffId(item.getStaffId());
attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd)); attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd)); attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery); AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery);
AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery(); AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery();
detailQuery.setRecordId(attendanceRecordEntity.getId()); detailQuery.setRecordId(attendanceRecordEntity.getId());
...@@ -153,46 +158,46 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -153,46 +158,46 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) { for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
Date goWorkDate = recordDetailEntity.getGoWorkDate(); Date goWorkDate = recordDetailEntity.getGoWorkDate();
Date offWorkDate = recordDetailEntity.getOffWorkDate(); Date offWorkDate = recordDetailEntity.getOffWorkDate();
if (item.getProcessResult().contains("正常")){ if (item.getProcessResult().contains("正常")) {
if (!ObjectUtils.isEmpty(goWorkDate)){ if (!ObjectUtils.isEmpty(goWorkDate)) {
if (goWorkDate.getTime()==item.getGoOffDateTime().getTime()){ if (goWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setGoWorkResult(1); recordDetailEntity.setGoWorkResult(1);
} }
}else { } else {
if (item.getGoOrOff().equals("上班")){ if (item.getGoOrOff().equals("上班")) {
recordDetailEntity.setGoWorkResult(1); recordDetailEntity.setGoWorkResult(1);
} }
} }
if (!ObjectUtils.isEmpty(offWorkDate)){ if (!ObjectUtils.isEmpty(offWorkDate)) {
if (offWorkDate.getTime()==item.getGoOffDateTime().getTime()){ if (offWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setOffWorkResult(1); recordDetailEntity.setOffWorkResult(1);
} }
}else { } else {
if (item.getGoOrOff().equals("下班")){ if (item.getGoOrOff().equals("下班")) {
recordDetailEntity.setOffWorkResult(1); recordDetailEntity.setOffWorkResult(1);
} }
} }
} }
if (item.getProcessResult().contains("早退")){ if (item.getProcessResult().contains("早退")) {
if (!ObjectUtils.isEmpty(offWorkDate)){ if (!ObjectUtils.isEmpty(offWorkDate)) {
if (offWorkDate.getTime()==item.getGoOffDateTime().getTime()){ if (offWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setOffWorkResult(5); recordDetailEntity.setOffWorkResult(5);
} }
}else{ } else {
if (item.getGoOrOff().equals("下班")){ if (item.getGoOrOff().equals("下班")) {
recordDetailEntity.setOffWorkResult(5); recordDetailEntity.setOffWorkResult(5);
} }
} }
} }
if (item.getProcessResult().contains("迟到")){ if (item.getProcessResult().contains("迟到")) {
if (!ObjectUtils.isEmpty(goWorkDate)){ if (!ObjectUtils.isEmpty(goWorkDate)) {
if (goWorkDate.getTime()==item.getGoOffDateTime().getTime()){ if (goWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setGoWorkResult(4); recordDetailEntity.setGoWorkResult(4);
} }
}else { } else {
if (item.getGoOrOff().equals("上班")){ if (item.getGoOrOff().equals("上班")) {
recordDetailEntity.setGoWorkResult(4); recordDetailEntity.setGoWorkResult(4);
} }
} }
...@@ -205,7 +210,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -205,7 +210,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
@Override @Override
protected int editAfter(Long id, Map<String, Object> model, AttendanceRecordErrorEntity entity, Context context) throws AppException { protected int editAfter(Long id, Map<String, Object> model, AttendanceRecordErrorEntity entity, Context context) throws AppException {
this.addDict(model, "errorStatus", paramService.getParamBySecondOrganize("AttendanceRecordDetail","goWorkResult")); this.addDict(model, "errorStatus", paramService.getParamBySecondOrganize("AttendanceRecordDetail", "goWorkResult"));
return super.editAfter(id, model, entity, context); return super.editAfter(id, model, entity, context);
} }
...@@ -214,11 +219,13 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont ...@@ -214,11 +219,13 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
for (AttendanceRecordErrorEntity errorEntity : list) { for (AttendanceRecordErrorEntity errorEntity : list) {
Long shiftsId = errorEntity.getShiftsId(); Long shiftsId = errorEntity.getShiftsId();
AttendanceClassDetailEntity attendanceClassDetailEntity = classDetailService.selectOne(new AttendanceClassDetailQuery().id(shiftsId)); AttendanceClassDetailEntity attendanceClassDetailEntity = classDetailService.selectOne(new AttendanceClassDetailQuery().id(shiftsId));
if (errorEntity.getGoOffDateTime().getTime()==attendanceClassDetailEntity.getGoWorkDate().getTime()){ if (!ObjectUtils.isEmpty(attendanceClassDetailEntity)) {
errorEntity.setGoOrOff("上班"); if (errorEntity.getGoOffDateTime().getTime() == attendanceClassDetailEntity.getGoWorkDate().getTime()) {
} errorEntity.setGoOrOff("上班");
if (errorEntity.getGoOffDateTime().getTime()==attendanceClassDetailEntity.getOffWorkDate().getTime()){ }
errorEntity.setGoOrOff("下班"); if (errorEntity.getGoOffDateTime().getTime() == attendanceClassDetailEntity.getOffWorkDate().getTime()) {
errorEntity.setGoOrOff("下班");
}
} }
} }
super.doListAfter(query, list, context); super.doListAfter(query, list, context);
......
...@@ -127,7 +127,7 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro ...@@ -127,7 +127,7 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
if (ObjectUtils.isEmpty(hikEntity.getAttendanceDateStart())) { if (ObjectUtils.isEmpty(hikEntity.getAttendanceDateStart())) {
throw new AppException("请选择开始日期"); throw new AppException("请选择开始日期");
} }
hikService.addAttendanceRecord(hikEntity, getContext()); hikService.addAttendanceRecordByQuery(hikEntity, getContext());
model.put("message_info", busiDesc + "成功"); model.put("message_info", busiDesc + "成功");
this.recordSysLog(this.request, busiDesc + " 【成功】"); this.recordSysLog(this.request, busiDesc + " 【成功】");
} catch (Exception e) { } catch (Exception e) {
......
...@@ -5,11 +5,14 @@ import com.mortals.xhx.base.system.param.service.ParamService; ...@@ -5,11 +5,14 @@ import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.common.code.AllHolidaysEnum; import com.mortals.xhx.common.code.AllHolidaysEnum;
import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceEntity; import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceEntity;
import com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceService; import com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceService;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* *
...@@ -25,6 +28,9 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping ...@@ -25,6 +28,9 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping
@Autowired @Autowired
private ParamService paramService; private ParamService paramService;
@Autowired
private DeptService deptService;
public AttendanceVacationBalanceController(){ public AttendanceVacationBalanceController(){
super.setModuleDesc( "员工假期余额信息"); super.setModuleDesc( "员工假期余额信息");
...@@ -33,6 +39,7 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping ...@@ -33,6 +39,7 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"AllHolidays",AllHolidaysEnum.getEnumMap()); this.addDict(model,"AllHolidays",AllHolidaysEnum.getEnumMap());
this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
super.init(model, context); super.init(model, context);
} }
......
package com.mortals.xhx.module.check.model; package com.mortals.xhx.module.check.model;
import com.mortals.framework.model.OrderCol;
import lombok.Data; import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data @Data
public class CheckAllRecordQuery { public class CheckAllRecordQuery {
/** /**
...@@ -34,5 +38,6 @@ public class CheckAllRecordQuery { ...@@ -34,5 +38,6 @@ public class CheckAllRecordQuery {
*/ */
private Integer subAddType; private Integer subAddType;
private transient List<OrderCol> orderColList = new ArrayList();
} }
...@@ -227,7 +227,7 @@ public class CheckAttendRecordServiceImpl extends AbstractCRUDServiceImpl<CheckA ...@@ -227,7 +227,7 @@ public class CheckAttendRecordServiceImpl extends AbstractCRUDServiceImpl<CheckA
erro = erro.add(staffPerformSummaryEntity.getComplainScore()); erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro); staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro)); staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId()); staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date()); staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity); staffPerformSummaryService.update(staffPerformSummaryEntity);
...@@ -238,7 +238,7 @@ public class CheckAttendRecordServiceImpl extends AbstractCRUDServiceImpl<CheckA ...@@ -238,7 +238,7 @@ public class CheckAttendRecordServiceImpl extends AbstractCRUDServiceImpl<CheckA
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0)); staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore()); staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore())); staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l); staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date()); staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity); staffPerformSummaryService.save(staffPerformSummaryEntity);
......
...@@ -222,7 +222,7 @@ public class CheckComplainRecordServiceImpl extends AbstractCRUDServiceImpl<Chec ...@@ -222,7 +222,7 @@ public class CheckComplainRecordServiceImpl extends AbstractCRUDServiceImpl<Chec
erro = erro.add(staffPerformSummaryEntity.getComplainScore()); erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro); staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro)); staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId()); staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date()); staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity); staffPerformSummaryService.update(staffPerformSummaryEntity);
...@@ -236,7 +236,7 @@ public class CheckComplainRecordServiceImpl extends AbstractCRUDServiceImpl<Chec ...@@ -236,7 +236,7 @@ public class CheckComplainRecordServiceImpl extends AbstractCRUDServiceImpl<Chec
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0)); staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore()); staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore())); staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l); staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date()); staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity); staffPerformSummaryService.save(staffPerformSummaryEntity);
......
...@@ -222,7 +222,7 @@ public class CheckEffectRecordServiceImpl extends AbstractCRUDServiceImpl<CheckE ...@@ -222,7 +222,7 @@ public class CheckEffectRecordServiceImpl extends AbstractCRUDServiceImpl<CheckE
erro = erro.add(staffPerformSummaryEntity.getComplainScore()); erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro); staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro)); staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId()); staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date()); staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity); staffPerformSummaryService.update(staffPerformSummaryEntity);
...@@ -236,7 +236,7 @@ public class CheckEffectRecordServiceImpl extends AbstractCRUDServiceImpl<CheckE ...@@ -236,7 +236,7 @@ public class CheckEffectRecordServiceImpl extends AbstractCRUDServiceImpl<CheckE
staffPerformSummaryEntity.setGoworkScore(new BigDecimal(0)); staffPerformSummaryEntity.setGoworkScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore()); staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore())); staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l); staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date()); staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity); staffPerformSummaryService.save(staffPerformSummaryEntity);
......
...@@ -221,7 +221,7 @@ public class CheckGoworkRecordServiceImpl extends AbstractCRUDServiceImpl<CheckG ...@@ -221,7 +221,7 @@ public class CheckGoworkRecordServiceImpl extends AbstractCRUDServiceImpl<CheckG
erro = erro.add(staffPerformSummaryEntity.getComplainScore()); erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro); staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro)); staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId()); staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date()); staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity); staffPerformSummaryService.update(staffPerformSummaryEntity);
...@@ -235,7 +235,7 @@ public class CheckGoworkRecordServiceImpl extends AbstractCRUDServiceImpl<CheckG ...@@ -235,7 +235,7 @@ public class CheckGoworkRecordServiceImpl extends AbstractCRUDServiceImpl<CheckG
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0)); staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore()); staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore())); staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l); staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date()); staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity); staffPerformSummaryService.save(staffPerformSummaryEntity);
......
...@@ -226,7 +226,7 @@ public class CheckOtherRecordServiceImpl extends AbstractCRUDServiceImpl<CheckOt ...@@ -226,7 +226,7 @@ public class CheckOtherRecordServiceImpl extends AbstractCRUDServiceImpl<CheckOt
erro = erro.add(staffPerformSummaryEntity.getComplainScore()); erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro); staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro)); staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId()); staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date()); staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity); staffPerformSummaryService.update(staffPerformSummaryEntity);
...@@ -240,7 +240,7 @@ public class CheckOtherRecordServiceImpl extends AbstractCRUDServiceImpl<CheckOt ...@@ -240,7 +240,7 @@ public class CheckOtherRecordServiceImpl extends AbstractCRUDServiceImpl<CheckOt
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0)); staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore()); staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore())); staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l); staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date()); staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity); staffPerformSummaryService.save(staffPerformSummaryEntity);
......
...@@ -226,7 +226,7 @@ public class CheckReviewRecordServiceImpl extends AbstractCRUDServiceImpl<CheckR ...@@ -226,7 +226,7 @@ public class CheckReviewRecordServiceImpl extends AbstractCRUDServiceImpl<CheckR
erro = erro.add(staffPerformSummaryEntity.getComplainScore()); erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro); staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro)); staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId()); staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date()); staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity); staffPerformSummaryService.update(staffPerformSummaryEntity);
...@@ -240,7 +240,7 @@ public class CheckReviewRecordServiceImpl extends AbstractCRUDServiceImpl<CheckR ...@@ -240,7 +240,7 @@ public class CheckReviewRecordServiceImpl extends AbstractCRUDServiceImpl<CheckR
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0)); staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore()); staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100); BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore())); staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l); staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date()); staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity); staffPerformSummaryService.save(staffPerformSummaryEntity);
......
package com.mortals.xhx.module.dept.model; package com.mortals.xhx.module.dept.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.Date;
import java.util.ArrayList; import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel; import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.dept.model.vo.DeptPerformStatVo; import com.mortals.xhx.module.dept.model.vo.DeptPerformStatVo;
import lombok.Data; import lombok.Data;
/** /**
* 部门绩效分数统计实体对象 * 部门绩效分数统计实体对象
* *
* @author zxfei * @author zxfei
* @date 2023-07-14 * @date 2023-07-20
*/ */
@Data @Data
public class DeptPerformStatEntity extends DeptPerformStatVo { public class DeptPerformStatEntity extends DeptPerformStatVo {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* 部门id号 * 部门id号
*/ */
private Long deptId; private Long deptId;
/** /**
* 部门名称 * 部门名称
*/ */
private String deptName; private String deptName;
/** /**
* 部门绩效总分数 * 部门绩效总分数
*/ */
@Excel(name = "部门绩效总分数") @Excel(name = "部门绩效总分数")
private BigDecimal totalScore; private BigDecimal totalScore;
/** /**
* 部门绩效加分总分数汇总 * 部门绩效加分总分数汇总
*/ */
@Excel(name = "部门绩效加分总分数汇总") @Excel(name = "部门绩效加分总分数汇总")
private BigDecimal totalAddScore; private BigDecimal totalAddScore;
/** /**
* 部门绩效减分总分数汇总 * 部门绩效减分总分数汇总
*/ */
@Excel(name = "部门绩效减分总分数汇总") @Excel(name = "部门绩效减分总分数汇总")
private BigDecimal totalSubScore; private BigDecimal totalSubScore;
/** /**
* 考勤绩效指标增加分数 * 考勤绩效指标增加分数
*/ */
private BigDecimal attendScoreAdd; private BigDecimal attendScoreAdd;
/** /**
* 考勤绩效指标扣减分数 * 考勤绩效指标扣减分数
*/ */
private BigDecimal attendScoreSub; private BigDecimal attendScoreSub;
/** /**
* 评价绩效指标增加分数 * 评价绩效指标增加分数
*/ */
private BigDecimal reviewScoreAdd; private BigDecimal reviewScoreAdd;
/** /**
* 评价绩效指标扣减分数 * 评价绩效指标扣减分数
*/ */
private BigDecimal reviewScoreSub; private BigDecimal reviewScoreSub;
/** /**
* 投诉绩效指标增加分数 * 投诉绩效指标增加分数
*/ */
private BigDecimal complainScoreAdd; private BigDecimal complainScoreAdd;
/** /**
* 投诉绩效指标扣减分数 * 投诉绩效指标扣减分数
*/ */
private BigDecimal complainScoreSub; private BigDecimal complainScoreSub;
/** /**
* 办件绩效指标增加分数 * 办件绩效指标增加分数
*/ */
private BigDecimal goworkScoreAdd; private BigDecimal goworkScoreAdd;
/** /**
* 办件绩效指标扣减分数 * 办件绩效指标扣减分数
*/ */
private BigDecimal goworkScoreSub; private BigDecimal goworkScoreSub;
/** /**
* 效能绩效指标增加分数 * 效能绩效指标增加分数
*/ */
private BigDecimal effectScoreAdd; private BigDecimal effectScoreAdd;
/** /**
* 效能绩效指标扣减分数 * 效能绩效指标扣减分数
*/ */
private BigDecimal effectScoreSub; private BigDecimal effectScoreSub;
/** /**
* 其它绩效指标增加分数 * 其它绩效指标增加分数
*/ */
private BigDecimal otherScoreAdd; private BigDecimal otherScoreAdd;
/** /**
* 其它绩效指标扣减分数 * 其它绩效指标扣减分数
*/ */
private BigDecimal otherScoreSub; private BigDecimal otherScoreSub;
/** /**
* 部门绩效平均分数,根据部门所属人数平均 * 部门绩效平均分数,根据部门所属人数平均
*/ */
@Excel(name = "部门绩效平均分数,根据部门所属人数平均") @Excel(name = "部门绩效平均分数,根据部门所属人数平均")
private BigDecimal averageScore; private BigDecimal averageScore;
/** /**
* 备注 * 备注
*/ */
private String remark; private String remark;
/** /**
* 年 * 年
*/ */
private Integer year; private Integer year;
/** /**
* 月 * 月
*/ */
private Integer month; private Integer month;
/** /**
* 日 * 日
*/ */
private Integer day; private Integer day;
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
} }
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
...@@ -119,7 +117,7 @@ public class DeptPerformStatEntity extends DeptPerformStatVo { ...@@ -119,7 +117,7 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
if (obj instanceof DeptPerformStatEntity) { if (obj instanceof DeptPerformStatEntity) {
DeptPerformStatEntity tmp = (DeptPerformStatEntity) obj; DeptPerformStatEntity tmp = (DeptPerformStatEntity) obj;
if (this.getId() == tmp.getId()) { if (this.getId() == tmp.getId()) {
return true; return true;
} }
} }
return false; return false;
...@@ -127,48 +125,48 @@ public class DeptPerformStatEntity extends DeptPerformStatVo { ...@@ -127,48 +125,48 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
public void initAttrValue(){ public void initAttrValue(){
this.deptId = 0L; this.deptId = 0L;
this.deptName = ""; this.deptName = "";
this.totalScore = new BigDecimal(0); this.totalScore = new BigDecimal(0);
this.totalAddScore = new BigDecimal(0); this.totalAddScore = new BigDecimal(0);
this.totalSubScore = new BigDecimal(0); this.totalSubScore = new BigDecimal(0);
this.attendScoreAdd = new BigDecimal(0); this.attendScoreAdd = new BigDecimal(0);
this.attendScoreSub = new BigDecimal(0); this.attendScoreSub = new BigDecimal(0);
this.reviewScoreAdd = new BigDecimal(0); this.reviewScoreAdd = new BigDecimal(0);
this.reviewScoreSub = new BigDecimal(0); this.reviewScoreSub = new BigDecimal(0);
this.complainScoreAdd = new BigDecimal(0); this.complainScoreAdd = new BigDecimal(0);
this.complainScoreSub = new BigDecimal(0); this.complainScoreSub = new BigDecimal(0);
this.goworkScoreAdd = new BigDecimal(0); this.goworkScoreAdd = new BigDecimal(0);
this.goworkScoreSub = new BigDecimal(0); this.goworkScoreSub = new BigDecimal(0);
this.effectScoreAdd = new BigDecimal(0); this.effectScoreAdd = new BigDecimal(0);
this.effectScoreSub = new BigDecimal(0); this.effectScoreSub = new BigDecimal(0);
this.otherScoreAdd = new BigDecimal(0); this.otherScoreAdd = new BigDecimal(0);
this.otherScoreSub = new BigDecimal(0); this.otherScoreSub = new BigDecimal(0);
this.averageScore = new BigDecimal(0); this.averageScore = new BigDecimal(0);
this.remark = ""; this.remark = "";
this.year = -1; this.year = DateUtil.year(new Date());
this.month = -1; this.month = DateUtil.month(new Date())+1;
this.day = -1; this.day = DateUtil.dayOfMonth(new Date());
} }
} }
\ No newline at end of file
package com.mortals.xhx.module.dept.service; package com.mortals.xhx.module.dept.service;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.dept.dao.DeptDao;
import com.mortals.xhx.module.dept.model.DeptEntity; import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptTreeSelect; import com.mortals.xhx.module.dept.model.DeptTreeSelect;
...@@ -15,6 +16,8 @@ import java.util.List; ...@@ -15,6 +16,8 @@ import java.util.List;
*/ */
public interface DeptService extends ICRUDService<DeptEntity,Long>{ public interface DeptService extends ICRUDService<DeptEntity,Long>{
DeptDao getDao();
/** /**
* 是否存在部门信息节点 * 是否存在部门信息节点
* *
......
...@@ -52,6 +52,12 @@ public abstract class AbstractDingTalkService implements IDingPersonService { ...@@ -52,6 +52,12 @@ public abstract class AbstractDingTalkService implements IDingPersonService {
@Value("${dingtalk.AppSecret:''}") @Value("${dingtalk.AppSecret:''}")
protected String appSecret; protected String appSecret;
/**
* appKey
*/
@Value("${dingtalk.oaUrl:}")
protected String oaUrl;
@Autowired @Autowired
private ICacheService cacheService; private ICacheService cacheService;
......
...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service; ...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service;
import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody; import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.dingding.IDingTalkService; import com.mortals.xhx.module.dingding.IDingTalkService;
import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq; import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq;
...@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService { ...@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService {
*/ */
Rest<String> getPersonByMobile(String mobile); Rest<String> getPersonByMobile(String mobile);
/**
* 根据id获取用户电话
*
* @param id
* @return
*/
Rest<String> getPersonById(String id);
/** /**
* 根据code获取钉钉用户id * 根据code获取钉钉用户id
* *
......
...@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody; ...@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import com.aliyun.tea.TeaException; import com.aliyun.tea.TeaException;
import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request; import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest; import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest; import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response; import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse; import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
...@@ -22,6 +24,8 @@ import org.apache.poi.ss.formula.functions.T; ...@@ -22,6 +24,8 @@ import org.apache.poi.ss.formula.functions.T;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.HashMap;
@Service("dingPersonService") @Service("dingPersonService")
@Slf4j @Slf4j
...@@ -48,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID ...@@ -48,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
} }
} }
@Override
public Rest<String> getPersonById(String id) {
try {
DingTalkClient client = getDingTalkClient("/topapi/v2/user/get");
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
req.setUserid(id); //用户id
log.info("getPersonByID:{}",id);
OapiV2UserGetResponse rsp = client.execute(req, getToken());
log.info("钉钉返回用户信息:{}", rsp.getBody());
if (rsp.getErrcode() == 0) {
return Rest.ok("成功", rsp.getResult().getMobile());
} else {
return Rest.fail(String.format("code:%s,msg:%s", rsp.getErrcode(), rsp.getErrmsg()));
}
} catch (ApiException e) {
log.info("根据手机号码查询人员异常", e);
return Rest.fail(e.getMessage());
}
}
@Override @Override
public Rest<String> getPersonByCode(String code) { public Rest<String> getPersonByCode(String code) {
try { try {
...@@ -118,9 +142,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID ...@@ -118,9 +142,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
*/ */
public com.aliyun.dingtalkworkflow_1_0.Client createClient() throws Exception { public com.aliyun.dingtalkworkflow_1_0.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config(); com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.protocol = "https"; config.protocol = "http";
config.regionId = "central"; config.regionId = "central";
config.endpoint = domain.replace("http://",""); config.endpoint = oaUrl;
return new com.aliyun.dingtalkworkflow_1_0.Client(config); return new com.aliyun.dingtalkworkflow_1_0.Client(config);
} }
...@@ -130,13 +154,17 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID ...@@ -130,13 +154,17 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
com.aliyun.dingtalkworkflow_1_0.Client client = createClient(); com.aliyun.dingtalkworkflow_1_0.Client client = createClient();
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders getProcessInstanceHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders(); com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders getProcessInstanceHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders();
getProcessInstanceHeaders.xAcsDingtalkAccessToken = getToken(); getProcessInstanceHeaders.xAcsDingtalkAccessToken = getToken();
HashMap<String, String> map = new HashMap<>();
getProcessInstanceHeaders.setCommonHeaders(map);
getProcessInstanceHeaders.getCommonHeaders().put("host", "172.15.28.113:8919");
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest getProcessInstanceRequest = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest() com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest getProcessInstanceRequest = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest()
.setProcessInstanceId(processInstanceId); .setProcessInstanceId(processInstanceId);
log.info("processInstanceId:{}", processInstanceId);
GetProcessInstanceResponse rsp = client.getProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new com.aliyun.teautil.models.RuntimeOptions()); GetProcessInstanceResponse rsp = client.getProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new com.aliyun.teautil.models.RuntimeOptions());
return Rest.ok("成功", rsp.getBody().getResult()); return Rest.ok("成功", rsp.getBody().getResult());
} catch (Exception e) { } catch (Exception e) {
log.info("根据用户查询审批详情失败", e); log.error("根据用户查询审批详情失败", e);
return Rest.fail(e.getMessage()); return Rest.fail(e.getMessage());
} }
......
...@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import com.mortals.framework.annotation.UnAuth; import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo; import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result; import com.mortals.framework.model.Result;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
...@@ -73,6 +74,15 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba ...@@ -73,6 +74,15 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba
super.init(model, context); super.init(model, context);
} }
@Override
protected void doListBefore(FeedbackEntity query, Map<String, Object> model, Context context) throws AppException {
if (ObjectUtils.isEmpty(query.getOrderColList())) {
query.setOrderColList(Arrays.asList(new OrderCol("createTime", OrderCol.DESCENDING)));
} else {
query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING));
}
}
@Override @Override
protected int infoAfter(Long id, Map<String, Object> model, FeedbackEntity entity, Context context) throws AppException { protected int infoAfter(Long id, Map<String, Object> model, FeedbackEntity entity, Context context) throws AppException {
if (CollectionUtils.isNotEmpty(entity.getFeedbackQuestionList())) { if (CollectionUtils.isNotEmpty(entity.getFeedbackQuestionList())) {
......
...@@ -8,7 +8,7 @@ import java.util.Map; ...@@ -8,7 +8,7 @@ import java.util.Map;
public abstract class AbstractHikService { public abstract class AbstractHikService {
@Value("${hik.host:''}") @Value("${hik.host:}")
protected String host; protected String host;
@Value("${hik.appKey:''}") @Value("${hik.appKey:''}")
......
...@@ -159,7 +159,7 @@ public class JobEntity extends JobVo { ...@@ -159,7 +159,7 @@ public class JobEntity extends JobVo {
public void initAttrValue(){ public void initAttrValue(){
this.groupId = 0L; this.groupId = null;
this.groupName = ""; this.groupName = "";
......
...@@ -42,7 +42,7 @@ public class JobController extends BaseCRUDJsonBodyMappingController<JobService, ...@@ -42,7 +42,7 @@ public class JobController extends BaseCRUDJsonBodyMappingController<JobService,
@Override @Override
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "type", JobTypeEnum.getEnumMap()); this.addDict(model, "type", JobTypeEnum.getEnumMap());
this.addDict(model, "group",service.queryGroupName(new JobQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName(),(o, n)->n))); this.addDict(model, "groupId",service.queryGroupName(new JobQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName(),(o, n)->n)));
super.init(model, context); super.init(model, context);
} }
......
...@@ -124,11 +124,11 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -124,11 +124,11 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
sendCheckDingTalk(appealEntity); sendCheckDingTalk(appealEntity);
log.info(appealMsg); log.info(appealMsg);
if (appeal.getAppealResult() == AppealResultEnum.通过.getValue()) { if (appealEntity.getAppealResult() == AppealResultEnum.通过.getValue()) {
if (appeal.getSubAddType() == SubAddTypeEnum.扣除.getValue()) { if (appealEntity.getSubAddType() == SubAddTypeEnum.扣除.getValue()) {
//需增一条记录后 冲销相关核查的记录 //需增一条记录后 冲销相关核查的记录
if (PerformTypeEnum.考勤绩效.getValue().equals(appeal.getPerformType())) { if (PerformTypeEnum.考勤绩效.getValue().equals(appealEntity.getPerformType())) {
CheckAttendRecordEntity checkEntity = checkAttendRecordService.get(appeal.getCheckRecordId(), context); CheckAttendRecordEntity checkEntity = checkAttendRecordService.get(appealEntity.getCheckRecordId(), context);
CheckAttendRecordEntity checkAttendRecordEntity = new CheckAttendRecordEntity(); CheckAttendRecordEntity checkAttendRecordEntity = new CheckAttendRecordEntity();
checkAttendRecordEntity.initAttrValue(); checkAttendRecordEntity.initAttrValue();
...@@ -137,8 +137,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -137,8 +137,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkAttendRecordEntity.setSubMethod(SubMethodEnum.申诉冲销.getValue()); checkAttendRecordEntity.setSubMethod(SubMethodEnum.申诉冲销.getValue());
checkAttendRecordEntity.setRemark(appealMsg); checkAttendRecordEntity.setRemark(appealMsg);
checkAttendRecordService.save(checkAttendRecordEntity, context); checkAttendRecordService.save(checkAttendRecordEntity, context);
} else if (PerformTypeEnum.评价差评绩效.getValue().equals(appeal.getPerformType())) { } else if (PerformTypeEnum.评价差评绩效.getValue().equals(appealEntity.getPerformType())) {
CheckReviewRecordEntity checkEntity = checkReviewRecordService.get(appeal.getCheckRecordId(), context); CheckReviewRecordEntity checkEntity = checkReviewRecordService.get(appealEntity.getCheckRecordId(), context);
CheckReviewRecordEntity checkRecordEntity = new CheckReviewRecordEntity(); CheckReviewRecordEntity checkRecordEntity = new CheckReviewRecordEntity();
checkRecordEntity.initAttrValue(); checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"}); BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
...@@ -148,8 +148,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -148,8 +148,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateTime(new Date()); checkRecordEntity.setCreateTime(new Date());
checkRecordEntity.setCreateUserId(this.getContextUserId(context)); checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkReviewRecordService.save(checkRecordEntity, context); checkReviewRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.评价投诉绩效.getValue().equals(appeal.getPerformType())) { } else if (PerformTypeEnum.评价投诉绩效.getValue().equals(appealEntity.getPerformType())) {
CheckComplainRecordEntity checkEntity = checkComplainRecordService.get(appeal.getCheckRecordId(), context); CheckComplainRecordEntity checkEntity = checkComplainRecordService.get(appealEntity.getCheckRecordId(), context);
CheckComplainRecordEntity checkRecordEntity = new CheckComplainRecordEntity(); CheckComplainRecordEntity checkRecordEntity = new CheckComplainRecordEntity();
checkRecordEntity.initAttrValue(); checkRecordEntity.initAttrValue();
...@@ -161,8 +161,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -161,8 +161,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateUserId(this.getContextUserId(context)); checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkComplainRecordService.save(checkRecordEntity, context); checkComplainRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.办件绩效.getValue().equals(appeal.getPerformType())) { } else if (PerformTypeEnum.办件绩效.getValue().equals(appealEntity.getPerformType())) {
CheckGoworkRecordEntity checkEntity = checkGoworkRecordService.get(appeal.getCheckRecordId(), context); CheckGoworkRecordEntity checkEntity = checkGoworkRecordService.get(appealEntity.getCheckRecordId(), context);
CheckGoworkRecordEntity checkRecordEntity = new CheckGoworkRecordEntity(); CheckGoworkRecordEntity checkRecordEntity = new CheckGoworkRecordEntity();
checkRecordEntity.initAttrValue(); checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"}); BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
...@@ -173,8 +173,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -173,8 +173,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateUserId(this.getContextUserId(context)); checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkGoworkRecordService.save(checkRecordEntity, context); checkGoworkRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.效能绩效.getValue().equals(appeal.getPerformType())) { } else if (PerformTypeEnum.效能绩效.getValue().equals(appealEntity.getPerformType())) {
CheckEffectRecordEntity checkEntity = checkEffectRecordService.get(appeal.getCheckRecordId(), context); CheckEffectRecordEntity checkEntity = checkEffectRecordService.get(appealEntity.getCheckRecordId(), context);
CheckEffectRecordEntity checkRecordEntity = new CheckEffectRecordEntity(); CheckEffectRecordEntity checkRecordEntity = new CheckEffectRecordEntity();
checkRecordEntity.initAttrValue(); checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"}); BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
...@@ -185,8 +185,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -185,8 +185,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateUserId(this.getContextUserId(context)); checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkEffectRecordService.save(checkRecordEntity, context); checkEffectRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.其它绩效.getValue().equals(appeal.getPerformType())) { } else if (PerformTypeEnum.其它绩效.getValue().equals(appealEntity.getPerformType())) {
CheckOtherRecordEntity checkEntity = checkOtherRecordService.get(appeal.getCheckRecordId(), context); CheckOtherRecordEntity checkEntity = checkOtherRecordService.get(appealEntity.getCheckRecordId(), context);
CheckOtherRecordEntity checkRecordEntity = new CheckOtherRecordEntity(); CheckOtherRecordEntity checkRecordEntity = new CheckOtherRecordEntity();
checkRecordEntity.initAttrValue(); checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"}); BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
......
...@@ -12,6 +12,8 @@ import com.mortals.xhx.base.system.param.service.ParamService; ...@@ -12,6 +12,8 @@ import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.base.system.user.model.UserQuery; import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.common.code.*; import com.mortals.xhx.common.code.*;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.perform.model.PerformRulesQuery; import com.mortals.xhx.module.perform.model.PerformRulesQuery;
import com.mortals.xhx.module.perform.model.vo.AppealInfo; import com.mortals.xhx.module.perform.model.vo.AppealInfo;
import com.mortals.xhx.module.perform.model.vo.AppealSummaryQuery; import com.mortals.xhx.module.perform.model.vo.AppealSummaryQuery;
...@@ -65,6 +67,8 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro ...@@ -65,6 +67,8 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
private UserService userService; private UserService userService;
@Autowired @Autowired
private PerformRulesService rulesService; private PerformRulesService rulesService;
@Autowired
private DeptService deptService;
public PerformAttendAppealController() { public PerformAttendAppealController() {
...@@ -77,14 +81,16 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro ...@@ -77,14 +81,16 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
this.addDict(model, "updateUserId", userService.find(new UserQuery()).stream().collect(toMap(x -> x.getId().toString(), y -> y.getRealName(), (o, n) -> n))); this.addDict(model, "updateUserId", userService.find(new UserQuery()).stream().collect(toMap(x -> x.getId().toString(), y -> y.getRealName(), (o, n) -> n)));
this.addDict(model, "ruleId", rulesService.find(new PerformRulesQuery()).stream().collect(toMap(x -> x.getId().toString(), y -> y.getName(), (o, n) -> n))); this.addDict(model, "ruleId", rulesService.find(new PerformRulesQuery()).stream().collect(toMap(x -> x.getId().toString(), y -> y.getName(), (o, n) -> n)));
this.addDict(model, "checkResult", CheckResultEnum.getEnumMap()); this.addDict(model, "checkResult", CheckResultEnum.getEnumMap());
this.addDict(model, "subMethod", paramService.getParamBySecondOrganize("PerformAttendAppeal", "subMethod")); this.addDict(model, "subMethod", SubMethodEnum.getEnumMap());
this.addDict(model, "subAddType", paramService.getParamBySecondOrganize("PerformAttendAppeal", "subAddType")); this.addDict(model, "subAddType", SubAddTypeEnum.getEnumMap());
this.addDict(model, "processStatus", ProcessStatusEnum.getEnumMap()); this.addDict(model, "processStatus", ProcessStatusEnum.getEnumMap());
this.addDict(model, "appealResult", paramService.getParamBySecondOrganize("PerformAttendAppeal", "appealResult")); this.addDict(model, "appealResult", AppealResultEnum.getEnumMap());
this.addDict(model, "reviewResult", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewResult")); this.addDict(model, "reviewResult", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewResult"));
this.addDict(model, "reviewSource", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewSource")); this.addDict(model, "reviewSource", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewSource"));
this.addDict(model, "irregularType", IrregularTypeEnum.getEnumMap()); this.addDict(model, "irregularType", IrregularTypeEnum.getEnumMap());
this.addDict(model, "irregularOtherType", paramService.getParamBySecondOrganize("PerformAttendAppeal", "irregularOtherType")); this.addDict(model, "irregularOtherType", IrregularOtherTypeEnum.getEnumMap());
this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
super.init(model, context); super.init(model, context);
} }
...@@ -96,7 +102,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro ...@@ -96,7 +102,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
} else { } else {
query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING)); query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING));
} }
if(!ObjectUtils.isEmpty(query.getCreateTime())){ if (!ObjectUtils.isEmpty(query.getCreateTime())) {
query.setCreateTimeStart(DateUtil.formatDate(query.getCreateTime())); query.setCreateTimeStart(DateUtil.formatDate(query.getCreateTime()));
query.setCreateTimeEnd(DateUtil.formatDate(query.getCreateTime())); query.setCreateTimeEnd(DateUtil.formatDate(query.getCreateTime()));
} }
...@@ -132,7 +138,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro ...@@ -132,7 +138,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
*/ */
@PostMapping(value = "audit") @PostMapping(value = "audit")
public String appealAudit(@RequestBody PerformAttendAppealEntity appeal) { public String appealAudit(@RequestBody PerformAttendAppealEntity appeal) {
log.info("appeal audit ==>{}",JSONObject.toJSONString(appeal)); log.info("appeal audit ==>{}", JSONObject.toJSONString(appeal));
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
String busiDesc = this.getModuleDesc() + "审核"; String busiDesc = this.getModuleDesc() + "审核";
try { try {
...@@ -142,7 +148,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro ...@@ -142,7 +148,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
} }
recordSysLog(request, busiDesc + " 【成功】"); recordSysLog(request, busiDesc + " 【成功】");
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS); jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
jsonObject.put(KEY_RESULT_MSG, busiDesc+ "成功!"); jsonObject.put(KEY_RESULT_MSG, busiDesc + "成功!");
} catch (Exception e) { } catch (Exception e) {
log.error("申诉审核", e); log.error("申诉审核", e);
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE); jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
...@@ -153,6 +159,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro ...@@ -153,6 +159,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
/** /**
* 申述分布情况统计 * 申述分布情况统计
*
* @param query * @param query
* @return * @return
*/ */
...@@ -166,15 +173,15 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro ...@@ -166,15 +173,15 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
int code = 1; int code = 1;
try { try {
List<PerformAttendAppealEntity> result = this.getService().getAppealSummaryList(query); List<PerformAttendAppealEntity> result = this.getService().getAppealSummaryList(query);
Map<String,String> dict = new HashMap<>(); Map<String, String> dict = new HashMap<>();
//attend:考勤绩效,review:评价差评绩效,complain:评价投诉绩效,gowork:办件绩效,effect:效能绩效,other:其它绩效 //attend:考勤绩效,review:评价差评绩效,complain:评价投诉绩效,gowork:办件绩效,effect:效能绩效,other:其它绩效
dict.put("attend","考勤绩效"); dict.put("attend", "考勤绩效");
dict.put("review","评价差评绩效"); dict.put("review", "评价差评绩效");
dict.put("complain","评价投诉绩效"); dict.put("complain", "评价投诉绩效");
dict.put("gowork","办件绩效"); dict.put("gowork", "办件绩效");
dict.put("effect","效能绩效"); dict.put("effect", "效能绩效");
dict.put("other","其它绩效"); dict.put("other", "其它绩效");
this.addDict(model,"performType",dict); this.addDict(model, "performType", dict);
model.put("data", result); model.put("data", result);
model.put("message_info", busiDesc + "成功"); model.put("message_info", busiDesc + "成功");
if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) { if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) {
......
...@@ -74,4 +74,5 @@ dingtalk: ...@@ -74,4 +74,5 @@ dingtalk:
AppSecret: @profiles.dingtalk.appSecret@ AppSecret: @profiles.dingtalk.appSecret@
AesKey: @profiles.dingtalk.aesKey@ AesKey: @profiles.dingtalk.aesKey@
token: @profiles.dingtalk.token@ token: @profiles.dingtalk.token@
oaUrl: @profiles.dingtalk.oaUrl@
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<plugin interceptor="com.mortals.framework.thirty.mybatis.LogInterceptor"> <plugin interceptor="com.mortals.framework.thirty.mybatis.LogInterceptor">
<property name="enableExecutorTime" value="true" /> <property name="enableExecutorTime" value="true" />
<property name="showSql" value="true" /> <property name="showSql" value="false" />
</plugin> </plugin>
</plugins> </plugins>
</configuration> </configuration>
\ No newline at end of file
...@@ -74,6 +74,15 @@ ...@@ -74,6 +74,15 @@
<if test="checkTimeEnd != null and checkTimeEnd!=''"> AND checkTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{checkTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') </if> <if test="checkTimeEnd != null and checkTimeEnd!=''"> AND checkTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{checkTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') </if>
<if test="createUserId != null and createUserId!=''"> AND createUserId = #{createUserId} </if> <if test="createUserId != null and createUserId!=''"> AND createUserId = #{createUserId} </if>
) AS a ) AS a
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
</select> </select>
<select id="getListCount" parameterType="com.mortals.xhx.module.check.model.CheckAllRecordQuery" resultType="int"> <select id="getListCount" parameterType="com.mortals.xhx.module.check.model.CheckAllRecordQuery" resultType="int">
......
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