Commit a760226d authored by 赵啸非's avatar 赵啸非

Merge remote-tracking branch 'origin/master'

parents 93941c96 fbafa87d
#开发环境
NODE_ENV = "development"
VUE_APP_API_BASE_URL=http://192.168.0.98:11039
\ No newline at end of file
...@@ -6,3 +6,4 @@ VUE_APP_API_BASE_URL=/basics_api ...@@ -6,3 +6,4 @@ VUE_APP_API_BASE_URL=/basics_api
VUE_APP_PORTAL_URL = /portal_home VUE_APP_PORTAL_URL = /portal_home
VUE_APP_PORTAL_PORT = 11039 VUE_APP_PORTAL_PORT = 11039
VUE_APP_API_BASE_URL = http://192.168.0.98:11039
...@@ -36,6 +36,7 @@ export default { ...@@ -36,6 +36,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);
}) })
.catch(error => { .catch(error => {
......
...@@ -7,7 +7,7 @@ const tagsMap = { ...@@ -7,7 +7,7 @@ const tagsMap = {
1: 'danger', 1: 'danger',
0: 'success' 0: 'success'
}; };
const baseUrl= process.env.VUE_APP_API_BASE_URL+'/'
export default { export default {
mounted() { mounted() {
this.getData(); this.getData();
...@@ -58,7 +58,7 @@ export default { ...@@ -58,7 +58,7 @@ export default {
this.tableData = this.beforeRender( this.tableData = this.beforeRender(
Object.assign({}, this.tableData, data) Object.assign({}, this.tableData, data)
) )
console.log(this.tableData,'') console.log(this.tableData,'fffff')
this.afterRender(this.tableData); this.afterRender(this.tableData);
}) })
.catch(error => { .catch(error => {
...@@ -280,6 +280,65 @@ export default { ...@@ -280,6 +280,65 @@ export default {
return val return val
} }
}, },
// 格式化处理异常状态
formattereErrorStatus(row,column,val){
const content = formatter(this.tableData, column, val)
if (content) {
return <el-tag size="mini" type="danger">{this.util_formatter('errorStatus', val)}</el-tag>
} else {
return val
}
},
// 格式化处理状态
formattereDealStatus(row,column,val){
const content = formatter(this.tableData, column, val)
if (content) {
return <el-tag size="mini">{this.util_formatter('processStatus', val)}</el-tag>
} else {
return val
}
},
// 考勤组人数
formatterGroupPerson(row,column,val){
const content = formatter(this.tableData, column, val)
if (content) {
return Number(row.personNum) + Number(row.personNumNo)
} else {
return val
}
},
// 考勤类型
formatterattendType(row,column,val){
const content = formatter(this.tableData, column, val)
if (content) {
return <el-tag size="mini">{this.util_formatter('type', val)}</el-tag>
} else {
return val
}
},
// 请假类型
formatterLeaveType(row,column,val){
const content = formatter(this.tableData, column, val)
if (content) {
return <el-tag size="mini">{this.util_formatter('leaveType', val)}</el-tag>
} else {
return val
}
},
// 格式化图片展示
formatterPic(row, column, val){
const content = formatter(this.tableData, column, val)
if (content) {
return <el-image
src={val.indexOf('http') == -1?baseUrl+val:val}
preview-src-list={val.indexOf('http') == -1?baseUrl+val:val}
style="width: 100px"></el-image>
} else {
return val
}
},
// 多选表格行 // 多选表格行
handleSelectionChange(val) { handleSelectionChange(val) {
this.selection = val.map(i => i.id); this.selection = val.map(i => i.id);
......
...@@ -32,11 +32,13 @@ instance.interceptors.request.use(config => { ...@@ -32,11 +32,13 @@ instance.interceptors.request.use(config => {
// 测试用 // 测试用
//http://192.168.0.98:11039/ //http://192.168.0.98:11039/
const hostname = '192.168.0.98' // 温
const port = '11039' // http://192.168.0.116/17500
const hostname = '192.168.0.116'
const port = '17500'
// 动态修改请求地址 // 动态修改请求地址
console.log(hostname,baseURL,port)
if (config.url.startsWith('/')) { if (config.url.startsWith('/')) {
// 字符串以 / 开头 // 字符串以 / 开头
config.url = `http://${hostname}:${port}${baseURL}${config.url}`; config.url = `http://${hostname}:${port}${baseURL}${config.url}`;
......
...@@ -174,4 +174,39 @@ export const getTreeIds = (tree, nodeId, config) => { ...@@ -174,4 +174,39 @@ export const getTreeIds = (tree, nodeId, config) => {
} }
/**
* 根据树子节点ID查找所有父节点ID
* @param {array} dataSource 树形结构数据源
* @param {number} nodeId 子节点ID
* @returns {array} 包含所有父节点ID的数组,按照从根节点到直接父节点的顺序排序
*/
export const findParentIds = (dataSource, nodeId) => {
const parentIds = []; // 用于存储所有父节点ID的数组
// 定义一个递归函数,用于遍历整棵树并查找子节点的所有父节点
function traverse(node, nodeId) {
if (node.id === nodeId) { // 如果当前节点的ID等于子节点的ID,则表示已经找到了子节点,可以开始向上查找父节点
return true; // 返回true表示已经找到了子节点
}
if (node.children) { // 如果当前节点有子节点,则继续遍历子节点
for (const childNode of node.children) {
if (traverse(childNode, nodeId)) { // 如果在子节点中找到了子节点的父节点,则将当前节点的ID添加到父节点ID数组中,并返回true表示已经找到了子节点
parentIds.push(node.id);
return true;
}
}
}
return false; // 如果当前节点不是子节点的父节点,则返回false
}
// 从根节点开始遍历整棵树,并调用递归函数查找子节点的所有父节点
for (const node of dataSource) {
if (traverse(node, nodeId)) { // 如果在当前节点的子树中找到了子节点的父节点,则直接退出循环
break;
}else{
if(node.children && node.children.length>0){
traverse(node.children, nodeId)
}
}
}
return parentIds; // 返回所有父节点ID的数组
}
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<el-input :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" :rows='rows' @input="emit" v-if='type === "textarea"' type='textarea' :autosize="textareaSize" :class="inputClass"></el-input> <el-input :disabled='disabled' :placeholder='placeholder' v-model="field" @change="emit" :rows='rows' @input="emit" v-if='type === "textarea"' type='textarea' :autosize="textareaSize" :class="inputClass"></el-input>
<!-- 一级 -->
<el-select :disabled='disabled' v-model="field" @change="emit" :multiple='multiple' :filterable='filterable' :clearable='clearable' v-if='type === "select"'> <el-select :disabled='disabled' v-model="field" @change="emit" :multiple='multiple' :filterable='filterable' :clearable='clearable' v-if='type === "select"'>
<el-option <el-option
v-for="($label, $value) in enumData" v-for="($label, $value) in enumData"
...@@ -20,6 +21,16 @@ ...@@ -20,6 +21,16 @@
></el-option> ></el-option>
</el-select> </el-select>
<!-- 多级 -->
<el-cascader :disabled='disabled' v-model="field" @change="emit" :options="enumData" :clearable='clearable'
:props="{label:'label',value:'id',multiple:multiple}"
v-if='type === "cascader"'>
</el-cascader>
<!-- 联级选择 -->
<el-cascader-panel :disabled='disabled' v-model="field" @change="emit" :options="enumData" :clearable='clearable'
:props="{label:'label',value:'id',multiple:multiple}" v-if='type === "cascaderpanel"'></el-cascader-panel>
<el-radio-group :disabled='disabled' v-model="field" @change="emit" v-if='type === "radio"'> <el-radio-group :disabled='disabled' v-model="field" @change="emit" v-if='type === "radio"'>
<el-radio <el-radio
v-for='($label, $value) in enumData' v-for='($label, $value) in enumData'
...@@ -81,6 +92,10 @@ export default { ...@@ -81,6 +92,10 @@ export default {
type: String, type: String,
default: '', default: '',
}, },
multiple:{
type: Boolean,
default: false,
},
// 字段所需的枚举类型 // 字段所需的枚举类型
enumData: { enumData: {
type: Object, type: Object,
...@@ -125,6 +140,7 @@ export default { ...@@ -125,6 +140,7 @@ export default {
this.$emit('input', this.newVal) this.$emit('input', this.newVal)
this.$emit('change', this.newVal) this.$emit('change', this.newVal)
this.$emit('focus') this.$emit('focus')
this.$emit('cascaderChange',this.newVal)
} }
}, },
computed: { computed: {
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
</div> </div>
</el-image> </el-image>
<div v-else class="image"> <div v-else class="image">
<el-image :src="value" :style="`width:150px;height:150px;`" fit="fill"/> <el-image :src="value.indexOf('http') == -1?baseUrl+value:value"
:style="`width:150px;height:150px;`" fit="fill"/>
<div class="mask"> <div class="mask">
<div class="actions"> <div class="actions">
<span title="预览" @click.stop="dialogVisible = true"> <span title="预览" @click.stop="dialogVisible = true">
...@@ -32,7 +33,7 @@ ...@@ -32,7 +33,7 @@
</div> </div>
</el-upload> </el-upload>
<el-dialog :visible.sync="dialogVisible" title="预览" width="800" append-to-body> <el-dialog :visible.sync="dialogVisible" title="预览" width="800" append-to-body>
<img :src="value" style="display: block; max-width: 100%; margin: 0 auto;"> <img :src="value.indexOf('http') == -1?baseUrl+value:value" style="display: block; max-width: 100%; margin: 0 auto;">
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
...@@ -41,8 +42,9 @@ ...@@ -41,8 +42,9 @@
export default { export default {
data() { data() {
return { return {
baseUrl:process.env.VUE_APP_API_BASE_URL+'/',
dialogVisible: false, dialogVisible: false,
uploadImgUrl: "/m/file/commonupload", // 上传的图片服务器地址 uploadImgUrl: process.env.VUE_APP_API_BASE_URL+"/attendance/file/commonupload", // 上传的图片服务器地址
}; };
}, },
props: { props: {
...@@ -55,6 +57,9 @@ export default { ...@@ -55,6 +57,9 @@ export default {
type: String, type: String,
default: '', default: '',
} }
},
mounted(){
}, },
methods: { methods: {
removeImage() { removeImage() {
......
...@@ -37,6 +37,8 @@ const router = new Router({ ...@@ -37,6 +37,8 @@ const router = new Router({
...restBuilder('user', 'system/user'), // 用户管理 -- 管理用户 ...restBuilder('user', 'system/user'), // 用户管理 -- 管理用户
...restBuilder('param', 'system/param'), // 系统管理--参数管理 ...restBuilder('param', 'system/param'), // 系统管理--参数管理
// ...restBuilder('task', 'system/task'), // 系统管理--任务管理 // ...restBuilder('task', 'system/task'), // 系统管理--任务管理
// 绩效负责人
...restBuilder('workman','workman'),
//部门 //部门
...restBuilder('dept', 'dept'),//部门 ...restBuilder('dept', 'dept'),//部门
...@@ -63,9 +65,7 @@ const router = new Router({ ...@@ -63,9 +65,7 @@ const router = new Router({
...restBuilder('attendance/class', 'attendance/class'),// 考勤班次信息 ...restBuilder('attendance/class', 'attendance/class'),// 考勤班次信息
...restBuilder('attendance/leave/record', 'attendance/leave/record'),// 请假记录信息 ...restBuilder('attendance/leave/record', 'attendance/leave/record'),// 请假记录信息
...restBuilder('attendance/vacation/balance', 'attendance/vacation/balance'),// 员工假期余额信息 ...restBuilder('attendance/vacation/balance', 'attendance/vacation/balance'),// 员工假期余额信息
// 绩效负责人
...restBuilder('attendance/group/responsible','attendance/group/responsible'),
//以下为基础路由配置 //以下为基础路由配置
builder('blank', 'blank'), builder('blank', 'blank'),
......
...@@ -77,22 +77,22 @@ ...@@ -77,22 +77,22 @@
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "班次名称", prop: "className"}, {label: "班次名称", prop: "className"},
{label: "考勤时间", prop: "className"}, // {label: "考勤时间", prop: "className"},
// {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.attendanceClassDetailList)} {this.renderTable(row.attendanceClassDetailList)}
// <el-button type="text" slot="reference">详细</el-button> <el-button type="text" slot="reference">详细</el-button>
// </el-popover> </el-popover>
// ); );
// }, },
// }, },
{ {
label: "操作", label: "操作",
width: 240, width: 240,
......
...@@ -83,13 +83,13 @@ ...@@ -83,13 +83,13 @@
{type: "selection", width: 60}, {type: "selection", width: 60},
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "考勤组名称", prop: "personNum",formatter: this.formatter}, {label: "考勤组名称", prop: "groupName"},
{label: "人数", prop: "personNum",formatter: this.formatter}, {label: "人数", prop: "personNum",formatter: this.formatterGroupPerson},
{label: "负责人", prop: "personNum",formatter: this.formatter}, {label: "负责人", prop: "personNum"},//未
{label: "类型", prop: "type",formatter: this.formatter}, {label: "类型", prop: "type",formatter: this.formatterattendType},
// {label: "创建用户", prop: "createUserId", formatter: this.formatter}, // {label: "创建用户", prop: "createUserId", formatter: this.formatter},
...@@ -97,7 +97,7 @@ ...@@ -97,7 +97,7 @@
// {label: "考勤方式", prop: "attendanceType"}, // {label: "考勤方式", prop: "attendanceType"},
{label: "考勤时间", prop: "attendanceType"}, {label: "考勤时间", prop: "attendanceType"},//未
// {label: "考勤组人员信息", // {label: "考勤组人员信息",
// width: 120, // width: 120,
......
...@@ -4,15 +4,27 @@ ...@@ -4,15 +4,27 @@
<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="responsibleName" v-model="form.responsibleName" placeholder="请输入负责人名称"/> <Field label="姓名" prop="responsibleName" v-model="form.responsibleName" placeholder="请输入负责人名称"/>
<Field label="电话号码" prop="responsibleName" v-model="form.responsibleName" placeholder="请输入电话号码"/> <Field label="电话号码" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入电话号码"/>
<Field label="考勤组" prop="groupId" v-model="form.groupId" placeholder="请输入考勤组"/> <Field label="工号" prop="workNum" v-model="form.workNum" placeholder="请输入工号"/>
<Field label="考勤组名称" prop="groupName" v-model="form.groupName" placeholder="请输入考勤组名称"/> <Field label="所属部门" prop="deptId" v-model="form.deptId" type="select"/>
<Field label="负责人ID" prop="responsibleId" v-model="form.responsibleId" placeholder="请输入负责人ID"/> <!-- <Field label="考勤组" prop="groupId" v-model="form.groupId" placeholder="请输入考勤组"/> -->
<Field label="负责人类型" prop="responsibleType" v-model="form.responsibleType" type="select" :enumData="dict.responsibleType" placeholder="请选择负责人类型"/> <!-- <Field label="考勤组名称" prop="groupName" v-model="form.groupName" placeholder="请输入考勤组名称"/> -->
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> <!-- <Field label="负责人ID" prop="responsibleId" v-model="form.responsibleId" placeholder="请输入负责人ID"/> -->
<!-- <Field label="负责人类型" prop="responsibleType" v-model="form.responsibleType" type="select" :enumData="dict.responsibleType" placeholder="请选择负责人类型"/> -->
<!-- <Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> -->
</el-row> </el-row>
<el-form-item label="上传图片" prop="photoPath">
<el-upload
class="avatar-uploader"
action="https://jsonplaceholder.typicode.com/posts/"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload">
<img v-if="form.photoPath" :src="form.photoPath" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button> <el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
...@@ -27,7 +39,7 @@ ...@@ -27,7 +39,7 @@
export default { export default {
mixins: [form], mixins: [form],
components: { components: {
dialogShow , dialogShow
}, },
data() { data() {
return { return {
...@@ -40,14 +52,15 @@ ...@@ -40,14 +52,15 @@
toString:[ toString:[
"responsibleType", "responsibleType",
], ],
imageUrl:'',
// 表单校验 // 表单校验
rules: { rules: {
responsibleName: [ responsibleName: [
{required: true,message: "请输入负责人名称", trigger: "blur" }, {required: true,message: "请输入负责人名称", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",}, {max: 64,message: "最多只能录入64个字符",trigger: "blur",},
], ],
createTime: [ phoneNumber: [
{required: true,message: "选择创建时间" }, {required: true,message: "输入电话号码", trigger: "blur"},
], ],
} }
}; };
...@@ -111,6 +124,41 @@ ...@@ -111,6 +124,41 @@
this.$refs[refName].resetFields(); this.$refs[refName].resetFields();
} }
}, },
uploadFn(val){
console.log(val)
},
handleAvatarSuccess(file){
},
beforeAvatarUpload(file){
}
}, },
}; }
</script> </script>
<style scoped lang='less'>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 150px;
height: 150px;
line-height: 150px;
text-align: center;
border: 1px dashed #d9d9d9;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
</style>
...@@ -46,23 +46,37 @@ ...@@ -46,23 +46,37 @@
label: "负责人名称", label: "负责人名称",
fuzzy: true fuzzy: true
}, },
{
name: "deptId",
type: "select",
label: "请选择部门",
fuzzy: true
},
], ],
columns: [ columns: [
{type: "selection", width: 60}, {type: "selection", width: 60},
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "照片", prop: "photoPath"},
{label: "负责人名称", prop: "responsibleName"}, {label: "负责人名称", prop: "responsibleName"},
{label: "负责人类型", prop: "responsibleType",formatter: this.formatter}, {label: "工号", prop: "workNum"},
{label: "所属部门", prop: "deptName"},
{label: "电话号码", prop: "phoneNumber"},
// {label: "负责人类型", prop: "responsibleType",formatter: this.formatter},
{label: "创建用户", prop: "createUserId", formatter: this.formatter}, // {label: "创建用户", prop: "createUserId", formatter: this.formatter},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
formatter: row => { formatter: row => {
return ( return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> <table-buttons noAdd noView row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
); )
} }
} }
] ]
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<tab-pane :activeName="activeName" :thirdList="thirdList"></tab-pane> <tab-pane :activeName="activeName" :thirdList="thirdList"></tab-pane>
<div class="mt20"> <div class="mt20">
<div>考勤组名称</div> <div>考勤组名称</div>
<el-input placeholder="请输入考勤组名称" style="width:220px" class="mt10"></el-input> <el-input placeholder="请输入考勤组名称" v-model="setParams.groupName" style="width:220px" class="mt10"></el-input>
</div> </div>
<div class="flex flex-align-center mt20"> <div class="flex flex-align-center mt20">
...@@ -66,7 +66,8 @@ ...@@ -66,7 +66,8 @@
<el-button type="text" class="ml20" @click="drawershow('drawer4')">设置</el-button> <el-button type="text" class="ml20" @click="drawershow('drawer4')">设置</el-button>
</div> </div>
<div class="flex flex-align-center mt10" style="color:#999;font-size:14px"> <div class="flex flex-align-center mt10" style="color:#999;font-size:14px"
v-if="setParams.attendanceType.length == 0">
<div>考勤方式</div> <div>考勤方式</div>
<div class="ml20">未设置</div> <div class="ml20">未设置</div>
</div> </div>
...@@ -112,60 +113,59 @@ ...@@ -112,60 +113,59 @@
</div> </div>
<!-- 考勤时间 --> <!-- 考勤时间 -->
<div class="mt20" v-if="drawer3"> <div class="mt20" v-if="drawer3">
<el-radio-group> <el-radio-group v-model="setParams.type" @change="changeRadio">
<div class="mt10"> <div class="mt10" v-for="(item,index) in paibanType" :key="index">
<el-radio label="">固定班制(固定时间上下班)</el-radio> <el-radio :label="item.value">{{item.label}}</el-radio>
<div class="tips">考勤组中所有人按照相同的时间打卡,适用于办公室坐班,例如朝九晚五</div> <div class="tips">{{item.des}}</div>
</div> </div>
<div class="mt10">
<el-radio label="">排班制(按排班上下班)</el-radio>
<div class="tips">自定义设置每人的班次,适用于工厂、门店等,例如三班倒</div>
</div>
<div class="mt10">
<el-radio label="">自由工时(不固定时间上下班)</el-radio>
<div class="tips">上下班时间不固定,可随时打卡,适用于销售以及装修、家政等计时工</div>
</div>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="mt20" v-if="drawer3"> <div class="mt20" v-if="drawer3">
<!-- 固定班次设置 --> <!-- 固定班次设置 -->
<div>工作日设置:</div> <div v-if="setParams.type == 1">
<div class="mt10"> <div>工作日设置:</div>
<el-tag type="primary">快捷设置班次</el-tag> <div class="mt10">
<span class="ml20">班次名称:</span> <el-tag type="primary">快捷设置班次</el-tag>
<el-button type="text" @click="changeBanci('1')">更改班次</el-button> <span class="ml20">班次名称:</span>
<el-button type="text" @click="changeBanci('1')">更改班次</el-button>
</div>
<!-- 班次表 -->
<el-table :data="weekList">
<el-table-column label="工作日"></el-table-column>
<el-table-column label="班次时间段"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text" @click="changeBanci(scope.row)">更改班次</el-button>
</template>
</el-table-column>
</el-table>
</div> </div>
<!-- 班次表 -->
<el-table :data="weekList">
<el-table-column label="工作日"></el-table-column>
<el-table-column label="班次时间段"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text" @click="changeBanci(scope.row)">更改班次</el-button>
</template>
</el-table-column>
</el-table>
<!-- 自用工时设置 --> <!-- 自用工时设置 -->
<div class="mt20">工作日</div> <div v-if="setParams.type == 3">
<div class="mt10"> <div class="mt20">工作日</div>
<el-checkbox-group v-model="week"> <div class="mt10">
<el-checkbox label="">周一</el-checkbox> <el-checkbox-group v-model="week">
<el-checkbox label="">周二</el-checkbox> <el-checkbox label="">周一</el-checkbox>
<el-checkbox label="">周三</el-checkbox> <el-checkbox label="">周二</el-checkbox>
<el-checkbox label="">周四</el-checkbox> <el-checkbox label="">周三</el-checkbox>
<el-checkbox label="">周五</el-checkbox> <el-checkbox label="">周四</el-checkbox>
<el-checkbox label="">周六</el-checkbox> <el-checkbox label="">周五</el-checkbox>
<el-checkbox label="">周日</el-checkbox> <el-checkbox label="">周六</el-checkbox>
</el-checkbox-group> <el-checkbox label="">周日</el-checkbox>
</div> </el-checkbox-group>
<div class="mt20">工作时长</div> </div>
<div class="mt10"> <div class="mt20">工作时长</div>
<el-input style="width:100px"></el-input> <div class="mt10">
<span class="ml20">小时</span> <el-input style="width:100px"></el-input>
<span class="ml20">小时</span>
</div>
</div> </div>
<div class="mt10"> <div class="mt10">
<el-checkbox>法定节假日自动排休</el-checkbox> <el-checkbox>法定节假日自动排休</el-checkbox>
</div> </div>
...@@ -181,18 +181,9 @@ ...@@ -181,18 +181,9 @@
</div> </div>
<div class="mt20" v-if="drawer4"> <div class="mt20" v-if="drawer4">
<div>考勤方式</div> <div>考勤方式</div>
<el-checkbox-group v-model="type"> <el-checkbox-group v-model="setParams.attendanceType">
<div class="mt10"> <div class="mt10" v-for="(item,index) in attendanceType" :key="index">
<el-checkbox label="地点打卡"></el-checkbox> <el-checkbox :label="item.value">{{item.label}}</el-checkbox>
</div>
<div class="mt10">
<el-checkbox label="Wi-Fi打卡"></el-checkbox>
</div>
<div class="mt10">
<el-checkbox label="蓝牙打卡"></el-checkbox>
</div>
<div class="mt10">
<el-checkbox label="考勤机打卡"></el-checkbox>
</div> </div>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
...@@ -203,22 +194,22 @@ ...@@ -203,22 +194,22 @@
<div> <div>
<div class="titles">选择部门</div> <div class="titles">选择部门</div>
<el-scrollbar style="height: 100%"> <el-scrollbar style="height: 100%">
<el-tree <el-tree
size="mini" size="mini"
ref="siteTree" ref="siteTree"
:data="areaData" :data="areaData"
id="el-tree" id="el-tree"
node-key="id" node-key="id"
indent="4" indent="4"
:props="treeProps" :props="treeProps"
:load="loadNode" :load="loadNode"
highlight-current highlight-current
default-expand-all default-expand-all
:expand-on-click-node="false" :expand-on-click-node="false"
:render-content="renderContent" :render-content="renderContent"
@node-click="handleNodeClick" @node-click="handleNodeClick"
> >
</el-tree> </el-tree>
</el-scrollbar> </el-scrollbar>
</div> </div>
</el-dialog> </el-dialog>
...@@ -274,7 +265,14 @@ ...@@ -274,7 +265,14 @@
components: { components: {
tabPane tabPane
}, },
created(){
this.getdata()
this.getresponsiable()
},
methods: { methods: {
changeRadio(value){
console.log(value)
},
changeBanci(row){ changeBanci(row){
console.log(row) console.log(row)
this.isshowBanci = true this.isshowBanci = true
...@@ -310,6 +308,40 @@ ...@@ -310,6 +308,40 @@
this.drawer2 = false this.drawer2 = false
this.drawer3 = false this.drawer3 = false
this.drawer4 = false this.drawer4 = false
},
getdata(){
this.$post('/attendance/group/add').then(res => {
if(res.code == 1){
// 打卡类型
this.attendanceType = []
let data = res.data.dict//字典函数
for(let key in data.attendanceType){
let obj = {
label:data.attendanceType[key],
value:key
}
this.attendanceType.push(obj)
}
// 类型
let type = []
for(let key in data.type){
let obj = {
label:data.type[key],
value:key
}
type.push(obj)
}
type.forEach((item,index) => {
let res = this.paibanType.filter(item1 => item1.label.indexOf(item.label) != -1)
if(res.length>0){
res[0].value = type[index].value
}
})
console.log(this.paibanType)
}
})
} }
}, },
data() { data() {
...@@ -340,9 +372,10 @@ ...@@ -340,9 +372,10 @@
groupName:'', groupName:'',
personNum:'', personNum:'',
responsiblePerson:'', responsiblePerson:'',
type:'', type:'',//考勤方式
attendanceTime:'', attendanceTime:'',
remark:'' remark:'',
attendanceType:[]//打卡类型
}, },
drawer:false, drawer:false,
weekList:[], weekList:[],
...@@ -352,7 +385,26 @@ ...@@ -352,7 +385,26 @@
noneedDaka:false,//无需打卡 noneedDaka:false,//无需打卡
areaData:[], areaData:[],
type:[], type:[],
week:[] week:[],
reqForm:{},
attendanceType:[],
paibanType:[
{
label:'固定班制(固定时间上下班)',
value:'1',
des:'考勤组中所有人按照相同的时间打卡,适用于办公室坐班,例如朝九晚五'
},
{
label:'排班制(按排班上下班)',
value:'2',
des:'自定义设置每人的班次,适用于工厂、门店等,例如三班倒'
},
{
label:'自由工时(不固定时间上下班)',
value:'3',
des:'上下班时间不固定,可随时打卡,适用于销售以及装修、家政等计时工'
}
]
} }
} }
} }
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
<Field label="结束时间" prop="endTime" v-model="form.endTime" type="date" /> <Field label="结束时间" prop="endTime" v-model="form.endTime" type="date" />
<Field label="时长,单位秒" prop="duration" v-model="form.duration" placeholder="请输入时长,单位秒"/> <Field label="时长,单位秒" prop="duration" v-model="form.duration" placeholder="请输入时长,单位秒"/>
<Field label="请假事由" prop="reason" v-model="form.reason" type="textarea" placeholder="请输入请假事由"/> <Field label="请假事由" prop="reason" v-model="form.reason" type="textarea" placeholder="请输入请假事由"/>
<Field label="审批负责人Id" prop="approverId" v-model="form.approverId" placeholder="请输入审批负责人Id"/> <!-- <Field label="审批负责人Id" prop="approverId" v-model="form.approverId" placeholder="请输入审批负责人Id"/> -->
<Field label="审批负责人" prop="approver" v-model="form.approver" placeholder="请输入审批负责人"/> <Field label="审批负责人" prop="approver" v-model="form.approver" type="select" placeholder="请选择审批负责人"/>
<Field label="附件" prop="attachment" v-model="form.attachment" type="textarea" placeholder="请输入附件"/> <Field label="附件" prop="attachment" v-model="form.attachment" type="textarea" placeholder="请输入附件"/>
<Field label="附件路径" prop="attachmentPath" v-model="form.attachmentPath" type="textarea" placeholder="请输入附件路径"/> <Field label="附件路径" prop="attachmentPath" v-model="form.attachmentPath" type="textarea" placeholder="请输入附件路径"/>
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> <Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
......
...@@ -4,31 +4,31 @@ ...@@ -4,31 +4,31 @@
:title="title" :title="title"
:visible.sync="open" :visible.sync="open"
:direction="direction" :direction="direction"
size="50%"> size="60%">
<el-form ref="form" :model="form" :rules="rules" label-width="120px"> <div style="padding:15px">
<el-row> <el-form ref="form" :model="form" :rules="rules" label-width="120px">
<Field label="请假人" prop="leavePersonId" v-model="form.leavePersonId" placeholder="请输入请假人id"/> <el-row>
<!-- <Field label="请假人" prop="leavePerson" v-model="form.leavePerson" placeholder="请输入请假人"/> --> <!-- <Field label="请假人" prop="leavePersonId" v-model="form.leavePersonId" placeholder="请输入请假人"/> -->
<Field label="所属部门" prop="deptId" v-model="form.deptId" placeholder="请输入所属部门id"/> <Field label="请假人" prop="leavePerson" v-model="form.leavePerson" placeholder="请输入请假人"/>
<!-- <Field label="所属部门" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入所属部门"/> --> <Field label="所属部门" prop="deptId" v-model="form.deptId" type="select" placeholder="请选择所属部门"/>
<Field label="电话号码" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入电话号码"/> <!-- <Field label="所属部门" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入所属部门"/> -->
<Field label="请假类型" prop="leaveType" v-model="form.leaveType" type="select" :enumData="dict.leaveType" placeholder="请选择请假类型"/> <Field label="电话号码" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入电话号码"/>
<Field label="开始时间" prop="startTime" v-model="form.startTime" type="date" /> <Field label="请假类型" prop="leaveType" v-model="form.leaveType" type="select" :enumData="dict.leaveType" placeholder="请选择请假类型"/>
<Field label="结束时间" prop="endTime" v-model="form.endTime" type="date" /> <Field label="开始时间" prop="startTime" v-model="form.startTime" type="date" />
<Field label="时长" prop="duration" v-model="form.duration" placeholder="请输入时长,单位秒"/> <Field label="结束时间" prop="endTime" v-model="form.endTime" type="date" />
<Field label="请假事由" prop="reason" v-model="form.reason" type="textarea" placeholder="请输入请假事由"/> <Field label="时长" prop="duration" v-model="form.duration" placeholder="请输入时长"/>
<Field label="审批负责人" prop="approverId" v-model="form.approverId" placeholder="请输入审批负责人Id"/> <Field label="请假事由" prop="reason" v-model="form.reason" type="textarea" placeholder="请输入请假事由"/>
<!-- <Field label="审批负责人" prop="approver" v-model="form.approver" placeholder="请输入审批负责人"/> --> <Field label="审批负责人" prop="approverId" type="select" v-model="form.approverId" placeholder="请选择审批负责人"/>
<!-- <Field label="附件" prop="attachment" v-model="form.attachment" type="textarea" placeholder="请输入附件"/> --> <!-- <Field label="审批负责人" prop="approver" v-model="form.approver" placeholder="请输入审批负责人"/> -->
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> <!-- <Field label="附件" prop="attachment" v-model="form.attachment" type="textarea" placeholder="请输入附件"/> -->
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row> </el-row>
<el-form-item label="附件路径" prop="attachmentPath"> <el-form-item label="附件路径" prop="attachmentPath">
<FileUpload @input="uploadFn" /> <FileUpload @input="uploadFn" />
</el-form-item> </el-form-item>
<form-buttons @submit='submitForm' noCancelBtn /> <form-buttons @submit='submitForm' noCancelBtn />
</el-form> </el-form>
</div>
</el-drawer> </el-drawer>
</template> </template>
......
...@@ -91,25 +91,25 @@ ...@@ -91,25 +91,25 @@
{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.formatter}, {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: "approver"}, {label: "审批负责人", prop: "approver"},
......
...@@ -117,19 +117,19 @@ ...@@ -117,19 +117,19 @@
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "员工姓名", prop: "staffName"}, {label: "员工姓名", prop: "staffName"},
{label: "工号", prop: "staffName"}, {label: "工号", prop: "workNum"},
{label: "部门", prop: "staffName"}, {label: "部门", prop: "staffName"},
{label: "考勤组", prop: "staffName"}, {label: "考勤组", prop: "deptName"},
{label: "班次", prop: "staffName"}, {label: "班次", prop: "shiftsName"},
{label: "异常状态", prop: "errorStatus",formatter: this.formatter}, {label: "异常状态", prop: "errorStatus",formatter: this.formattereErrorStatus},
{label: "异常时间", prop: "errorDateTime", formatter: this.formatterDate}, {label: "异常时间", prop: "errorDateTime", formatter: this.formatterDate},
{label: "处理结果", prop: "errorDateTime", formatter: this.formatterDate}, {label: "处理结果", prop: "processResult", formatter: this.formatterDate},
{label: "上下班时间", prop: "goOffDateTime", formatter: this.formatterDate}, {label: "上下班时间", prop: "goOffDateTime", formatter: this.formatterDate},
{label: "实际打卡时间", prop: "actualAttendanceDateTime", formatter: this.formatterDate}, {label: "实际打卡时间", prop: "actualAttendanceDateTime", formatter: this.formatterDate},
{label: "处理时间", prop: "operDateTime", formatter: this.formatterDate}, {label: "处理时间", prop: "operDateTime", formatter: this.formatterDate},
{label: "处理状态", prop: "processStatus",formatter: this.formatter}, {label: "处理状态", prop: "processStatus",formatter: this.formattereDealStatus},
{label: "处理人", prop: "processStatus",formatter: this.formatter}, {label: "处理人", prop: "opertor"},
{label: "备注", prop: "createUserId", formatter: this.formatter}, {label: "备注", prop: "remark"},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
......
...@@ -226,14 +226,14 @@ ...@@ -226,14 +226,14 @@
{type: "selection", width: 60}, {type: "selection", width: 60},
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "员工姓名", prop: "staffName"}, {label: "员工姓名", prop: "staffName"},
{label: "工号", prop: "staffName"}, {label: "工号", prop: "workNum"},
{label: "部门", prop: "staffName"}, {label: "部门", prop: "deptName"},
{label: "考勤组", prop: "staffName"}, {label: "考勤组", prop: "attendanceGroupName"},
{label: "职位", prop: "staffName"}, {label: "职位", prop: "positionName"},
{label: "班次", prop: "staffName"}, {label: "班次", prop: "shiftsName"},
{label: "考勤时间", prop: "attendanceDate",formatter: this.formatterDate}, {label: "考勤时间", prop: "attendanceDate",formatter: this.formatterDate},
{label: "考勤点名称", prop: "staffName"}, {label: "考勤点名称", prop: "attendanceAddress"},
{label: "事件源", prop: "staffName"}, {label: "事件源", prop: "eventSource"},
{ {
label: "操作", label: "操作",
width: 240, width: 240,
......
...@@ -309,10 +309,10 @@ ...@@ -309,10 +309,10 @@
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
{label: "打卡日期", prop: "attendanceDate", formatter: this.formatterDate}, {label: "打卡日期", prop: "attendanceDate", formatter: this.formatterDate},
{label: "员工姓名", prop: "staffName"}, {label: "员工姓名", prop: "staffName"},
{label: "考勤组", prop: "staffName"}, {label: "考勤组", prop: "attendanceGroupName"},
{label: "部门", prop: "staffName"}, {label: "部门", prop: "deptName"},
{label: "职位", prop: "staffName"}, {label: "职位", prop: "positionName"},
{label: "班次", prop: "staffName"}, {label: "班次", prop: "shiftsName"},
{label: "考勤打卡记录详细信息", {label: "考勤打卡记录详细信息",
width: 120, width: 120,
prop: "subColumns", prop: "subColumns",
......
...@@ -158,7 +158,7 @@ ...@@ -158,7 +158,7 @@
{label: "窗口类别", prop: "windowCategory"}, {label: "窗口类别", prop: "windowCategory"},
{label:"部门",prop:"bumentId"}, {label:"部门",prop:"deptName"},
{label: "员工姓名", prop: "staffName"}, {label: "员工姓名", prop: "staffName"},
...@@ -232,7 +232,11 @@ ...@@ -232,7 +232,11 @@
setcolum:[], setcolum:[],
isdialog:false, isdialog:false,
checkList:[], checkList:[],
drawerhistory:false drawerhistory:false,
// 动态新增列表
addColumn:[
]
}; };
} }
}; };
......
...@@ -7,28 +7,9 @@ ...@@ -7,28 +7,9 @@
size="50%"> size="50%">
<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="父id" prop="parentId" v-model="form.parentId" placeholder="请输入父id"/> --> <Field label="部门名称" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入部门名称"/>
<!-- <Field label="祖级列表" prop="ancestors" v-model="form.ancestors" type="textarea" placeholder="请输入祖级列表"/> --> <Field label="上级部门" prop="parentId" v-model="form.parentId" type="select" :enumData="dict.deptName" placeholder="请选择上级部门"/>
<!-- <Field label="部门名称" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入部门名称"/> --> <Field label="负责人" prop="workId" v-model="form.workId" type="select" :enumData="dict.workName" placeholder="请选择员工"/>
<!-- <Field label="上级部门" prop="deptStatus" v-model="form.deptStatus" type="select" :enumData="dict.deptStatus" placeholder="请选择上级部门"/> -->
<!-- <Field label="负责人" prop="deptStatus" v-model="form.deptStatus" type="select" :enumData="dict.deptStatus" placeholder="请选择员工"/> -->
<!-- <Field label="部门状态" prop="deptStatus" v-model="form.deptStatus" type="select" :enumData="dict.deptStatus" placeholder="请选择部门状态"/> -->
<!-- <Field label="顺序" prop="orderNum" v-model="form.orderNum" placeholder="请输入顺序"/> -->
<!-- <Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/> -->
<el-form-item label="部门名称" prop="deptName">
<el-input placeholder="请输入部门名称" clearable v-model="form.deptName"></el-input>
</el-form-item>
<el-form-item label="上级部门">
<el-select placeholder="请选择上级部门" clearable v-model="form">
<el-option></el-option>
</el-select>
</el-form-item>
<el-form-item label="负责人">
<el-select placeholder="请选择员工" clearable>
<el-option></el-option>
</el-select>
</el-form-item>
</el-row> </el-row>
<form-buttons @submit='submitForm' noCancelBtn /> <form-buttons @submit='submitForm' noCancelBtn />
...@@ -64,23 +45,13 @@ ...@@ -64,23 +45,13 @@
], ],
// 表单校验 // 表单校验
rules: { rules: {
ancestors: [
{required: true,message: "请输入祖级列表", trigger: "blur" },
{max: 256,message: "最多只能录入256个字符",trigger: "blur",},
],
deptName: [ deptName: [
{required: true,message: "请输入部门名称", trigger: "blur" }, {required: true,message: "请输入部门名称", trigger: "blur" },
{max: 256,message: "最多只能录入256个字符",trigger: "blur",}, {max: 256,message: "最多只能录入256个字符",trigger: "blur",},
], ],
deptStatus: [ parentId: [
{required: true,message: "请输入部门状态", trigger: "blur" }, {required: true,message: "请输入部门", trigger: "change" },
], ]
orderNum: [
{required: true,message: "请输入顺序", trigger: "blur" },
],
createTime: [
{required: true,message: "请选择创建时间" },
],
} }
}; };
}, },
......
<template> <template>
<div class="page"> <div className="page">
<LayoutTable :data="tableData" :config="tableConfig" notSearch></LayoutTable> <el-card style="height:80vh">
<LayoutTable notPagination :data="tableData" ref="layoutTable" :config="tableConfig" notSearch></LayoutTable>
</el-card>
<drawer-show ref="drawerform" @ok="getData" /> <drawer-show ref="drawerform" @ok="getData" />
</div> </div>
</template> </template>
<script> <script>
/** 表单弹出框模式需引入 */ /** 表单弹出框模式需引入 */
import {handleTree} from "@/assets/utils/table";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
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: "DeptList", name: "DeptList",
components: { components: {
drawerShow drawerShow,
}, Treeselect
},
mixins: [table], mixins: [table],
created() { created() {
this.query={"page":1,"size":-1}
}, },
methods: { methods: {
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
this.$refs.drawerform.add(row); this.$refs.drawerform.add(row,this.menuOptions);
}, },
/** 重写编辑方法 */ /** 重写编辑方法 */
toEdit(row) { toEdit(row) {
this.$refs.drawerform.edit(row); this.$refs.drawerform.edit(row,this.menuOptions);
}, },
/** 重写查看方法 */ /** 重写查看方法 */
toView(row) { toView(row) {
this.$refs.drawerform.view(row); this.$refs.drawerform.view(row, this.menuOptions);
},
afterRender(data) {
data.data = handleTree(data.data, "id", "parentId");
console.log("tree data:",data.data)
this.menuOptions = data.data;
this.$refs.layoutTable.showType = "treetable"
}, },
}, },
data() { data() {
return { return {
config: { config: {
// search: [
// {
// name: "orderNum",
// type: "text",
// label: "顺序",
// fuzzy: true
// },
// {
// name: "createUserId",
// type: "text",
// label: "创建用户",
// fuzzy: true
// },
// ],
showType:'treetable', showType:'treetable',
isshowTabPane:true, isshowTabPane:true,
/** 树表是否默认展开 */
expand: false,
columns: [ columns: [
{type: "selection", width: 60}, {type: "selection", width: 60},
{type: "index",label: "序号",width: 50}, {type: "index",label: "序号",width: 50},
......
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
size="50%"> size="50%">
<el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:20px"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:20px">
<el-row> <el-row>
<Field label="分组" prop="groupId" v-model="form.groupId" type="select" placeholder="请选择分组"/> <Field v-if="title == '新增职位信息'" label="分组" prop="groupId" v-model="form.groupId" type="select" placeholder="请选择分组"/>
<Field label="分组名称" prop="groupName" v-model="form.groupName" placeholder="请输入分组名称"/> <Field label="分组名称" prop="groupName" v-model="form.groupName" placeholder="请输入分组名称"/>
<Field label="职位编码" prop="jobCode" v-model="form.jobCode" placeholder="请输入职位编码"/> <Field label="职位编码" prop="jobCode" v-model="form.jobCode" placeholder="请输入职位编码"/>
<Field label="职位名称" prop="jobName" v-model="form.jobName" placeholder="请输入职位名称"/> <Field label="职位名称" prop="jobName" v-model="form.jobName" placeholder="请输入职位名称"/>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="6" :xs="12" class="mytree"> <el-col :span="6" :xs="12" class="mytree">
<div class="titles">选择部门</div> <div class="titles">选择部门</div>
<!-- default-expand-all -->
<el-scrollbar style="height: 100%"> <el-scrollbar style="height: 100%">
<el-tree <el-tree
size="mini" size="mini"
...@@ -30,7 +31,6 @@ ...@@ -30,7 +31,6 @@
:props="treeProps" :props="treeProps"
:load="loadNode" :load="loadNode"
highlight-current highlight-current
default-expand-all
:expand-on-click-node="false" :expand-on-click-node="false"
:render-content="renderContent" :render-content="renderContent"
@node-click="handleNodeClick" @node-click="handleNodeClick"
......
...@@ -15,10 +15,12 @@ ...@@ -15,10 +15,12 @@
<div class="content ml20"> <div class="content ml20">
<div class="c1"> <div class="c1">
<span>{{info.workName}}</span> <span>{{info.workName}}</span>
<span class="tags">{{info.workStatus}}</span> <!-- 格式 -->
<span class="tags">{{dict.status[allinfo.status]}}</span>
</div> </div>
<div class="c2"> <div class="c2">
<span>{{allinfo.deptName}} - {{allinfo.positionName}}</span> <!-- - {{allinfo.positionName}} -->
<span>{{allinfo.deptName}}</span>
<span style="margin:0 10px">|</span> <span style="margin:0 10px">|</span>
<span>{{info.workLimit}}</span> <span>{{info.workLimit}}</span>
</div> </div>
...@@ -111,9 +113,10 @@ ...@@ -111,9 +113,10 @@
this.$get('/staff/info',{id}).then(res => { this.$get('/staff/info',{id}).then(res => {
if(res.code == 1){ if(res.code == 1){
this.info = res.data.holidayLists[0] this.info = res.data.holidayLists[0]
this.dict = res.dict
this.allinfo = res.data//总 this.allinfo = res.data//总
this.info.workBeginDay = timestampToTime(Number(this.info.workBeginDay)) this.info.workBeginDay = this.info.workBeginDay?timestampToTime(Number(this.info.workBeginDay)):'-'
this.info.workFormalDay = timestampToTime(Number(this.info.workFormalDay)) this.info.workFormalDay = this.info.workFormalDay?timestampToTime(Number(this.info.workFormalDay)):'-'
} }
}) })
.catch(err => { .catch(err => {
...@@ -124,7 +127,8 @@ ...@@ -124,7 +127,8 @@
data() { data() {
return { return {
info:{}, info:{},
allinfo:{} allinfo:{},
dict:[]
} }
}, },
created(){ created(){
......
...@@ -23,7 +23,6 @@ export default { ...@@ -23,7 +23,6 @@ export default {
}, },
methods: { methods: {
afterRender(data) { afterRender(data) {
console.log(data)
data.data = handleTree(data.data, "id", "parentId"); data.data = handleTree(data.data, "id", "parentId");
console.log("tree data:",data.data) console.log("tree data:",data.data)
this.menuOptions = data.data; this.menuOptions = data.data;
...@@ -82,7 +81,7 @@ export default { ...@@ -82,7 +81,7 @@ export default {
}) })
.catch((error) => { .catch((error) => {
this.$message.error(error.message); this.$message.error(error.message);
}); })
}, },
/** 重写查看方法 */ /** 重写查看方法 */
toView(row) { toView(row) {
......
...@@ -3,15 +3,21 @@ ...@@ -3,15 +3,21 @@
<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="部门id号" prop="deptId" v-model="form.deptId" placeholder="请输入部门id号"/> <Field label="姓名" prop="name" v-model="form.name" placeholder="请输入姓名"/>
<Field label="部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入部门名称"/> <Field label="电话号码" prop="phone" v-model="form.phone" placeholder="请输入电话号码"/>
<Field label="姓名" prop="name" v-model="form.name" placeholder="请输入姓名"/> <Field label="工号" prop="number" v-model="form.number" placeholder="请输入工号"/>
<Field label="工号" prop="number" v-model="form.number" placeholder="请输入工号"/>
<Field label="电话号码" prop="phone" v-model="form.phone" placeholder="请输入电话号码"/>
<Field label="照片" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="请输入照片"/>
</el-row> </el-row>
<el-form-item label="所属部门" prop="deptId">
<el-cascader v-model="deptList" style="width:50%" @change="cascaderChange" :options="dict.deptId" clearable
:props="{label:'label',value:'id'}">
</el-cascader>
</el-form-item>
<el-form-item label="照片" prop="photoPath">
<ImageUpload :value="form.photoPath"
@input="replaceImage"></ImageUpload>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button> <el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
...@@ -23,6 +29,7 @@ ...@@ -23,6 +29,7 @@
<script> <script>
import form from "@/assets/mixins/formdialog"; import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow"; import dialogShow from "./dialogshow";
import {findParentIds} from "@/assets/utils/common.js"
export default { export default {
mixins: [form], mixins: [form],
components: { components: {
...@@ -40,11 +47,33 @@ ...@@ -40,11 +47,33 @@
], ],
// 表单校验 // 表单校验
rules: { rules: {
} name: [
}; {required: true,message: "请输入姓名", trigger: "blur" },
{max: 20,message: "最多只能录入20个字符",trigger: "blur",},
],
phone: [
{required: true,message: "请输入电话号码", trigger: "blur" },
{max: 11,message: "最多只能录入个字符",trigger: "blur",},
]
},
deptList:[]
}
}, },
methods: { methods: {
// formSelect(){
// let treeId = getTreeIds(this.dict.deptId,this.form.deptId)
// },
cascaderChange(val){
if(this.deptList.length > 0){
this.form.deptId = this.deptList[this.deptList.length - 1]
}else{
this.form.deptId = ''
}
console.log(this.form.deptId,'当前选择')
},
replaceImage(val){
this.form.photoPath = val
},
/** 编辑 */ /** 编辑 */
edit(row) { edit(row) {
this.reset() this.reset()
...@@ -52,7 +81,7 @@ ...@@ -52,7 +81,7 @@
this.urls.currUrl ="workman/edit"; this.urls.currUrl ="workman/edit";
this.getData(); this.getData();
this.pageInfo.type="edit" this.pageInfo.type="edit"
this.title = "修改工作人员"; this.title = "编辑";
}, },
/** 新增 */ /** 新增 */
add(row) { add(row) {
...@@ -60,7 +89,8 @@ ...@@ -60,7 +89,8 @@
this.urls.currUrl = "workman/add"; this.urls.currUrl = "workman/add";
this.getData(); this.getData();
this.pageInfo.type="add" this.pageInfo.type="add"
this.title = "新增工作人员"; this.title = "新增";
}, },
/** 查看*/ /** 查看*/
view(row) { view(row) {
...@@ -74,14 +104,21 @@ ...@@ -74,14 +104,21 @@
/**取消按钮 */ /**取消按钮 */
cancel() { cancel() {
this.open = false; this.open = false;
this.deptList = []
}, },
/**获取数据后弹框 */ /**获取数据后弹框 */
afterRender(data) { afterRender(data) {
this.open = true; this.open = true;
this.deptList = findParentIds(this.dict.deptId,this.form.deptId).reverse()
this.deptList = this.deptList.concat(this.form.deptId)
console.log(this.deptList,'ddd')
}, },
afterSubmit(data) { afterSubmit(data) {
this.open = false; this.open = false;
this.reset()
this.deptList = []
this.$emit("ok"); this.$emit("ok");
}, },
...@@ -89,7 +126,6 @@ ...@@ -89,7 +126,6 @@
reset() { reset() {
this.form = { this.form = {
deptId : 0, deptId : 0,
deptName : "",
name : "", name : "",
number : "", number : "",
phone : "", phone : "",
...@@ -101,7 +137,32 @@ ...@@ -101,7 +137,32 @@
if (this.$refs[refName]) { if (this.$refs[refName]) {
this.$refs[refName].resetFields(); this.$refs[refName].resetFields();
} }
}, }
}, }
}; }
</script> </script>
<style scoped>
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 178px;
height: 178px;
display: block;
}
</style>
<template> <template>
<div class="page"> <div class="page">
<LayoutTable :data="tableData" :config="tableConfig"> <LayoutTable :data="tableData" :config="tableConfig"></LayoutTable>
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" /> <dialog-show ref="dialogform" @ok="getData" />
</div> </div>
</template> </template>
...@@ -38,6 +35,7 @@ ...@@ -38,6 +35,7 @@
data() { data() {
return { return {
config: { config: {
isshowTabPane:true,
search: [ search: [
{ {
name: "name", name: "name",
...@@ -58,7 +56,7 @@ ...@@ -58,7 +56,7 @@
{label: "电话号码", prop: "phone"}, {label: "电话号码", prop: "phone"},
{label: "照片", prop: "photoPath"}, {label: "照片", prop: "photoPath",formatter:this.formatterPic},
{label: "创建时间", prop: "createTime", formatter: this.formatterDate}, {label: "创建时间", prop: "createTime", formatter: this.formatterDate},
{ {
...@@ -66,7 +64,7 @@ ...@@ -66,7 +64,7 @@
width: 240, width: 240,
formatter: row => { formatter: row => {
return ( return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} /> <table-buttons noAdd noView row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
); );
} }
} }
......
...@@ -12,8 +12,10 @@ import com.mortals.xhx.busiz.rsp.ListItem; ...@@ -12,8 +12,10 @@ import com.mortals.xhx.busiz.rsp.ListItem;
import com.mortals.xhx.busiz.rsp.PersonHikData; import com.mortals.xhx.busiz.rsp.PersonHikData;
import com.mortals.xhx.module.dept.dao.ibatis.DeptDaoImpl; import com.mortals.xhx.module.dept.dao.ibatis.DeptDaoImpl;
import com.mortals.xhx.module.dept.model.DeptEntity; import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl; import com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl;
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 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.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -35,10 +37,55 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -35,10 +37,55 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
@Autowired @Autowired
private DeptDaoImpl deptDao; private DeptDaoImpl deptDao;
@Autowired
private DeptService deptService;
@Autowired
private StaffService service;
@Override @Override
public void excuteTask(ITask task) throws AppException { public void excuteTask(ITask task) throws AppException {
log.info("同步用户--部门"); log.info("同步用户--部门");
try { try {
String resultDept = ArtemisPostTest.callPostApiGetDeptList();
JSONObject jsonObjectDept = JSON.parseObject(resultDept);
JSONObject jsonObjectDept1 = jsonObjectDept.getJSONObject("data");
DeptHikData deptHikData = JSONObject.parseObject(jsonObjectDept1.toJSONString(), DeptHikData.class);
if (Objects.nonNull(deptHikData)) {
for (ListDept listDept : deptHikData.getList()) {
//查询数据库信息
DeptEntity deptEntity = deptDao.queryDept(listDept.getOrgIndexCode());
DeptEntity deptEntityParent = deptDao.queryDeptParient(listDept.getParentOrgIndexCode());
if (Objects.isNull(deptEntity)) {
if (Objects.nonNull(deptEntityParent)) {
deptEntity.setParentId(deptEntityParent.getId());
}
deptEntity.setDeptName(listDept.getOrgName());
deptEntity.setDeptCode(listDept.getOrgIndexCode());
deptEntity.setAncestors(listDept.getOrgPath());
deptEntity.setDeptStatus(1);
deptEntity.setOrderNum(0);
deptEntity.setRemark(listDept.getParentOrgIndexCode());
deptEntity.setCreateTime(new Date());
deptEntity.setCreateUserId(Long.valueOf(1));
deptEntity.setUpdateTime(new Date());
deptEntity.setUpdateUserId(Long.valueOf(1));
deptService.save(deptEntity);
} else {
if (Objects.nonNull(deptEntityParent)) {
deptEntity.setParentId(deptEntityParent.getId());
}
deptEntity.setDeptName(listDept.getOrgName());
deptEntity.setDeptCode(listDept.getOrgIndexCode());
deptEntity.setAncestors(listDept.getOrgPath());
deptEntity.setCreateTime(new Date());
deptEntity.setCreateUserId(Long.valueOf(1));
deptService.update(deptEntity);
}
}
}
//同步员工
String resultPerson = ArtemisPostTest.callPostApiGetPersonList(); String resultPerson = ArtemisPostTest.callPostApiGetPersonList();
JSONObject jsonObject = JSON.parseObject(resultPerson); JSONObject jsonObject = JSON.parseObject(resultPerson);
JSONObject jsonObject1 = jsonObject.getJSONObject("data"); JSONObject jsonObject1 = jsonObject.getJSONObject("data");
...@@ -51,31 +98,48 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -51,31 +98,48 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
//判断本地数据是否为空 //判断本地数据是否为空
if (Objects.isNull(staffEntity1)) { if (Objects.isNull(staffEntity1)) {
//如果为空则将数据存入数据库 //如果为空则将数据存入数据库
StaffEntity staffEntity = new StaffEntity(); staffEntity1.initAttrValue();
if (Objects.nonNull(deptEntity)) { if (Objects.nonNull(staffEntity1)) {
staffEntity.setDeptId(deptEntity.getId()); staffEntity1.setDeptId(deptEntity.getId());
} }
staffEntity.setName(list.getPersonName()); staffEntity1.setName(list.getPersonName());
staffEntity.setRemarkId(list.getPersonId()); staffEntity1.setRemarkId(list.getPersonId());
staffEntity.setPhotoPath(list.getPersonPhoto().getPicUri()); staffEntity1.setPhotoPath(list.getPersonPhoto().getPicUri());
staffEntity.setDeptName(list.getOrgName()); staffEntity1.setDeptName(list.getOrgName());
staffEntity.setSource(1); staffEntity1.setSource(1);
staffEntity.setStatus(1); staffEntity1.setStatus(1);
staffEntity.setGender(list.getGender()); staffEntity1.setGender(list.getGender());
staffEntity.setWorkNum(list.getJobNo()); staffEntity1.setWorkNum(list.getJobNo());
staffEntity.setCreateUserId(Long.valueOf(1)); staffEntity1.setCreateUserId(Long.valueOf(1));
staffEntity.setCreateTime(new Date()); staffEntity1.setCreateTime(new Date());
if (list.getBirthday() != null) { if (list.getBirthday() != null) {
staffEntity.setBirthday((Date) list.getBirthday()); staffEntity1.setBirthday((Date) list.getBirthday());
} }
if (list.getPhoneNo() != null) { if (list.getPhoneNo() != null) {
staffEntity.setPhoneNumber(String.valueOf(list.getPhoneNo())); staffEntity1.setPhoneNumber(String.valueOf(list.getPhoneNo()));
} }
staffDao.insert(staffEntity); service.save(staffEntity1);
DeptEntity deptEntity1 = deptService.get(staffEntity1.getDeptId());
String ancestor = deptEntity1.getAncestors().split(",", 2)[1];
String[] ancestors = ancestor.split(",");
for (String newAncestor : ancestors) {
DeptEntity deptEntity2 = deptService.get(Long.valueOf(newAncestor));
if (Objects.nonNull(deptEntity2)) {
int personNumcount = staffDao.queryPersonNum(staffEntity1.getDeptId());
if (Objects.nonNull(personNumcount) && Objects.nonNull(deptEntity2)) {
deptEntity2.setPersonNum(personNumcount);
deptService.update(deptEntity2);
}
}
}
} }
//本地数据不为空 //本地数据不为空
else { else {
//执行修改 //执行修改
staffEntity1.initAttrValue();
if (Objects.nonNull(deptEntity)) { if (Objects.nonNull(deptEntity)) {
staffEntity1.setDeptId(deptEntity.getId()); staffEntity1.setDeptId(deptEntity.getId());
} }
...@@ -83,8 +147,6 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -83,8 +147,6 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
staffEntity1.setRemarkId(list.getPersonId()); staffEntity1.setRemarkId(list.getPersonId());
staffEntity1.setPhotoPath(list.getPersonPhoto().getPicUri()); staffEntity1.setPhotoPath(list.getPersonPhoto().getPicUri());
staffEntity1.setDeptName(list.getOrgName()); staffEntity1.setDeptName(list.getOrgName());
staffEntity1.setSource(1);
staffEntity1.setStatus(1);
staffEntity1.setGender(list.getGender()); staffEntity1.setGender(list.getGender());
staffEntity1.setWorkNum(list.getJobNo()); staffEntity1.setWorkNum(list.getJobNo());
staffEntity1.setCreateUserId(Long.valueOf(1)); staffEntity1.setCreateUserId(Long.valueOf(1));
...@@ -95,60 +157,31 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -95,60 +157,31 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
if (list.getPhoneNo() != null) { if (list.getPhoneNo() != null) {
staffEntity1.setPhoneNumber(String.valueOf(list.getPhoneNo())); staffEntity1.setPhoneNumber(String.valueOf(list.getPhoneNo()));
} }
staffDao.update(staffEntity1); service.update(staffEntity1);
} DeptEntity deptEntity1 = deptService.get(staffEntity1.getDeptId());
} String ancestor = deptEntity1.getAncestors().split(",", 2)[1];
} String[] ancestors = ancestor.split(",");
for (String newAncestor : ancestors) {
DeptEntity deptEntity2 = deptService.get(Long.valueOf(newAncestor));
if (Objects.nonNull(deptEntity2)) {
int personNumcount = staffDao.queryPersonNum(staffEntity1.getDeptId());
if (Objects.nonNull(personNumcount) && Objects.nonNull(deptEntity2)) {
deptEntity2.setPersonNum(personNumcount);
deptService.update(deptEntity2);
}
}
} catch (Exception e) {
e.printStackTrace();
}
try {
String resultDept = ArtemisPostTest.callPostApiGetDeptList();
JSONObject jsonObjectDept = JSON.parseObject(resultDept);
JSONObject jsonObjectDept1 = jsonObjectDept.getJSONObject("data");
DeptHikData deptHikData = JSONObject.parseObject(jsonObjectDept1.toJSONString(), DeptHikData.class);
System.out.println(resultDept);
if (Objects.nonNull(deptHikData)) {
for (ListDept listDept : deptHikData.getList()) {
//查询数据库信息
DeptEntity deptEntity = deptDao.queryDept(listDept.getOrgIndexCode());
DeptEntity deptEntityParent = deptDao.queryDeptParient(listDept.getParentOrgIndexCode());
DeptEntity deptEntity1 = new DeptEntity();
if (Objects.isNull(deptEntity)) {
if (Objects.nonNull(deptEntityParent)) {
deptEntity1.setParentId(deptEntityParent.getId());
}
deptEntity1.setDeptName(listDept.getOrgName());
deptEntity1.setDeptCode(listDept.getOrgIndexCode());
deptEntity1.setAncestors(listDept.getOrgPath());
deptEntity1.setDeptStatus(1);
deptEntity1.setOrderNum(0);
deptEntity1.setRemark(listDept.getParentOrgIndexCode());
deptEntity1.setCreateTime(new Date());
deptEntity1.setCreateUserId(Long.valueOf(1));
System.out.println(deptEntity1);
deptDao.insert(deptEntity1);
} else {
if (Objects.nonNull(deptEntityParent)) {
deptEntity.setParentId(deptEntityParent.getId());
} }
deptEntity.setDeptName(listDept.getOrgName());
deptEntity.setDeptCode(listDept.getOrgIndexCode());
deptEntity.setAncestors(listDept.getOrgPath());
deptEntity.setCreateTime(new Date());
deptEntity.setCreateUserId(Long.valueOf(1));
deptDao.update(deptEntity);
} }
} }
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
......
...@@ -49,13 +49,7 @@ public interface DeptService extends ICRUDService<DeptEntity,Long>{ ...@@ -49,13 +49,7 @@ public interface DeptService extends ICRUDService<DeptEntity,Long>{
*/ */
List<DeptTreeSelect> getListByParentId(Long parentId,Context context); List<DeptTreeSelect> getListByParentId(Long parentId,Context context);
/**
* 查询部门人数
* */
DeptEntity queryDept(String deptCode);
DeptEntity queryParent(String parentCode);
int queryParentId(Long deptId); int queryParentId(Long deptId);
......
...@@ -191,15 +191,7 @@ public class DeptServiceImpl extends AbstractCRUDServiceImpl<DeptDao, DeptEntity ...@@ -191,15 +191,7 @@ public class DeptServiceImpl extends AbstractCRUDServiceImpl<DeptDao, DeptEntity
return collect; return collect;
} }
@Override
public DeptEntity queryDept(String deptCode) {
return dao.queryDept(deptCode);
}
@Override
public DeptEntity queryParent(String parentCode) {
return dao.queryDeptParient(parentCode);
}
@Override @Override
public int queryParentId(Long deptId) { public int queryParentId(Long deptId) {
......
...@@ -4,7 +4,6 @@ import com.mortals.framework.exception.AppException; ...@@ -4,7 +4,6 @@ import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
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 com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.job.model.JobQuery; import com.mortals.xhx.module.job.model.JobQuery;
import com.mortals.xhx.module.job.service.JobService; import com.mortals.xhx.module.job.service.JobService;
...@@ -102,23 +101,4 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ ...@@ -102,23 +101,4 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
} }
@Override
protected int saveAfter(StaffEntity entity, Map<String, Object> model, Context context) throws AppException {
//统计当前部门
DeptEntity deptEntity = deptService.get(entity.getDeptId());
int personNumcount = service.queryDeptNum(entity.getDeptId());
deptEntity.setPersonNum(personNumcount);
deptService.update(deptEntity);
//统计上级部门
int personNumId = deptService.queryParentId(entity.getDeptId());
if (personNumId!=0){
DeptEntity deptEntity1 = deptService.get(entity.getDeptId());
int personParentNumcount = service.queryDeptNum(deptEntity1.getParentId());
deptEntity1.setPersonNum(personParentNumcount);
deptService.update(deptEntity1);
}
return super.saveAfter(entity, model, context);
}
} }
\ No newline at end of file
...@@ -13,18 +13,18 @@ client.global.set("SmsSet_id", JSON.parse(response.body).data.id); ...@@ -13,18 +13,18 @@ client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token); client.global.set("authToken", JSON.parse(response.body).data.token);
%} %}
###职位信息列表 ###部门信息列表
POST {{baseUrl}}/dept/list POST {{baseUrl}}/dept/list
Authorization: {{authToken}} Authorization: {{authToken}}
Content-Type: application/json Content-Type: application/json
{ {
"page":1, "page":1,
"size":10 "size":30
} }
###职位信息更新与保存 ###部门信息更新与保存
POST {{baseUrl}}/dept/save POST {{baseUrl}}/dept/save
Authorization: {{authToken}} Authorization: {{authToken}}
Content-Type: application/json Content-Type: application/json
...@@ -41,18 +41,18 @@ Content-Type: application/json ...@@ -41,18 +41,18 @@ Content-Type: application/json
client.global.set("Dept_id", JSON.parse(response.body).data.id); client.global.set("Dept_id", JSON.parse(response.body).data.id);
%} %}
###职位信息查看 ###部门信息查看
GET {{baseUrl}}/dept/info?id=1 GET {{baseUrl}}/dept/info?id=1
Authorization: {{authToken}} Authorization: {{authToken}}
Accept: application/json Accept: application/json
###职位信息编辑 ###部门信息编辑
GET {{baseUrl}}/dept/edit?id={{Job_id}} GET {{baseUrl}}/dept/edit?id={{Job_id}}
Authorization: {{authToken}} Authorization: {{authToken}}
Accept: application/json Accept: application/json
###职位信息删除 ###部门信息删除
GET {{baseUrl}}/dept/delete?id={{Job_id}} GET {{baseUrl}}/dept/delete?id={{Job_id}}
Authorization: {{authToken}} Authorization: {{authToken}}
Accept: application/json Accept: application/json
......
...@@ -19,9 +19,6 @@ Authorization: {{authToken}} ...@@ -19,9 +19,6 @@ Authorization: {{authToken}}
Content-Type: application/json Content-Type: application/json
{ {
"groupName":"7knq8z",
"jobCode":"mmnj82",
"jobName":"z8f2k5",
"page":1, "page":1,
"size":10 "size":10
} }
......
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