完成编辑项目属性功能
parent
48d95b0244
commit
291eb9f596
|
@ -0,0 +1,438 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog title="编辑项目信息" v-model="dialogFormVisible" :width="'1050px'">
|
||||||
|
|
||||||
|
<el-form
|
||||||
|
:model="ruleForm"
|
||||||
|
:rules="rules"
|
||||||
|
ref="ruleForm"
|
||||||
|
label-width="110px"
|
||||||
|
class="demo-ruleForm">
|
||||||
|
<!-- 第1行 -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
|
<el-input disabled v-model="ruleForm.projectName"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 第2行 -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="英文简称" prop="projectAbbreviation">
|
||||||
|
<el-input v-model="ruleForm.projectAbbreviation"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="项目主类" prop="projectClassId" >
|
||||||
|
<el-select disabled v-model="ruleForm.projectClassId" placeholder="请选择" @change="onProjectClassChange">
|
||||||
|
<el-option
|
||||||
|
v-for="item in projectClasses"
|
||||||
|
:label="item.projectClassName"
|
||||||
|
:value="item.projectClassId"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="项目子类" prop="projectSubclassId">
|
||||||
|
<el-select disabled v-model="ruleForm.projectSubclassId" placeholder="请选择">
|
||||||
|
<el-option
|
||||||
|
v-for="item in currentProjectSubClasses"
|
||||||
|
:label="item.projectClassName"
|
||||||
|
:value="item.projectClassId"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="重要程度" prop="projectImportance">
|
||||||
|
<el-select v-model="ruleForm.projectImportance" placeholder="请选择">
|
||||||
|
<el-option label="A" value="A"></el-option>
|
||||||
|
<el-option label="B" value="B"></el-option>
|
||||||
|
<el-option label="C" value="C"></el-option>
|
||||||
|
<el-option label="D" value="D"></el-option>
|
||||||
|
<el-option label="E" value="E"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 第3行 -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="合同额" prop="contractAmount">
|
||||||
|
<el-input v-model="ruleForm.contractAmount"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="预期完成度" prop="expectedCompletion">
|
||||||
|
<el-input v-model="ruleForm.expectedCompletion">
|
||||||
|
<template #suffix>
|
||||||
|
<span>%</span>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="计划总人月" prop="projectManMonth">
|
||||||
|
<el-input v-model="ruleForm.projectManMonth"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="项目启动日期" required>
|
||||||
|
<el-form-item prop="projectStartDate">
|
||||||
|
<el-date-picker
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
v-model="ruleForm.projectStartDate"
|
||||||
|
style="width: 100%;"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 第4行 -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="计划上线日期" required>
|
||||||
|
<el-form-item prop="projectOnlineDate">
|
||||||
|
<el-date-picker
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
v-model="ruleForm.projectOnlineDate"
|
||||||
|
style="width: 100%;"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="计划初验日期" required>
|
||||||
|
<el-form-item prop="projectFirstTestDate">
|
||||||
|
<el-date-picker
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
v-model="ruleForm.projectFirstTestDate"
|
||||||
|
style="width: 100%;"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="计划终验日期" required>
|
||||||
|
<el-form-item prop="projectFinalTestDate">
|
||||||
|
<el-date-picker
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
v-model="ruleForm.projectFinalTestDate"
|
||||||
|
style="width: 100%;"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="计划结项日期" required>
|
||||||
|
<el-form-item prop="projectEndDate">
|
||||||
|
<el-date-picker
|
||||||
|
type="date"
|
||||||
|
placeholder="选择日期"
|
||||||
|
v-model="ruleForm.projectEndDate"
|
||||||
|
style="width: 100%;"
|
||||||
|
></el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 第5行 -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="财务编码" prop="financialCode">
|
||||||
|
<el-input v-model="ruleForm.financialCode"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="所属部门" prop="projectDepartment">
|
||||||
|
<el-input disabled v-model="ruleForm.projectDepartment"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="所属区域" prop="projectArea">
|
||||||
|
<el-input disabled v-model="ruleForm.projectArea"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="所属公司" prop="projectCompany">
|
||||||
|
<el-input disabled v-model="ruleForm.projectCompany"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 第6行 -->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="项目描述" prop="projectDescription">
|
||||||
|
<el-input type="textarea" v-model="ruleForm.projectDescription"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<!-- 按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<span class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm('ruleForm')">确定</el-button>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {ElMessage} from "element-plus";
|
||||||
|
import request from "../utils/request";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "EditProjectDialog",
|
||||||
|
data() {
|
||||||
|
let validateAbbreviation = (rule, value, callback) => {//定义英文简称只能输入英文和数字
|
||||||
|
var reg = new RegExp("^[A-Za-z0-9]+$");
|
||||||
|
if (!value) {//没有值,直接callback,不校验
|
||||||
|
return callback()
|
||||||
|
} else {
|
||||||
|
if (!reg.test(value)) {
|
||||||
|
return callback(new Error("只能输入字母和数字"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback()
|
||||||
|
}
|
||||||
|
let validateAmount = (rule, value, callback) => {//定义合通额大于等于0,而且只到小数点后2位
|
||||||
|
var reg = new RegExp("^(([0-9]|([1-9][0-9]{0,9}))((\\.[0-9]{1,2})?))$");
|
||||||
|
if (!value) {//没有值,直接callback,不校验
|
||||||
|
return callback()
|
||||||
|
} else {
|
||||||
|
if (!reg.test(value)) {
|
||||||
|
return callback(new Error("请输入正确的合同额"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback()
|
||||||
|
}
|
||||||
|
let validateFinancial = (rule, value, callback) => {//定义财务编码只能输入数字
|
||||||
|
var reg = new RegExp("^\\d+$|^\\d+[.]?\\d+$");
|
||||||
|
if (!value) {//没有值,直接callback,不校验
|
||||||
|
return callback()
|
||||||
|
} else {
|
||||||
|
if (!reg.test(value)) {
|
||||||
|
return callback(new Error("请输入正确的财务编码"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback()
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
formLabelWidth: '120px',
|
||||||
|
|
||||||
|
currentProjectSubClasses: [],
|
||||||
|
|
||||||
|
ruleForm: {
|
||||||
|
projectName: '', //项目名称
|
||||||
|
projectAbbreviation: '',//英文简称
|
||||||
|
projectClassId: '',//项目主类
|
||||||
|
projectSubclassId: '',//项目子类
|
||||||
|
projectImportance: '',//重要程度
|
||||||
|
|
||||||
|
contractAmount: '',//合同额
|
||||||
|
expectedCompletion: '',//预期完成度
|
||||||
|
projectManMonth: '',//计划总人月
|
||||||
|
projectStartDate: '',//项目启动日期
|
||||||
|
|
||||||
|
projectOnlineDate: '',//计划上线日期
|
||||||
|
projectFirstTestDate: '',//计划初验日期
|
||||||
|
projectFinalTestDate: '',//计划终验日期
|
||||||
|
projectEndDate: '',//计划结项日期
|
||||||
|
|
||||||
|
financialCode: '',//财务编码
|
||||||
|
projectDepartment: '',//所属部门
|
||||||
|
projectArea: '',//所属区域
|
||||||
|
projectCompany: '',//所属公司
|
||||||
|
|
||||||
|
projectDescription: '',//项目描述
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
projectName: [//项目名称
|
||||||
|
{required: true, message: '请输入项目名称', trigger: 'blur'}
|
||||||
|
],
|
||||||
|
projectAbbreviation: [//英文简称
|
||||||
|
{validator: validateAbbreviation}
|
||||||
|
//只能输入英文
|
||||||
|
],
|
||||||
|
projectClassId: [//项目主类
|
||||||
|
{required: true, message: '请选择项目主类', trigger: 'change'},
|
||||||
|
],
|
||||||
|
projectSubclassId: [//项目子类
|
||||||
|
{required: true, message: '请选择项目子类', trigger: 'change'},
|
||||||
|
],
|
||||||
|
projectImportance: [//重要程度
|
||||||
|
{required: true, message: '请选择重要程度', trigger: 'change'},
|
||||||
|
],
|
||||||
|
contractAmount: [//合同额
|
||||||
|
{validator: validateAmount}//
|
||||||
|
//大于等于0
|
||||||
|
],
|
||||||
|
expectedCompletion: [//预期完成度
|
||||||
|
{required: true, message: '请输入预期完成度', trigger: 'blur'},
|
||||||
|
{
|
||||||
|
validator: function (rule, value, callback) {
|
||||||
|
//校验完成度为0-100
|
||||||
|
if (!/(^[1-9]\d$)|(^\d$)|(^100$)/.test(value)) {
|
||||||
|
callback(new Error("请输入正确的完成度"));
|
||||||
|
} else {
|
||||||
|
//校验通过
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}, trigger: 'blur'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
projectManMonth: [//计划总人月
|
||||||
|
{required: true, message: '请输入计划总人月', trigger: 'blur'},
|
||||||
|
{
|
||||||
|
validator: function (rule, value, callback) {
|
||||||
|
//校验总人月>0(正整数)
|
||||||
|
if (!/^[1-9]*[1-9][0-9]*$/.test(value)) {
|
||||||
|
callback(new Error("请输入正确的人月数"));
|
||||||
|
} else {
|
||||||
|
//校验通过
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}, trigger: 'blur'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
projectStartDate: [//项目启动日期
|
||||||
|
{type: 'date', required: true, message: '请选择计划总人月', trigger: 'change'},
|
||||||
|
],
|
||||||
|
projectOnlineDate: [//计划上线日期
|
||||||
|
{type: 'date', required: true, message: '请选择计划上线日期', trigger: 'change'},
|
||||||
|
],
|
||||||
|
projectFirstTestDate: [//计划初验日期
|
||||||
|
{type: 'date', required: true, message: '请选择计划初验日期', trigger: 'change'},
|
||||||
|
],
|
||||||
|
projectFinalTestDate: [//计划终验日期
|
||||||
|
{type: 'date', required: true, message: '请选择计划终验日期', trigger: 'change'},
|
||||||
|
],
|
||||||
|
projectEndDate: [//计划结项日期
|
||||||
|
{type: 'date', required: true, message: '请选择计划结项日期', trigger: 'change'},
|
||||||
|
],
|
||||||
|
financialCode: [//财务编码
|
||||||
|
{validator: validateFinancial}
|
||||||
|
//只能输入数字
|
||||||
|
],
|
||||||
|
projectDepartment: [//所属部门
|
||||||
|
{required: true, message: '请输入所属部门', trigger: 'blur'},
|
||||||
|
],
|
||||||
|
projectArea: [//所属区域
|
||||||
|
{required: true, message: '请输入所属区域', trigger: 'blur'},
|
||||||
|
],
|
||||||
|
projectCompany: [//所属公司
|
||||||
|
{required: true, message: '请输入所属公司', trigger: 'blur'},
|
||||||
|
],
|
||||||
|
projectDescription: [//项目描述
|
||||||
|
//未想到
|
||||||
|
],
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
dialogFormVisible: Boolean,
|
||||||
|
projectClasses: Array,
|
||||||
|
projectSubClasses: Array,
|
||||||
|
projectInfo: {
|
||||||
|
projectName: '', //项目名称
|
||||||
|
projectAbbreviation: '',//英文简称
|
||||||
|
projectClassId: '',//项目主类
|
||||||
|
projectSubclassId: '',//项目子类
|
||||||
|
projectImportance: '',//重要程度
|
||||||
|
|
||||||
|
contractAmount: '',//合同额
|
||||||
|
expectedCompletion: '',//预期完成度
|
||||||
|
projectManMonth: '',//计划总人月
|
||||||
|
projectStartDate: '',//项目启动日期
|
||||||
|
|
||||||
|
projectOnlineDate: '',//计划上线日期
|
||||||
|
projectFirstTestDate: '',//计划初验日期
|
||||||
|
projectFinalTestDate: '',//计划终验日期
|
||||||
|
projectEndDate: '',//计划结项日期
|
||||||
|
|
||||||
|
financialCode: '',//财务编码
|
||||||
|
projectDepartment: '',//所属部门
|
||||||
|
projectArea: '',//所属区域
|
||||||
|
projectCompany: '',//所属公司
|
||||||
|
|
||||||
|
projectDescription: '',//项目描述
|
||||||
|
},
|
||||||
|
},
|
||||||
|
emits: ['edited'],
|
||||||
|
watch: {
|
||||||
|
projectInfo: function (val) {
|
||||||
|
this.ruleForm = val // 接收父组件的值
|
||||||
|
|
||||||
|
this.currentProjectSubClasses = []
|
||||||
|
for (const record of this.projectSubClasses) {
|
||||||
|
if (record.classFatherId === val.projectClassId)
|
||||||
|
this.currentProjectSubClasses.push(record)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onProjectClassChange(val) {
|
||||||
|
this.ruleForm.projectSubclassId = ''
|
||||||
|
this.currentProjectSubClasses = []
|
||||||
|
for (const record of this.projectSubClasses) {
|
||||||
|
if (record.classFatherId === val)
|
||||||
|
this.currentProjectSubClasses.push(record)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//提交方法
|
||||||
|
submitForm(formName) {
|
||||||
|
const that = this
|
||||||
|
//this.$emit("created");
|
||||||
|
//对表单进行提交验证
|
||||||
|
this.$refs[formName].validate((valid) => {
|
||||||
|
|
||||||
|
if (valid) {
|
||||||
|
console.log('submit')
|
||||||
|
let { ...form} = this.ruleForm
|
||||||
|
form.projectFinalTestDate = form.projectFinalTestDate.getTime() / 1000
|
||||||
|
form.projectEndDate = form.projectEndDate.getTime() / 1000
|
||||||
|
form.projectFirstTestDate = form.projectFirstTestDate.getTime() / 1000
|
||||||
|
form.projectOnlineDate = form.projectOnlineDate.getTime() / 1000
|
||||||
|
form.projectStartDate = form.projectStartDate.getTime() / 1000
|
||||||
|
request({
|
||||||
|
url: `project/${this.$route.params.projectId}`,
|
||||||
|
method: 'put',
|
||||||
|
data: form
|
||||||
|
}).then(response => {
|
||||||
|
//console.log(response)
|
||||||
|
if (response.data.code === 200) {
|
||||||
|
//console.log(response.data.data.records)
|
||||||
|
//that.dialogFormVisible = false
|
||||||
|
that.$emit("edited");
|
||||||
|
ElMessage({
|
||||||
|
message: '修改成功',
|
||||||
|
type: 'success',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}).catch(function (error) {
|
||||||
|
console.log(error)
|
||||||
|
})
|
||||||
|
|
||||||
|
} else {
|
||||||
|
console.log('error submit!!')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//重置方法
|
||||||
|
resetForm(formName) {
|
||||||
|
this.$refs[formName].resetFields()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -1,7 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<div style="width: 100%;height: 100%;display: flex;flex-direction: column;align-items: stretch">
|
<div style="width: 100%;height: 100%;display: flex;flex-direction: column;align-items: stretch">
|
||||||
|
|
||||||
<p style="margin-left: 40px;font-family: 'Segoe UI',sans-serif;font-size: 20px;font-weight: bold;color: #606266">已结项项目</p>
|
<p style="margin-left: 40px;font-family: 'Segoe UI',sans-serif;font-size: 20px;font-weight: bold;color: #606266">
|
||||||
|
已结项项目</p>
|
||||||
|
|
||||||
<div style="flex: 1; margin: 30px 30px 10px 30px; background-color: white; border-radius: 10px;padding: 20px;
|
<div style="flex: 1; margin: 30px 30px 10px 30px; background-color: white; border-radius: 10px;padding: 20px;
|
||||||
display: flex;flex-direction: column;justify-content: space-between">
|
display: flex;flex-direction: column;justify-content: space-between">
|
||||||
|
@ -11,27 +12,32 @@
|
||||||
class="projectTable"
|
class="projectTable"
|
||||||
:height="tableHeight"
|
:height="tableHeight"
|
||||||
@sort-change="onSortChange"
|
@sort-change="onSortChange"
|
||||||
|
@row-click="onRowClick"
|
||||||
:data="tableData">
|
:data="tableData">
|
||||||
<el-table-column prop="projectName" label="项目名称" min-width="15%" sortable="custom"/>
|
<el-table-column prop="projectName" label="项目名称" min-width="15%" sortable="custom"/>
|
||||||
<el-table-column prop="contractAmount" label="合同额" min-width="10%" :formatter="priceFormatter" sortable="custom"/>
|
<el-table-column prop="contractAmount" label="合同额" min-width="10%" :formatter="priceFormatter"
|
||||||
|
sortable="custom"/>
|
||||||
<el-table-column prop="projectImportance" label="重要程度" min-width="10%" sortable="custom"/>
|
<el-table-column prop="projectImportance" label="重要程度" min-width="10%" sortable="custom"/>
|
||||||
<el-table-column prop="projectClassName" label="项目分类" min-width="10%"/>
|
<el-table-column prop="projectClassName" label="项目分类" min-width="10%"/>
|
||||||
<el-table-column prop="projectSubclassName" label="项目类型" min-width="10%"/>
|
<el-table-column prop="projectSubclassName" label="项目类型" min-width="10%"/>
|
||||||
<el-table-column label="项目进度" min-width="35%" >
|
<el-table-column label="项目进度" min-width="35%">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-progress :text-inside="true" :stroke-width="18"
|
<el-progress
|
||||||
|
:class="scope.row.completeNum===0 ? 'blackTextProgress' : ''"
|
||||||
|
:text-inside="true" :stroke-width="18"
|
||||||
:status="(scope.row.totalNum!==0&&scope.row.completeNum===scope.row.totalNum) ? 'success' : ''"
|
:status="(scope.row.totalNum!==0&&scope.row.completeNum===scope.row.totalNum) ? 'success' : ''"
|
||||||
:percentage="scope.row.totalNum===0?0:Math.round(scope.row.completeNum*100/scope.row.totalNum)"></el-progress>
|
:percentage="scope.row.totalNum===0?0:Math.round(scope.row.completeNum*100/scope.row.totalNum)"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="projectClosedDate" label="结项日期" min-width="10%" align="right" :formatter="dateFormatter"/>
|
<el-table-column prop="projectClosedDate" label="结项日期" min-width="10%" align="right"
|
||||||
|
:formatter="dateFormatter"/>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<!-- 分页 -->
|
<!-- 分页 -->
|
||||||
<el-pagination
|
<el-pagination
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
@size-change="handleSizeChange"
|
@size-change="handleSizeChange"
|
||||||
v-model:currentPage ="currentPage"
|
v-model:currentPage="currentPage"
|
||||||
:page-sizes="[5, 10, 15, 20]"
|
:page-sizes="[5, 10, 15, 20]"
|
||||||
v-model:page-size="pageSize"
|
v-model:page-size="pageSize"
|
||||||
layout="total, sizes, prev, pager, next, jumper"
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
@ -44,14 +50,14 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
// table元素
|
// table元素
|
||||||
import {getCurrentInstance, onMounted, ref, watch } from "vue";
|
import {getCurrentInstance, onMounted, ref, watch} from "vue";
|
||||||
import { useRouter } from 'vue-router'
|
import {useRouter} from 'vue-router'
|
||||||
import request from "../utils/request";
|
import request from "../utils/request";
|
||||||
|
|
||||||
const tableRef = ref(null);
|
const tableRef = ref(null);
|
||||||
// table高度
|
// table高度
|
||||||
const tableHeight = ref();
|
const tableHeight = ref();
|
||||||
const { proxy, ctx } = getCurrentInstance()
|
const {proxy, ctx} = getCurrentInstance()
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 设置表格初始高度为innerHeight-offsetTop-表格底部与浏览器底部距离110
|
// 设置表格初始高度为innerHeight-offsetTop-表格底部与浏览器底部距离110
|
||||||
tableHeight.value = window.innerHeight - tableRef.value.$el.offsetTop - 110;
|
tableHeight.value = window.innerHeight - tableRef.value.$el.offsetTop - 110;
|
||||||
|
@ -91,7 +97,7 @@ const getClosedProjects = () => {
|
||||||
console.log(error)
|
console.log(error)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const onSortChange = ( val) => {
|
const onSortChange = (val) => {
|
||||||
console.log(val)
|
console.log(val)
|
||||||
const that = this;
|
const that = this;
|
||||||
request({
|
request({
|
||||||
|
@ -100,8 +106,8 @@ const onSortChange = ( val) => {
|
||||||
params: {
|
params: {
|
||||||
pageCurrent: currentPage.value,
|
pageCurrent: currentPage.value,
|
||||||
pageSize: pageSize.value,
|
pageSize: pageSize.value,
|
||||||
sortBy: val.order?val.prop:'projectClosedDate',
|
sortBy: val.order ? val.prop : 'projectClosedDate',
|
||||||
asc: val.order==='ascending',
|
asc: val.order === 'ascending',
|
||||||
paramMap: {
|
paramMap: {
|
||||||
completed: true
|
completed: true
|
||||||
}
|
}
|
||||||
|
@ -149,29 +155,34 @@ import router from "../router";
|
||||||
export default {
|
export default {
|
||||||
name: "ClosedProject",
|
name: "ClosedProject",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
|
||||||
|
onRowClick(row, column, event) {
|
||||||
|
router.push({path: '/project/' + row.projectId})
|
||||||
|
},
|
||||||
priceFormatter(row, column) {
|
priceFormatter(row, column) {
|
||||||
return row[column.property]/10000 + '万';
|
return row[column.property] / 10000 + '万';
|
||||||
},
|
},
|
||||||
dateFormatter(row, column) {
|
dateFormatter(row, column) {
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
const date = row[column.property];
|
const date = row[column.property];
|
||||||
if (date === undefined || date===null) {
|
if (date === undefined || date === null) {
|
||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
return moment(date*1000).format("yyyy-MM-DD")
|
return moment(date * 1000).format("yyyy-MM-DD")
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.blackTextProgress >>> .el-progress-bar__innerText {
|
||||||
|
color: var(--el-table-text-color);
|
||||||
|
}
|
||||||
|
|
||||||
.projectTable {
|
.projectTable {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<p>{{ projectCreatorName }}</p>
|
<p>{{ projectCreatorName }}</p>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row >
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<p class="p-subtitle">开始时间</p>
|
<p class="p-subtitle">开始时间</p>
|
||||||
<p>{{ formatDate(project.projectCreatedTime) }}</p>
|
<p>{{ formatDate(project.projectCreatedTime) }}</p>
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
<p class="p-subtitle">进度</p>
|
<p class="p-subtitle">进度</p>
|
||||||
<el-progress
|
<el-progress
|
||||||
:status="(totalNum!==0&&completeNum===totalNum) ? 'success' : ''"
|
:status="(totalNum!==0&&completeNum===totalNum) ? 'success' : ''"
|
||||||
:percentage="totalNum===0?0:Math.round(completeNum*100/totalNum)" />
|
:percentage="totalNum===0?0:Math.round(completeNum*100/totalNum)"/>
|
||||||
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
@ -53,13 +53,17 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: 400px;margin: 0 30px 30px 30px;
|
<div style="margin: 0 30px 30px 30px;
|
||||||
display: flex;flex-direction: row;justify-content: space-between">
|
display: flex;flex-direction: row;justify-content: space-between;align-items: stretch">
|
||||||
<div style="width: 60%; height: 100%;display: flex;flex-direction: column">
|
<div style="width: 60%; height: 100%;display: flex;flex-direction: column">
|
||||||
<p class="p-title" style="margin-left: 10px">详细信息</p>
|
<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>
|
||||||
|
</div>
|
||||||
<div style="flex:1;margin-top: 30px;padding: 20px;
|
<div style="flex:1;margin-top: 30px;padding: 20px;
|
||||||
display: flex;flex-direction: column; justify-content: space-between;background-color: white; border-radius: 10px; ">
|
display: flex;flex-direction: column; justify-content: space-between;background-color: white; border-radius: 10px; ">
|
||||||
<el-row>
|
<el-row class="row-info">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<p class="p-subtitle">英文简称</p>
|
<p class="p-subtitle">英文简称</p>
|
||||||
<p>{{ project.projectAbbreviation }}</p>
|
<p>{{ project.projectAbbreviation }}</p>
|
||||||
|
@ -77,14 +81,14 @@
|
||||||
<p>{{ project.projectImportance }}</p>
|
<p>{{ project.projectImportance }}</p>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row >
|
<el-row class="row-info">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<p class="p-subtitle">合同额</p>
|
<p class="p-subtitle">合同额</p>
|
||||||
<p>{{ Math.round(project.contractAmount/10000)+'万' }}</p>
|
<p>{{ Math.round(project.contractAmount / 10000) + '万' }}</p>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<p class="p-subtitle">预计完成度</p>
|
<p class="p-subtitle">预计完成度</p>
|
||||||
<p>{{ project.expectedCompletion+'%' }}</p>
|
<p>{{ project.expectedCompletion + '%' }}</p>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<p class="p-subtitle">计划总人月</p>
|
<p class="p-subtitle">计划总人月</p>
|
||||||
|
@ -96,7 +100,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row >
|
<el-row class="row-info">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<p class="p-subtitle">计划上线日期</p>
|
<p class="p-subtitle">计划上线日期</p>
|
||||||
<p>{{ formatDate(project.projectOnlineDate) }}</p>
|
<p>{{ formatDate(project.projectOnlineDate) }}</p>
|
||||||
|
@ -114,7 +118,7 @@
|
||||||
<p>{{ formatDate(project.projectEndDate) }}</p>
|
<p>{{ formatDate(project.projectEndDate) }}</p>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row >
|
<el-row class="row-info">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<p class="p-subtitle">财务编码</p>
|
<p class="p-subtitle">财务编码</p>
|
||||||
<p>{{ project.financialCode }}</p>
|
<p>{{ project.financialCode }}</p>
|
||||||
|
@ -132,11 +136,18 @@
|
||||||
<p>{{ project.projectCompany }}</p>
|
<p>{{ project.projectCompany }}</p>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<p class="p-subtitle">项目描述</p>
|
||||||
|
<p>{{ project.projectDescription }}</p>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div style="flex: 1;margin-left: 30px;height: 100%;display: flex;flex-direction: column">
|
<div style="flex: 1;margin-left: 30px;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;
|
<div style="flex:1;margin-top: 30px;padding: 20px;
|
||||||
display: flex;flex-direction: column; justify-content: space-between;background-color: white; border-radius: 10px;">
|
display: flex;flex-direction: column; justify-content: space-between;background-color: white; border-radius: 10px;">
|
||||||
<p>{{ project.projectDescription }}</p>
|
<p>{{ project.projectDescription }}</p>
|
||||||
|
@ -146,20 +157,27 @@
|
||||||
|
|
||||||
|
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
|
<EditProjectDialog
|
||||||
|
:dialogFormVisible="editProjectDialogVisible" :projectClasses="projectClasses"
|
||||||
|
:projectSubClasses="projectSubClasses"
|
||||||
|
:projectInfo="editProjectInfo"
|
||||||
|
@edited="onEdited"/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
import {ref} from 'vue'
|
import {ref} from 'vue'
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<script>
|
<script>
|
||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
|
import EditProjectDialog from "../components/EditProjectDialog";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ProjectInfo",
|
name: "ProjectInfo",
|
||||||
components: {},
|
components: {EditProjectDialog},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
project: {
|
project: {
|
||||||
|
@ -190,7 +208,10 @@ export default {
|
||||||
projectClasses: [],
|
projectClasses: [],
|
||||||
projectSubClasses: [],
|
projectSubClasses: [],
|
||||||
|
|
||||||
viewHeight: 0
|
viewHeight: 0,
|
||||||
|
|
||||||
|
editProjectDialogVisible: false,
|
||||||
|
editProjectInfo: {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
|
@ -221,14 +242,18 @@ export default {
|
||||||
return ' '
|
return ' '
|
||||||
},
|
},
|
||||||
projectSubClassName() {
|
projectSubClassName() {
|
||||||
|
console.log(this.project.projectSubclassId)
|
||||||
if (this.project.projectSubclassId) {
|
if (this.project.projectSubclassId) {
|
||||||
const that = this
|
const that = this
|
||||||
const projectSubClass = this.projectSubClasses.find(function (item, index, arr) {
|
const projectSubClass = this.projectSubClasses.find(function (item, index, arr) {
|
||||||
return item.projectClassId === that.project.projectSubclassId;
|
return item.projectClassId === that.project.projectSubclassId;
|
||||||
})
|
})
|
||||||
if (projectSubClass)
|
if (projectSubClass) {
|
||||||
|
|
||||||
return projectSubClass.projectClassName
|
return projectSubClass.projectClassName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
return ' '
|
return ' '
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -255,7 +280,22 @@ export default {
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
onEditProjectClick() {
|
||||||
|
let {...copy} = this.project
|
||||||
|
copy.projectStartDate = new Date(this.project.projectStartDate*1000)
|
||||||
|
copy.projectOnlineDate = new Date(this.project.projectOnlineDate*1000)
|
||||||
|
copy.projectFirstTestDate = new Date(this.project.projectFirstTestDate*1000)
|
||||||
|
copy.projectFinalTestDate = new Date(this.project.projectFinalTestDate*1000)
|
||||||
|
copy.projectEndDate = new Date(this.project.projectEndDate*1000)
|
||||||
|
|
||||||
|
this.editProjectInfo = copy
|
||||||
|
//this.getProjectClass()
|
||||||
|
this.editProjectDialogVisible = true
|
||||||
|
},
|
||||||
|
onEdited() {
|
||||||
|
this.editProjectDialogVisible = false
|
||||||
|
this.getProjectInfo()
|
||||||
|
},
|
||||||
formatDate(date) {
|
formatDate(date) {
|
||||||
if (date)
|
if (date)
|
||||||
return moment(date * 1000).format("yyyy年MM月DD日")
|
return moment(date * 1000).format("yyyy年MM月DD日")
|
||||||
|
@ -316,6 +356,10 @@ export default {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.row-info {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
p.p-subtitle {
|
p.p-subtitle {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
|
Loading…
Reference in New Issue