|
|
@@ -99,14 +99,26 @@
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
- <template v-slot:responsibleUserId="{row,$index}">
|
|
|
- <el-form-item :prop="'datasource.'+$index+'.responsibleUserId'">
|
|
|
- <personSelect
|
|
|
- :disabled="dialogType=='view'"
|
|
|
- :ref="'directorRef'+$index"
|
|
|
- v-model="row.responsibleUserId"
|
|
|
- :init="false"
|
|
|
- @selfChange="personChange"/>
|
|
|
+ <template v-slot:responsibleUserIds="{row,$index}" v-if="dialogType!=='view'">
|
|
|
+ <el-form-item :prop="'datasource.'+$index+'.responsibleUserIds'">
|
|
|
+ <el-select v-model="row.responsibleUserIds" multiple collapse-tags
|
|
|
+ filterable placeholder="请选择" style="width: 100%;"
|
|
|
+ clearable
|
|
|
+ size="medium"
|
|
|
+ :disabled="dialogType=='view'">
|
|
|
+ <el-option
|
|
|
+ v-for="item in userList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ <!-- <personSelect-->
|
|
|
+ <!-- :disabled="dialogType=='view'"-->
|
|
|
+ <!-- :ref="'directorRef'+$index"-->
|
|
|
+ <!-- v-model="row.responsibleUserIds"-->
|
|
|
+ <!-- :init="false"-->
|
|
|
+ <!-- @selfChange="personChange"/>-->
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
<template v-slot:isMilepost="{row,$index}" v-if="dialogType!=='view'">
|
|
|
@@ -117,6 +129,10 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
+ <template v-slot:speedPercent="{ row }">
|
|
|
+ <el-progress :stroke-width="20" text-color="#606266" :text-inside="true" :percentage="row.speedPercent||0"
|
|
|
+ :color="customColorMethod"></el-progress>
|
|
|
+ </template>
|
|
|
<template v-slot:milepost="{row,$index}" v-if="dialogType!=='view'">
|
|
|
<el-form-item>
|
|
|
<el-input v-model="row.milepost" clearable></el-input>
|
|
|
@@ -127,6 +143,10 @@
|
|
|
<el-input type="textarea" v-model="row.deliverContent" clearable></el-input>
|
|
|
</el-form-item>
|
|
|
</template>
|
|
|
+ <template v-slot:proportion="{ row }">
|
|
|
+ <el-input type="number" :min="0" :max="100" v-model="row.proportion" :disabled="dialogType=='view'">
|
|
|
+ </el-input>
|
|
|
+ </template>
|
|
|
<template v-slot:remark="{row,$index}" v-if="dialogType!=='view'">
|
|
|
<el-form-item>
|
|
|
<el-input type="textarea" v-model="row.remark" clearable></el-input>
|
|
|
@@ -152,9 +172,9 @@ import fileUpload from "@/components/upload/fileUpload.vue";
|
|
|
import {getFile} from "@/api/system/file";
|
|
|
import PersonSelect from "@/components/CommomSelect/person-select.vue";
|
|
|
import {proStatusEnum} from "@/enum/dict";
|
|
|
-
|
|
|
+import {deepClone} from "@/utils";
|
|
|
export default {
|
|
|
- name: "relatedInfoTable",
|
|
|
+ name: "planInfoTable",
|
|
|
components: {
|
|
|
PersonSelect,
|
|
|
fileUpload,
|
|
|
@@ -179,6 +199,12 @@ export default {
|
|
|
return []
|
|
|
}
|
|
|
},
|
|
|
+ userList: {
|
|
|
+ type: Array,
|
|
|
+ default() {
|
|
|
+ return []
|
|
|
+ }
|
|
|
+ },
|
|
|
deptTreeList: {
|
|
|
type: Array,
|
|
|
default() {
|
|
|
@@ -189,13 +215,12 @@ export default {
|
|
|
watch: {
|
|
|
dialogForm: {
|
|
|
handler(val) {
|
|
|
- console.log(this.dialogForm.planStageList, '======');
|
|
|
- this.form.datasource = this.dialogForm.planStageList || []
|
|
|
- this.$nextTick(async () => {
|
|
|
- this.form.datasource.forEach((item, index) => {
|
|
|
- this.getUserList(item.responsibleDeptId, index);
|
|
|
- })
|
|
|
- })
|
|
|
+ this.form.datasource = deepClone(this.dialogForm.planStageList || [])
|
|
|
+ // this.$nextTick(async () => {
|
|
|
+ // this.form.datasource.forEach((item, index) => {
|
|
|
+ // this.getUserList(item.responsibleDeptId, index);
|
|
|
+ // })
|
|
|
+ // })
|
|
|
},
|
|
|
deep: true,
|
|
|
},
|
|
|
@@ -230,13 +255,31 @@ export default {
|
|
|
slot: 'name',
|
|
|
headerSlot: 'headerRequired',
|
|
|
},
|
|
|
+ // {
|
|
|
+ // prop: 'stage',
|
|
|
+ // label: '计划节点',
|
|
|
+ // align: 'center',
|
|
|
+ // showOverflowTooltip: true,
|
|
|
+ // minWidth: 120,
|
|
|
+ // slot: 'stage',
|
|
|
+ // headerSlot: 'headerRequired',
|
|
|
+ // },
|
|
|
+ // {
|
|
|
+ // prop: 'responsibleDeptId',
|
|
|
+ // label: '负责部门',
|
|
|
+ // align: 'center',
|
|
|
+ // showOverflowTooltip: true,
|
|
|
+ // minWidth: 130,
|
|
|
+ // slot: 'responsibleDeptId',
|
|
|
+ // headerSlot: 'headerRequired',
|
|
|
+ // },
|
|
|
{
|
|
|
- prop: 'stage',
|
|
|
- label: '计划节点',
|
|
|
+ prop: 'responsibleUserNames',
|
|
|
+ label: '负责人',
|
|
|
align: 'center',
|
|
|
showOverflowTooltip: true,
|
|
|
- minWidth: 120,
|
|
|
- slot: 'stage',
|
|
|
+ minWidth: 200,
|
|
|
+ slot: 'responsibleUserIds',
|
|
|
headerSlot: 'headerRequired',
|
|
|
},
|
|
|
{
|
|
|
@@ -257,33 +300,13 @@ export default {
|
|
|
slot: 'planEndDate',
|
|
|
headerSlot: 'headerRequired',
|
|
|
},
|
|
|
- {
|
|
|
- prop: 'responsibleDeptId',
|
|
|
- label: '负责部门',
|
|
|
- align: 'center',
|
|
|
- showOverflowTooltip: true,
|
|
|
- minWidth: 130,
|
|
|
- slot: 'responsibleDeptId',
|
|
|
- headerSlot: 'headerRequired',
|
|
|
- },
|
|
|
- {
|
|
|
- prop: 'responsibleUserId',
|
|
|
- label: '负责人',
|
|
|
- align: 'center',
|
|
|
- showOverflowTooltip: true,
|
|
|
- minWidth: 130,
|
|
|
- slot: 'responsibleUserId',
|
|
|
- headerSlot: 'headerRequired',
|
|
|
- },
|
|
|
+
|
|
|
{
|
|
|
prop: 'isMilepost',
|
|
|
label: '是否里程碑',
|
|
|
align: 'center',
|
|
|
showOverflowTooltip: true,
|
|
|
minWidth: 120,
|
|
|
- formatter: (_row, _column, cellValue) => {
|
|
|
- return cellValue? '是' : '否';
|
|
|
- },
|
|
|
slot: 'isMilepost',
|
|
|
},
|
|
|
{
|
|
|
@@ -302,6 +325,22 @@ export default {
|
|
|
minWidth: 160,
|
|
|
slot: 'remark',
|
|
|
},
|
|
|
+ // {
|
|
|
+ // prop: 'proportion',
|
|
|
+ // label: '权重占比(%)',
|
|
|
+ // align: 'center',
|
|
|
+ // showOverflowTooltip: true,
|
|
|
+ // minWidth: 110,
|
|
|
+ // slot: 'proportion'
|
|
|
+ // },
|
|
|
+ {
|
|
|
+ prop: 'speedPercent',
|
|
|
+ label: '进度',
|
|
|
+ align: 'center',
|
|
|
+ showOverflowTooltip: true,
|
|
|
+ minWidth: 150,
|
|
|
+ slot: 'speedPercent'
|
|
|
+ },
|
|
|
{
|
|
|
prop: 'status',
|
|
|
label: '状态',
|
|
|
@@ -339,8 +378,8 @@ export default {
|
|
|
deliverContent: '',
|
|
|
milepost: '',
|
|
|
isMilepost: 0,
|
|
|
- responsibleUserId: '',
|
|
|
- responsibleUserName: '',
|
|
|
+ responsibleUserIds: [],
|
|
|
+ responsibleUserNames: [],
|
|
|
planStartDate: '',
|
|
|
planEndDate: '',
|
|
|
name: '',
|
|
|
@@ -354,10 +393,19 @@ export default {
|
|
|
changeDeptInfo(id, index) {
|
|
|
const info = this.deptList.find((e) => e.id == id) || {};
|
|
|
this.$set(this.form.datasource[index], 'responsibleDeptName', info.name);
|
|
|
- this.$set(this.form.datasource[index], 'responsibleUserId', '');
|
|
|
+ this.$set(this.form.datasource[index], 'responsibleUserIds', '');
|
|
|
this.$set(this.form.datasource[index], 'responsibleUserName', '');
|
|
|
this.getUserList(id, index);
|
|
|
},
|
|
|
+ customColorMethod(percentage) {
|
|
|
+ if (percentage < 30) {
|
|
|
+ return '#909399';
|
|
|
+ } else if (percentage < 70) {
|
|
|
+ return '#e6a23c';
|
|
|
+ } else {
|
|
|
+ return '#67c23a';
|
|
|
+ }
|
|
|
+ },
|
|
|
// 获取人员数据
|
|
|
getUserList(groupId, index) {
|
|
|
if (groupId) {
|
|
|
@@ -365,7 +413,7 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
personChange(val, info, index) {
|
|
|
- this.$set(this.form.datasource[index], 'responsibleUserName', info.name);
|
|
|
+ // this.$set(this.form.datasource[index], 'responsibleUserName', info.name);
|
|
|
},
|
|
|
//
|
|
|
clearData() {
|
|
|
@@ -373,7 +421,7 @@ export default {
|
|
|
this.$set(this.form.datasource[index], 'deliverContent', '')
|
|
|
this.$set(this.form.datasource[index], 'milepost', '')
|
|
|
this.$set(this.form.datasource[index], 'isMilepost', 0)
|
|
|
- this.$set(this.form.datasource[index], 'responsibleUserId', '')
|
|
|
+ this.$set(this.form.datasource[index], 'responsibleUserIds', '')
|
|
|
this.$set(this.form.datasource[index], 'responsibleUserName', '')
|
|
|
this.$set(this.form.datasource[index], 'planStartDate', '')
|
|
|
this.$set(this.form.datasource[index], 'planEndDate', '')
|