|
@@ -0,0 +1,458 @@
|
|
|
+<template>
|
|
|
+ <el-card class="container">
|
|
|
+ <template slot="header">
|
|
|
+ <el-row class="header" type="flex" justify="space-between" align="middle">
|
|
|
+ <el-col :span="4">
|
|
|
+ <el-tag effect="plain" size="medium">任务</el-tag>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="18">
|
|
|
+ <el-tabs v-model="formData.type">
|
|
|
+ <el-tab-pane
|
|
|
+ v-for="(item,index) in tabsOption"
|
|
|
+ :key="index"
|
|
|
+ :label="item.label"
|
|
|
+ :name="item.type"
|
|
|
+ />
|
|
|
+ </el-tabs>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="2">
|
|
|
+ <el-button icon="el-icon-refresh" type="text" :loading="loading" @click="getList" />
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-form class="header" inline style="text-align: left">
|
|
|
+ <template v-if="['running','complete','reviewed','publish'].includes(formData.type)">
|
|
|
+ <el-form-item label-width="0">
|
|
|
+ <el-select v-model="formData.ptId">
|
|
|
+ <el-option
|
|
|
+ v-for="item in pts"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template v-if="['running','complete','reviewed'].includes(formData.type)">
|
|
|
+ <el-form-item label-width="0">
|
|
|
+ <el-select v-model="formData.sort" placeholder="请选择排序">
|
|
|
+ <el-option
|
|
|
+ v-for="item in sort"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.code"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="formData.type === 'running'" label-width="0">
|
|
|
+ <el-select v-model="formData.today" placeholder="任务种类">
|
|
|
+ <el-option
|
|
|
+ v-for="item in workType"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template v-else-if="formData.type === 'publish'">
|
|
|
+ <el-form-item label-width="0">
|
|
|
+ <el-select v-model="formData.workStatus">
|
|
|
+ <el-option
|
|
|
+ v-for="item in workStatus"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.code"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label-width="0">
|
|
|
+ <el-select v-model="formData.workSort">
|
|
|
+ <el-option
|
|
|
+ v-for="item in workSort"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.code"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ </el-form>
|
|
|
+ </template>
|
|
|
+ <template slot="default">
|
|
|
+ <el-table
|
|
|
+ :height="300"
|
|
|
+ :max-height="300"
|
|
|
+ v-loading="loading"
|
|
|
+ :data="list"
|
|
|
+ @row-click="openDetail"
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ label="内容"
|
|
|
+ align="center"
|
|
|
+ prop="task_name"
|
|
|
+ width="300"
|
|
|
+ show-overflow-tooltip
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="截止时间"
|
|
|
+ prop="expire_time"
|
|
|
+ />
|
|
|
+ <el-table-column
|
|
|
+ label="积分"
|
|
|
+ prop="point_config.base_point"
|
|
|
+ >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="操作"
|
|
|
+ prop="owner_id"
|
|
|
+ v-if="['rewrite','running'].includes(formData.type)"
|
|
|
+ >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-link type="primary" @click.stop="completeWork(scope.row)">完成任务</el-link>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ label="操作"
|
|
|
+ prop="owner_id"
|
|
|
+ v-if="formData.type === 'publish'"
|
|
|
+ >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-dropdown placement="bottom" trigger="click" :show-timeout="150" :hide-timeout="150">
|
|
|
+ <span class="el-dropdown-links" @click.stop="">···</span>
|
|
|
+ <el-dropdown-menu slot="dropdown">
|
|
|
+ <el-dropdown-item v-if="scope.row.status === 1" >
|
|
|
+ <el-button type="text" class="color-red" @click.stop="openWorkUpdate(scope.row)">修改</el-button>
|
|
|
+ </el-dropdown-item>
|
|
|
+ <el-dropdown-item class="color-red">
|
|
|
+ <el-button type="text" class="color-red" @click.stop="workDelete(scope.row)" >删除</el-button>
|
|
|
+ </el-dropdown-item>
|
|
|
+ </el-dropdown-menu>
|
|
|
+ </el-dropdown>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <center style="padding: 20px 0;">
|
|
|
+ <el-pagination
|
|
|
+ small
|
|
|
+ layout="prev, pager, next"
|
|
|
+ :total="formData.total"
|
|
|
+ :page-size="formData.pageSize"
|
|
|
+ :current-page="formData.page"
|
|
|
+ @current-change="p => formData.page = p"
|
|
|
+ />
|
|
|
+ </center>
|
|
|
+
|
|
|
+<!-- 任务详情 -->
|
|
|
+ <taskDetailsPopup style="text-align: left" :visible.sync="showDetail" v-if="showDetail" :id="currentWork.id" :title="'任务详情'" />
|
|
|
+ <WorkUpdate
|
|
|
+ style="text-align: left"
|
|
|
+ :task-visible.sync="showWorkEdit"
|
|
|
+ :work-id="currentWork.id"
|
|
|
+ @hasSubmit="getList"
|
|
|
+ />
|
|
|
+<!-- 完成任务 -->
|
|
|
+ <el-dialog
|
|
|
+ :visible.sync="showComplete"
|
|
|
+ width="30%"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :show-close="false"
|
|
|
+ center
|
|
|
+ >
|
|
|
+ <template slot="title">
|
|
|
+<!-- <h3 style="text-align: left">完成任务</h3>-->
|
|
|
+ <h3>{{currentWork.task_name}}</h3>
|
|
|
+ <div style="font-size: 13px;color: #898c94;line-height: 30px;" v-if="currentWork.task_remark">{{currentWork.task_remark}}</div>
|
|
|
+ </template>
|
|
|
+ <template slot="default">
|
|
|
+ <el-form label-width="80px" :model="completeFormData" @validate="(p, isValid,msg) => completeFormData.validate = isValid" v-loading="submitting">
|
|
|
+ <el-form-item prop="remark" label-width="0" :rules="[{required:true,message:'任务备注(限30字)'}]">
|
|
|
+ <el-input
|
|
|
+ v-model="completeFormData.remark"
|
|
|
+ type="textarea"
|
|
|
+ maxlength="30"
|
|
|
+ placeholder="任务备注"
|
|
|
+ show-word-limit
|
|
|
+ @input="onRemarkInput"
|
|
|
+ :disabled="submitting"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </template>
|
|
|
+ <template slot="footer">
|
|
|
+ <el-button @click="initCompleteData" :disabled="submitting">取消</el-button>
|
|
|
+ <el-button type="primary" @click="onCompleteSubmit" :disabled="!canCompleteSubmit">提交</el-button>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ </template>
|
|
|
+ </el-card>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import Template from "../../examine/components/Template.vue";
|
|
|
+import taskDetailsPopup from '@/point/views/common/taskDetailsPopup';
|
|
|
+import {specialFilter} from "../../utils";
|
|
|
+import WorkUpdate from "../../point/views/common/WorkUpdate.vue";
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'workbenchWork',
|
|
|
+ components: {WorkUpdate, Template,taskDetailsPopup},
|
|
|
+ data(){
|
|
|
+ const tabs = [{ label: '进行中', type: 'running' },{ label: '驳回重做', type: 'rewrite' }, { label: '待审批', type: 'complete' }, { label: '已审批', type: 'reviewed' },{label: '我发布的',type: 'publish'}]
|
|
|
+ const pts = this.$getTyps()
|
|
|
+ pts.unshift({code:'all',id:0,name:'积分类型'})
|
|
|
+ const sort = [{ id: 2, code: 'publish', name: '按发布时间排序' },{ id: 1, code: 'expire', name: '按截止时间排序' }]
|
|
|
+ const workType = [{id:0,name:'全部任务'},{id:1,name:'今日任务'},{id:2,name:'逾期任务'},{id:3,name:'其他任务'}]
|
|
|
+ const workStatus = [
|
|
|
+ {id: 1, name: '全部', code: 'all'},
|
|
|
+ {id: 2, name: '进行中', code: 'running'},
|
|
|
+ {id: 3, name: '已完成', code: 'complete'},
|
|
|
+ {id: 4, name: '已审批', code: 'reviewed'},
|
|
|
+ {id: 5, name: '已撤销', code: 'revocation'},
|
|
|
+ {id: 6, name: '已退回', code: 'refuse'},
|
|
|
+ ]
|
|
|
+ const workSort = [{id:1,name:'按截止时间',code:'expire'},{id:2,name:'按发布时间',code:'publish'}]
|
|
|
+ return{
|
|
|
+ pts:pts,
|
|
|
+ tabsOption: tabs,
|
|
|
+ loading:false,
|
|
|
+ submitting:false,
|
|
|
+ sort:sort,
|
|
|
+ workType:workType,
|
|
|
+ workStatus:workStatus,
|
|
|
+ workSort:workSort,
|
|
|
+ formData:{
|
|
|
+ type:tabs[0].type,
|
|
|
+ ptId:0,
|
|
|
+ sort:sort[0].code,
|
|
|
+ page:1,
|
|
|
+ pageSize:5,
|
|
|
+ total:0,
|
|
|
+ today:workType[0].id,
|
|
|
+ workStatus:workStatus[0].code,
|
|
|
+ workSort:workSort[1].code
|
|
|
+ },
|
|
|
+ list:[],
|
|
|
+ showDetail:false,
|
|
|
+ currentWork:{
|
|
|
+ id:0,
|
|
|
+ task_name:'',
|
|
|
+ task_remark:'',
|
|
|
+ },
|
|
|
+ showComplete:false,
|
|
|
+ completeFormData:{
|
|
|
+ id:0,
|
|
|
+ remark:'',
|
|
|
+ validate:false,
|
|
|
+ },
|
|
|
+ showWorkEdit:false,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed:{
|
|
|
+ canCompleteSubmit(){
|
|
|
+ return this.completeFormData.id > 0 && this.completeFormData.validate && !this.submitting
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods:{
|
|
|
+ openDetail(row){
|
|
|
+ this.currentWork = {
|
|
|
+ id:parseInt(row.id),
|
|
|
+ task_name:row.task_name,
|
|
|
+ task_remark:row.task_remark,
|
|
|
+ }
|
|
|
+ this.showDetail = true;
|
|
|
+ },
|
|
|
+ getList(){
|
|
|
+ switch (this.formData.type){
|
|
|
+ case 'publish':
|
|
|
+ this.publishList()
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ this.chargeList()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ chargeList(){
|
|
|
+ if (this.loading) return
|
|
|
+ let params = {
|
|
|
+ page:this.formData.page,
|
|
|
+ page_size:this.formData.pageSize,
|
|
|
+ status:this.formData.type,
|
|
|
+ sort:this.formData.sort,
|
|
|
+ today:this.formData.today,
|
|
|
+ }
|
|
|
+ if (this.formData.ptId) params.pt_id = this.formData.ptId
|
|
|
+ let self = this
|
|
|
+ self.loading = true
|
|
|
+ self.$axiosUser('get', '/api/pro/integral/work/list', params)
|
|
|
+ .then(res => {
|
|
|
+ if (res.data.code !== 1) throw new Error(res.data.msg)
|
|
|
+ self.list = res.data.data.list
|
|
|
+ self.formData.total = res.data.data.total
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ self.$message.error(err)
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ self.loading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+ publishList(){
|
|
|
+ if (this.loading) return
|
|
|
+ let params = {
|
|
|
+ page:this.formData.page,
|
|
|
+ page_size:this.formData.pageSize,
|
|
|
+ status:this.formData.workStatus,
|
|
|
+ pt_id:this.formData.ptId,
|
|
|
+ sort:this.formData.workSort,
|
|
|
+ }
|
|
|
+ let self = this
|
|
|
+ self.loading = true
|
|
|
+ self.$axiosUser('get','/api/pro/integral/work/list/publisher',params)
|
|
|
+ .then(res => {
|
|
|
+ if (res.data.code !== 1) throw new Error(res.data.msg)
|
|
|
+ self.list = res.data.data.list
|
|
|
+ self.formData.total = res.data.data.total
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ self.$message.error(err)
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ self.loading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+ completeWork(row){
|
|
|
+ this.currentWork = {
|
|
|
+ id:row.id,
|
|
|
+ task_name:row.task_name,
|
|
|
+ task_remark:row.task_remark,
|
|
|
+ }
|
|
|
+ this.completeFormData = {
|
|
|
+ id:row.id,
|
|
|
+ remark:'',
|
|
|
+ validate:false,
|
|
|
+ }
|
|
|
+ this.showComplete = true
|
|
|
+ },
|
|
|
+ initCompleteData(){
|
|
|
+ this.showComplete = false
|
|
|
+ this.completeFormData = {
|
|
|
+ id:0,
|
|
|
+ remark:'',
|
|
|
+ validate:false,
|
|
|
+ }
|
|
|
+ this.currentWork = {
|
|
|
+ id:0,
|
|
|
+ task_name:'',
|
|
|
+ task_remark:'',
|
|
|
+ }
|
|
|
+ this.submitting = false
|
|
|
+ },
|
|
|
+ onRemarkInput(val){
|
|
|
+ this.completeFormData.remark = specialFilter(val)
|
|
|
+ },
|
|
|
+ onCompleteSubmit(){
|
|
|
+ let data = {
|
|
|
+ work_id: this.completeFormData.id,
|
|
|
+ progress:'100',
|
|
|
+ remark:this.completeFormData.remark,
|
|
|
+ state:'1'
|
|
|
+ }
|
|
|
+ let self = this
|
|
|
+ self.submitting = true
|
|
|
+ self.$axiosUser('post', '/api/pro/integral/work', data)
|
|
|
+ .then(res => {
|
|
|
+ if (res.data.code !== 1) throw new Error(res.data.msg)
|
|
|
+ self.initCompleteData()
|
|
|
+ self.getList()
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ self.$message.error(err)
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ self.submitting = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+ initPageData(){
|
|
|
+ this.formData.page = 1
|
|
|
+ this.formData.pageSize = 5
|
|
|
+ this.formData.total = 5
|
|
|
+ },
|
|
|
+ openWorkUpdate(work){
|
|
|
+ this.showWorkEdit = true
|
|
|
+ this.currentWork = {
|
|
|
+ id:work.id,
|
|
|
+ task_name: work.task_name,
|
|
|
+ task_remark: work.task_remark
|
|
|
+ }
|
|
|
+ },
|
|
|
+ workDelete(work){
|
|
|
+ let self = this
|
|
|
+ self.$message.closeAll()
|
|
|
+ self.$confirm(`删除此任务 (${work.task_name}) 将会删除其相关记录和积分数据,确认删除吗?`, '删除任务', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ self.loading = true
|
|
|
+ self.$axiosUser('DELETE','/api/pro/integral/work',{work_id: work.id})
|
|
|
+ .then(res => {
|
|
|
+ if (res.data.code !== 1) self.$message.error(res.data.msg)
|
|
|
+ })
|
|
|
+ .finally(() => {
|
|
|
+ self.loading = false
|
|
|
+ self.getList()
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ watch:{
|
|
|
+ 'formData.type'(v){
|
|
|
+ this.initPageData()
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ 'formData.page'(v){
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ 'formData.ptId'(v){
|
|
|
+ this.initPageData()
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ 'formData.sort'(v){
|
|
|
+ this.initPageData()
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ 'formData.today'(v){
|
|
|
+ this.initPageData()
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ 'formData.workStatus'(v){
|
|
|
+ this.initPageData()
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ 'formData.workSort'(v){
|
|
|
+ this.initPageData()
|
|
|
+ this.getList()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.getList()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.container{
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+.container .header{
|
|
|
+ min-height: 50px;
|
|
|
+}
|
|
|
+::v-deep .el-table tbody tr:hover{
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
+
|
|
|
+</style>
|