布局待办中心

This commit is contained in:
sunFlower
2022-10-14 11:39:39 +08:00
parent 84c0dca152
commit d118dcaad9
16 changed files with 1759 additions and 58 deletions
+3
View File
@@ -1320,4 +1320,7 @@ module.exports = {
taskType:'Task Type',
taskStatus:'Task Status',
taskConfirmationHandling:'Task confirmation handling',
relatedVersion:'Related version',
filledBy:'Filled by',
parameterToBeInitiated:'Parameter to be initiated',
}
+3
View File
@@ -1421,4 +1421,7 @@ module.exports = {
taskType:'任务类型',
taskStatus:'任务状态',
taskConfirmationHandling:'任务确认办理',
relatedVersion:'相关版本',
filledBy:'待分配填写人',
parameterToBeInitiated:'参数待发起',
}
@@ -1,13 +0,0 @@
<template>
</template>
<script>
export default {
name: 'SentList'
}
</script>
<style scoped>
</style>
@@ -1,13 +0,0 @@
<template>
</template>
<script>
export default {
name: 'dealtWith'
}
</script>
<style scoped>
</style>
@@ -1,13 +0,0 @@
<template>
</template>
<script>
export default {
name: 'doneList'
}
</script>
<style scoped>
</style>
@@ -1,14 +1,243 @@
<template>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('RelatedItems')">
<span>{{$t('RelatedItems')}}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('RelatedItems')"
v-model="queryParam.title"></j-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('ListTitle')">
<span>{{$t('ListTitle')}}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('ListTitle')"
v-model="queryParam.ListTitle"></j-input>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button class="box-button" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
<a-button class="box-button" style="margin-left: 8px" @click="searchReset">{{$t('reset')}}</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<div>
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
rowKey="id"
:data-source="dataSource"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="ProcessingClick(record)">{{$t('Processing')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</a-card>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'index'
name: 'index',
components: {},
data() {
return {
queryParam: {},
taskTypeList: [],
taskStatusList: [],
dataSource: [],
selectedRowKeys: [],
pageSize: 10,
pageNo: 1,
total: 0,
loading: false,
columns: [
{
title: this.$t('RelatedItems'),
align: 'center',
dataIndex: 'RelatedItems',
ellipsis: true,
width: 170
},
{
title: this.$t('ListTitle'),
align: 'center',
dataIndex: 'ListTitle',
ellipsis: true,
width: 170
},
{
title: this.$t('relatedVersion'),
align: 'center',
dataIndex: 'relatedVersion',
ellipsis: true,
width: 170
},
{
title: this.$t('completed'),
align: 'center',
dataIndex: 'completed',
ellipsis: true,
width: 170,
scopedSlots: { customRender: 'operation' }
},
{
title: this.$t('filledBy'),
align: 'center',
dataIndex: 'filledBy',
ellipsis: true,
width: 170,
scopedSlots: { customRender: 'operation' }
},
{
title: this.$t('parameterToBeInitiated'),
align: 'center',
dataIndex: 'parameterToBeInitiated',
ellipsis: true,
width: 170,
scopedSlots: { customRender: 'operation' }
}
]
}
},
methods: {
searchQuery() {
},
searchReset() {
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
ProcessingClick() {
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList() {
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
}
}
}
</script>
<style scoped>
<style scoped lang="less">
@import '~@assets/less/common.less';
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.title-text {
width: 20%;
min-width: 110px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input {
display: inline-block;
width: 70%;
height: 38px;
margin-top: 2px;
}
.box-button {
height: 38px;
/*margin-top: 2px;*/
}
.text-operation {
margin-right: 8px;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.Required {
color: red;
margin-right: 4px;
}
::v-deep .ant-table-row:first-child {
background: #fff !important;
opacity: 0.9;
}
::v-deep .ant-table-body {
background: transparent !important;
}
</style>
@@ -1,10 +1,150 @@
<template>
<div class="box">
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
rowKey="id"
:data-source="dataSource"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="viewClick(record)">{{$t('view')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'SentList'
name: 'SentList',
data(){
return{
dataSource:[],
loading:false,
columns:[
{
title: this.$t('RelatedItems'),
align: 'center',
dataIndex: 'RelatedItems',
ellipsis: true,
width: 170
},
{
title: this.$t('standardInformation'),
align: 'center',
dataIndex: 'standardInformation',
ellipsis: true,
width: 170
},
{
title: this.$t('taskType'),
align: 'center',
dataIndex: 'taskType',
ellipsis: true,
width: 170
},
{
title: this.$t('LastProcessor'),
align: 'center',
dataIndex: 'LastProcessor',
ellipsis: true,
width: 170
},
{
title: this.$t('CurrentProcessor'),
align: 'center',
dataIndex: 'CurrentProcessor',
ellipsis: true,
width: 170
},
{
title: this.$t('TaskCutOffTime'),
align: 'center',
dataIndex: 'TaskCutOffTime',
ellipsis: true,
width: 170
},
{
title: this.$t('taskStatus'),
align: 'center',
dataIndex: 'taskStatus',
ellipsis: true,
width: 170
},
{
title: this.$t('operation'),
align: 'center',
fixed: 'right',
width: 120,
scopedSlots: { customRender: 'operation' }
}
],
selectedRowKeys:[],
pageSize:10,
pageNo:1,
total:0,
}
},
methods:{
viewClick(val){
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList(){
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
}
}
</script>
@@ -1,10 +1,143 @@
<template>
<div class="box">
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
rowKey="id"
:data-source="dataSource"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="ProcessingClick(record)">{{$t('Processing')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'dealtWith'
name: 'dealtWith',
data(){
return{
dataSource:[],
loading:false,
columns:[
{
title: this.$t('RelatedItems'),
align: 'center',
dataIndex: 'RelatedItems',
ellipsis: true,
width: 170
},
{
title: this.$t('standardInformation'),
align: 'center',
dataIndex: 'standardInformation',
ellipsis: true,
width: 170
},
{
title: this.$t('taskType'),
align: 'center',
dataIndex: 'taskType',
ellipsis: true,
width: 170
},
{
title: this.$t('Sponsor'),
align: 'center',
dataIndex: 'Sponsor',
ellipsis: true,
width: 170
},
{
title: this.$t('TaskCutOffTime'),
align: 'center',
dataIndex: 'TaskCutOffTime',
ellipsis: true,
width: 170
},
{
title: this.$t('taskStatus'),
align: 'center',
dataIndex: 'taskStatus',
ellipsis: true,
width: 170
},
{
title: this.$t('operation'),
align: 'center',
fixed: 'right',
width: 120,
scopedSlots: { customRender: 'operation' }
}
],
selectedRowKeys:[],
pageSize:10,
pageNo:1,
total:0,
}
},
methods:{
ProcessingClick(val){
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList(){
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
}
}
</script>
@@ -1,10 +1,150 @@
<template>
<div class="box">
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
rowKey="id"
:data-source="dataSource"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="viewClick(record)">{{$t('view')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'doneList'
name: 'doneList',
data(){
return{
dataSource:[],
loading:false,
columns:[
{
title: this.$t('RelatedItems'),
align: 'center',
dataIndex: 'RelatedItems',
ellipsis: true,
width: 170
},
{
title: this.$t('standardInformation'),
align: 'center',
dataIndex: 'standardInformation',
ellipsis: true,
width: 170
},
{
title: this.$t('taskType'),
align: 'center',
dataIndex: 'taskType',
ellipsis: true,
width: 170
},
{
title: this.$t('Sponsor'),
align: 'center',
dataIndex: 'Sponsor',
ellipsis: true,
width: 170
},
{
title: this.$t('CurrentProcessor'),
align: 'center',
dataIndex: 'CurrentProcessor',
ellipsis: true,
width: 170
},
{
title: this.$t('TaskCutOffTime'),
align: 'center',
dataIndex: 'TaskCutOffTime',
ellipsis: true,
width: 170
},
{
title: this.$t('taskStatus'),
align: 'center',
dataIndex: 'taskStatus',
ellipsis: true,
width: 170
},
{
title: this.$t('operation'),
align: 'center',
fixed: 'right',
width: 120,
scopedSlots: { customRender: 'operation' }
}
],
selectedRowKeys:[],
pageSize:10,
pageNo:1,
total:0,
}
},
methods:{
viewClick(val){
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList(){
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
}
}
</script>
@@ -76,30 +76,53 @@
</a-row>
</a-form>
</div>
<div class="table-operator">
<div class="table-operator" style="margin-bottom: 8px">
<div @click="taskConfirmationHandlingClick"
class="operator-text">
<a-icon type="apartment"/>
{{$t('taskConfirmationHandling')}}
</div>
</div>
<a-tabs v-model="tabActive" @change="callback">
<a-tab-pane :key="$t('toDoProcess')" :tab="$t('toDoProcess')">
<dealtWith v-if="tabActive == $t('toDoProcess')" ref="dealtWithRef"/>
</a-tab-pane>
<a-tab-pane :key="$t('processDone')" :tab="$t('processDone')">
<doneList v-if="tabActive == $t('processDone')" ref="doneListRef"/>
</a-tab-pane>
<a-tab-pane :key="$t('sentProcess')" :tab="$t('sentProcess')">
<SentList v-if="tabActive == $t('sentProcess')" ref="SentListRef"/>
</a-tab-pane>
</a-tabs>
</a-card>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
import dealtWith from './components/dealtWith'
import doneList from './components/doneList'
import SentList from './components/SentList'
export default {
name: 'index',
components: {
dealtWith,
doneList,
SentList
},
data() {
return {
queryParam: {},
toggleSearchStatus: false,
taskTypeList: [],
taskStatusList: []
taskStatusList: [],
tabActive: this.$t('toDoProcess')
}
},
methods: {
callback(value) {
this.tabActive = value
},
handleToggleSearch() {
this.toggleSearchStatus = !this.toggleSearchStatus
},
@@ -110,7 +133,9 @@
},
taskConfirmationHandlingClick() {
this.$router.push({
path: '/toDoTaskConfirmation'
})
}
}
}
@@ -1,10 +1,143 @@
<template>
<div class="box">
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
rowKey="id"
:data-source="dataSource"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="viewClick(record)">{{$t('view')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'SentList'
name: 'SentList',
data(){
return{
dataSource:[],
loading:false,
columns:[
{
title: this.$t('standardInformation'),
align: 'center',
dataIndex: 'standardInformation',
ellipsis: true,
width: 170
},
{
title: this.$t('taskType'),
align: 'center',
dataIndex: 'taskType',
ellipsis: true,
width: 170
},
{
title: this.$t('LastProcessor'),
align: 'center',
dataIndex: 'LastProcessor',
ellipsis: true,
width: 170
},
{
title: this.$t('CurrentProcessor'),
align: 'center',
dataIndex: 'CurrentProcessor',
ellipsis: true,
width: 170
},
{
title: this.$t('TaskCutOffTime'),
align: 'center',
dataIndex: 'TaskCutOffTime',
ellipsis: true,
width: 170
},
{
title: this.$t('taskStatus'),
align: 'center',
dataIndex: 'taskStatus',
ellipsis: true,
width: 170
},
{
title: this.$t('operation'),
align: 'center',
fixed: 'right',
width: 120,
scopedSlots: { customRender: 'operation' }
}
],
selectedRowKeys:[],
pageSize:10,
pageNo:1,
total:0,
}
},
methods:{
viewClick(val){
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList(){
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
}
}
</script>
@@ -1,10 +1,136 @@
<template>
<div class="box">
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
rowKey="id"
:data-source="dataSource"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="ProcessingClick(record)">{{$t('Processing')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'dealtWith'
name: 'dealtWith',
data(){
return{
dataSource:[],
loading:false,
columns:[
{
title: this.$t('standardInformation'),
align: 'center',
dataIndex: 'standardInformation',
ellipsis: true,
width: 170
},
{
title: this.$t('taskType'),
align: 'center',
dataIndex: 'taskType',
ellipsis: true,
width: 170
},
{
title: this.$t('Sponsor'),
align: 'center',
dataIndex: 'Sponsor',
ellipsis: true,
width: 170
},
{
title: this.$t('TaskCutOffTime'),
align: 'center',
dataIndex: 'TaskCutOffTime',
ellipsis: true,
width: 170
},
{
title: this.$t('taskStatus'),
align: 'center',
dataIndex: 'taskStatus',
ellipsis: true,
width: 170
},
{
title: this.$t('operation'),
align: 'center',
fixed: 'right',
width: 120,
scopedSlots: { customRender: 'operation' }
}
],
selectedRowKeys:[],
pageSize:10,
pageNo:1,
total:0,
}
},
methods:{
ProcessingClick(val){
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList(){
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
}
}
</script>
@@ -1,10 +1,143 @@
<template>
<div class="box">
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
rowKey="id"
:data-source="dataSource"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="viewClick(record)">{{$t('view')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
export default {
name: 'doneList'
name: 'doneList',
data(){
return{
dataSource:[],
loading:false,
columns:[
{
title: this.$t('standardInformation'),
align: 'center',
dataIndex: 'standardInformation',
ellipsis: true,
width: 170
},
{
title: this.$t('taskType'),
align: 'center',
dataIndex: 'taskType',
ellipsis: true,
width: 170
},
{
title: this.$t('Sponsor'),
align: 'center',
dataIndex: 'Sponsor',
ellipsis: true,
width: 170
},
{
title: this.$t('CurrentProcessor'),
align: 'center',
dataIndex: 'CurrentProcessor',
ellipsis: true,
width: 170
},
{
title: this.$t('TaskCutOffTime'),
align: 'center',
dataIndex: 'TaskCutOffTime',
ellipsis: true,
width: 170
},
{
title: this.$t('taskStatus'),
align: 'center',
dataIndex: 'taskStatus',
ellipsis: true,
width: 170
},
{
title: this.$t('operation'),
align: 'center',
fixed: 'right',
width: 120,
scopedSlots: { customRender: 'operation' }
}
],
selectedRowKeys:[],
pageSize:10,
pageNo:1,
total:0,
}
},
methods:{
viewClick(val){
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList(){
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
}
}
</script>
@@ -1,14 +1,155 @@
<template>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standardInformation')">
<span>{{$t('standardInformation')}}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standardInformation')"
v-model="queryParam.title"></j-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text tree-select">
<div class="title-text" :title="$t('taskType')">
<span>{{$t('taskType')}}</span>
</div>
<a-select :placeholder="$t('PleaseSelect')+$t('taskType')"
class="box-input"
:getPopupContainer="triggerNode=> triggerNode.parentNode"
allowClear
v-model="queryParam.taskType">
<a-select-option v-for="(item, key) in taskTypeList"
:key="key"
:value="item.value">
<span style="display: inline-block;width: 100%" :title=" item.name">
{{ item.name }}
</span>
</a-select-option>
</a-select>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button class="box-button" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
<a-button class="box-button" style="margin-left: 8px" @click="searchReset">{{$t('reset')}}</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<a-tabs v-model="tabActive" @change="callback">
<a-tab-pane :key="$t('toDoProcess')" :tab="$t('toDoProcess')">
<dealtWith v-if="tabActive == $t('toDoProcess')" ref="dealtWithRef"/>
</a-tab-pane>
<a-tab-pane :key="$t('processDone')" :tab="$t('processDone')">
<doneList v-if="tabActive == $t('processDone')" ref="doneListRef"/>
</a-tab-pane>
<a-tab-pane :key="$t('sentProcess')" :tab="$t('sentProcess')">
<SentList v-if="tabActive == $t('sentProcess')" ref="SentListRef"/>
</a-tab-pane>
</a-tabs>
</a-card>
</template>
<script>
import { getAction, postAction, deleteAction } from '@/api/manage'
import dealtWith from './components/dealtWith'
import doneList from './components/doneList'
import SentList from './components/SentList'
export default {
name: 'index'
name: 'index',
components: {
dealtWith,
doneList,
SentList
},
data() {
return {
queryParam: {},
taskTypeList: [],
taskStatusList: [],
tabActive: this.$t('toDoProcess')
}
},
methods: {
callback(value) {
this.tabActive = value
},
searchQuery() {
},
searchReset() {
},
taskConfirmationHandlingClick() {
}
}
}
</script>
<style scoped>
<style scoped lang="less">
@import '~@assets/less/common.less';
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.title-text {
width: 20%;
min-width: 110px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input {
display: inline-block;
width: 70%;
height: 38px;
margin-top: 2px;
}
.box-button {
height: 38px;
/*margin-top: 2px;*/
}
.text-operation {
margin-right: 8px;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.Required {
color: red;
margin-right: 4px;
}
::v-deep .ant-table-row:first-child {
background: #fff !important;
opacity: 0.9;
}
::v-deep .ant-table-body {
background: transparent !important;
}
</style>
@@ -0,0 +1,253 @@
<template>
<div>
<a-modal
:title="$t('batchProcessing')"
:width="700"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24" v-if="taskDefinitionKey != 'dreqr'">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text"></span>
</div>
<a-form-model-item class="itemModel" prop="flag">
<a-radio-group style="margin-top: 2px" @change="flagChange" class="box-input" v-model="formInline.flag">
<a-radio value="0">
{{$t('accept')}}
</a-radio>
<a-radio value="1">
{{$t('disagree')}}
</a-radio>
<a-radio value="3" v-if="taskDefinitionKey == 'zrrjsrw'">
{{$t('inquiry')}}
</a-radio>
<a-radio value="4" v-if="taskDefinitionKey == 'zrrqr'">
{{$t('sendBack')}}
</a-radio>
</a-radio-group>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24" v-if="isTrue">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('selectInquiry')">{{$t('selectInquiry')}}</span>
</div>
<a-form-model-item class="itemModel" prop="dreUserIdName">
<PersonnelSelection class="box-input"
:personneQuery="formInline"
:query="{db_field_name:'dreUserId',db_field_txt:$t('selectInquiry')}"
:isInput="true"
:isSingleChoice="true"
@change="PersonnelSelectionChange"
v-model="formInline.dreUserIdName"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="title-text-text" :title="$t('feedbackMessage')">{{$t('feedbackMessage')}}</span>
</div>
<a-form-model-item class="itemModel" prop="approvalOpinion">
<a-textarea :placeholder="$t('pleaseEnter')+$t('feedbackMessage')" v-model="formInline.approvalOpinion"
:rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</div>
</template>
<script>
import { getAction, postAction, downloadFile, deleteAction } from '@/api/manage'
import PersonnelSelection from '@/components/PersonnelSelection/index'
import moment from 'moment'
import { mapGetters } from 'vuex'
export default {
name: 'batchProcessing',
components: {
PersonnelSelection
},
data() {
return {
formInline: {},
rules: {
flag: [
{
required: true,
message: this.$t('reviewResults') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
dreUserIdName: [
{
required: true,
message: this.$t('selectInquiry') + this.$t('cannotEmpty'),
trigger: 'change'
}
],
approvalOpinion: [
{
max: 300,
message: this.$t('feedbackMessage') + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
]
},
confirmLoading: false,
visible: false,
selectedRowKeys: [],
issue: false,
isTrue: false,
taskDefinitionKey: '',
taskIds:[],
projectLawsInventoryIds:[],
}
},
methods: {
...mapGetters(['userInfo']),
getData(data) {
this.selectedRowKeys = data
this.taskDefinitionKey = this.selectedRowKeys[0].taskDefinitionKey
this.taskIds = []
this.projectLawsInventoryIds = []
this.selectedRowKeys.forEach(res=>{
if (res.taskIds.indexOf(',') != '-1'){
res.taskIds = res.taskIds.slice(0,res.taskIds.indexOf(','))
}
this.taskIds.push(res.taskIds)
this.projectLawsInventoryIds.push(res.projectLawsInventoryId)
})
this.confirmLoading = false
this.visible = true
this.isTrue = false
this.$nextTick(() => {
this.formInline = {}
this.$refs.ruleForm.clearValidate()
})
},
flagChange(event) {
if (event.target.value == 3) {
this.isTrue = true
} else {
this.isTrue = false
}
},
PersonnelSelectionChange(value, id) {
this.formInline[value] = id
this.formInline = { ...this.formInline }
},
addBatch(){
let rejectTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
let query = {
rejectUserId:this.userInfo().id,
rejectTime:rejectTime,
rejectCause:this.formInline.approvalOpinion,
taskIds:this.taskIds.join(','),
rejectType:'1',
}
postAction('/project/projectLawsInventoryRejectCauseEO/addBatch', query).then((res) => {
})
},
handleOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
let handlingTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
let query = {
...this.formInline,
taskIds:this.taskIds.join(','),
userId:this.userInfo().id,
taskDefinitionKey:this.taskDefinitionKey,
handlingTime:handlingTime,
projectLawsInventoryIds:this.projectLawsInventoryIds.join(',')
}
if (this.formInline.flag == '1'){
this.addBatch()
}
if (!this.formInline.flag){
query.flag = '0'
}
this.confirmLoading = true
postAction('/workFlow/completeTaskBatch', query).then((res) => {
if (res.success) {
this.$message.success(this.$t('OperationSuccessful'))
this.visible = false
this.confirmLoading = false
this.$emit('batchProcessingForm')
} else {
this.confirmLoading = false
this.$message.warning(this.$t('operationFailed'))
}
})
}
})
},
handleCancel() {
this.visible = false
}
}
}
</script>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
}
.title-text {
width: 84px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 42px;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.title-text-text {
margin-top: 9px;
}
.formAdd {
margin-bottom: 40px;
}
.Required {
color: red;
margin-right: 4px;
}
</style>
@@ -0,0 +1,281 @@
<template>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('RelatedItems')">
<span>{{$t('RelatedItems')}}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('RelatedItems')"
v-model="queryParam.title"></j-input>
</div>
</a-col>
<a-col :md="6" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('standardInformation')">
<span>{{$t('standardInformation')}}</span>
</div>
<j-input class="box-input" :placeholder="$t('PleaseEnter')+$t('standardInformation')"
v-model="queryParam.standardInformation"></j-input>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24">
<a-button class="box-button" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
<a-button class="box-button" style="margin-left: 8px" @click="searchReset">{{$t('reset')}}</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<div class="table-operator" style="margin-bottom: 16px">
<div @click="batchProcessingClick"
class="operator-text">
<a-icon type="apartment"/>
{{$t('batchProcessing')}}
</div>
</div>
<div>
<a-table
ref="table"
size="middle"
:loading="loading"
:pagination="false"
:scroll="{x: '100%',y:'calc(100vh - 140px)'}"
:data-source="dataSource"
:rowKey="(record)=>JSON.stringify(record)"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:columns="columns"
>
<!-- -->
<span slot="operation" slot-scope="text,record">
<a class="text-operation"
@click="ProcessingClick(record)">{{$t('Processing')}}</a>
</span>
</a-table>
<div class="page" v-if="dataSource && dataSource.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="pageOnChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
</a-card>
</template>
<script>
export default {
name: 'index',
data(){
return{
dataSource:[],
queryParam:{},
loading:false,
columns:[
{
title: this.$t('RelatedItems'),
align: 'center',
dataIndex: 'RelatedItems',
ellipsis: true,
width: 170
},
{
title: this.$t('standardInformation'),
align: 'center',
dataIndex: 'standardInformation',
ellipsis: true,
width: 170
},
{
title: this.$t('taskType'),
align: 'center',
dataIndex: 'taskType',
ellipsis: true,
width: 170
},
{
title: this.$t('Sponsor'),
align: 'center',
dataIndex: 'Sponsor',
ellipsis: true,
width: 170
},
{
title: this.$t('TaskCutOffTime'),
align: 'center',
dataIndex: 'TaskCutOffTime',
ellipsis: true,
width: 170
},
{
title: this.$t('taskStatus'),
align: 'center',
dataIndex: 'taskStatus',
ellipsis: true,
width: 170
},
{
title: this.$t('operation'),
align: 'center',
fixed: 'right',
width: 120,
scopedSlots: { customRender: 'operation' }
}
],
selectedRowKeys:[],
pageSize:10,
pageNo:1,
total:0,
}
},
methods:{
batchProcessingClick(){
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys))
let content = []
selectedRowKeys.forEach(res => {
content.push(JSON.parse(res))
})
for (let i = 0; i < content.length; i++) {
if (content[i].taskDefinitionKey != content[0].taskDefinitionKey) {
this.$message.warning(this.$t('processNodesAreInconsistentPleaseSelectConsistentData'))
return
}
}
this.$refs.batchProcessingRef.getData(JSON.parse(JSON.stringify(content)))
} else {
this.$message.warning(this.$t('selectLeastOne'))
}
},
searchQuery() {
},
searchReset() {
},
ProcessingClick(val){
},
onSelectChange(value) {
this.selectedRowKeys = []
if (value && value.length > 0) {
value.forEach(res => {
res = JSON.parse(res)
if (res.prcType == '1') {
this.selectedRowKeys.push(JSON.stringify(res))
} else {
this.$message.warning(this.$t('onlyDataTaskConfirmationProcessSelected'))
}
})
}
},
pageOnChange(page) {
this.pageNo = page
this.getList()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.getList()
},
getList(){
let queryParam = JSON.parse(JSON.stringify(this.queryParam))
Object.keys(queryParam).forEach(val => {
if (queryParam[val] instanceof Array) {
queryParam[val] = queryParam[val].join(',')
}
})
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...queryParam
}
this.loading = true
getAction(this.url.list, query).then((res) => {
if (res.success) {
if (res.result.current > 1 && res.result.records.length == 0) {
this.pageNo = 1
this.getList()
return
}
this.dataSource = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.title-text {
width: 20%;
min-width: 110px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input {
display: inline-block;
width: 70%;
height: 38px;
margin-top: 2px;
}
.box-button {
height: 38px;
/*margin-top: 2px;*/
}
.text-operation {
margin-right: 8px;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.Required {
color: red;
margin-right: 4px;
}
::v-deep .ant-table-row:first-child {
background: #fff !important;
opacity: 0.9;
}
::v-deep .ant-table-body {
background: transparent !important;
}
</style>