Merge branch 'main' of http://101.34.228.45:3000/rmdjz/ProjectManagement_frontend
commit
bcd4aa9ed2
|
@ -15,6 +15,7 @@
|
|||
"echarts": "^5.3.3",
|
||||
"element-plus": "^2.2.6",
|
||||
"moment": "^2.29.1",
|
||||
"spark-md5": "^3.0.2",
|
||||
"vue": "^3.0.0",
|
||||
"vue-router": "^4.0.0-0",
|
||||
"vuex": "^4.0.2",
|
||||
|
@ -12665,6 +12666,11 @@
|
|||
"resolved": "https://registry.npmmirror.com/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
|
||||
"integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ="
|
||||
},
|
||||
"node_modules/spark-md5": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
|
||||
"integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
|
||||
},
|
||||
"node_modules/spdx-correct": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/spdx-correct/download/spdx-correct-3.1.1.tgz",
|
||||
|
@ -25999,6 +26005,11 @@
|
|||
"resolved": "https://registry.npmmirror.com/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
|
||||
"integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ="
|
||||
},
|
||||
"spark-md5": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
|
||||
"integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
|
||||
},
|
||||
"spdx-correct": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmmirror.com/spdx-correct/download/spdx-correct-3.1.1.tgz",
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
"echarts": "^5.3.3",
|
||||
"element-plus": "^2.2.6",
|
||||
"moment": "^2.29.1",
|
||||
"spark-md5": "^3.0.2",
|
||||
"vue": "^3.0.0",
|
||||
"vue-router": "^4.0.0-0",
|
||||
"vuex": "^4.0.2",
|
||||
|
|
|
@ -15,17 +15,22 @@ export default {
|
|||
chartData: []
|
||||
}
|
||||
},
|
||||
props: {
|
||||
enable: false,
|
||||
},
|
||||
watch: {
|
||||
enable: function (val) {
|
||||
console.log("ENABLE"+val)
|
||||
if(val)
|
||||
this.initEcharts();
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.initEcharts();
|
||||
},
|
||||
computed: {
|
||||
getTotalNumber() {
|
||||
return this.dataList.reduce((prev, item) => {
|
||||
prev += item.value
|
||||
return prev
|
||||
}, 0);
|
||||
}
|
||||
console.log("ENABLE"+this.enable)
|
||||
if(this.enable)
|
||||
this.initEcharts();
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 获取配置
|
||||
getOption() {
|
||||
|
|
|
@ -0,0 +1,143 @@
|
|||
<template>
|
||||
<div id="projectechartsBar" ref="projectechartsBar">
|
||||
<!-- 准备具有宽高的容器 -->
|
||||
<div style="width: 100%; height: 100%" ref="chart"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import request from "@/utils/request";
|
||||
|
||||
let Echarts = require('echarts/lib/echarts'); //基础实例 注意不要使用import
|
||||
require('echarts/lib/chart/bar'); //按需引入 bar = 柱状图
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
chart: null,
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
props: {
|
||||
task: null
|
||||
},
|
||||
emits: ['mounted'],
|
||||
watch: {
|
||||
task: function (val) {
|
||||
console.log("initEchartsBar")
|
||||
console.log(this.task)
|
||||
this.initEcharts()
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$emit("mounted");
|
||||
},
|
||||
methods: {
|
||||
|
||||
|
||||
// 获取配置
|
||||
init() {
|
||||
console.log(this.$refs.chart);
|
||||
// 指定图表的配置项和数据
|
||||
this.chart = Echarts.init(this.$refs.chart);
|
||||
let option = {
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
|
||||
}
|
||||
},
|
||||
legend: {},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
xAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
yAxis: {
|
||||
type: 'category',
|
||||
data: ['需求', '任务', '缺陷']
|
||||
},
|
||||
color: [ '#79bbff', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'],
|
||||
|
||||
series: [
|
||||
{
|
||||
name: '未完成',
|
||||
type: 'bar',
|
||||
stack: 'total',
|
||||
label: {
|
||||
show: true,
|
||||
color:'#FFFFFF',
|
||||
formatter:function (params) {
|
||||
if(params.value==0){ //为0时不显示
|
||||
return ''
|
||||
}else{
|
||||
return params.value
|
||||
}
|
||||
}
|
||||
},
|
||||
emphasis: {
|
||||
focus: 'series'
|
||||
},
|
||||
data: [this.task.require.totalNum - this.task.require.completeNum, this.task.task.totalNum - this.task.task.completeNum, this.task.flaw.totalNum - this.task.flaw.completeNum]
|
||||
},
|
||||
|
||||
{
|
||||
name: '已完成',
|
||||
type: 'bar',
|
||||
stack: 'total',
|
||||
label: {
|
||||
show: true,
|
||||
color:'#FFFFFF',
|
||||
formatter:function (params) {
|
||||
if(params.value==0){ //为0时不显示
|
||||
return ''
|
||||
}else{
|
||||
return params.value
|
||||
}
|
||||
}
|
||||
},
|
||||
emphasis: {
|
||||
focus: 'series'
|
||||
},
|
||||
data: [this.task.require.completeNum, this.task.task.completeNum, this.task.flaw.completeNum]
|
||||
},
|
||||
|
||||
]
|
||||
};
|
||||
|
||||
this.chart.setOption(option);
|
||||
},
|
||||
|
||||
initEcharts() {
|
||||
this.$nextTick(() => {
|
||||
this.init()
|
||||
|
||||
});
|
||||
const that = this
|
||||
//this.chart.setOption(option);
|
||||
window.addEventListener("resize", function () {
|
||||
that.chart.resize();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
#echartsBar {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
|
||||
.echarts_box {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
|
@ -72,7 +72,7 @@ export default {
|
|||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
show: true,
|
||||
show: false,
|
||||
fontSize: '40',
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ export default {
|
|||
type: 'scroll',
|
||||
orient: 'vertical',
|
||||
// right: 10,
|
||||
left:350,
|
||||
left: '80%',
|
||||
top: 20,
|
||||
bottom: 20,
|
||||
}
|
||||
|
|
|
@ -78,7 +78,7 @@
|
|||
</div>
|
||||
<template #tip>
|
||||
<div class="el-upload__tip">
|
||||
<el-link href="https://element.eleme.io" type="primary">下载模板</el-link>
|
||||
<el-link href="https://www.hammer-hfut.tk/api/public/账户导入模板.xlsx" type="primary">下载模板</el-link>
|
||||
</div>
|
||||
</template>
|
||||
</el-upload>
|
||||
|
@ -95,7 +95,6 @@ import {UploadFilled} from '@element-plus/icons'
|
|||
import request from "@/utils/request";
|
||||
import router from "../router";
|
||||
import {ElMessage} from "element-plus";
|
||||
import md5 from 'blueimp-md5'
|
||||
|
||||
export default {
|
||||
name: 'Home',
|
||||
|
@ -126,20 +125,32 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
customUpload(options) {
|
||||
const that = this
|
||||
let param = new FormData()
|
||||
param.append('fileDigest', md5(options.file))
|
||||
param.append('uploadFile', options.file)
|
||||
request({
|
||||
url: '/staff/import',
|
||||
data: param,
|
||||
method: 'post',
|
||||
onUploadProgress: progressEvent => {
|
||||
progressEvent.percent = progressEvent.loaded / progressEvent.total * 100 | 0
|
||||
options.onProgress(progressEvent)
|
||||
}
|
||||
}).then((res) => {
|
||||
console.log(res.data);
|
||||
})
|
||||
const fileReader = new FileReader()
|
||||
fileReader.readAsBinaryString(options.file);
|
||||
fileReader.onload = e => {
|
||||
console.log(e.target.result)
|
||||
let SparkMD5 = require('spark-md5')
|
||||
param.append('fileDigest', SparkMD5.hashBinary(e.target.result))
|
||||
param.append('uploadFile', options.file)
|
||||
request({
|
||||
url: '/staff/import',
|
||||
data: param,
|
||||
method: 'post',
|
||||
onUploadProgress: progressEvent => {
|
||||
progressEvent.percent = progressEvent.loaded / progressEvent.total * 100 | 0
|
||||
options.onProgress(progressEvent)
|
||||
}
|
||||
}).then((res) => {
|
||||
console.log(res.data);
|
||||
ElMessage({
|
||||
message: '导入成功',
|
||||
type: 'success',
|
||||
})
|
||||
that.uploadDialogVisible = false
|
||||
})
|
||||
}
|
||||
},
|
||||
getStaffFullname() {
|
||||
if (this.$store && this.$store.state.staff)
|
||||
|
|
|
@ -74,9 +74,9 @@ const tableHeight = ref();
|
|||
const {proxy, ctx} = getCurrentInstance()
|
||||
onMounted(() => {
|
||||
// 设置表格初始高度为innerHeight-offsetTop-表格底部与浏览器底部距离110
|
||||
tableHeight.value = window.innerHeight /*- tableRef.value.$el.offsetTop*/ - 400;
|
||||
tableHeight.value = window.innerHeight /*- tableRef.value.$el.offsetTop*/ - 300;
|
||||
window.onresize = () => {
|
||||
tableHeight.value = window.innerHeight /*- tableRef.value.$el.offsetTop*/ - 400;
|
||||
tableHeight.value = window.innerHeight /*- tableRef.value.$el.offsetTop*/ - 300;
|
||||
};
|
||||
});
|
||||
const router = useRouter()
|
||||
|
@ -185,17 +185,19 @@ export default {
|
|||
staffId: Number
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
computed: {
|
||||
canCreateProject() {
|
||||
if (this.$store && this.$store.state.staff)
|
||||
return this.$store.state.staff.staffGlobalLevel < 3
|
||||
else
|
||||
return false
|
||||
},
|
||||
},
|
||||
|
||||
mounted() {
|
||||
},
|
||||
methods: {
|
||||
canCreateProject() {
|
||||
if (this.$store && this.$store.state.staff)
|
||||
return this.$store.state.staff.staffGlobalLevel > 3
|
||||
else
|
||||
return false
|
||||
},
|
||||
|
||||
showCloseProjectButton(row) {
|
||||
return this.$store.state.staff === null ? false : (this.$store.state.staff.staffId === row.projectCreator)
|
||||
},
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
</el-header>
|
||||
<el-main style="overflow: unset">
|
||||
<router-view
|
||||
:project="project"
|
||||
:projectAccessLevel="projectAccessLevel"
|
||||
:projectGroup="projectGroup"
|
||||
@groupChanged="groupChanged"
|
||||
|
@ -88,6 +89,7 @@ export default {
|
|||
projectStaffPosition: '',
|
||||
projectAccessLevel: 3,
|
||||
menuDefaultActive: '1',
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<div style="margin: 0 10px 0 10px;display: flex;flex-direction: row;justify-content: space-between"
|
||||
ref="left_title_Ref">
|
||||
<p style="text-align:center; 'Segoe UI',sans-serif;font-size: 20px;font-weight: bold;color: #606266">项目团队</p>
|
||||
<el-button type="primary" @click="onCreatePerson">新增成员</el-button>
|
||||
<el-button v-if="!project.completed&&projectAccessLevel<3" type="primary" @click="onCreatePerson">新增成员</el-button>
|
||||
</div>
|
||||
<div style="flex: 1; margin: 30px 0 0 0; background-color: white; border-radius: 10px;padding: 20px;
|
||||
display: flex;flex-direction: column;justify-content: space-between">
|
||||
|
@ -18,7 +18,7 @@
|
|||
<el-table-column prop="projectStaffPosition" label="职位" min-width="40%" :formatter="jobFormatter"/>
|
||||
<el-table-column align="right" min-width="35%">
|
||||
<template #default="scope">
|
||||
<div v-if="getOperationsVisible(scope.row)"
|
||||
<div v-if="!project.completed&&getOperationsVisible(scope.row)"
|
||||
style="width: 100%;display: flex;flex-direction: row;justify-content: flex-end">
|
||||
<el-button
|
||||
@click.native="onEditClick(scope.row)"
|
||||
|
@ -149,6 +149,7 @@ export default {
|
|||
},
|
||||
emits: ['groupChanged'],
|
||||
props: {
|
||||
project: {completed:true},
|
||||
projectAccessLevel: Number,
|
||||
projectGroup: Array
|
||||
},
|
||||
|
|
|
@ -47,8 +47,17 @@
|
|||
</div>
|
||||
<div style="flex: 1;margin-left: 30px;height: 100%;display: flex;flex-direction: column">
|
||||
<p class="p-title" style="margin-left: 10px">工作项统计</p>
|
||||
<div style="flex:1;margin-top: 30px;padding: 20px;
|
||||
display: flex;flex-direction: column; justify-content: space-between;background-color: white; border-radius: 10px;">
|
||||
<div
|
||||
style="flex:1;margin-top: 30px;padding: 10px;
|
||||
display: flex;flex-direction:row; justify-content: space-between;background-color: white; border-radius: 10px;">
|
||||
<div style="width: 50%;">
|
||||
<p class="p-subtitle" style="margin-left: 10px;margin-top: 10px">项目</p>
|
||||
<echartsBar @mounted="getTaskStats" :task="taskStat" style="height: 190px; weight: 100%"></echartsBar>
|
||||
</div>
|
||||
<div style="width: 50%;">
|
||||
<p class="p-subtitle" style="margin-left: 10px;margin-top: 10px">个人</p>
|
||||
<echartsBar @mounted="getselfTaskStats" :task="selftaskStat" style="height: 190px; weight: 100%"></echartsBar>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
@ -59,7 +68,9 @@
|
|||
<div style="margin: 0 10px 0 10px;
|
||||
display: flex;flex-direction: row;justify-content: space-between">
|
||||
<p style="font-family: 'Segoe UI',sans-serif;font-size: 20px;font-weight: bold;color: #606266">详细信息</p>
|
||||
<el-button v-if="projectAccessLevel===1" type="primary" @click.native="onEditProjectClick">编辑</el-button>
|
||||
<el-button v-if="!project.completed&&projectAccessLevel===1" type="primary"
|
||||
@click.native="onEditProjectClick">编辑
|
||||
</el-button>
|
||||
</div>
|
||||
<div style="flex:1;margin-top: 30px;padding: 20px;
|
||||
display: flex;flex-direction: column; justify-content: space-between;background-color: white; border-radius: 10px; ">
|
||||
|
@ -209,13 +220,13 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div style="height: 500px;margin: 0 30px 30px 30px;
|
||||
<div v-if="!project.completed" style="height: 500px;margin: 0 30px 30px 30px;
|
||||
display: flex;flex-direction: row;justify-content: space-between">
|
||||
<div style="flex: 1;height: 100%;display: flex;flex-direction: column">
|
||||
<p class="p-title" style="margin-left: 10px">工作项统计</p>
|
||||
<p class="p-title" style="margin-left: 10px">工作项完成趋势</p>
|
||||
<div style="flex:1;margin-top: 30px;padding: 20px;
|
||||
display: flex;flex-direction: column; justify-content: space-between;background-color: white; border-radius: 10px;align-items: stretch">
|
||||
<TendencyChart style="flex: 1;"></TendencyChart>
|
||||
<TendencyChart :enable="!project.completed" style="flex: 1;"></TendencyChart>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -254,7 +265,7 @@
|
|||
title="提示"
|
||||
:model-value="dialogVisible"
|
||||
width="30%"
|
||||
:before-close="handleClose">
|
||||
>
|
||||
<div>确认删除该公告?</div>
|
||||
<template #footer>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
|
@ -276,37 +287,20 @@ import request from "@/utils/request";
|
|||
import moment from "moment";
|
||||
import EditProjectDialog from "../components/EditProjectDialog";
|
||||
import TendencyChart from "../components/TendencyChart";
|
||||
import EchartsBar from "../components/echartsBar"
|
||||
|
||||
export default {
|
||||
name: "ProjectInfo",
|
||||
components: {EditProjectDialog, TendencyChart},
|
||||
components: {EditProjectDialog, TendencyChart, EchartsBar},
|
||||
data() {
|
||||
return {
|
||||
project: {
|
||||
projectName: '',
|
||||
projectAbbreviation: '',
|
||||
projectClassId: '',
|
||||
projectSubclassId: '',
|
||||
projectImportance: '',
|
||||
contractAmount: '',
|
||||
expectedCompletion: '',
|
||||
projectManMonth: '',
|
||||
projectStartDate: Number,
|
||||
projectOnlineDate: Number,
|
||||
projectFirstTestDate: Number,
|
||||
projectFinalTestDate: Number,
|
||||
projectEndDate: Number,
|
||||
financialCode: '',
|
||||
projectDepartment: '',
|
||||
projectArea: '',
|
||||
projectCompany: '',
|
||||
projectDescription: '',
|
||||
completed: '',
|
||||
},
|
||||
|
||||
completeNum: 0,
|
||||
totalNum: 0,
|
||||
|
||||
taskStat: {},
|
||||
selftaskStat: {},
|
||||
|
||||
projectClasses: [],
|
||||
projectSubClasses: [],
|
||||
|
||||
|
@ -339,6 +333,27 @@ export default {
|
|||
}
|
||||
},
|
||||
props: {
|
||||
project: {
|
||||
projectName: '',
|
||||
projectAbbreviation: '',
|
||||
projectClassId: '',
|
||||
projectSubclassId: '',
|
||||
projectImportance: '',
|
||||
contractAmount: '',
|
||||
expectedCompletion: '',
|
||||
projectManMonth: '',
|
||||
projectStartDate: Number,
|
||||
projectOnlineDate: Number,
|
||||
projectFirstTestDate: Number,
|
||||
projectFinalTestDate: Number,
|
||||
projectEndDate: Number,
|
||||
financialCode: '',
|
||||
projectDepartment: '',
|
||||
projectArea: '',
|
||||
projectCompany: '',
|
||||
projectDescription: '',
|
||||
completed: '',
|
||||
},
|
||||
projectAccessLevel: Number,
|
||||
projectGroup: Array
|
||||
},
|
||||
|
@ -388,14 +403,16 @@ export default {
|
|||
|
||||
},
|
||||
project: function (val) {
|
||||
|
||||
this.getProjectStats();
|
||||
this.getProjectClass();
|
||||
this.getannouncementList();
|
||||
this.getTaskStats();
|
||||
this.getselfTaskStats();
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getProjectInfo();
|
||||
this.getProjectStats();
|
||||
this.getProjectClass();
|
||||
this.getannouncementList();
|
||||
//this.getProjectInfo();
|
||||
|
||||
},
|
||||
mounted() {
|
||||
const that = this
|
||||
|
@ -405,6 +422,48 @@ export default {
|
|||
};
|
||||
},
|
||||
methods: {
|
||||
getTaskStats() {
|
||||
const that = this
|
||||
request({
|
||||
url: 'project/' + this.$route.params.projectId + '/task/stats',
|
||||
method: 'get'
|
||||
|
||||
}).then(response => {
|
||||
if (response.data.code === 200) {
|
||||
|
||||
that.taskStat = {
|
||||
require: response.data.data.records[0],
|
||||
task: response.data.data.records[1],
|
||||
flaw: response.data.data.records[2]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}).catch(function (error) {
|
||||
console.log(error)
|
||||
})
|
||||
},
|
||||
getselfTaskStats() {
|
||||
const that = this
|
||||
request({
|
||||
url: 'project/' + this.$route.params.projectId + '/task/stats/' + this.$store.state.staff.staffId,
|
||||
method: 'get'
|
||||
|
||||
}).then(response => {
|
||||
if (response.data.code === 200) {
|
||||
|
||||
that.selftaskStat = {
|
||||
require: response.data.data.records[0],
|
||||
task: response.data.data.records[1],
|
||||
flaw: response.data.data.records[2]
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}).catch(function (error) {
|
||||
console.log(error)
|
||||
})
|
||||
},
|
||||
// 删除公告
|
||||
delxtggsj() {
|
||||
var that = this;
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
|
||||
|
||||
<template #reference>
|
||||
<el-button :style="{'visibility': ( projectAccessLevel < 3&&!mine)?'unset':'hidden'}" type="primary">新增工作项
|
||||
<el-button :style="{'visibility': ( !project.completed&&projectAccessLevel < 3&&!mine)?'unset':'hidden'}" type="primary">新增工作项
|
||||
</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
|
@ -157,7 +157,7 @@
|
|||
<template #reference>
|
||||
<el-button
|
||||
:style="{'padding':'4px','margin-left': '5px','visibility':
|
||||
(scope.row.taskType!=='缺陷'&&
|
||||
(!project.completed&&scope.row.taskType!=='缺陷'&&
|
||||
!statusDisabled(scope.row))?
|
||||
'unset':'hidden'}"
|
||||
text>
|
||||
|
@ -350,6 +350,7 @@ import router from "../router";
|
|||
export default {
|
||||
name: "ProjectWorkitem",
|
||||
props: {
|
||||
project: {completed: true},
|
||||
projectAccessLevel: Number,
|
||||
projectGroup: Array
|
||||
},
|
||||
|
@ -418,7 +419,7 @@ export default {
|
|||
|
||||
|
||||
statusDisabled(row) {
|
||||
return row.taskStatus === '已完成' || row.taskStatus === '关闭' || !(row.editable ||
|
||||
return this.project.completed||row.taskStatus === '已完成' || row.taskStatus === '关闭' || !(row.editable ||
|
||||
(this.$store.state.staff && row.taskHolderId === this.$store.state.staff.staffId))
|
||||
},
|
||||
onRowClick(row, column, event) {
|
||||
|
@ -721,7 +722,7 @@ export default {
|
|||
//console.log(response.data.records)
|
||||
that.workitems = response.data.data.records
|
||||
for (let workitem of that.workitems) {
|
||||
workitem['editable'] = that.projectAccessLevel < 3
|
||||
workitem['editable'] = !that.project.completed&& that.projectAccessLevel < 3
|
||||
workitem['hasChildren'] = workitem.childrenCount !== 0
|
||||
workitem['isRoot'] = true
|
||||
//console.log(workitem)
|
||||
|
@ -745,7 +746,7 @@ export default {
|
|||
let records = response.data.data.records
|
||||
|
||||
|
||||
const editable = row.editable || row.taskHolderId === that.$store.state.staff.staffId
|
||||
const editable = !that.project.completed&&( row.editable || row.taskHolderId === that.$store.state.staff.staffId)
|
||||
for (let workitem of records) {
|
||||
workitem['editable'] = editable
|
||||
workitem['hasChildren'] = workitem.childrenCount !== 0
|
||||
|
@ -770,7 +771,7 @@ export default {
|
|||
}).then(response => {
|
||||
if (response.data.code === 200) {
|
||||
let records = response.data.data.records
|
||||
const editable = row.editable || row.taskHolderId === this.$store.state.staff.staffId
|
||||
const editable = !that.project.completed&&(row.editable || row.taskHolderId === this.$store.state.staff.staffId)
|
||||
for (let workitem of records) {
|
||||
workitem['editable'] = editable
|
||||
workitem['hasChildren'] = workitem.childrenCount !== 0
|
||||
|
|
Loading…
Reference in New Issue