<template> <div class="evaluationStart"> <div class="evaluationStartBtn"> <div class="collectSeach" :style="$utils.collectSeachSty()"> <div class="exceed"> <span class="exceedSpan">业务编号:</span> <el-input v-model="rescode" placeholder="请输入业务编号"></el-input> </div> <div class="exceed"> <span class="exceedSpan">业务简述:</span> <el-input v-model="resDes" placeholder="请输入业务简述"></el-input> </div> <seachs @handleSeach="getSeachData" @handleRest="resetSeach"></seachs> <el-button size="mini" color="#3B7AD1" icon="Operation" v-if="userId === '23031009'" @click="startTableFn" style="margin-left: 10px"> <span>统计汇总</span> </el-button> </div> <div class="PeriodBtn" :style="$utils.PeriodBtnSty()"> <el-button color="#3B7AD1" size="mini" @click="handleAdd" v-if="userId === '23031009'"> <span>下达指标</span> </el-button> <!-- $utils.havePurview('evaluationDeptStart:oneLevel:add') --> <btns :showImport="false" :showExport="false" :showSave="false" :showAdd="false" :showDelete="$utils.havePurview('evaluationDeptStart:oneLevel:delete')" :disDelete="changeDateSelect.length === 0" :disImport="true" :disExport="true" @handleDelete="handleDelete"></btns> </div> <div class="evaluationStartTableData"> <el-table :data="evaluationStartData" style="width: 100%" @select="rowClick" :class="evalDeptStartTableSty()" @select-all="rowClick" @row-dblclick="getDetail" @cell-click="clickDes"> <el-table-column type="selection" label="操作" align="center"></el-table-column> <el-table-column label="业务编号" prop="responsibilityCode" width="300" /> <el-table-column label="考评年度" prop="appraisalYear" width="200" /> <el-table-column label="考评部门" prop="deptName" width="200" /> <!-- <el-table-column label="业务简述" prop="des"> <template #default="scope"> <div v-if="!scope.row.chngeDes"> <el-tooltip class="box-item" effect="customized" :content="scope.row.des" placement="top"> <span class="tooltipCC">{{scope.row.des}}</span> </el-tooltip> </div> <div v-else> <el-input v-model="scope.row.des" :rows="1" type="textarea" placeholder="请输入描述" @blur="modifyDesFn(scope.row)"></el-input> </div> </template> </el-table-column> --> <el-table-column label="流程状态" prop="stage" width="200"> <template #default="scope"> <p class="indicitem" @click="seeStates(scope.row)">{{scope.row.stage}}</p> </template> </el-table-column> <el-table-column label="创建人" prop="createName" width="200" /> <el-table-column label="创建时间" prop="createTime" width="200" /> <el-table-column label="操作" width="160"> <template #default="scope"> <div style="display:flex"> <p class="indicitem" v-if="scope.row.stage === '流程未启动'" @click="agetdeptresponsibility(scope.row)">启动</p> <!-- <p class="indicitem" v-else @click="getDetail(scope.row)">详情</p> --> <p style="font-size: 12px;margin-right: 20px;" v-else-if="scope.row.stage === '流程已结束'"> 已结束</p> <p style="font-size: 12px;margin-right: 20px;" v-else>已启动</p> <p class="indicitem" v-if="scope.row.stage === '流程已结束'" @click="getGenerateReport(scope.row)">生成报表</p> </div> </template> </el-table-column> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.currentPage" :page-size="page.pagesize" layout="total, prev, pager, next, jumper" :total="page.total"> </el-pagination> </div> <el-dialog :title="title" custom-class="startToDia" v-model="dialogVisible" width="600px" :close-on-click-modal="false"> <div class="periodFrom"> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm" :validate-on-rule-change="false"> <!-- <el-form-item label="考评类别" prop="organizationType"> <el-select v-model="ruleForm.organizationType" placeholder="请选择考评类别" disabled> <el-option v-for="item in organizationType" :key="item.code" :label="item.label" :value="item.code"> </el-option> </el-select> </el-form-item> <el-form-item label="考评周期" prop="evaluationCycle"> <el-select v-model="ruleForm.evaluationCycle" placeholder="请选择考评周期" disabled> <el-option v-for="item in periodData" :key="item.keyValue" :label="item.keyName" :value="item.keyValue" :disabled="item.keyValue === 'YDKP' || item.keyValue === 'JDKP'"> </el-option> </el-select> </el-form-item> <el-form-item label="考评部门" prop="department"> <el-select v-model="ruleForm.department" multiple collapse-tags placeholder="请选择所属部门"> <el-option v-for="item in departData" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </el-form-item> --> <el-form-item label="年份" prop="year"> <el-date-picker v-model="ruleForm.year" type="year" value-format="YYYY" placeholder="请选择年份" /> </el-form-item> <!-- <el-form-item label="描述" prop="desc"> <el-input v-model="ruleForm.desc" :rows="5" type="textarea" placeholder="请输入描述"></el-input> </el-form-item> --> </el-form> </div> <template #footer> <span class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="saveevaluaStart('ruleForm')">确 定</el-button> </span> </template> </el-dialog> <el-dialog title="流程详情" v-model="statesVisible" :fullscreen="true" :close-on-click-modal="false"> <div class="flowSty"> <iframe id="iframeContain" width="100%" height="500px" frameborder="0" class="iframe" name="iframeContain" seamless scrolling="no" :src="iframeURL"> </iframe> <el-table :data="stageArr" style="width: 100%"> <el-table-column type="index" label="序号" align="center" /> <el-table-column label="任务名称" prop="taskName" /> <el-table-column label="任务创建时间" prop="createTime" /> <el-table-column label="任务处理时间" prop="approveTime" /> <el-table-column label="候选人" prop="assignInfo" width="300"> <template #default="scope"> <span>{{changeAssignInfo(scope.row)}}</span> </template> </el-table-column> <el-table-column label="执行人" prop="approverName" /> <el-table-column label="处理状态" prop="status"> <template #default="scope"> <div v-if="scope.row.status === 'start'">启动</div> <div v-else-if="scope.row.status === 'agree'">同意</div> <div v-else-if="scope.row.status === 'awaiting_check'">等待,待审批</div> <div v-else-if="scope.row.status === 'reject'">驳回</div> </template> </el-table-column> <el-table-column label="备注/意见" prop="opinion" /> </el-table> </div> </el-dialog> </div> <!-- @approveMsg="approveMsg" --> <start-from-list ref="startFromDetail"></start-from-list> <start-table ref="startTable"></start-table> </div> </template> <script> import startFromList from './evaluationDeptStartFrom.vue' import startTable from './evaluationDeptStartTab.vue' import btns from '../elbuttonS.vue' import seachs from '../seachGroup.vue' import { apiGetevaluatiodeptplanList, apiGetevaluationdeptplanSave, apiGetdoAction, apiGetorganizationstructureFromTree, apiGetworkflowgetOpinion, apiGetevaluationdeptplanModify, apiGetevaluationdeptplanReport, apiGetevaluationdownloadReport, apideptModifyState, apiGetdatadictionaryList, apiPostevaluationdeptplanDelete, apiGetevaluationdeptplanverifyDept } from '../../api/api' export default { components: { startFromList, startTable, btns, seachs }, data() { return { dialogVisible: false, statesVisible: false, title: '', iframeURL: '', windframradio: {}, deleteSelect: [], changeDateSelect: [], evaluationStartData: [], page: { pagesize: 12, currentPage: 1, total: 0 }, ruleForm: { // department: [], organizationType: '', evaluationCycle: '', evaluateRule: '', year: '', month: 0, desc: '' }, rules: { // department: [ // { required: true, message: '请选择考评部门', trigger: 'change' } // ], organizationType: [{ required: true, message: '请选择考评类别', trigger: 'change' }], evaluationCycle: [{ required: true, message: '请选择考评周期', trigger: 'change' }], evaluateRule: [{ required: true, message: '请选择考评规则', trigger: 'change' }], year: [{ required: true, message: '请选择年份', trigger: 'change' }], desc: [{ required: true, message: '请输入描述', trigger: 'blur' }] }, organizationType: [], periodData: [], ruleDataAll: [], rescode: '', resDes: '', stageArr: [], departData: [], winPix: window.devicePixelRatio, innerWidth: window.innerWidth, userId: '' } }, created() { this.organizationType = [{ label: '单位考评', code: 'DWKP' }, { label: '部门考评', code: 'BMKP' } ] this.getevaluStartList() this.getPeriodData() // this.getDepartmentFromTreeData() }, methods: { // 查询列表页面 getevaluStartList() { let that = this let userMes = JSON.parse(window.sessionStorage.getItem('user')) this.userId = userMes.deptId let params = { pageNum: that.page.currentPage, pageSize: that.page.pagesize, deptId: userMes.deptId, responsibilityCode: that.rescode, des: that.resDes } apiGetevaluatiodeptplanList(params).then(datas => { if (datas && datas.data) { that.evaluationStartData = datas.data.records that.page.total = datas.data.total } }) }, // 查询部门 getDepartmentFromTreeData() { let that = this let params = { id: '23031001', num: 1, type: 140 } apiGetorganizationstructureFromTree(params).then(datas => { if (datas && datas.data) { that.departData = datas.data[0].children } }) }, //考评周期 getPeriodData() { let that = this let params = { superKey: 'KPZQ0001' } apiGetdatadictionaryList(params).then(datas => { if (datas && datas.data) { that.periodData = datas.data } }) }, startTableFn() { this.$refs.startTable.init() }, modifyDesFn(row) { let that = this let params = { id: row.id, des: row.des } apiGetevaluationdeptplanModify(params).then(datas => { if (!datas.success) { that.$message({ message: datas.message, type: 'error' }); } else { that.$message({ message: '考评目标修改成功', type: 'success' }); that.getevaluStartList() } }) }, saveevaluaStart(formName) { let that = this that.$refs[formName].validate((valid) => { if (valid) { apiGetevaluationdeptplanverifyDept().then(datas => { if (datas && datas.data) { if (datas.data > 0) { that.$message({ message: '已存在' + datas.data + '个部门', type: 'success' }); that.saveAndEditIndicatorData() } else { that.$message({ message: '暂无配置部门,请到部门考评配置页面添加', type: 'error' }); } } }) } }); }, //新增/修改考评启动数据 saveAndEditIndicatorData() { let that = this let userMes = JSON.parse(window.sessionStorage.getItem('user')) // let deptData = [] // that.ruleForm.department.forEach(it =>{ // that.departData.forEach(itv =>{ // if (itv.id === it) { // let obj = { // // dataKey: itv.dataKey, // id: itv.id, // keyName: itv.name // } // deptData.push(obj) // } // }) // }) let params = { // deptData: JSON.stringify(deptData), // evaluationCategory: that.ruleForm.organizationType, // businessClass: that.ruleForm.evaluationCycle, appraisalYear: that.ruleForm.year, // des: that.ruleForm.desc, createBy: userMes.id, createName: userMes.name } if (that.isSave) { params.id = that.evalradio.id } apiGetevaluationdeptplanSave(params).then(datas => { if (!datas.success) { that.$message({ message: datas.message, type: 'error' }); } else { if (!that.isSave) { that.$message({ message: '考评目标新增成功', type: 'success' }); } else { that.$message({ message: '考评目标修改成功', type: 'success' }); } that.dialogVisible = false that.changeDateSelect = [] that.getevaluStartList() } }) }, agetdeptresponsibility(row) { let that = this let par = { defKey: "bbbmyjzbjh", businessKey: row.id, action: "start", opinion: "本部部门业绩指标计划启动", iamCode: window.localStorage.getItem('code') } apiGetdoAction(par).then(datas => { if (datas && datas.data) { if (!datas.data.isOk) { that.$message({ message: datas.data.msg, type: 'error' }); } else { let params = { id: row.id, stage: '流程已开始' } apideptModifyState(params).then(values => { if (values.success) { that.getevaluStartList() } else { that.$message({ message: values.message, type: 'error' }); } }) } } }) }, clickDes(row, column, cell, event) { if (row.stage === '流程已结束') { row.chngeDes = false } else { let userMes = JSON.parse(window.sessionStorage.getItem('user')) if (userMes.id === row.createBy && row.stage === '流程未启动') { if (column.label === '业务简述') { row.chngeDes = true } else { row.chngeDes = false } } } }, //明细 getDetail(row) { let userMes = JSON.parse(window.sessionStorage.getItem('user')) let ispersonDept = window.sessionStorage.getItem('ispersonDept') if (row.stage === '流程未启动') { if (ispersonDept === 'true') { this.$refs.startFromDetail.init(row, this.departData) } } else { this.$refs.startFromDetail.init(row, this.departData) } }, changeAssignInfo(row) { let showStr = '' if (row.assignInfo) { showStr = row.assignInfo.substring(row.assignInfo.indexOf('-') + 1, row.assignInfo.length) .substring(0, row.assignInfo.substring(row.assignInfo.indexOf('-') + 1, row.assignInfo.length) .indexOf('-')) } return showStr }, seeStates(row) { if (!row.instId) { this.$message({ type: 'error', message: '无法查看流程' }); } else { this.statesVisible = true let url = '' if (window.location.hostname === '10.65.78.81') { url = 'http://10.65.79.85:8080' } else { url = 'http://10.65.78.23:8080' } this.iframeURL = url + '/agilebpm-ui/bpm/instance/instanceImageDialog.html?instanceId=' + row .instId + '&iamCode=' + window.localStorage.getItem('code') this.getstageData(row.instId) } }, // 根据流程id获取业务id getstageData(id) { let that = this let params = { instId: id, iamCode: window.localStorage.getItem('code') } apiGetworkflowgetOpinion(params).then(datas => { if (datas && datas.data) { that.stageArr = datas.data.data } }) }, getSeachData() { this.page.currentPage = 1 this.getevaluStartList() }, resetSeach() { this.page.currentPage = 1 this.rescode = '' this.resDes = '' this.getevaluStartList() }, handleSizeChange(val) { this.page.pagesize = val this.getevaluStartList() }, handleCurrentChange(val) { this.page.currentPage = val this.getevaluStartList() }, rowClick(selection, row) { this.changeDateSelect = selection }, approveMsg(val) { if (val) { this.getevaluStartList() } }, handleAdd() { this.dialogVisible = true this.title = '新建表单填报' this.$nextTick(() => { this.$refs['ruleForm'].resetFields() this.ruleForm = { // department: [], // organizationType: 'BMKP', // evaluationCycle: 'NDKP', // evaluateRule: '', year: '', // month: 0, // desc: '' } }) }, //删除 handleDelete() { this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { let that = this let paramsArr = [] that.changeDateSelect.forEach(it => { paramsArr.push(it.id) }) apiPostevaluationdeptplanDelete(paramsArr.join(',')).then(datas => { that.$message({ type: 'success', message: '删除成功!' }); that.getevaluStartList() that.changeDateSelect = [] }) }) }, getGenerateReport(row) { let that = this apiGetevaluationdeptplanReport(row.id).then(datas => { if (datas.success) { apiGetevaluationdownloadReport(datas.data).then(datass => { let blob = new Blob([datass], { type: 'application/msword;charset=UTF-8' }) saveAs(blob, `${datas.data}`) }) } else { that.$message({ message: datas.message, type: 'error' }); } }) }, evalDeptStartTableSty() { if (this.winPix === 1.25 || this.innerWidth < 1800) { return 'evalDeptStart125Table' } else { return 'evalDeptStart100Table' } } } } </script> <style lang="less"> .evaluationStart { .evaluationStartBtn { .collectSeach { display: flex; padding: 24px 20px; border-bottom: 1px solid#D6DBEA; .exceed { display: flex; .exceedSpan { width: 100px; height: 12px; font-size: 14px; font-family: Microsoft YaHei; font-weight: 400; color: #8991B0; line-height: 12px; margin-top: 14px; } .el-input { margin-right: 10px; height: 40px; .el-input__inner { height: 40px; } .el-input__suffix { .el-select__caret { line-height: 30px; } } } } .el-select { margin-right: 10px; .el-input__inner { height: 30px; } .el-input__suffix { .el-select__caret { line-height: 30px; } } } } span { font-size: 14px; } .PeriodBtn { display: flex; justify-content: flex-end; padding: 20px 0; } .el-button { height: 30px; // width:100px; padding: 0 20px; // padding-top: 8px; span { margin: 0; } } .evaluationStartTableData { .evalDeptStart125Table { .el-table__body-wrapper { height: 53vh !important; } } .evalDeptStart100Table { .el-table__body-wrapper { height: 60vh !important; } } .el-table { .el-input__inner { height: 30px !important; } .el-radio__label { display: none; } .tooltipCC { width: 300px; display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .tooltipCCDes { width: 200px; display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .indicitem { color: #409EFF; font-size: 12px; margin-right: 20px; cursor: pointer; &:hover { text-decoration: underline; } } } .el-pagination { margin-top: 20px; text-align: end; position: relative; } } .el-overlay { .startToDia { .el-dialog__body { padding: 30px 60px 30px 20px !important; .periodFrom { .el-select, .el-input { width: 100%; } .el-input { height: 30px; } } .flowSty { width: 100%; height: 70vh; } } } } } } </style>