|
@@ -1,57 +1,71 @@
|
|
<template>
|
|
<template>
|
|
<div class="app-container">
|
|
<div class="app-container">
|
|
- <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
|
|
|
|
- <el-form-item label="日期" prop="startDate">
|
|
|
|
- <el-date-picker
|
|
|
|
- v-model="queryParams.startDate"
|
|
|
|
- type="date"
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
- @change="getList"
|
|
|
|
- placeholder="开始日期"
|
|
|
|
- :clearable="false"
|
|
|
|
- style="width: 135px">
|
|
|
|
- </el-date-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="至" prop="endDate">
|
|
|
|
- <el-date-picker
|
|
|
|
- v-model="queryParams.endDate"
|
|
|
|
- type="date"
|
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
|
- @change="getList"
|
|
|
|
- placeholder="结束日期"
|
|
|
|
- :clearable="false"
|
|
|
|
- style="width: 135px">
|
|
|
|
- </el-date-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item prop="status">
|
|
|
|
- <el-radio-group v-model="queryParams.status" size="mini" @change="getList">
|
|
|
|
- <el-radio-button
|
|
|
|
- v-for="dict in dict.type.task_status"
|
|
|
|
- :key="dict.value"
|
|
|
|
- :label="dict.value"
|
|
|
|
- >{{ dict.label }}
|
|
|
|
- </el-radio-button>
|
|
|
|
- </el-radio-group>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item prop="priority">
|
|
|
|
- <el-select
|
|
|
|
- v-model="queryParams.priority"
|
|
|
|
- @change="getList"
|
|
|
|
- clearable
|
|
|
|
- placeholder="优先级"
|
|
|
|
- style="width: 85px">
|
|
|
|
- <el-option
|
|
|
|
- v-for="dict in dict.type.task_priority"
|
|
|
|
- :key="dict.value"
|
|
|
|
- :label="dict.label"
|
|
|
|
- :value="dict.value">
|
|
|
|
- <el-tag :color="priorityColorMap[dict.value]" effect="dark" :hit="false">
|
|
|
|
- {{ dict.label }}
|
|
|
|
- </el-tag>
|
|
|
|
- </el-option>
|
|
|
|
- </el-select>
|
|
|
|
- </el-form-item>
|
|
|
|
- </el-form>
|
|
|
|
|
|
+ <el-row>
|
|
|
|
+ <el-col :span="22">
|
|
|
|
+ <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
|
|
|
|
+ <el-form-item label="日期" prop="startDate">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="queryParams.startDate"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
|
+ @change="getList"
|
|
|
|
+ placeholder="开始日期"
|
|
|
|
+ :clearable="false"
|
|
|
|
+ style="width: 135px">
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="至" prop="endDate">
|
|
|
|
+ <el-date-picker
|
|
|
|
+ v-model="queryParams.endDate"
|
|
|
|
+ type="date"
|
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
|
+ @change="getList"
|
|
|
|
+ placeholder="结束日期"
|
|
|
|
+ :clearable="false"
|
|
|
|
+ style="width: 135px">
|
|
|
|
+ </el-date-picker>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item prop="status">
|
|
|
|
+ <el-radio-group v-model="queryParams.status" size="mini" @change="getList">
|
|
|
|
+ <el-radio-button
|
|
|
|
+ v-for="dict in dict.type.task_status"
|
|
|
|
+ :key="dict.value"
|
|
|
|
+ :label="dict.value"
|
|
|
|
+ >{{ dict.label }}
|
|
|
|
+ </el-radio-button>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item prop="priority">
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="queryParams.priority"
|
|
|
|
+ @change="getList"
|
|
|
|
+ clearable
|
|
|
|
+ placeholder="优先级"
|
|
|
|
+ style="width: 85px">
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="dict in dict.type.task_priority"
|
|
|
|
+ :key="dict.value"
|
|
|
|
+ :label="dict.label"
|
|
|
|
+ :value="dict.value">
|
|
|
|
+ <el-tag :color="priorityColorMap[dict.value]" effect="dark" :hit="false">
|
|
|
|
+ {{ dict.label }}
|
|
|
|
+ </el-tag>
|
|
|
|
+ </el-option>
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="2">
|
|
|
|
+ <el-button
|
|
|
|
+ type="primary"
|
|
|
|
+ plain
|
|
|
|
+ icon="el-icon-plus"
|
|
|
|
+ size="mini"
|
|
|
|
+ @click="handleAdd"
|
|
|
|
+ >日常任务
|
|
|
|
+ </el-button>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
|
|
<el-table
|
|
<el-table
|
|
class="view-table"
|
|
class="view-table"
|
|
@@ -85,13 +99,19 @@
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column align="center" v-for="header in tableHeaders" :key="header.day" :prop="header.day" width="42">
|
|
<el-table-column align="center" v-for="header in tableHeaders" :key="header.day" :prop="header.day" width="42">
|
|
<template slot="header">
|
|
<template slot="header">
|
|
- <div style="width:40px;text-align: center">
|
|
|
|
- <div style="font-size: 10px;">{{ header.day }}</div>
|
|
|
|
- <div v-if="header.week=='周六'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
|
|
|
|
- <div v-else-if="header.week=='周日'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
|
|
|
|
- <div v-else-if="header.week=='今日'" class="view-cell" style="color: #00E704">{{ header.week }}</div>
|
|
|
|
- <div v-else class="view-cell">{{ header.week }}</div>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <el-popover placement="top" trigger="hover">
|
|
|
|
+ <div>{{ header.day }}已反馈工时:
|
|
|
|
+ <span style="font-size: 16px;font-weight: bold; margin-right: 5px">{{ header.dayHours }}</span>
|
|
|
|
+ 小时
|
|
|
|
+ </div>
|
|
|
|
+ <div slot="reference" style="width:40px;text-align: center;cursor: pointer">
|
|
|
|
+ <div style="font-size: 10px;">{{ header.day }}</div>
|
|
|
|
+ <div v-if="header.week=='周六'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
|
|
|
|
+ <div v-else-if="header.week=='周日'" class="view-cell" style="color: #1c84c6">{{ header.week }}</div>
|
|
|
|
+ <div v-else-if="header.week=='今日'" class="view-cell" style="color: #00E704">{{ header.week }}</div>
|
|
|
|
+ <div v-else class="view-cell">{{ header.week }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </el-popover>
|
|
</template>
|
|
</template>
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row[header.day].comment" class="comment-badge"></span>
|
|
<span v-if="scope.row[header.day].comment" class="comment-badge"></span>
|
|
@@ -177,8 +197,8 @@
|
|
</el-row>
|
|
</el-row>
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
- <el-form-item label="计划工时" prop="planHours">
|
|
|
|
- <el-input-number v-model="form.planHours" @change="hoursChange" :min="0.1" :step="0.1"
|
|
|
|
|
|
+ <el-form-item label="计划工时">
|
|
|
|
+ <el-input-number v-model="form.planHours" :min="0.1" :step="0.1"
|
|
:step-strictly="true"
|
|
:step-strictly="true"
|
|
:controls="false"></el-input-number>
|
|
:controls="false"></el-input-number>
|
|
<span style="margin-left: 5px">小时</span>
|
|
<span style="margin-left: 5px">小时</span>
|
|
@@ -194,20 +214,16 @@
|
|
<el-row :gutter="20">
|
|
<el-row :gutter="20">
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
<el-form-item label="工作时长" prop="hours">
|
|
<el-form-item label="工作时长" prop="hours">
|
|
- <el-input-number v-model="form.hours" @change="hoursChange" :min="0.1" :max="24" :step="0.1"
|
|
|
|
|
|
+ <el-input-number v-model="form.hours" :min="0.1" :max="24" :step="0.1"
|
|
:step-strictly="true" :controls="false"></el-input-number>
|
|
:step-strictly="true" :controls="false"></el-input-number>
|
|
<span style="margin-left: 5px">小时</span>
|
|
<span style="margin-left: 5px">小时</span>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
- <el-form-item prop="value">
|
|
|
|
- <template slot="label">
|
|
|
|
- <span>进度</span>
|
|
|
|
- <el-tooltip class="item" effect="dark" content="计算方式:(工作时长+已反馈工时)÷计划工时×100%" placement="top">
|
|
|
|
- <i class="el-icon-info"></i>
|
|
|
|
- </el-tooltip>
|
|
|
|
- </template>
|
|
|
|
- <el-progress :percentage="form.value" style="margin-top: 7px"></el-progress>
|
|
|
|
|
|
+ <el-form-item label="任务进度" prop="value">
|
|
|
|
+ <el-input-number v-model="form.value" :min="1" :max="100" :step="1"
|
|
|
|
+ :step-strictly="true" :controls="false"></el-input-number>
|
|
|
|
+ <span style="margin-left: 5px">%</span>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-col>
|
|
</el-row>
|
|
</el-row>
|
|
@@ -382,7 +398,7 @@ export default {
|
|
projectId: undefined,
|
|
projectId: undefined,
|
|
startDate: undefined,
|
|
startDate: undefined,
|
|
endDate: undefined,
|
|
endDate: undefined,
|
|
- status: '0',
|
|
|
|
|
|
+ status: '1',
|
|
priority: undefined,
|
|
priority: undefined,
|
|
userId: undefined
|
|
userId: undefined
|
|
},
|
|
},
|
|
@@ -390,7 +406,6 @@ export default {
|
|
projectTree: [],
|
|
projectTree: [],
|
|
tableHeaders: [],
|
|
tableHeaders: [],
|
|
tableData: [],
|
|
tableData: [],
|
|
- popoverVisible: false,
|
|
|
|
|
|
|
|
open: false,
|
|
open: false,
|
|
form: {},
|
|
form: {},
|
|
@@ -402,9 +417,6 @@ export default {
|
|
value: [
|
|
value: [
|
|
{required: true, validator: validateValue, trigger: 'blur'}
|
|
{required: true, validator: validateValue, trigger: 'blur'}
|
|
],
|
|
],
|
|
- planHours: [
|
|
|
|
- {required: true, message: "计划工时不能为空", trigger: "blur"}
|
|
|
|
- ],
|
|
|
|
hours: [
|
|
hours: [
|
|
{required: true, validator: validateHours, trigger: 'blur'}
|
|
{required: true, validator: validateHours, trigger: 'blur'}
|
|
],
|
|
],
|
|
@@ -453,7 +465,16 @@ export default {
|
|
}
|
|
}
|
|
this.queryParams.userId = this.userId
|
|
this.queryParams.userId = this.userId
|
|
listView(this.queryParams).then(res => {
|
|
listView(this.queryParams).then(res => {
|
|
- this.tableHeaders = res.data.headers
|
|
|
|
|
|
+ this.tableHeaders = res.data.headers.map(header => {
|
|
|
|
+ let dayHours = 0;
|
|
|
|
+ res.data.data.forEach(item => {
|
|
|
|
+ if (item[header.day].hours) {
|
|
|
|
+ dayHours += item[header.day].hours
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ header['dayHours'] = dayHours
|
|
|
|
+ return header;
|
|
|
|
+ })
|
|
this.tableData = res.data.data
|
|
this.tableData = res.data.data
|
|
this.loading = false
|
|
this.loading = false
|
|
})
|
|
})
|
|
@@ -526,6 +547,7 @@ export default {
|
|
this.openDetail = true
|
|
this.openDetail = true
|
|
})
|
|
})
|
|
},
|
|
},
|
|
|
|
+
|
|
feedbackTypeChange(val) {
|
|
feedbackTypeChange(val) {
|
|
if (val === '2') {
|
|
if (val === '2') {
|
|
this.form.value = 100
|
|
this.form.value = 100
|