|
|
@@ -1,80 +1,173 @@
|
|
|
<template>
|
|
|
- <div class="container">
|
|
|
- <el-form ref="auditForm" label-position="top" :model="auditForm" :rules="auditRule" label-width="80px">
|
|
|
- <el-form-item label="入职人">
|
|
|
- {{ form.loginName }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="部门">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="职位">
|
|
|
- {{ form.loginName }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="员工类型">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="性别">
|
|
|
- {{ form.loginName }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="出生日期">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="联系电话">
|
|
|
- {{ form.loginName }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="电子邮箱">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="教育背景">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="工作经验">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="入职日期">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="附件">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="备注">
|
|
|
- {{ form.deptId }}
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="审批意见" prop="reason">
|
|
|
- <el-input type="textarea" v-model="auditForm.reason" placeholder="请输入审批建议" />
|
|
|
- </el-form-item>
|
|
|
- <el-timeline>
|
|
|
- <el-timeline-item v-for="(item, index) in tasks" :key="index" :icon="getTimelineItemIcon(item)"
|
|
|
- :type="getTimelineItemType(item)">
|
|
|
- <p style="font-weight: 700">任务:{{ item.name }}</p>
|
|
|
- <el-card :body-style="{ padding: '10px' }">
|
|
|
- <label v-if="item.assigneeUser" style="font-weight: normal; margin-right: 30px;">
|
|
|
- 审批人:{{ item.assigneeUser.nickname }}
|
|
|
- <el-tag type="info" size="mini">{{ item.assigneeUser.deptName }}</el-tag>
|
|
|
- </label>
|
|
|
- <label style="font-weight: normal" v-if="item.createTime">创建时间:</label>
|
|
|
- <label style="color:#8a909c; font-weight: normal">{{ parseTime(item.createTime) }}</label>
|
|
|
- <label v-if="item.endTime" style="margin-left: 30px;font-weight: normal">审批时间:</label>
|
|
|
- <label v-if="item.endTime" style="color:#8a909c;font-weight: normal"> {{
|
|
|
- parseTime(item.endTime)
|
|
|
- }}</label>
|
|
|
- <label v-if="item.durationInMillis" style="margin-left: 30px;font-weight: normal">耗时:</label>
|
|
|
- <label v-if="item.durationInMillis" style="color:#8a909c;font-weight: normal">
|
|
|
- {{ getDateStar(item.durationInMillis) }} </label>
|
|
|
- <p v-if="item.reason">
|
|
|
- <el-tag :type="getTimelineItemType(item)">{{ item.reason }}</el-tag>
|
|
|
- </p>
|
|
|
- </el-card>
|
|
|
- </el-timeline-item>
|
|
|
- </el-timeline>
|
|
|
- <el-button @click="handleEdit()">修改</el-button>
|
|
|
-
|
|
|
- <div style="float: right;">
|
|
|
- <el-button @click="handleAudit(false)">拒绝</el-button>
|
|
|
- <el-button type="primary" @click="handleAudit(true)">同意</el-button>
|
|
|
- </div>
|
|
|
- </el-form>
|
|
|
+ <div class="widget-wrapper">
|
|
|
+ <div class="widget-list">
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">入职人</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.loginName">{{ form.loginName }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <div class="field-name">部门</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.deptName">{{ form.deptName }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <div class="field-name">职位</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.position">{{ form.position }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">员工类型</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.employeeTypeName">{{ form.employeeTypeName }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">性别</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.gender">{{ form.gender }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">出生日期</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday">{{ form.birthday }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">联系电话</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday">{{ form.contactNumber }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">电子邮箱</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday">{{ form.email }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <div class="field-name">教育背景</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday">{{ form.education }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <div class="field-name">工作经验</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday">{{ form.workExperience }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">入职日期</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday">{{ form.startDate }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <div class="field-name">附件</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday" style="color: #5094d5;cursor: pointer;">附件1</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <div class="field-name">备注</div>
|
|
|
+ </div>
|
|
|
+ <div class="field-component">
|
|
|
+ <span :title="form.birthday">{{ form.remarks }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <span class="field-required">*</span>
|
|
|
+ <div class="field-name">审批意见</div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-input type="textarea" v-model="reason" placeholder="请输入审批建议" />
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div class="field-label">
|
|
|
+ <div class="field-name">流程动态</div>
|
|
|
+ </div>
|
|
|
+ <el-timeline>
|
|
|
+ <el-timeline-item v-for="(item, index) in tasks" :key="index" :icon="getTimelineItemIcon(item)"
|
|
|
+ :type="getTimelineItemType(item)">
|
|
|
+ <p style="font-weight: 700">任务:{{ item.name }}</p>
|
|
|
+ <el-card :body-style="{ padding: '10px' }">
|
|
|
+ <label v-if="item.assigneeUser" style="font-weight: normal; margin-right: 30px;">
|
|
|
+ 审批人:{{ item.assigneeUser.nickname }}
|
|
|
+ <el-tag type="info" size="mini">{{ item.assigneeUser.deptName }}</el-tag>
|
|
|
+ </label>
|
|
|
+ <label style="font-weight: normal" v-if="item.createTime">创建时间:</label>
|
|
|
+ <label style="color:#8a909c; font-weight: normal">{{ parseTime(item.createTime) }}</label>
|
|
|
+ <label v-if="item.endTime" style="margin-left: 30px;font-weight: normal">审批时间:</label>
|
|
|
+ <label v-if="item.endTime" style="color:#8a909c;font-weight: normal"> {{
|
|
|
+ parseTime(item.endTime)
|
|
|
+ }}</label>
|
|
|
+ <label v-if="item.durationInMillis" style="margin-left: 30px;font-weight: normal">耗时:</label>
|
|
|
+ <label v-if="item.durationInMillis" style="color:#8a909c;font-weight: normal">
|
|
|
+ {{ getDateStar(item.durationInMillis) }} </label>
|
|
|
+ <p v-if="item.reason">
|
|
|
+ <el-tag :type="getTimelineItemType(item)">{{ item.reason }}</el-tag>
|
|
|
+ </p>
|
|
|
+ </el-card>
|
|
|
+ </el-timeline-item>
|
|
|
+ </el-timeline>
|
|
|
+ </div>
|
|
|
+ <div class="fx-field x-grid-col-12">
|
|
|
+ <div style="float: right;">
|
|
|
+ <el-button @click="handleAudit(false)">拒绝</el-button>
|
|
|
+ <el-button type="primary" @click="handleAudit(true)">同意</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -85,11 +178,16 @@ import {
|
|
|
rejectTask,
|
|
|
} from "@/api/bpm/task";
|
|
|
export default {
|
|
|
+ props: {
|
|
|
+ id: {
|
|
|
+ type: [String, Number],
|
|
|
+ default: undefined
|
|
|
+ },
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
- auditForm: {
|
|
|
- reason: '',
|
|
|
- },
|
|
|
+ entryId: undefined, // 编号
|
|
|
+ reason: '',
|
|
|
auditRule: {
|
|
|
reason: [{ required: true, message: '审批建议不能为空', trigger: 'blur' }],
|
|
|
},
|
|
|
@@ -123,7 +221,6 @@ export default {
|
|
|
}
|
|
|
],
|
|
|
peopleList: ['林动', '萧炎', '叶凡'],
|
|
|
- id: undefined, // 编号
|
|
|
// 表单参数
|
|
|
form: {
|
|
|
loginName: '张三',
|
|
|
@@ -132,38 +229,51 @@ export default {
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
|
- // this.leaveId = this.id || this.$route.query.id;
|
|
|
- // if (!this.leaveId) {
|
|
|
- // this.$message.error('未传递 id 参数,无法查看 OA 请假信息');
|
|
|
- // return;
|
|
|
- // }
|
|
|
+ this.entryId = this.id || this.$route.query.id;
|
|
|
+ console.log(this.entryId);
|
|
|
// this.getDetail();
|
|
|
},
|
|
|
methods: {
|
|
|
- handleEdit(){
|
|
|
- this.$router.push({path: '/oa/entry/edit'})
|
|
|
+ handleEdit() {
|
|
|
+ this.$router.push({ path: '/oa/entry/edit' })
|
|
|
},
|
|
|
handleAudit(pass) {
|
|
|
- this.$refs.auditForm.validate(valid => {
|
|
|
- if (!valid) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ if (!this.reason) {
|
|
|
+ this.$message({
|
|
|
+ message: '请填写审批意见',
|
|
|
+ type: 'warning',
|
|
|
+ customClass: 'myBox'
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
const data = {
|
|
|
id: '12',
|
|
|
- reason: this.auditForms.reason
|
|
|
+ reason: this.reason
|
|
|
}
|
|
|
if (pass) {
|
|
|
- approveTask(data).then(response => {
|
|
|
- this.$modal.msgSuccess("审批通过成功!");
|
|
|
- // this.getDetail(); // 获得最新详情
|
|
|
- });
|
|
|
+ this.$modal.msgSuccess({
|
|
|
+ message: '审批通过成功!',
|
|
|
+ customClass: 'myBox'
|
|
|
+ });
|
|
|
+ // approveTask(data).then(response => {
|
|
|
+ // this.$modal.msgSuccess({
|
|
|
+ // message: '审批通过成功!',
|
|
|
+ // customClass: 'myBox'
|
|
|
+ // });
|
|
|
+ // });
|
|
|
} else {
|
|
|
- rejectTask(data).then(response => {
|
|
|
- this.$modal.msgSuccess("审批不通过成功!");
|
|
|
- // this.getDetail(); // 获得最新详情
|
|
|
- });
|
|
|
+ this.$modal.msgSuccess({
|
|
|
+ message: '审批不通过成功!',
|
|
|
+ customClass: 'myBox'
|
|
|
+ });
|
|
|
+ // rejectTask(data).then(response => {
|
|
|
+ // this.$modal.msgSuccess({
|
|
|
+ // message: '审批不通过成功!',
|
|
|
+ // customClass: 'myBox'
|
|
|
+ // });
|
|
|
+ // });
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
},
|
|
|
getTimelineItemIcon(item) {
|
|
|
if (item.result === 1) {
|
|
|
@@ -206,7 +316,7 @@ export default {
|
|
|
},
|
|
|
/** 获得请假信息 */
|
|
|
getDetail() {
|
|
|
- getLeave(this.leaveId).then(response => {
|
|
|
+ getLeave(this.entryId).then(response => {
|
|
|
this.form = response.data;
|
|
|
});
|
|
|
},
|
|
|
@@ -219,6 +329,59 @@ export default {
|
|
|
} */
|
|
|
</style>
|
|
|
<style lang="scss" scoped>
|
|
|
+.widget-wrapper>.widget-list {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+}
|
|
|
+
|
|
|
+.x-grid-col-6 {
|
|
|
+ width: 50%;
|
|
|
+}
|
|
|
+
|
|
|
+.x-grid-col-12 {
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+
|
|
|
+.fx-field {
|
|
|
+ line-height: 20px;
|
|
|
+ padding: 7px 12px 12px;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+
|
|
|
+.fx-field .field-label {
|
|
|
+ word-wrap: break-word;
|
|
|
+ color: #141e31;
|
|
|
+ display: flex;
|
|
|
+ font-weight: 600;
|
|
|
+ line-height: 20px;
|
|
|
+ padding: 5px 0;
|
|
|
+ position: relative;
|
|
|
+ word-break: break-word;
|
|
|
+}
|
|
|
+
|
|
|
+.fx-field .field-label .field-required {
|
|
|
+ color: #eb5050;
|
|
|
+ margin-left: -6px;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+
|
|
|
+.fx-field .field-label .field-name {
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+
|
|
|
+.field-component {
|
|
|
+ word-wrap: break-word;
|
|
|
+ background: #f5f6f8;
|
|
|
+ border-radius: 2px;
|
|
|
+ color: #141e31;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 20px;
|
|
|
+ min-height: 32px;
|
|
|
+ padding: 6px 8px;
|
|
|
+ white-space: pre-wrap;
|
|
|
+ word-break: break-word;
|
|
|
+}
|
|
|
+
|
|
|
ul {
|
|
|
padding-left: 0px !important;
|
|
|
}
|