Commit 43e5292c authored by WangXu's avatar WangXu

任务统计查看详情,流程名称修改

parent 9db49dc4
<template>
<div class="mt-show-input">
<div class="mt-show-input" :style="inputWidth">
<input
ref="input"
:class="inputTypeClass"
......@@ -9,13 +9,12 @@
@click="handleClick"
@blur="handleBlur"
/>
<div class="icon" @click="handleIconClick">
<div class="icon" @click="handleIconClick" v-if="!isEdit">
<slot name="icon"></slot>
</div>
</div>
</template>
<script>
......@@ -36,8 +35,17 @@
inputTypeClass() {
return {
'text': !this.isEdit,
'has-icon': this.$slots.icon
'has-icon': this.$slots.icon,
'editting': this.isEdit
}
},
inputWidth() {
if (this.isEdit) {
return {
width: '100%'
}
}
return {}
}
},
watch: {
......@@ -82,21 +90,32 @@
.mt-show-input {
position: relative;
}
input {
border: none;
border-bottom: black 1px solid;
/*border: none;*/
/*border-bottom: black 1px solid;*/
border: 1px solid #d9d9d9;
border-radius: 4px;
transition: border-color 0.3s;
}
input:focus {
border: none;
border-bottom: black 1px solid;
outline-offset: 0;
outline: none;
/*border: none;*/
/*border-bottom: black 1px solid;*/
/*outline-offset: 0;*/
/*outline: none;*/
border-color: #40a9ff;
outline: 0;
box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
border-right-width: 1px !important;
}
.text {
/*background-color: black;*/
border: none;
}
.has-icon{
.has-icon {
padding-right: 35px;
}
......@@ -105,6 +124,7 @@
outline-offset: 0;
outline: none;
}
.icon {
position: absolute;
right: 0;
......@@ -112,4 +132,8 @@
width: 30px;
cursor: pointer;
}
.editting {
width: 100%;
}
</style>
......@@ -11,8 +11,8 @@ import {
// 创建 axios 实例
const service = axios.create({
// baseURL: 'http://106.2.13.200:8032', // api base_url
baseURL: 'http://192.168.0.142:8080', // api base_url
baseURL: 'http://106.2.13.200:8032', // api base_url
// baseURL: 'http://192.168.9.23:8080', // api base_url
timeout: 6000 // 请求超时时间
})
......
<template>
<div>
<el-dialog
:title="TaskInfo.taskDO.workSubject"
:visible.sync="isNotHidden"
@close="closeModel"
>
<div style="height: 60vh" v-if="Object.keys(TaskInfo).length != 0">
<div class="drawer_header">
<div class="avatar">
<img
v-if="showAvatar"
:src="Object.values(createMap)[0].avatar"
style="height: 100%;width: 100%;object-fit: contain;border-radius: 50%" alt="">
<span v-else>{{Object.values(createMap).length > 0 ? Object.values(createMap)[0].name.substr(-2,2) : ''}}</span>
</div>
<div style="padding-top: 10px;display: flex;flex-direction: column;justify-content: space-between">
<span>{{Object.values(createMap).length > 0 ? Object.values(createMap)[0].name : ''}}</span>
<div>
<el-tag size="mini" type="danger" v-if="TaskInfo.taskDO.priority == '非常紧急'">非常紧急</el-tag>
<el-tag size="mini" type="warning" v-if="TaskInfo.taskDO.priority == '紧急'">紧急</el-tag>
<el-tag size="mini" type="info" v-if="TaskInfo.taskDO.priority == '普通'">普通</el-tag>
<el-tag size="mini" effect="dark" type="success" v-if="TaskInfo.taskDO.schedule == 4">尽快完成</el-tag>
<el-tag size="mini" effect="dark" type="warning" v-if="TaskInfo.taskDO.schedule == 5">延期</el-tag>
<el-tag size="mini" effect="dark" type="danger" v-if="TaskInfo.taskDO.schedule == 6">逾期</el-tag>
<span
style="font-size: 14px;color: #f1b46d;margin-left: 5px">{{getStateLabel(TaskInfo.taskDO.workStatus)}}</span>
</div>
</div>
<!--<div class="buttons">-->
<!-- <svg-icon style="font-size: 25px" icon-class="print"></svg-icon>-->
<!-- <svg-icon style="font-size: 25px" icon-class="refresh"></svg-icon>-->
<!--</div>-->
</div>
<hr style="width: 98%;opacity: .2">
<div class="drawer_body">
<div class="formItem">
<span>
<span style="color: #808080a6;font-size: 14px">编号:</span>
{{TaskInfo.taskDO.workNo}}
</span>
</div>
<div class="formItem" v-for="(item,index) in TaskInfo.workInfoResDTOList"
v-if="isShowForm(item.permission)">
<span style="color: #808080a6;font-size: 14px">{{item.fieldNm}}:</span>
<span style="margin-left: 5px;font-size: 14px">{{item.fieldValue}}</span>
</div>
<!--进度-->
<hr style="width:100%;opacity: .2">
<div class="formItem" style="margin-top: 20px" v-if="TaskInfo.taskId || isHaveRecoed">
<el-timeline style="padding: 0">
<el-timeline-item
v-for="(activity, index) in TaskInfo.taskRecordsDOList"
:key="index"
color="#3fa6dd"
size="large"
:timestamp="activity.handleTime">
<span v-for="(item,index) in activity.userList">{{item.name}}</span>
<span v-if="activity.handleResultInfo!='' && activity.handleResultInfo =='驳回' "
style="font-size: 15px;color: red">{{activity.handleResultInfo}}</span>
<span v-if="activity.handleResultInfo!='' && activity.handleResultInfo =='通过' "
style="font-size: 15px;color: greenyellow">{{activity.handleResultInfo}}</span>
<span style="margin-left: 10px">{{activity.handleContent}}</span>
</el-timeline-item>
</el-timeline>
</div>
<div v-if="!isHaveRecoed">
<span>无审批记录</span>
</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
// import userSelectTreeInput from '@/views/taskTemplate/taskDesign/taskFlow/component/user-select-tree-input'
// import renders from '@/components/custom/Render.vue';
export default {
name: 'detail-dialog',
components: {
// renders,
},
data() {
return {
isNotHidden: this.isDialogShow,
isHaveRecoed: false,
isShow: false,
itemData: {},
activities: [],
TaskInfo: this.fromDataItem,
buttonsValue: [],
statetype: this.stateType,
currentIsAgree: -1,
delayForm: {
delayDate: '',
desc: ''
},
fnishForm: {
desc: ''
},
shareForm: {
sharePerson: []
},
delayFormVisible: false,
fnishFormVisible: false,
shareFormVisible: false,
selectValue: []
}
},
props: {
fromDataItem: {
type: Object,
default: {}
},
eletype: {
type: String,
default: ''
},
stateType: {
type: Number,
default: 0
},
isDialogShow: false
},
watch: {
fromDataItem(val) {
console.log("chnageData");
console.log(val);
this.itemData = val
this.TaskInfo = val
if (val.taskRecordsDOList != null) {
if (val.taskRecordsDOList.length > 0) {
this.isHaveRecoed = true
} else {
this.isHaveRecoed = false
}
} else {
this.isHaveRecoed = false
}
if (val.templateApproveDO !== null) {
this.buttonsValue = val.templateApproveDO.buttons.split(',')
}
},
stateType(val) {
console.log('<<<<<<<<<<<<<');
console.log(val);
this.statetype = val
},
isDialogShow(val) {
console.log(val);
this.isNotHidden = val
}
},
computed: {
isChaosong() {
if (this.eletype == 'myApproval' || this.eletype == 'myExecute') {
if (Object.keys(this.TaskInfo).length != 0 && (this.eletype == 'myApproval' || this.eletype == 'myExecute') && this.statetype == 0 && this.TaskInfo.templateApproveDO != null && this.TaskInfo.templateApproveDO.ifCopy == '1') {
return true
} else {
return false
}
}
},
createMap() {
return this.TaskInfo.taskDO.createMap ? this.TaskInfo.taskDO.createMap : {}
},
showAvatar(){
const flag = Object.values(this.createMap).length > 0 && Object.values(this.createMap)[0].avatar
return flag
}
},
methods: {
//转交人
handleShareUsersChange(val, index) {
console.log(val);
this.shareForm.sharePerson.push(val[0])
},
closeModel() {
this.isNotHidden = false
// this.$refs['formData'].resetFields();
this.$emit('closeModel')
// Bus.$off('handleChangeVal1');
},
//撤销
reback() {
console.log(this.TaskInfo);
let data = {
userId: window.localStorage.getItem('userId'),
workId: this.TaskInfo.taskDO.workId,
processId: this.TaskInfo.taskFlowDO.processId
}
reback(data)
.then(res => {
if (res.code == 'M0000') {
this.$notify({
type: 'success',
title: '成功',
message: '操作成功'
})
this.refreshHidden()
} else {
this.$notify({
type: 'warning',
title: '警告',
message: res.msg
})
}
})
},
//催办
press() {
let data = {}
press(data)
.then(res => {
if (res.code == 'M0000') {
this.delayFormVisible = false
this.$notify({
type: 'success',
title: '成功',
message: '操作成功'
})
} else {
this.$notify({
type: 'warning',
title: '警告',
message: res.msg
})
}
})
},
//处理延期
handleDelay() {
let data = {
delayTime: this.delayForm.delayDate,
handleMessage: this.delayForm.desc,
userId: window.localStorage.getItem('userId'),
workId: this.TaskInfo.taskDO.workId,
taskId: this.TaskInfo.taskId,
processId: this.TaskInfo.taskFlowDO.processId
}
console.log(data);
delayTask(data)
.then(res => {
if (res.code == 'M0000') {
this.delayFormVisible = false
this.refreshHidden()
this.$notify({
type: 'success',
title: '成功',
message: '操作成功'
})
} else {
this.$notify({
type: 'warning',
title: '警告',
message: res.msg
})
}
})
},
//终止
handleFinish() {
console.log(this.itemData);
let data = {
handleMessage: this.fnishForm.desc,
userId: window.localStorage.getItem('userId'),
workId: this.TaskInfo.taskDO.workId,
taskId: this.TaskInfo.taskId,
processId: this.TaskInfo.taskFlowDO.processId
}
console.log(data);
stopProcess(data)
.then(res => {
if (res.code == 'M0000') {
this.fnishFormVisible = false
this.$bus.emit('getCount');
this.refreshHidden()
this.$notify({
type: 'success',
title: '成功',
message: '操作成功'
})
} else {
this.$notify({
type: 'warning',
title: '警告',
message: res.msg
})
}
})
},
//转交
handleShare() {
let data = {
transferUserIds: this.shareForm.sharePerson.join(','),
userId: window.localStorage.getItem('userId'),
workId: this.TaskInfo.taskDO.workId,
taskId: this.TaskInfo.taskId,
processId: this.TaskInfo.taskFlowDO.processId
}
console.log(data);
transferTask(data)
.then(res => {
if (res.code == 'M0000') {
this.shareFormVisible = false
this.refreshHidden()
this.$notify({
type: 'success',
title: '成功',
message: '操作成功'
})
} else {
this.$notify({
type: 'warning',
title: '警告',
message: res.msg
})
}
})
},
isShowForm(val) {
// 0 可编辑 1 只读 2 隐藏
if ((this.eletype == 'myApproval' || this.eletype == 'myExecute') && this.stateType == 0 && val == 1) {
return true
}
if ((this.eletype == 'myApproval' || this.eletype == 'myExecute') && this.stateType == 1 && val != 2) {
return true
}
if (this.eletype == 'myTask' && val == 0) {
return true
}
if (this.eletype == 'toMe' || this.eletype == 'recycle' || this.eletype == 'Collect') {
return true
}
return false
},
getFormData(tempId) {
this.$router.push({
path: `/addTask/editForm/${tempId}`
// path:'myTask'
// name:'editForm'
})
},
getStateLabel(state) {
if (this.eletype == 'myExecute') {
return this.stateType == 0 ? '待执行' : '已执行'
}
if (this.eletype == 'myApproval') {
return this.stateType == 0 ? '待审批' : '已审批'
}
if (state == 0) {
return '草稿'
} else if (state == 1) {
return '执行中 '
} else if (state == 2) {
return '审批中'
} else if (state == 3) {
return '已完成'
}
},
gotoEditForm() {
window.localStorage.setItem('tempIdEdit', this.TaskInfo.taskDO.templateId)
window.localStorage.setItem('workIdEdit', this.TaskInfo.taskDO.workId)
this.$store.dispatch('user/changeMajorData', this.TaskInfo)
this.$router.push({
// path: `addTask/editForm`
// path:'myTask'
name: 'editForm'
})
},
deleteForm() {
let data = {
workId: this.TaskInfo.taskDO.workId
}
deleteForm(data)
.then(res => {
if (res.code == 'M0000') {
this.$notify({
type: 'success',
title: '成功',
message: '操作成功'
})
this.refreshHidden()
} else {
this.$notify({
type: 'warning',
title: '警告',
message: res.msg
})
}
})
},
//再次创建
reCreate(tempId) {
this.$router.push({
name: 'editForm',
params: {
tempId: tempId
}
})
},
shenpi(type) {
this.currentIsAgree = type
this.isShow = true
},
show() {
// this.isDialogShow = true
// let right = document.getElementsByTagName('body')[0].clientWidth
// this.getTaskInfo()
},
hidden() {
this.closeModel()
},
refreshHidden() {
this.closeModel()
this.$emit('refresh')
this.$bus.emit('getCount');
},
// 控件回填数据
handleChangeVal(val, ele) {
console.log(' 控件回填数据');
console.log(val);
console.log(ele);
// this.formData[element.obj.name] = val;
},
},
mounted() {
}
}
</script>
<style lang="less" scoped>
/*@import "~@/styles/mixin.scss";*/
.drawer_header {
margin-top: 15px;
margin-bottom: 15px;
margin-left: 20px;
font-size: 18px;
color: #4c4a4a;
display: flex;
height: 60px;
.avatar {
min-width: 50px;
max-width: 50px;
height: 50px;
line-height: 50px;
border-radius: 50%;
background-color: #3fa6dd;
margin-right: 10px;
margin-top: 5px;
color: white;
text-align: center;
}
.buttons {
padding-top: 10px;
position: absolute;
right: 30px;
}
}
.drawer_body {
padding: 10px 20px;
color: #615f5f;
height: calc(100% - 120px);
overflow: auto;
.formItem {
display: flex;
/*justify-content: space-around;*/
margin-bottom: 10px;
}
.chaosong {
margin: 20px 0;
}
}
.drawer_footer {
position: absolute;
bottom: 10px;
text-align: center;
width: 600px;
display: flex;
height: 40px;
justify-content: center;
}
</style>
......@@ -19,50 +19,19 @@
<div class="tdc_table">
<a-table :columns="columns" :dataSource="data" bordered>
<template slot="operation" slot-scope="text, record">
<span @click="goDetail(record)">查看详情</span>
<span style="cursor: pointer" @click="goDetail(record)">查看详情</span>
</template>
</a-table>
</div>
</div>
</a-card>
<a-drawer
:title="currentRowData.workTitle"
placement="right"
:width="720"
@close="onClose"
:closable="false"
:visible="visible"
v-if="visible"
>
<div class="formItem">
<span style="margin-right: 50px">工单编号</span>
<span>{{DeatilData.workBase.workNo || '暂无数据'}}</span>
</div>
<div class="formItem">
<span style="margin-right: 50px">工单状态</span>
<span>{{getStateLabel(DeatilData.workBase.workStatus) || '暂无数据'}}</span>
</div>
<div v-for="(item) in DeatilData.workTemplateData" class="formItem">
<span style="margin-right: 50px">{{item.fieldNm || '暂无数据'}}</span>
<span>{{item.fieldValue || '暂无数据'}}</span>
</div>
<div style="display: flex" v-if="isHaveRecoed">
<span>工单进度</span>
<el-timeline style="margin-left: 50px;padding: 0">
<el-timeline-item
v-for="(activity, index) in DeatilData.workRecordsList"
:key="index"
size="large"
:timestamp="activity.handleTime">
<span>{{activity.hadlePerson}}</span>
{{activity.handleContent}}
</el-timeline-item>
</el-timeline>
</div>
<div v-if="!isHaveRecoed">
<span>无审批记录</span>
</div>
</a-drawer>
<detail-dialog
@closeModel="isDialogShow = false"
:isDialogShow="isDialogShow"
ref="Mydrawer"
:eletype="'myTask'"
:fromDataItem="detailData"
></detail-dialog>
</div>
</page-view>
</div>
......@@ -72,6 +41,7 @@
import { PageView } from '@/layouts';
import dataStatisticsTop from './components/data-statistics-top';
import { taskList } from '@/api/taskStatistics';
import DetailDialog from './components/detail-dialog'
const columns = [
{
......@@ -118,7 +88,8 @@
name: "task-data-statistics",
components: {
PageView,
dataStatisticsTop
dataStatisticsTop,
DetailDialog
},
data() {
return {
......@@ -128,8 +99,9 @@
rowSelection,
visible: false,
currentRowData: {},
DeatilData: {},
isHaveRecoed: false
detailData: {},
isHaveRecoed: false,
isDialogShow: false
}
},
methods: {
......@@ -165,27 +137,28 @@
},
getWorkInfo(workId) {
this.$http({
url: '/task/task-info/statisticsTaskContent',
url: '/task/task-info/getWorkInfo',
method: 'get',
params: {
workId: workId
}
}).then(res => {
console.log(res);
if (res.data.workRecordsList.length == 0) {
this.isHaveRecoed = false
if (res.code === 'M0000') {
this.detailData = res.data
this.isDialogShow = true
} else {
this.isHaveRecoed = true
this.$notify({
type: 'err',
title: '失败',
message: res.msg
})
}
this.DeatilData = res.data
this.visible = true
})
},
goDetail(val) {
this.currentRowData = val
console.log(val);
this.getWorkInfo(val.workId)
this.visible = true
},
onClose() {
this.visible = false
......
......@@ -28,20 +28,20 @@
defaultActiveKey="1"
class="custom-panel-tabs"
style="width: 550px;background-color: #ffffff;height: calc(100% - 30px)">
<a-tab-pane v-if="showCreatorTab" tab="创建人设置" key="3" forceRender>
<a-card class="custom-panel-field-list" :bodyStyle="fieldListCardStyle" :bordered="false">
<a-form layout="vertical">
<a-form-item
label="谁可以创建这个任务?">
<role-select-tree-input v-model="createRolesData"></role-select-tree-input>
</a-form-item>
</a-form>
<div class="custom-panel-btn">
<a-button>取消</a-button>
<a-button type="primary" @click="submitCreator" style="margin-left: 30px">保存</a-button>
</div>
</a-card>
</a-tab-pane>
<!--<a-tab-pane v-if="showCreatorTab" tab="创建人设置" key="3" forceRender>-->
<!-- <a-card class="custom-panel-field-list" :bodyStyle="fieldListCardStyle" :bordered="false">-->
<!-- <a-form layout="vertical">-->
<!-- <a-form-item-->
<!-- label="谁可以创建这个任务?">-->
<!-- <role-select-tree-input v-model="createRolesData"></role-select-tree-input>-->
<!-- </a-form-item>-->
<!-- </a-form>-->
<!-- <div class="custom-panel-btn">-->
<!-- <a-button>取消</a-button>-->
<!-- <a-button type="primary" @click="submitCreator" style="margin-left: 30px">保存</a-button>-->
<!-- </div>-->
<!-- </a-card>-->
<!--</a-tab-pane>-->
<a-tab-pane v-if="showApproverTab" tab="审批人设置" key="2" forceRender>
<a-card class="custom-panel-field-list" :bodyStyle="fieldListCardStyle" :bordered="false">
<a-form layout="vertical">
......@@ -1059,7 +1059,7 @@
line-height: 22px;
display: flex;
align-items: center;
padding: 0 10px;
padding: 20px 10px;
}
.custom-panel-btn {
......
......@@ -17,22 +17,24 @@
</div>
<div class="group-item" v-for="(taskItem, taskIndex) in groupItem.templateList" :key="taskIndex">
<div class="item" style="width: auto;">
<img
:src="taskItem.iconImage || defaultIcon"
style="width: 50px;height: 50px;float: left;margin-right: 12px;border-radius: 8px;">
<div style="float: left;">
<div style="font-size: 15px;color: #323334;letter-spacing: 0;text-align: left;">
{{ taskItem.templateNm }}
</div>
<div class="text-desc">
{{ taskItem.templateExplain }}
<div style="">
<img
:src="taskItem.iconImage || defaultIcon"
style="width: 50px;height: 50px;float: left;margin-right: 12px;border-radius: 8px;">
<div style="float: left;">
<div style="font-size: 15px;color: #323334;letter-spacing: 0;text-align: left;">
{{ taskItem.templateNm }}
</div>
<div class="text-desc">
{{ taskItem.templateExplain }}
</div>
</div>
</div>
<a-divider type="vertical" style="height: 60px"/>
</div>
<div class="item" style="width:auto;position: relative;">
<div style="float: left;">
<div style="float: left;width: calc(100% - 50px);">
<div style="font-size: 15px;color: #323334;letter-spacing: 0;text-align: left;">
可见范围
</div>
......@@ -41,22 +43,23 @@
{{ taskItem.createRoleNames}}
</div>
</div>
<span
@click="showModal(taskItem)"
style="color: #1890ff; cursor: pointer;font-size: 12px;"
>修改</span>
<a-divider type="vertical" style="height: 60px"/>
<div class="btndivider">
<span
@click="showModal(taskItem)"
style="color: #1890ff; cursor: pointer;font-size: 12px;"
>修改</span>
<a-divider type="vertical" style="height: 60px;"/>
</div>
</div>
<div class="item" style="width: auto">
<div style="float: left;position: relative;">
<div style="float: left;position: relative;width: calc(100% - 50px);">
<div style="font-size: 15px;color: #323334;letter-spacing: 0;text-align: left;">
工单开放入口
</div>
<div class="text-desc" v-if="taskItem.phone == 1">
<div class="text-desc" style="padding-top: 8px;" v-if="taskItem.phone == 1">
手机创建
<a-modal
title="工单开放入口"
......@@ -71,7 +74,7 @@
</a-radio-group>
</a-modal>
</div>
<div class="text-desc" v-else>
<div class="text-desc" style="padding-top: 8px;" v-else>
不可开发人工创建
<a-modal
title="工单开放入口"
......@@ -87,13 +90,15 @@
</a-modal>
</div>
</div>
<span
@click="showModalE"
style="color: #1890ff; cursor: pointer;font-size: 12px;"
>修改</span>
<a-divider type="vertical" style="height: 60px"/>
<div class="btndivider">
<span
@click="showModalE"
style="color: #1890ff; cursor: pointer;font-size: 12px;"
>修改</span>
<a-divider type="vertical" style="height: 60px"/>
</div>
</div>
<div class="item btns">
<a @click="editTask(taskItem.id)">编辑</a>
<!-- <a @click="deploymentTask(taskItem.templateId)">部署</a>-->
......@@ -292,15 +297,32 @@
border-bottom: 1px #e8e8e8 solid;
.item{
flex: auto;
/*max-width: 270px;*/
flex: 1 1 25%;
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 0 0 20px;
}
.item:first-child{
padding: 0 0 0 0px;
}
.btndivider{
width: 65px;
& > span{
margin-right: 20px;
}
}
.btns{
flex: none;
}
.text-desc {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
width: 166px;
width: 100%;
font-size: 12px;
color: #858585;
letter-spacing: 0;
......@@ -312,7 +334,6 @@
}
.footer {
padding: 0 16px;
margin: 48px 0 24px;
......
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