Commit 34af010a authored by wangxl's avatar wangxl
parents 16241271 52a85e8b
...@@ -485,6 +485,12 @@ export default { ...@@ -485,6 +485,12 @@ export default {
save (params) { save (params) {
return fetch(`/v1/science-admin/com-talent-apply/save`, params, 'post', 'json') return fetch(`/v1/science-admin/com-talent-apply/save`, params, 'post', 'json')
}, },
delete (params) {
return fetch(`/v1/science-admin/com-talent-apply/delete/${params.id}`, params, 'delete', 'json')
},
report (params) {
return fetch(`/v1/science-admin/com-talent-apply/report`, params, 'post', 'json')
},
}, },
task: { task: {
getListByPage (params) { getListByPage (params) {
...@@ -791,6 +797,9 @@ export default { ...@@ -791,6 +797,9 @@ export default {
save (params) { save (params) {
return fetch(`/v1/science-admin/system-set/save`, params, 'post', 'json') return fetch(`/v1/science-admin/system-set/save`, params, 'post', 'json')
}, },
getTalentTraningInfo (params) {
return fetch(`/v1/science-admin/system-set/getTalentTraningInfo`, params)
},
}, },
parameter: { parameter: {
getListByPage (params) { getListByPage (params) {
......
...@@ -30,15 +30,18 @@ ...@@ -30,15 +30,18 @@
<template slot="option" slot-scope="record"> <template slot="option" slot-scope="record">
<a-button type="link" size="small" @click="recordClick(record,'view')">查看</a-button> <a-button type="link" size="small" @click="recordClick(record,'view')">查看</a-button>
<a-button type="link" size="small" @click="recordClick(record,'edit')">修改</a-button> <a-button type="link" size="small" @click="recordClick(record,'edit')">修改</a-button>
<a-button type="link" size="small" @click="recordClick(record,'reset')">重置密码</a-button> <a-popconfirm title="确定要上报吗?" v-if="((record.talentState == 10 || record.talentState == 30))" ok-text="确定" cancel-text="取消" @confirm="recordClick(record,'report')">
<a-button type="link" size="small">上报</a-button>
</a-popconfirm>
<a-button type="link" size="small" v-if="record.talentState <= 10" @click="recordClick(record,'delete')">删除</a-button>
</template> </template>
</a-table> </a-table>
<a-pagination v-if="pagination.total > 0" :total="pagination.total" show-size-changer show-quick-jumper v-model="pagination.pageIndex" :page-size="pagination.pageSize" :page-size-options="pagination.pageSizeOptions" @showSizeChange="showSizeChange" @change="change" :showTotal="() => `共 ${pagination.total} 条`" /> <a-pagination v-if="pagination.total > 0" :total="pagination.total" show-size-changer show-quick-jumper v-model="pagination.pageIndex" :page-size="pagination.pageSize" :page-size-options="pagination.pageSizeOptions" @showSizeChange="showSizeChange" @change="change" :showTotal="() => `共 ${pagination.total} 条`" />
<a-modal v-model="visibleEdit" v-if="visibleEdit" title="人才申报创建/修改" width="94%" :footer="null" :dialog-style="{ top: '8%' }" destroyOnClose :maskClosable="false"> <a-modal v-model="visibleEdit" v-if="visibleEdit" title="人才申报创建/修改" width="94%" :footer="null" :dialog-style="{ top: '8%' }" destroyOnClose :maskClosable="false">
<talent-create v-model="id" @close="closeWindow"></talent-create> <talent-create v-model="id" @close="closeWindow"></talent-create>
</a-modal> </a-modal>
<a-modal v-model="visibleView" title="查看" width="700px" :footer="null" destroyOnClose> <a-modal v-model="visibleView" title="查看" width="94%" :footer="null" :dialog-style="{ top: '8%' }" destroyOnClose :maskClosable="false">
<talent-info v-model="id"></talent-info> <talent-view v-model="id" @close="closeWindow"></talent-view>
</a-modal> </a-modal>
</div> </div>
</template> </template>
...@@ -46,12 +49,12 @@ ...@@ -46,12 +49,12 @@
<script> <script>
import { isEmptyParams, filterExportExcelData, tableColumnsName } from "@/views/utils/common" import { isEmptyParams, filterExportExcelData, tableColumnsName } from "@/views/utils/common"
import talentCreate from "@/views/report/talent/components/talentCreate" import talentCreate from "@/views/report/talent/components/talentCreate"
import talentInfo from "@/views/report/talent/components/talentInfo" import talentView from "@/views/report/talent/components/talentView"
export default { export default {
name: "reportTalent", name: "reportTalent",
components: { components: {
talentCreate, talentInfo talentCreate, talentView
}, },
data() { data() {
return { return {
...@@ -75,7 +78,7 @@ export default { ...@@ -75,7 +78,7 @@ export default {
{ title: '专业', dataIndex: 'specName', align: 'center' }, { title: '专业', dataIndex: 'specName', align: 'center' },
{ title: '职称', dataIndex: 'titleName', align: 'center' }, { title: '职称', dataIndex: 'titleName', align: 'center' },
{ title: '申报年度', dataIndex: 'reportYear', align: 'center' }, { title: '申报年度', dataIndex: 'reportYear', align: 'center' },
{ title: '状态', scopedSlots: { customRender: 'state' }, align: 'center' }, { title: '状态', dataIndex: 'talentStateName', align: 'center' },
{ title: '操作', scopedSlots: { customRender: 'option' }, align: 'center', fixed: 'right', width: 180, }, { title: '操作', scopedSlots: { customRender: 'option' }, align: 'center', fixed: 'right', width: 180, },
], ],
pagination: { pagination: {
...@@ -177,7 +180,36 @@ export default { ...@@ -177,7 +180,36 @@ export default {
this.id = record.id this.id = record.id
this.visibleEdit = true this.visibleEdit = true
} else if (type === 'delete') { } else if (type === 'delete') {
let self = this
this.$confirm({
title: '',
content: '确定要删除该人才申报记录?',
okText: '确定',
okType: 'danger',
cancelText: '取消',
onOk () {
self.loading = true
let par = { id: record.id }
self.$api.talent.delete(par).then(({ code, data }) => {
if (data) {
self.$message.success('删除成功!')
self.getListByPage()
}
self.loading = false
}).catch(() => { self.loading = false })
},
onCancel () {
},
})
} else if (type === 'report') {
this.loading = true
this.$api.talent.report({ auditObjectId: record.id, auditType: 6 }).then(({ data = {} }) => {
if (data) {
this.$message.success('上报成功!')
this.getListByPage()
}
this.loading = false
}).catch(() => { this.loading = false })
} }
}, },
exportData() { exportData() {
......
<template>
<div>
<div v-if="budgetCategory">
<budget-five-edit ref="talentBudgetA" :budgetList.sync="budgetList"></budget-five-edit>
</div>
<div v-else>
<budget-three-edit ref="talentBudgetB" :budgetList.sync="budgetList"></budget-three-edit>
</div>
</div>
</template>
<script>
import budgetFiveEdit from '@/views/report/talent/components/budgetFiveEdit'
import budgetThreeEdit from '@/views/report/talent/components/budgetThreeEdit'
export default {
name: "budgetEdit",
props: {
budgetList: {
type: Array,
default: () => {
return [{ ...Budget }];
},
},
budgetType: {
type: Object,
default: () => {
return null
}
}
},
components: {
budgetFiveEdit, budgetThreeEdit,
},
data() {
return {
budgetCategory: null,
}
},
created() {
if (!this.budgetType) {
if (this.budgetType.type === 'HTTalent') {
this.budgetCategory = true
} else {
this.budgetCategory = false
}
}
},
methods: {
getTotalFee() {
if (this.budgetType.type === 'HTTalent') {
return this.$refs.talentBudgetA ? this.$refs.talentBudgetA.getTotalFee() : 0
} else {
return this.$refs.talentBudgetB ? this.$refs.talentBudgetB.getTotalFee() : 0
}
}
}
}
</script>
<template>
<div>
<a-row type="flex" class="row_center">
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div class="required">申请资助的预算支出科目</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第一年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第二年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第三年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第四年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第五年</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">费用</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>操作</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in budgetList" :key="index" type="flex" class="row_center">
<a-col :span="5" style="text-align: left;" >
<div class="special-middle" v-if="item.isRequired">{{ item.budgetName }}</div>
<div class="special-middle" v-else>
<a-form-model-item :prop="'budgetList.' + index + '.budgetName'" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.budgetName" :maxLength="50" style="width:85%" />
</a-form-model-item>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue1.includes(index)" :prop="'budgetList.' + index + '.yearValue1'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue1" @change="YearValue1Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue1).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue2.includes(index)" :prop="'budgetList.' + index + '.yearValue2'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue2" @change="YearValue2Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue2).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue3.includes(index)" :prop="'budgetList.' + index + '.yearValue3'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue3" @change="YearValue3Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue3).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue4.includes(index)" :prop="'budgetList.' + index + '.yearValue4'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue4" @change="YearValue4Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue4).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue5.includes(index)" :prop="'budgetList.' + index + '.yearValue5'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue5" @change="YearValue5Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue5).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="2">
<div class="special-middle">
<div>{{ parseFloat(item.amountFee).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="2">
<div class="special-middle" v-if="!item.isRequired">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteBudgetArray(item)">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div>合计</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue1).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue2).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue3).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue4).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue5).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalFee).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div></div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="24" style="text-align: center">
<div class="special-middle">
<a-button type="dashed" style="width: 20%" @click="addBudgetArray()">
<a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span>
</a-button>
</div>
</a-col>
</a-row>
</div>
</template>
<script>
const Budget = { id: null, talentId: null, budgetId: "00000000-0000-0000-0000-000000000000", yearValue1: 0.00, yearValue2: 0.00, yearValue3: 0.00, yearValue4: 0.00, yearValue5: 0.00, amountFee: 0.00, showIndex: null, isRequired: false }
export default {
name: "budgetFiveEdit",
props: {
budgetList: {
type: Array,
default: () => {
return [{ ...Budget }];
},
}
},
data() {
return {
totalYearValue1: 0.00,
totalYearValue2: 0.00,
totalYearValue3: 0.00,
totalYearValue4: 0.00,
totalYearValue5: 0.00,
totalFee: 0.00,
invisibleYearValue1: [ 2, 8 ],
invisibleYearValue2: [ 2, 8 ],
invisibleYearValue3: [ 2, 8 ],
invisibleYearValue4: [ 2, 8 ],
invisibleYearValue5: [ 2, 8 ],
}
},
created() {
this.calTotalFee()
},
methods: {
FeeChange (index) {
if (index == 0)
this.educationFee()
else if (index == 1)
this.scienceFee()
else if (index > 2 && index < 8)
this.researchFee(index)
else if (this.budgetList.length > 8)
this.otherFee(index)
this.calTotalFee()
},
YearValue1Change (index) {
this.FeeChange(index)
},
YearValue2Change (index) {
this.FeeChange(index)
},
YearValue3Change (index) {
this.FeeChange(index)
},
YearValue4Change (index) {
this.FeeChange(index)
},
YearValue5Change (index) {
this.FeeChange(index)
},
calTotalFee() {
this.totalYearValue1 = this.budgetList[0].yearValue1 + this.budgetList[1].yearValue1 + this.budgetList[2].yearValue1 + this.budgetList[8].yearValue1
this.totalYearValue2 = this.budgetList[0].yearValue2 + this.budgetList[1].yearValue2 + this.budgetList[2].yearValue2 + this.budgetList[8].yearValue2
this.totalYearValue3 = this.budgetList[0].yearValue3 + this.budgetList[1].yearValue3 + this.budgetList[2].yearValue3 + this.budgetList[8].yearValue3
this.totalYearValue4 = this.budgetList[0].yearValue4 + this.budgetList[1].yearValue4 + this.budgetList[2].yearValue4 + this.budgetList[8].yearValue4
this.totalYearValue5 = this.budgetList[0].yearValue5 + this.budgetList[1].yearValue5 + this.budgetList[2].yearValue5 + this.budgetList[8].yearValue5
this.totalFee = this.totalYearValue1 + this.totalYearValue2 + this.totalYearValue3 + this.totalYearValue4 + this.totalYearValue5
},
//一、国内外进修费用
educationFee () {
this.budgetList[0].amountFee = this.budgetList[0].yearValue1 + this.budgetList[0].yearValue2 + this.budgetList[0].yearValue3 + this.budgetList[0].yearValue4 + this.budgetList[0].yearValue5
},
//二、学术交流费用
scienceFee () {
this.budgetList[1].amountFee = this.budgetList[1].yearValue1 + this.budgetList[1].yearValue2 + this.budgetList[1].yearValue3 + this.budgetList[1].yearValue4 + this.budgetList[1].yearValue5
},
//三、研究费用
researchFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3 + this.budgetList[index].yearValue4 + this.budgetList[index].yearValue5
this.budgetList[2].yearValue1 = 0.00
this.budgetList[2].yearValue2 = 0.00
this.budgetList[2].yearValue3 = 0.00
this.budgetList[2].yearValue4 = 0.00
this.budgetList[2].yearValue5 = 0.00
for (let i = 3; i <= 7; i++) {
this.budgetList[2].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[2].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[2].yearValue3 += this.budgetList[i].yearValue3
this.budgetList[2].yearValue4 += this.budgetList[i].yearValue4
this.budgetList[2].yearValue5 += this.budgetList[i].yearValue5
}
this.budgetList[2].amountFee = this.budgetList[2].yearValue1 + this.budgetList[2].yearValue2 + this.budgetList[2].yearValue3 + this.budgetList[2].yearValue4 + this.budgetList[2].yearValue5
},
//四、其他费用
otherFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3 + this.budgetList[index].yearValue4 + this.budgetList[index].yearValue5
this.budgetList[8].yearValue1 = 0.00
this.budgetList[8].yearValue2 = 0.00
this.budgetList[8].yearValue3 = 0.00
this.budgetList[8].yearValue4 = 0.00
this.budgetList[8].yearValue5 = 0.00
for (let i = 9; i < this.budgetList.length; i++) {
this.budgetList[8].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[8].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[8].yearValue3 += this.budgetList[i].yearValue3
this.budgetList[8].yearValue4 += this.budgetList[i].yearValue4
this.budgetList[8].yearValue5 += this.budgetList[i].yearValue5
}
this.budgetList[8].amountFee = this.budgetList[8].yearValue1 + this.budgetList[8].yearValue2 + this.budgetList[8].yearValue3 + this.budgetList[8].yearValue4 + this.budgetList[8].yearValue5
},
addBudgetArray () {
const newItem = {
...Budget,
showIndex: this.budgetList.length + 1
}
this.budgetList.push(newItem)
},
deleteBudgetArray (item) {
let index = this.budgetList.indexOf(item)
if (index !== -1) {
this.budgetList.splice(index, 1)
}
},
getTotalFee() {
return parseFloat(this.totalFee);
}
}
}
</script>
<template>
<div>
<a-row type="flex" class="row_center">
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div class="required">申请资助的预算支出科目</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第一年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第二年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第三年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第四年</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">第五年</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">费用</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>操作</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in budgetList" :key="index" type="flex" class="row_center">
<a-col :span="5" style="text-align: left;" >
<div class="special-middle">{{ item.budgetName }}</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>{{parseFloat(item.yearValue1).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>{{parseFloat(item.yearValue2).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>{{parseFloat(item.yearValue3).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>{{parseFloat(item.yearValue4).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>{{parseFloat(item.yearValue5).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ parseFloat(item.amountFee).toFixed(2) }}</div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div>合计</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue1).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue2).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue3).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue4).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue5).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalFee).toFixed(2) }}</div>
</div>
</a-col>
</a-row>
</div>
</template>
<script>
const Budget = { id: null, talentId: null, budgetId: "00000000-0000-0000-0000-000000000000", yearValue1: 0.00, yearValue2: 0.00, yearValue3: 0.00, yearValue4: 0.00, yearValue5: 0.00, amountFee: 0.00, showIndex: null, isRequired: false }
export default {
name: "budgetFiveInfo",
props: {
budgetList: {
type: Array,
default: () => {
return [{ ...Budget }];
},
}
},
data() {
return {
totalYearValue1: 0.00,
totalYearValue2: 0.00,
totalYearValue3: 0.00,
totalYearValue4: 0.00,
totalYearValue5: 0.00,
totalFee: 0.00,
invisibleYearValue1: [ 2, 8 ],
invisibleYearValue2: [ 2, 8 ],
invisibleYearValue3: [ 2, 8 ],
invisibleYearValue4: [ 2, 8 ],
invisibleYearValue5: [ 2, 8 ],
}
},
created() {
//this.calTotalFee()
},
methods: {
FeeChange (index) {
if (index == 0)
this.educationFee()
else if (index == 1)
this.scienceFee()
else if (index > 2 && index < 8)
this.researchFee(index)
else if (this.budgetList.length > 8)
this.otherFee(index)
this.calTotalFee()
},
YearValue1Change (index) {
this.FeeChange(index)
},
YearValue2Change (index) {
this.FeeChange(index)
},
YearValue3Change (index) {
this.FeeChange(index)
},
YearValue4Change (index) {
this.FeeChange(index)
},
YearValue5Change (index) {
this.FeeChange(index)
},
calTotalFee() {
this.totalYearValue1 = this.budgetList[0].yearValue1 + this.budgetList[1].yearValue1 + this.budgetList[2].yearValue1 + this.budgetList[8].yearValue1
this.totalYearValue2 = this.budgetList[0].yearValue2 + this.budgetList[1].yearValue2 + this.budgetList[2].yearValue2 + this.budgetList[8].yearValue2
this.totalYearValue3 = this.budgetList[0].yearValue3 + this.budgetList[1].yearValue3 + this.budgetList[2].yearValue3 + this.budgetList[8].yearValue3
this.totalYearValue4 = this.budgetList[0].yearValue4 + this.budgetList[1].yearValue4 + this.budgetList[2].yearValue4 + this.budgetList[8].yearValue4
this.totalYearValue5 = this.budgetList[0].yearValue5 + this.budgetList[1].yearValue5 + this.budgetList[2].yearValue5 + this.budgetList[8].yearValue5
this.totalFee = this.totalYearValue1 + this.totalYearValue2 + this.totalYearValue3 + + this.totalYearValue4 + this.totalYearValue5
},
//一、国内外进修费用
educationFee () {
this.budgetList[0].amountFee = this.budgetList[0].yearValue1 + this.budgetList[0].yearValue2 + this.budgetList[0].yearValue3 + this.budgetList[0].yearValue4 + this.budgetList[0].yearValue5
},
//二、学术交流费用
scienceFee () {
this.budgetList[1].amountFee = this.budgetList[1].yearValue1 + this.budgetList[1].yearValue2 + this.budgetList[1].yearValue3 + this.budgetList[1].yearValue4 + this.budgetList[1].yearValue5
},
//三、研究费用
researchFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3 + this.budgetList[index].yearValue4 + this.budgetList[index].yearValue5
this.budgetList[2].yearValue1 = 0.00
this.budgetList[2].yearValue2 = 0.00
this.budgetList[2].yearValue3 = 0.00
this.budgetList[2].yearValue4 = 0.00
this.budgetList[2].yearValue5 = 0.00
for (let i = 3; i <= 7; i++) {
this.budgetList[2].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[2].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[2].yearValue3 += this.budgetList[i].yearValue3
this.budgetList[2].yearValue4 += this.budgetList[i].yearValue4
this.budgetList[2].yearValue5 += this.budgetList[i].yearValue5
}
this.budgetList[2].amountFee = this.budgetList[2].yearValue1 + this.budgetList[2].yearValue2 + this.budgetList[2].yearValue3 + this.budgetList[2].yearValue4 + this.budgetList[2].yearValue5
},
//四、其他费用
otherFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3 + this.budgetList[index].yearValue4 + this.budgetList[index].yearValue5
this.budgetList[8].yearValue1 = 0.00
this.budgetList[8].yearValue2 = 0.00
this.budgetList[8].yearValue3 = 0.00
this.budgetList[8].yearValue4 = 0.00
this.budgetList[8].yearValue5 = 0.00
for (let i = 9; i < this.budgetList.length; i++) {
this.budgetList[8].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[8].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[8].yearValue3 += this.budgetList[i].yearValue3
this.budgetList[8].yearValue4 += this.budgetList[i].yearValue4
this.budgetList[8].yearValue5 += this.budgetList[i].yearValue5
}
this.budgetList[8].amountFee = this.budgetList[8].yearValue1 + this.budgetList[8].yearValue2 + this.budgetList[8].yearValue3 + this.budgetList[8].yearValue4 + this.budgetList[8].yearValue5
},
addBudgetArray () {
const newItem = {
...Budget,
showIndex: this.budgetList.length + 1
}
this.budgetList.push(newItem)
},
deleteBudgetArray (item) {
let index = this.budgetList.indexOf(item)
if (index !== -1) {
this.budgetList.splice(index, 1)
}
},
getTotalFee() {
return parseFloat(this.totalFee);
}
},
watch: {
budgetList: {
handler(budgetList) {
this.calTotalFee()
}
}
}
}
</script>
<template>
<div>
<div v-if="budgetCategory">
<budget-five-info :budgetList.sync="budgetList"></budget-five-info>
</div>
<div v-else>
<budget-three-info :budgetList.sync="budgetList"></budget-three-info>
</div>
</div>
</template>
<script>
import budgetFiveInfo from '@/views/report/talent/components/budgetFiveInfo'
import budgetThreeInfo from '@/views/report/talent/components/budgetThreeInfo'
export default {
name: "budgetInfo",
components: {
budgetFiveInfo, budgetThreeInfo,
},
props: {
budgetList: {
type: Array,
default: () => {
return [{ ...Budget }];
},
},
budgetType: {
type: Object,
default: () => {
return null
}
}
},
data() {
return {
budgetCategory: null,
}
},
created() {
if (!this.budgetType) {
if (this.budgetType.type === 'HTTalent') {
this.budgetCategory = true
} else {
this.budgetCategory = false
}
}
},
methods: {
},
}
</script>
<template>
<div>
<a-row type="flex" class="row_center">
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div class="required">申请资助的预算支出科目</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">第一年</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">第二年</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">第三年</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">费用</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>操作</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in budgetList" :key="index" type="flex" class="row_center">
<a-col :span="5" style="text-align: left;" >
<div class="special-middle" v-if="item.isRequired">{{ item.budgetName }}</div>
<div class="special-middle" v-else>
<a-form-model-item :prop="'budgetList.' + index + '.budgetName'" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.budgetName" :maxLength="50" style="width:85%" />
</a-form-model-item>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue1.includes(index)" :prop="'budgetList.' + index + '.yearValue1'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue1" @change="YearValue1Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue1).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue2.includes(index)" :prop="'budgetList.' + index + '.yearValue2'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue2" @change="YearValue2Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue2).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<a-form-model-item v-if="!invisibleYearValue3.includes(index)" :prop="'budgetList.' + index + '.yearValue3'" :rules="{required: true, message: '*', trigger: 'blur',}">
<a-input-number v-model="item.yearValue3" @change="YearValue3Change(index)" :min="0" :step="0.01" style="width: 80%" />
</a-form-model-item>
<div v-else>{{parseFloat(item.yearValue3).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ parseFloat(item.amountFee).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle" v-if="!item.isRequired">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteBudgetArray(item)">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div>合计</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue1).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue2).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue3).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalFee).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div></div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="24" style="text-align: center">
<div class="special-middle">
<a-button type="dashed" style="width: 20%" @click="addBudgetArray()">
<a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span>
</a-button>
</div>
</a-col>
</a-row>
</div>
</template>
<script>
const Budget = { id: null, talentId: null, budgetId: "00000000-0000-0000-0000-000000000000", yearValue1: 0.00, yearValue2: 0.00, yearValue3: 0.00, yearValue4: 0.00, yearValue5: 0.00, amountFee: 0.00, showIndex: null, isRequired: false }
export default {
name: "budgetThreeEdit",
props: {
budgetList: {
type: Array,
default: () => {
return [{ ...Budget }];
},
}
},
data() {
return {
totalYearValue1: 0.00,
totalYearValue2: 0.00,
totalYearValue3: 0.00,
totalYearValue4: 0.00,
totalYearValue5: 0.00,
totalFee: 0.00,
invisibleYearValue1: [ 2, 8 ],
invisibleYearValue2: [ 2, 8 ],
invisibleYearValue3: [ 2, 8 ],
invisibleYearValue4: [ 2, 8 ],
invisibleYearValue5: [ 2, 8 ],
}
},
created() {
this.calTotalFee()
},
methods: {
FeeChange (index) {
if (index == 0)
this.educationFee()
else if (index == 1)
this.scienceFee()
else if (index > 2 && index < 8)
this.researchFee(index)
else if (this.budgetList.length > 8)
this.otherFee(index)
this.calTotalFee()
},
YearValue1Change (index) {
this.FeeChange(index)
},
YearValue2Change (index) {
this.FeeChange(index)
},
YearValue3Change (index) {
this.FeeChange(index)
},
YearValue4Change (index) {
this.FeeChange(index)
},
YearValue5Change (index) {
this.FeeChange(index)
},
calTotalFee() {
this.totalYearValue1 = this.budgetList[0].yearValue1 + this.budgetList[1].yearValue1 + this.budgetList[2].yearValue1 + this.budgetList[8].yearValue1
this.totalYearValue2 = this.budgetList[0].yearValue2 + this.budgetList[1].yearValue2 + this.budgetList[2].yearValue2 + this.budgetList[8].yearValue2
this.totalYearValue3 = this.budgetList[0].yearValue3 + this.budgetList[1].yearValue3 + this.budgetList[2].yearValue3 + this.budgetList[8].yearValue3
this.totalFee = this.totalYearValue1 + this.totalYearValue2 + this.totalYearValue3
},
//一、国内外进修费用
educationFee () {
this.budgetList[0].amountFee = this.budgetList[0].yearValue1 + this.budgetList[0].yearValue2 + this.budgetList[0].yearValue3
},
//二、学术交流费用
scienceFee () {
this.budgetList[1].amountFee = this.budgetList[1].yearValue1 + this.budgetList[1].yearValue2 + this.budgetList[1].yearValue3
},
//三、研究费用
researchFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3
this.budgetList[2].yearValue1 = 0.00
this.budgetList[2].yearValue2 = 0.00
this.budgetList[2].yearValue3 = 0.00
for (let i = 3; i <= 7; i++) {
this.budgetList[2].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[2].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[2].yearValue3 += this.budgetList[i].yearValue3
}
this.budgetList[2].amountFee = this.budgetList[2].yearValue1 + this.budgetList[2].yearValue2 + this.budgetList[2].yearValue3
},
//四、其他费用
otherFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3
this.budgetList[8].yearValue1 = 0.00
this.budgetList[8].yearValue2 = 0.00
this.budgetList[8].yearValue3 = 0.00
for (let i = 9; i < this.budgetList.length; i++) {
this.budgetList[8].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[8].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[8].yearValue3 += this.budgetList[i].yearValue3
}
this.budgetList[8].amountFee = this.budgetList[8].yearValue1 + this.budgetList[8].yearValue2 + this.budgetList[8].yearValue3
},
addBudgetArray () {
const newItem = {
...Budget,
showIndex: this.budgetList.length + 1
}
this.budgetList.push(newItem)
},
deleteBudgetArray (item) {
let index = this.budgetList.indexOf(item)
if (index !== -1) {
this.budgetList.splice(index, 1)
}
},
getTotalFee() {
return parseFloat(this.totalFee);
}
}
}
</script>
<template>
<div>
<a-row type="flex" class="row_center">
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div class="required">申请资助的预算支出科目</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">第一年</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">第二年</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">第三年</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">费用</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in budgetList" :key="index" type="flex" class="row_center">
<a-col :span="8" style="text-align: left;" >
<div class="special-middle">{{ item.budgetName }}</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{parseFloat(item.yearValue1).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{parseFloat(item.yearValue2).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{parseFloat(item.yearValue3).toFixed(2)}}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ parseFloat(item.amountFee).toFixed(2) }}</div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div>合计</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue1).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue2).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalYearValue3).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>{{ parseFloat(totalFee).toFixed(2) }}</div>
</div>
</a-col>
</a-row>
</div>
</template>
<script>
const Budget = { id: null, talentId: null, budgetId: "00000000-0000-0000-0000-000000000000", yearValue1: 0.00, yearValue2: 0.00, yearValue3: 0.00, yearValue4: 0.00, yearValue5: 0.00, amountFee: 0.00, showIndex: null, isRequired: false }
export default {
name: "budgetThreeInfo",
props: {
budgetList: {
type: Array,
default: () => {
return [{ ...Budget }];
},
}
},
data() {
return {
totalYearValue1: 0.00,
totalYearValue2: 0.00,
totalYearValue3: 0.00,
totalYearValue4: 0.00,
totalYearValue5: 0.00,
totalFee: 0.00,
invisibleYearValue1: [ 2, 8 ],
invisibleYearValue2: [ 2, 8 ],
invisibleYearValue3: [ 2, 8 ],
invisibleYearValue4: [ 2, 8 ],
invisibleYearValue5: [ 2, 8 ],
}
},
created() {
//this.calTotalFee()
},
methods: {
FeeChange (index) {
if (index == 0)
this.educationFee()
else if (index == 1)
this.scienceFee()
else if (index > 2 && index < 8)
this.researchFee(index)
else if (this.budgetList.length > 8)
this.otherFee(index)
this.calTotalFee()
},
YearValue1Change (index) {
this.FeeChange(index)
},
YearValue2Change (index) {
this.FeeChange(index)
},
YearValue3Change (index) {
this.FeeChange(index)
},
YearValue4Change (index) {
this.FeeChange(index)
},
YearValue5Change (index) {
this.FeeChange(index)
},
calTotalFee() {
this.totalYearValue1 = this.budgetList[0].yearValue1 + this.budgetList[1].yearValue1 + this.budgetList[2].yearValue1 + this.budgetList[8].yearValue1
this.totalYearValue2 = this.budgetList[0].yearValue2 + this.budgetList[1].yearValue2 + this.budgetList[2].yearValue2 + this.budgetList[8].yearValue2
this.totalYearValue3 = this.budgetList[0].yearValue3 + this.budgetList[1].yearValue3 + this.budgetList[2].yearValue3 + this.budgetList[8].yearValue3
this.totalFee = this.totalYearValue1 + this.totalYearValue2 + this.totalYearValue3
},
//一、国内外进修费用
educationFee () {
this.budgetList[0].amountFee = this.budgetList[0].yearValue1 + this.budgetList[0].yearValue2 + this.budgetList[0].yearValue3
},
//二、学术交流费用
scienceFee () {
this.budgetList[1].amountFee = this.budgetList[1].yearValue1 + this.budgetList[1].yearValue2 + this.budgetList[1].yearValue3
},
//三、研究费用
researchFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3
this.budgetList[2].yearValue1 = 0.00
this.budgetList[2].yearValue2 = 0.00
this.budgetList[2].yearValue3 = 0.00
for (let i = 3; i <= 7; i++) {
this.budgetList[2].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[2].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[2].yearValue3 += this.budgetList[i].yearValue3
}
this.budgetList[2].amountFee = this.budgetList[2].yearValue1 + this.budgetList[2].yearValue2 + this.budgetList[2].yearValue3
},
//四、其他费用
otherFee (index) {
this.budgetList[index].amountFee = this.budgetList[index].yearValue1 + this.budgetList[index].yearValue2 + this.budgetList[index].yearValue3
this.budgetList[8].yearValue1 = 0.00
this.budgetList[8].yearValue2 = 0.00
this.budgetList[8].yearValue3 = 0.00
for (let i = 9; i < this.budgetList.length; i++) {
this.budgetList[8].yearValue1 += this.budgetList[i].yearValue1
this.budgetList[8].yearValue2 += this.budgetList[i].yearValue2
this.budgetList[8].yearValue3 += this.budgetList[i].yearValue3
}
this.budgetList[8].amountFee = this.budgetList[8].yearValue1 + this.budgetList[8].yearValue2 + this.budgetList[8].yearValue3
},
addBudgetArray () {
const newItem = {
...Budget,
showIndex: this.budgetList.length + 1
}
this.budgetList.push(newItem)
},
deleteBudgetArray (item) {
let index = this.budgetList.indexOf(item)
if (index !== -1) {
this.budgetList.splice(index, 1)
}
},
getTotalFee() {
return parseFloat(this.totalFee);
}
},
watch: {
budgetList: {
handler(budgetList) {
this.calTotalFee()
}
}
}
}
</script>
<template>
<div>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>附件</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>序号</div>
</div>
</a-col>
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>附件名称</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>是否必备材料</div>
</div>
</a-col>
<a-col :span="12" class="bg-gray">
<div class="special-middle">
<div>附件上传</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>操作</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in fileList" :key="'fileList' + index" type="flex">
<a-col :span="2" style="text-align: center; margin-top: 8px;">
{{ index + 1 }}
</a-col>
<a-col :span="6">
<div class="special-middle" v-if="item.required">{{ item.fileExplain }}</div>
<a-form-model-item v-else :prop="'fileList.' + index + '.fileExplain'" :rules="{required: item.isRequired, message: '*',trigger: 'blur',}">
<a-input v-model="item.fileExplain" :maxLength="100" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<div class="special-middle" style="text-align: center;">
<div>{{ item.isRequired == true && item.required ? "是" : "否" }}</div>
</div>
</a-col>
<a-col :span="12" style="text-align: left;">
<div v-if="!item.isTitle" class="special-middle" style="text-align: left;">
<file-load :file.sync="fileList[index]" :index="index" :name="'fileList'" :format="['doc', 'docx', 'pdf']" />
</div>
</a-col>
<a-col :span="2">
<div class="special-middle">
<div v-if="!item.required">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removefileList(item)">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="24" style="text-align: center">
<div class="special-middle">
<div>
<a-button type="dashed" style="width: 50%" @click="addfileList()">
<a-icon type="plus" /> 添加
</a-button>
</div>
</div>
</a-col>
</a-row>
</div>
</template>
<script>
const File = { fileName: null, downloadUrl: null, fileExplain: null, downloadId: null, isRequired: true, required: false, isTitle: false };
export default {
name: "fileEdit",
props: {
fileList: {
type: Array,
default: () => {
return [{ ...File }];
},
},
},
data() {
return {};
},
created() {
},
methods: {
// 添加附件
addfileList () {
this.fileList.push(Object.assign({ ...File }, { fileExplain: '' }))
},
// 删除附件
removefileList (item) {
let index = this.fileList.indexOf(item)
if (index !== -1) {
this.fileList.splice(index, 1)
}
},
}
};
</script>
\ No newline at end of file
<template>
<div>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>附件</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray" style="text-align: center;">
<div class="special-middle">
<div>序号</div>
</div>
</a-col>
<a-col :span="8" class="bg-gray" style="text-align: center;">
<div class="special-middle">
<div>文件名</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray" style="text-align: center;">
<div class="special-middle">
<div>是否必备材料</div>
</div>
</a-col>
<a-col :span="10" class="bg-gray" style="text-align: center;">
<div class="special-middle">
<div>附件名称</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray" style="text-align: center;">
<div class="special-middle">
<div>操作</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in fileList" :key="'appendix' + index" type="flex" class="row_center">
<a-col :span="2" style="text-align: center;">
<div class="special-middle">
<div>{{index + 1}}</div>
</div>
</a-col>
<a-col :span="8" style="text-align: center;">
<div class="special-middle">
<div v-if="item.fileName" style="text-align: left;">
<!-- {{item.fileName}} -->
<document-view :fileUrl="item.downloadUrl" :fileName="item.fileName" :imageArray="[item.downloadUrl]"></document-view>
</div>
<div v-else></div>
</div>
</a-col>
<a-col :span="2" style="text-align: center;">
<div class="special-middle">
<div>{{ item.isRequired == true ? "是" : "否" }}</div>
</div>
</a-col>
<a-col :span="10" style="text-align: center;">
<div class="special-middle">
<div>{{item.fileExplain}}<span v-if="item.isRequired" style="color:red;">*</span></div>
</div>
</a-col>
<a-col :span="2" style="text-align: center;">
<div class="special-middle">
<div v-if="item.downloadUrl"><a :href="item.downloadUrl" :download="item.fileName">下载</a></div>
</div>
</a-col>
</a-row>
</div>
</template>
<script>
import documentView from '@/views/components/common/documentView'
const File = { fileName: null, downloadUrl: null, fileExplain: null, downloadId: null, isRequired: true, required: false, isTitle: false };
export default {
name: "fileInfo",
components: {
documentView,
},
props: {
fileList: {
type: Array,
default: () => {
return [{ ...File }];
},
},
},
data() {
return {};
},
created() {
},
methods: {
// 添加附件
addfileList () {
this.fileList.push(Object.assign({ ...File }, { fileExplain: '' }))
},
// 删除附件
removefileList (item) {
let index = this.fileList.indexOf(item)
if (index !== -1) {
this.fileList.splice(index, 1)
}
},
}
};
</script>
\ No newline at end of file
<template>
<div>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>团队人员名单</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="1" class="bg-gray">
<div class="special-middle">
<div class="required">序号</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">姓名</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">性别</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">出生日期</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">专业</div>
</div>
</a-col>
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div class="required">技术职称</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">单位</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>工作分工(限10字)</div>
</div>
</a-col>
<a-col :span="1" class="bg-gray">
<div class="special-middle">
<div>操作</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in membersList" :key="'membersList'+index" type="flex" class="row_center">
<a-col :span="1">
<div style="margin-top:10px;">{{ item.showIndex }}</div>
</a-col>
<a-col :span="2">
<a-form-model-item :prop="'membersList.' + index + '.name'" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.name" :maxLength="50" placeholder="姓名" style="width:85%" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<a-form-model-item :prop="'membersList.' + index + '.sex'" :rules="{ required: true, message: '*', trigger: 'change',}">
<base-select v-model="item.sex" :type="16" :isAll="true" :width="100" />
</a-form-model-item>
</a-col>
<a-col :span="2">
<a-form-model-item :prop="'membersList.' + index + '.birthday'" :rules="{ required: true, message: '*', trigger: 'change',}">
<a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.birthday" style="width: 120px" />
</a-form-model-item>
</a-col>
<a-col :span="3">
<a-form-model-item :prop="'membersList.' + index + '.spec'" :rules="{ required: true, message: '*', trigger: 'change',}">
<cascader-select v-model="item.spec" />
</a-form-model-item>
</a-col>
<a-col :span="5">
<a-form-model-item :prop="'membersList.' + index + '.title'" :rules="{ required: true, message: '*', trigger: 'change',}">
<para-multi-select v-model="item.title" :typeId="7" :width="120" />
</a-form-model-item>
</a-col>
<a-col :span="4">
<a-form-model-item :prop="'membersList.' + index + '.workUnit'" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.workUnit" :maxLength="50" placeholder="单位" style="width:85%" />
</a-form-model-item>
</a-col>
<a-col :span="4">
<a-form-model-item :prop="'membersList.' + index + '.projWork'" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.projWork" :maxLength="100" placeholder="项目分工" style="width:85%" />
</a-form-model-item>
</a-col>
<a-col :span="1">
<div class="special-middle">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteMemberArray(item)">
<a-button type="link" size="small">删除</a-button>
</a-popconfirm>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="24" style="text-align: center">
<div class="special-middle">
<a-button type="dashed" style="width: 20%" @click="addMemberArray()">
<a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span>
</a-button>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div class="special-middle" style="color:red;">注:“申报人所在团队主要人员”应为申报人所在的学科人员</div>
</a-col>
</a-row>
</div>
</template>
<script>
import cascaderSelect from '@/views/components/common/cascaderSelect'
const Member = { id: null, talentId: null, name: null, sex: null, birthday: null, spec: null, title: null, workUnit: null, projWork: null, remark: null, showIndex: null, }
export default {
name: "membersEdit",
components: {
cascaderSelect
},
props: {
membersList: {
type: Array,
default: () => {
return [{ ...Member }];
},
}
},
data() {
return {};
},
created() {
},
methods: {
addMemberArray() {
const newItem = {
...Member,
showIndex: this.membersList.length + 1
}
this.membersList.push(newItem)
},
deleteMemberArray(item) {
let index = this.membersList.indexOf(item)
if (index !== -1) {
this.membersList.splice(index, 1)
}
}
},
};
</script>
<template>
<div>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>团队人员名单</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="1" class="bg-gray">
<div class="special-middle">
<div class="required">序号</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">姓名</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">性别</div>
</div>
</a-col>
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div class="required">出生日期</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div class="required">专业</div>
</div>
</a-col>
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div class="required">技术职称</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div class="required">单位</div>
</div>
</a-col>
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div>工作分工(限10字)</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in membersList" :key="'membersList'+index" type="flex" class="row_center">
<a-col :span="1">
<div style="margin-top:10px;">{{ item.showIndex }}</div>
</a-col>
<a-col :span="2">
<div class="special-middle">
<div>{{ item.name }}</div>
</div>
</a-col>
<a-col :span="2">
<div class="special-middle">
<div>{{ item.sex }}</div>
</div>
</a-col>
<a-col :span="2">
<div class="special-middle">
<div>{{ moment(item.birthday).format('YYYY-MM-DD') }}</div>
</div>
</a-col>
<a-col :span="3">
<div class="special-middle">
<div>{{ item.specName }}</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>{{ item.titleName }}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.workUnit }}</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>{{ item.projWork }}</div>
</div>
</a-col>
</a-row>
</div>
</template>
<script>
import moment from 'moment'
export default {
name: "membersInfo",
props: {
membersList: {
type: Array,
default: () => {
return [{ ...Member }];
},
}
},
data() {
return {};
},
methods: {
moment,
},
};
</script>
<template> <template>
<div> <div>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>申报人才简历</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<span>学历(高中以上)</span>
</div>
</a-col>
<a-col :span="20">
<!-- 学历表格 -->
<a-row type="flex" class="row_center">
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div>起止日期</div>
</div>
</a-col>
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>学校</div>
</div>
</a-col>
<a-col :span="10" class="bg-gray">
<div class="special-middle">
<div>备注</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in educationList" :key="'educationList'+index" type="flex" class="row_center">
<a-col :span="8">
<div class="special-middle">
<div>{{ moment(item.resumeStart).format('YYYY-MM-DD') }}{{ moment(item.resumeEnd).format('YYYY-MM-DD') }}</div>
</div>
</a-col>
<a-col :span="6">
<div class="special-middle">
<div>{{ item.orgName }}</div>
</div>
</a-col>
<a-col :span="10">
<div class="special-middle">
<div>{{ item.resumeRemark }}</div>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<span>研修经历</span>
</div>
</a-col>
<a-col :span="20">
<!-- 研修经历表格 -->
<a-row type="flex" class="row_center">
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div>起止日期</div>
</div>
</a-col>
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>机构(国别)</div>
</div>
</a-col>
<a-col :span="10" class="bg-gray">
<div class="special-middle">
<div>研修内容(限20字)</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in studyList" :key="'studyList'+index" type="flex" class="row_center">
<a-col :span="8">
<div class="special-middle">
<div>{{ moment(item.resumeStart).format('YYYY-MM-DD') }}{{ moment(item.resumeEnd).format('YYYY-MM-DD') }}</div>
</div>
</a-col>
<a-col :span="6">
<div class="special-middle">
<div>{{ item.orgName }}</div>
</div>
</a-col>
<a-col :span="10">
<div class="special-middle">
<div>{{ item.resumeRemark }}</div>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<span>工作经历</span>
</div>
</a-col>
<a-col :span="20">
<!-- 工作经历表格 -->
<a-row type="flex" class="row_center">
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>起止日期</div>
</div>
</a-col>
<a-col :span="5" class="bg-gray">
<div class="special-middle">
<div>机构</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>职务</div>
</div>
</a-col>
<a-col :span="9" class="bg-gray">
<div class="special-middle">
<div>承担的主要工作(限20字)</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in workList" :key="'workList'+index" type="flex" class="row_center">
<a-col :span="6">
<div class="special-middle">
<div>{{ moment(item.resumeStart).format('YYYY-MM-DD') }}{{ moment(item.resumeEnd).format('YYYY-MM-DD') }}</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>{{ item.orgName }}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.positionName }}</div>
</div>
</a-col>
<a-col :span="9">
<div class="special-middle">
<div>{{ item.resumeRemark }}</div>
</div>
</a-col>
</a-row>
</a-col>
</a-row>
</div> </div>
</template> </template>
<script> <script>
import moment from 'moment'
export default { export default {
name: "resumeInfo", name: "resumeInfo",
props: { props: {
budget: { resumeList: {
type: Array, type: Array,
default: () => { default: () => {
return []; return [];
...@@ -17,11 +167,59 @@ export default { ...@@ -17,11 +167,59 @@ export default {
}, },
data() { data() {
return { return {
educationList: [],
studyList: [],
workList: [],
}; };
},
created() {
}, },
methods: { methods: {
moment,
InitData() {
// 根据 resumeType 分类并排序
if (this.resumeList && this.resumeList.length > 0) {
// 学历记录
this.educationList = this.resumeList
.filter(item => item.resumeType === 'e76f5097-fe28-11ef-b6cb-0c42a1380f01')
.sort((a, b) => a.showIndex - b.showIndex)
.map(item => ({
...item,
resumeRange: item.resumeStart && item.resumeEnd ?
[moment(item.resumeStart), moment(item.resumeEnd)] : []
}))
// 研修经历
this.studyList = this.resumeList
.filter(item => item.resumeType === 'e76f5097-fe28-11ef-b6cb-0c42a1380f02')
.sort((a, b) => a.showIndex - b.showIndex)
.map(item => ({
...item,
resumeRange: item.resumeStart && item.resumeEnd ?
[moment(item.resumeStart), moment(item.resumeEnd)] : []
}))
// 工作经历
this.workList = this.resumeList
.filter(item => item.resumeType === 'e76f5097-fe28-11ef-b6cb-0c42a1380f03')
.sort((a, b) => a.showIndex - b.showIndex)
.map(item => ({
...item,
resumeRange: item.resumeStart && item.resumeEnd ?
[moment(item.resumeStart), moment(item.resumeEnd)] : []
}))
}
}
},
watch: {
resumeList: {
handler(resumeList) {
if (!!resumeList) {
this.InitData()
}
},
},
}, },
}; };
</script> </script>
\ No newline at end of file
<template> <template>
<div> <div>
<a-row> <a-form-model ref="form" :model="formModel">
<a-col :span="24" style="border-top: 0px; text-align: center"> <a-row>
<div class="main-title"> <a-col :span="24" style="border-top: 0px; text-align: center">
<span>申报人才科研成绩</span> <div class="main-title">
</div> <span>申报人才科研成绩</span>
</a-col> </div>
</a-row> </a-col>
<a-row type="flex" class="row_center"> </a-row>
<a-col :span="24" class="bg-gray"> <a-row type="flex" class="row_center">
<div> <a-col :span="24" class="bg-gray">
<span>1、主要科研成果获奖情况(按获奖时间顺序填写,含专利、新药证书等不超过15项。)</span> <div>
</div> <span>1、主要科研成果获奖情况(按获奖时间顺序填写,含专利、新药证书等不超过15项。)</span>
</a-col> </div>
</a-row> </a-col>
<a-row type="flex" class="row_center"> </a-row>
<a-col :span="2" class="bg-gray"> <a-row type="flex" class="row_center">
<div class="special-middle"> <a-col :span="2" class="bg-gray">
<div>序号</div> <div class="special-middle">
</div> <div>序号</div>
</a-col> </div>
<a-col :span="4" class="bg-gray"> </a-col>
<div class="special-middle"> <a-col :span="4" class="bg-gray">
<div>时间</div> <div class="special-middle">
</div> <div>时间</div>
</a-col> </div>
<a-col :span="8" class="bg-gray"> </a-col>
<div class="special-middle"> <a-col :span="8" class="bg-gray">
<div>成果名称</div> <div class="special-middle">
</div> <div>成果名称</div>
</a-col> </div>
<a-col :span="6" class="bg-gray"> </a-col>
<div class="special-middle"> <a-col :span="6" class="bg-gray">
<div>授奖部门及等级</div> <div class="special-middle">
</div> <div>授奖部门及等级</div>
</a-col> </div>
<a-col :span="2" class="bg-gray"> </a-col>
<div class="special-middle"> <a-col :span="2" class="bg-gray">
<div>本人排名</div> <div class="special-middle">
</div> <div>本人排名</div>
</a-col> </div>
<a-col :span="2" class="bg-gray"> </a-col>
<div class="special-middle"> <a-col :span="2" class="bg-gray">
<div>操作</div> <div class="special-middle">
</div> <div>操作</div>
</a-col> </div>
</a-row> </a-col>
<a-row v-for="(item, index) in gainList" :key="'gainList'+index" type="flex" class="row_center"> </a-row>
<a-col :span="2">{{ item.showIndex }}</a-col> <a-row v-for="(item, index) in gainList" :key="'gainList'+index" type="flex" class="row_center">
<a-col :span="4"> <a-col :span="2">{{ item.showIndex }}</a-col>
<a-form-model-item :prop="`gainList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-col :span="4">
<a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" /> <a-form-model-item :prop="`gainList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'change',}">
</a-form-model-item> <a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" />
</a-col> </a-form-model-item>
<a-col :span="8"> </a-col>
<a-form-model-item :prop="`gainList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-col :span="8">
<a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" /> <a-form-model-item :prop="`gainList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}">
</a-form-model-item> <a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" />
</a-col> </a-form-model-item>
<a-col :span="6"> </a-col>
<a-form-model-item :prop="`gainList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-col :span="6">
<a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" /> <a-form-model-item :prop="`gainList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}">
</a-form-model-item> <a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" />
</a-col> </a-form-model-item>
<a-col :span="2"> </a-col>
<a-form-model-item :prop="`gainList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-col :span="2">
<a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" /> <a-form-model-item :prop="`gainList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}">
</a-form-model-item> <a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" />
</a-col> </a-form-model-item>
<a-col :span="2"> </a-col>
<div class="special-middle"> <a-col :span="2">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteGainArray(item)"> <div class="special-middle">
<a-button type="link" size="small">删除</a-button> <a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteGainArray(item)">
</a-popconfirm> <a-button type="link" size="small">删除</a-button>
</div> </a-popconfirm>
</a-col> </div>
</a-row> </a-col>
<a-row type="flex"> </a-row>
<a-col :span="24" style="text-align: center"> <a-row type="flex">
<div class="special-middle"> <a-col :span="24" style="text-align: center">
<a-button type="dashed" style="width: 20%" @click="addGainArray()"> <div class="special-middle">
<a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span> <a-button type="dashed" style="width: 20%" @click="addGainArray()">
</a-button> <a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span>
</div> </a-button>
</a-col> </div>
</a-row> </a-col>
</a-row>
<a-row type="flex" class="row_center"> <a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray"> <a-col :span="24" class="bg-gray">
<div> <div>
<span>2、发表的主要科研论文(按时间顺序填写,不超过15篇,SCI论文等外文论文需提供影响因子证明(科技部门批准机构开具的证明))</span> <span>2、发表的主要科研论文(按时间顺序填写,不超过15篇,SCI论文等外文论文需提供影响因子证明(科技部门批准机构开具的证明))</span>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex" class="row_center"> <a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>序号</div> <div>序号</div>
</div> </div>
</a-col> </a-col>
<a-col :span="4" class="bg-gray"> <a-col :span="4" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>时间</div> <div>时间</div>
</div> </div>
</a-col> </a-col>
<a-col :span="8" class="bg-gray"> <a-col :span="8" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>论文名称</div> <div>论文名称</div>
</div> </div>
</a-col> </a-col>
<a-col :span="6" class="bg-gray"> <a-col :span="6" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>发表刊物</div> <div>发表刊物</div>
</div> </div>
</a-col> </a-col>
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>本人排名</div> <div>本人排名</div>
</div> </div>
</a-col> </a-col>
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>操作</div> <div>操作</div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row v-for="(item, index) in thesisList" :key="'thesisList'+index" type="flex" class="row_center"> <a-row v-for="(item, index) in thesisList" :key="'thesisList'+index" type="flex" class="row_center">
<a-col :span="2">{{ item.showIndex }}</a-col> <a-col :span="2">{{ item.showIndex }}</a-col>
<a-col :span="4"> <a-col :span="4">
<a-form-model-item :prop="`thesisList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`thesisList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" /> <a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="8"> <a-col :span="8">
<a-form-model-item :prop="`thesisList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`thesisList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" /> <a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-model-item :prop="`thesisList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`thesisList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" /> <a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="2"> <a-col :span="2">
<a-form-model-item :prop="`thesisList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`thesisList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" /> <a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="2"> <a-col :span="2">
<div class="special-middle"> <div class="special-middle">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteGainArray(item)"> <a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteThesisArray(item)">
<a-button type="link" size="small">删除</a-button> <a-button type="link" size="small">删除</a-button>
</a-popconfirm> </a-popconfirm>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex"> <a-row type="flex">
<a-col :span="24" style="text-align: center"> <a-col :span="24" style="text-align: center">
<div class="special-middle"> <div class="special-middle">
<a-button type="dashed" style="width: 20%" @click="addGainArray()"> <a-button type="dashed" style="width: 20%" @click="addThesisArray()">
<a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span> <a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span>
</a-button> </a-button>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex" class="row_center"> <a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray"> <a-col :span="24" class="bg-gray">
<div> <div>
<span>3、出版的专著和教材(按出版时间顺序填写,不超过15本。)</span> <span>3、出版的专著和教材(按出版时间顺序填写,不超过15本。)</span>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex" class="row_center"> <a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>序号</div> <div>序号</div>
</div> </div>
</a-col> </a-col>
<a-col :span="4" class="bg-gray"> <a-col :span="4" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>时间</div> <div>时间</div>
</div> </div>
</a-col> </a-col>
<a-col :span="8" class="bg-gray"> <a-col :span="8" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>专著及教材</div> <div>专著及教材</div>
</div> </div>
</a-col> </a-col>
<a-col :span="6" class="bg-gray"> <a-col :span="6" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>出版社</div> <div>出版社</div>
</div> </div>
</a-col> </a-col>
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>本人排名</div> <div>本人排名</div>
</div> </div>
</a-col> </a-col>
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>操作</div> <div>操作</div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row v-for="(item, index) in appearList" :key="'appearList'+index" type="flex" class="row_center"> <a-row v-for="(item, index) in appearList" :key="'appearList'+index" type="flex" class="row_center">
<a-col :span="2">{{ item.showIndex }}</a-col> <a-col :span="2">{{ item.showIndex }}</a-col>
<a-col :span="4"> <a-col :span="4">
<a-form-model-item :prop="`appearList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`appearList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" /> <a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="8"> <a-col :span="8">
<a-form-model-item :prop="`appearList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`appearList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" /> <a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-model-item :prop="`appearList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`appearList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" /> <a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="2"> <a-col :span="2">
<a-form-model-item :prop="`appearList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`appearList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" /> <a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="2"> <a-col :span="2">
<div class="special-middle"> <div class="special-middle">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteGainArray(item)"> <a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteAppearArray(item)">
<a-button type="link" size="small">删除</a-button> <a-button type="link" size="small">删除</a-button>
</a-popconfirm> </a-popconfirm>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex"> <a-row type="flex">
<a-col :span="24" style="text-align: center"> <a-col :span="24" style="text-align: center">
<div class="special-middle"> <div class="special-middle">
<a-button type="dashed" style="width: 20%" @click="addGainArray()"> <a-button type="dashed" style="width: 20%" @click="addAppearArray()">
<a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span> <a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span>
</a-button> </a-button>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex" class="row_center"> <a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray"> <a-col :span="24" class="bg-gray">
<div> <div>
<span>4、承担的课题(按立项时间顺序填写,不超过15项。)</span> <span>4、承担的课题(按立项时间顺序填写,不超过15项。)</span>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex" class="row_center"> <a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>序号</div> <div>序号</div>
</div> </div>
</a-col> </a-col>
<a-col :span="4" class="bg-gray"> <a-col :span="4" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>时间</div> <div>时间</div>
</div> </div>
</a-col> </a-col>
<a-col :span="8" class="bg-gray"> <a-col :span="8" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>课题名称</div> <div>课题名称</div>
</div> </div>
</a-col> </a-col>
<a-col :span="6" class="bg-gray"> <a-col :span="6" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>项目来源</div> <div>项目来源</div>
</div> </div>
</a-col> </a-col>
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>本人排名</div> <div>本人排名</div>
</div> </div>
</a-col> </a-col>
<a-col :span="2" class="bg-gray"> <a-col :span="2" class="bg-gray">
<div class="special-middle"> <div class="special-middle">
<div>操作</div> <div>操作</div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row v-for="(item, index) in courseList" :key="'courseList'+index" type="flex" class="row_center"> <a-row v-for="(item, index) in courseList" :key="'courseList'+index" type="flex" class="row_center">
<a-col :span="2">{{ item.showIndex }}</a-col> <a-col :span="2">{{ item.showIndex }}</a-col>
<a-col :span="4"> <a-col :span="4">
<a-form-model-item :prop="`courseList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`courseList.${index}.gainDate`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" /> <a-date-picker placeholder="请选择日期" format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="item.gainDate" style="width: 140px" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="8"> <a-col :span="8">
<a-form-model-item :prop="`courseList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`courseList.${index}.gainName`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" /> <a-input v-model="item.gainName" :maxLength="50" placeholder="成果名称" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-model-item :prop="`courseList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`courseList.${index}.gainDescription`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" /> <a-input v-model="item.gainDescription" :maxLength="100" placeholder="授奖部门及等级" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="2"> <a-col :span="2">
<a-form-model-item :prop="`courseList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item :prop="`courseList.${index}.gainRemark`" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" /> <a-input v-model="item.gainRemark" :maxLength="50" placeholder="本人排名" style="width:85%" />
</a-form-model-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="2"> <a-col :span="2">
<div class="special-middle"> <div class="special-middle">
<a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteGainArray(item)"> <a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="deleteCourseArray(item)">
<a-button type="link" size="small">删除</a-button> <a-button type="link" size="small">删除</a-button>
</a-popconfirm> </a-popconfirm>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex"> <a-row type="flex">
<a-col :span="24" style="text-align: center"> <a-col :span="24" style="text-align: center">
<div class="special-middle"> <div class="special-middle">
<a-button type="dashed" style="width: 20%" @click="addGainArray()"> <a-button type="dashed" style="width: 20%" @click="addCourseArray()">
<a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span> <a-icon type="plus" /> 添加 <span style="color:red;margin-left:10px"></span>
</a-button> </a-button>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
</a-form-model>
</div> </div>
</template> </template>
<script> <script>
import moment from "moment"; import moment from "moment";
const gainList = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f01', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, } const Gain = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f01', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
const thesisList = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f02', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, } const Thesis = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f02', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
const appearList = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f03', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, } const Appear = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f03', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
const courseList = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f04', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, } const Course = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f04', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
export default { export default {
name: "scientificGainEdit", name: "scientificGainEdit",
...@@ -349,34 +351,171 @@ export default { ...@@ -349,34 +351,171 @@ export default {
thesisList: [], thesisList: [],
appearList: [], appearList: [],
courseList: [], courseList: [],
formModel: {
gainList: [],
thesisList: [],
appearList: [],
courseList: [],
}
}; };
}, },
created() {}, created() {
if (this.scientificList && this.scientificList.length > 0) {
this.gainList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f01')
.sort((a, b) => a.showIndex - b.showIndex)
this.thesisList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f02')
.sort((a, b) => a.showIndex - b.showIndex)
this.appearList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f03')
.sort((a, b) => a.showIndex - b.showIndex)
this.courseList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f04')
.sort((a, b) => a.showIndex - b.showIndex)
this.formModel.gainList = this.gainList
this.formModel.thesisList = this.thesisList
this.formModel.appearList = this.appearList
this.formModel.courseList = this.courseList
} else {
this.gainList = []
this.thesisList = []
this.appearList = []
this.courseList = []
this.formModel.gainList = []
this.formModel.thesisList = []
this.formModel.appearList = []
this.formModel.courseList = []
}
},
methods: { methods: {
addGainArray() { addGainArray() {
const newItem = {
...Gain,
showIndex: this.gainList.length + 1
}
this.gainList.push(newItem);
this.$nextTick(() => {
this.$refs.form && this.$refs.form.clearValidate()
})
}, },
deleteGainArray(item) { deleteGainArray(item) {
let index = this.gainList.indexOf(item)
if (index !== -1) {
this.gainList.splice(index, 1)
}
}, },
addThesisArray() { addThesisArray() {
const newItem = {
...Thesis,
showIndex: this.thesisList.length + 1
}
this.thesisList.push(newItem)
this.$nextTick(() => {
this.$refs.form && this.$refs.form.clearValidate()
})
}, },
deleteThesisArray(item) { deleteThesisArray(item) {
let index = this.thesisList.indexOf(item)
if (index !== -1) {
this.thesisList.splice(index, 1)
}
}, },
addAppearArray() { addAppearArray() {
const newItem = {
...Appear,
showIndex: this.appearList.length + 1
}
this.appearList.push(newItem)
this.$nextTick(() => {
this.$refs.form && this.$refs.form.clearValidate()
})
}, },
deleteAppearArray(item) { deleteAppearArray(item) {
let index = this.appearList.indexOf(item)
if (index !== -1) {
this.appearList.splice(index, 1)
}
}, },
addCourseArray() { addCourseArray() {
const newItem = {
...Course,
showIndex: this.courseList.length + 1
}
this.courseList.push(newItem)
this.$nextTick(() => {
this.$refs.form && this.$refs.form.clearValidate()
})
}, },
deleteCourseArray(item) { deleteCourseArray(item) {
let index = this.courseList.indexOf(item)
if (index !== -1) {
this.courseList.splice(index, 1)
}
}, },
mergeScientificList() {
this.scientificList.length = 0
const allLists = [
...this.gainList.map((item, index) => {
const newItem = { ...item }
newItem.showIndex = index + 1
return newItem
}),
...this.thesisList.map((item, index) => {
const newItem = { ...item }
newItem.showIndex = index + 1
return newItem
}),
...this.appearList.map((item, index) => {
const newItem = { ...item }
newItem.showIndex = index + 1
return newItem
}),
...this.courseList.map((item, index) => {
const newItem = { ...item }
newItem.showIndex = index + 1
return newItem
})
]
this.scientificList.push(...allLists)
return this.scientificList
}
}, },
watch: {
gainList: {
handler(val) {
this.formModel.gainList = val
},
deep: true,
immediate: true
},
thesisList: {
handler(val) {
this.formModel.thesisList = val
},
deep: true,
immediate: true
},
appearList: {
handler(val) {
this.formModel.appearList = val
},
deep: true,
immediate: true
},
courseList: {
handler(val) {
this.formModel.courseList = val
},
deep: true,
immediate: true
},
}
}; };
</script> </script>
<template> <template>
<div></div> <div>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>申报人才科研成绩</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div>
<span>1、主要科研成果获奖情况(按获奖时间顺序填写,含专利、新药证书等不超过15项。)</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>序号</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>时间</div>
</div>
</a-col>
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div>成果名称</div>
</div>
</a-col>
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>授奖部门及等级</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>本人排名</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in gainList" :key="'gainList'+index" type="flex" class="row_center">
<a-col :span="2">
<div class="special-middle">{{ item.showIndex }}</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainDate ? moment(item.gainDate).format('YYYY-MM-DD') : '' }}</div>
</div>
</a-col>
<a-col :span="8">
<div class="special-middle">
<div>{{ item.gainName }}</div>
</div>
</a-col>
<a-col :span="6">
<div class="special-middle">
<div>{{ item.gainDescription }}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainRemark }}</div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div>
<span>2、发表的主要科研论文(按时间顺序填写,不超过15篇,SCI论文等外文论文需提供影响因子证明(科技部门批准机构开具的证明))</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>序号</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>时间</div>
</div>
</a-col>
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div>论文名称</div>
</div>
</a-col>
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>发表刊物</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>本人排名</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in thesisList" :key="'thesisList'+index" type="flex" class="row_center">
<a-col :span="2">
<div class="special-middle">{{ item.showIndex }}</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainDate ? moment(item.gainDate).format('YYYY-MM-DD') : '' }}</div>
</div>
</a-col>
<a-col :span="8">
<div class="special-middle">
<div>{{ item.gainName }}</div>
</div>
</a-col>
<a-col :span="6">
<div class="special-middle">
<div>{{ item.gainDescription }}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainRemark }}</div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div>
<span>3、出版的专著和教材(按出版时间顺序填写,不超过15本。)</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>序号</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>时间</div>
</div>
</a-col>
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div>专著及教材</div>
</div>
</a-col>
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>出版社</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>本人排名</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in appearList" :key="'appearList'+index" type="flex" class="row_center">
<a-col :span="2">
<div class="special-middle">{{ item.showIndex }}</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainDate ? moment(item.gainDate).format('YYYY-MM-DD') : '' }}</div>
</div>
</a-col>
<a-col :span="8">
<div class="special-middle">
<div>{{ item.gainName }}</div>
</div>
</a-col>
<a-col :span="6">
<div class="special-middle">
<div>{{ item.gainDescription }}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainRemark }}</div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div>
<span>4、承担的课题(按立项时间顺序填写,不超过15项。)</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="2" class="bg-gray">
<div class="special-middle">
<div>序号</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>时间</div>
</div>
</a-col>
<a-col :span="8" class="bg-gray">
<div class="special-middle">
<div>课题名称</div>
</div>
</a-col>
<a-col :span="6" class="bg-gray">
<div class="special-middle">
<div>项目来源</div>
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div class="special-middle">
<div>本人排名</div>
</div>
</a-col>
</a-row>
<a-row v-for="(item, index) in courseList" :key="'courseList'+index" type="flex" class="row_center">
<a-col :span="2">
<div class="special-middle">{{ item.showIndex }}</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainDate ? moment(item.gainDate).format('YYYY-MM-DD') : '' }}</div>
</div>
</a-col>
<a-col :span="8">
<div class="special-middle">
<div>{{ item.gainName }}</div>
</div>
</a-col>
<a-col :span="6">
<div class="special-middle">
<div>{{ item.gainDescription }}</div>
</div>
</a-col>
<a-col :span="4">
<div class="special-middle">
<div>{{ item.gainRemark }}</div>
</div>
</a-col>
</a-row>
</div>
</template> </template>
<script> <script>
import moment from "moment"; import moment from "moment"
const Gain = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f01', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
const Thesis = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f02', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
const Appear = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f03', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
const Course = { id: null, talentId: null, gainType: 'dff44c90-ff10-11ef-b6cb-0c42a1380f04', gainDate: null, gainName: null, gainDescription: null, gainRemark: null, showIndex: null, }
const ScientificGain = {};
export default { export default {
name: "scientificGainInfo", name: "scientificGainInfo",
props: {
scientificList: {
type: Array,
default: () => {
return [];
},
},
},
data() { data() {
return {}; return {
gainList: [],
thesisList: [],
appearList: [],
courseList: [],
};
}, },
created() { created() {
}, },
methods: { methods: {
moment,
InitData() {
if (this.scientificList && this.scientificList.length > 0) {
this.gainList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f01')
.sort((a, b) => a.showIndex - b.showIndex)
if (this.gainList.length == 0) {
this.gainList.push({ ...Gain })
}
this.thesisList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f02')
.sort((a, b) => a.showIndex - b.showIndex)
if (this.thesisList.length == 0) {
this.thesisList.push({ ...Thesis })
}
this.appearList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f03')
.sort((a, b) => a.showIndex - b.showIndex)
if (this.appearList.length == 0) {
this.appearList.push({ ...Appear })
}
this.courseList = this.scientificList
.filter(item => item.gainType === 'dff44c90-ff10-11ef-b6cb-0c42a1380f04')
.sort((a, b) => a.showIndex - b.showIndex)
if (this.courseList.length == 0) {
this.courseList.push({ ...Course })
}
}
},
},
watch: {
scientificList: {
handler(scientificList) {
if (!!scientificList) {
this.InitData()
} else {
this.gainList.push({ ...Gain })
this.thesisList.push({ ...Thesis })
this.appearList.push({ ...Appear })
this.courseList.push({ ...Course })
}
},
},
}, },
}; };
</script> </script>
\ No newline at end of file
...@@ -44,7 +44,7 @@ export default { ...@@ -44,7 +44,7 @@ export default {
{ status: "process", title: '申报人才基本情况', showStatus: true }, { status: "process", title: '申报人才基本情况', showStatus: true },
{ status: "wait", title: '申报人才简历', showStatus: false }, { status: "wait", title: '申报人才简历', showStatus: false },
{ status: "wait", title: '申报人才科研成绩', showStatus: false }, { status: "wait", title: '申报人才科研成绩', showStatus: false },
{ status: "wait", title: '科学研究规划及团队人员名单', showStatus: false }, { status: "wait", title: '团队人员名单', showStatus: false },
{ status: "wait", title: '经费预算及培养计划和目标', showStatus: false }, { status: "wait", title: '经费预算及培养计划和目标', showStatus: false },
{ status: "wait", title: '附件', showStatus: false } { status: "wait", title: '附件', showStatus: false }
], ],
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<a-col :span="5"> <a-col :span="5">
<div class="special-middle"> <div class="special-middle">
<div> <div>
<a-form-model-item prop="address"> <a-form-model-item prop="certId">
<a-input v-model="formData.certId" @change="onCertIdChange" :maxLength="18" style="width: 200px;" /> <a-input v-model="formData.certId" @change="onCertIdChange" :maxLength="18" style="width: 200px;" />
</a-form-model-item> </a-form-model-item>
</div> </div>
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<div class="special-middle"> <div class="special-middle">
<div> <div>
<a-form-model-item prop="talentCategory"> <a-form-model-item prop="talentCategory">
<para-select v-model="formData.talentCategory" :typeId="21" :width="180" /> <para-select v-model="formData.talentCategory" :typeId="21" @change="talentCategoryChange" :width="180" />
</a-form-model-item> </a-form-model-item>
</div> </div>
</div> </div>
...@@ -225,7 +225,7 @@ ...@@ -225,7 +225,7 @@
<div class="special-middle"> <div class="special-middle">
<div> <div>
<a-form-model-item prop="talentType"> <a-form-model-item prop="talentType">
<para-check v-model="formData.talentType" :typeId="16" :disabled="false" /> <para-check v-model="formData.talentType" :typeId="talentTypeId" :key="'talent-type-' + talentTypeId" :disabled="false" />
</a-form-model-item> </a-form-model-item>
</div> </div>
</div> </div>
...@@ -342,12 +342,19 @@ ...@@ -342,12 +342,19 @@
<div v-if="stepsArray[1].showStatus"> <div v-if="stepsArray[1].showStatus">
<resume-edit :resumeList.sync="formData.resumeList" ref="talentResume" /> <resume-edit :resumeList.sync="formData.resumeList" ref="talentResume" />
<a-row> <a-row>
<a-col :span="24" style="border-top: 0px; text-align: center"> <a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title"> <div class="main-title">
<span>申报人才业务技术能力</span> <span>申报人才业务技术能力</span>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>本人业务技术能力、外语水平及已经开展的主要业务工作(应阐明自身的技术优势、薄弱环节及改进措施)</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center"> <a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray"> <a-col :span="24" class="bg-gray">
<a-form-model-item prop="technicalSkill" :rules="{ required: true, message: '*', trigger: 'blur',}"> <a-form-model-item prop="technicalSkill" :rules="{ required: true, message: '*', trigger: 'blur',}">
...@@ -357,13 +364,140 @@ ...@@ -357,13 +364,140 @@
</a-row> </a-row>
</div> </div>
<div v-if="stepsArray[2].showStatus"> <div v-if="stepsArray[2].showStatus">
<scientific-gain-edit :scientificList.sync="formData.scientificList" ref="talentScientific" /> <scientific-gain-edit ref="talentScientific" :scientificList.sync="formData.scientificList" />
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>科学研究规划</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>结合本人业务基础和专长,所在学科的建设目标,获资助后拟研究的关键问题、主要研究内容、创新技术研发与应用及预期成果,要有量化指标:</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<a-form-model-item prop="qualityTarget" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-textarea placeholder="量化指标(限1000字)" v-model="formData.qualityTarget" :maxLength="1000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>目前的研究条件(详述已具备的研究条件,包括主要的仪器设备、实验动物等)</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<a-form-model-item prop="researchCondition" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-textarea placeholder="研究条件(限1000字)" v-model="formData.researchCondition" :maxLength="1000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>研究进度:按年度列出研究进度及相关指标</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<a-form-model-item prop="researchProgress" :rules="{ required: true, message: '*', trigger: 'blur',}">
<a-textarea placeholder="研究进度(限1000字)" v-model="formData.researchProgress" :maxLength="1000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
</div> </div>
<div v-if="stepsArray[3].showStatus"> <div v-if="stepsArray[3].showStatus">
<members-edit :membersList.sync="formData.membersList" />
</div> </div>
<div v-if="stepsArray[4].showStatus"> <div v-if="stepsArray[4].showStatus">
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>经费预算及培养计划和目标</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="7" class="bg-gray">
<div class="special-middle">
<div class="required">申请资助金额</div>
</div>
</a-col>
<a-col :span="17" class="bg-gray">
<div class="special-middle">
<a-form-model-item prop="applyFund">
<a-input-number v-model="formData.applyFund" @change="FundChange" :min="0" :step="0.01" style="width:120px" />(万元)
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="7" class="bg-gray">
<div class="special-middle">
<div class="required">其他经费来源</div>
</div>
</a-col>
<a-col :span="17" class="bg-gray">
<div class="special-middle">
<a-form-model-item prop="otherFund">
<a-input-number v-model="formData.otherFund" @change="FundChange" :min="0" :step="0.01" style="width:120px" />(万元)
</a-form-model-item>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="7" class="bg-gray">
<div class="special-middle">
<div class="required">合计</div>
</div>
</a-col>
<a-col :span="17" class="bg-gray">
<div class="special-middle">
{{ parseFloat(formData.totalFund).toFixed(2) }}(万元)
</div>
</a-col>
</a-row>
<budget-edit ref="talentBudget" :budgetList.sync="formData.budgetList" :budgetType.sync="budgetType" />
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>申报人所在单位培养计划和培养目标</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<a-form-model-item prop="planTarget">
<a-textarea placeholder="培养计划和培养目标(限1000字)" v-model="formData.planTarget" :maxLength="1000" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>申报人所在单位的学科发展和人才队伍建设专家指导委员会审核意见</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<a-form-model-item prop="unitAdvice">
<a-textarea placeholder="指导委员会审核意见(限800字)" v-model="formData.unitAdvice" :maxLength="800" style="width: 80%; height: 160px; margin-top: 12px" />
</a-form-model-item>
</a-col>
</a-row>
</div> </div>
<div v-if="stepsArray[5].showStatus"> <div v-if="stepsArray[5].showStatus">
<file-edit :fileList.sync="formData.fileList" />
</div> </div>
</a-form-model> </a-form-model>
</div> </div>
...@@ -377,11 +511,14 @@ import paraCheck from '@/views/components/common/paraCheck' ...@@ -377,11 +511,14 @@ import paraCheck from '@/views/components/common/paraCheck'
import cascaderSelect from '@/views/components/common/cascaderSelect' import cascaderSelect from '@/views/components/common/cascaderSelect'
import resumeEdit from '@/views/report/talent/components/resumeEdit' import resumeEdit from '@/views/report/talent/components/resumeEdit'
import scientificGainEdit from '@/views/report/talent/components/scientificGainEdit' import scientificGainEdit from '@/views/report/talent/components/scientificGainEdit'
import membersEdit from '@/views/report/talent/components/membersEdit'
import budgetEdit from '@/views/report/talent/components/budgetEdit'
import fileEdit from '@/views/report/talent/components/fileEdit'
export default { export default {
name: "talentEdit", name: "talentEdit",
components: { components: {
paraRadio, paraCheck, cascaderSelect, resumeEdit, scientificGainEdit paraRadio, paraCheck, cascaderSelect, resumeEdit, scientificGainEdit, membersEdit, budgetEdit, fileEdit
}, },
props: { props: {
value: { value: {
...@@ -431,13 +568,33 @@ export default { ...@@ -431,13 +568,33 @@ export default {
mobile: null, mobile: null,
fax: null, fax: null,
technicalSkill: null, technicalSkill: null,
qualityTarget: null,
researchCondition: null,
researchProgress: null,
email: null, email: null,
applyFund: null,
otherFund: null,
totalFund: null,
planTarget: null,
unitAdvice: null,
talentState: null,
resumeList: [], resumeList: [],
membersList: [], membersList: [],
budgetList: [], budgetList: [],
scientificList: [], scientificList: [],
fileList: [], fileList: [],
}, },
talentTraningInfo: {
HTTalent: null,
ALTalent: null,
RTTalent: null,
ALTrainingYear: null,
ALEveryYearFee: null,
HTTrainingYear: null,
HTEveryYearFee: null,
RTTrainingYear: null,
RTEveryYearFee: null,
},
rules: { rules: {
talentCategory: [{ required: true, message: '*', trigger: 'change' },], talentCategory: [{ required: true, message: '*', trigger: 'change' },],
certId: [{ required: true, message: '*', trigger: 'blur' },], certId: [{ required: true, message: '*', trigger: 'blur' },],
...@@ -461,10 +618,19 @@ export default { ...@@ -461,10 +618,19 @@ export default {
mobile: [{ required: true, message: '*', trigger: 'blur' }], mobile: [{ required: true, message: '*', trigger: 'blur' }],
fax: [{ required: true, message: '*', trigger: 'blur' }], fax: [{ required: true, message: '*', trigger: 'blur' }],
email: [{ required: true, message: '*', trigger: 'blur' }], email: [{ required: true, message: '*', trigger: 'blur' }],
applyFund: [{ required: true, message: '*', trigger: 'change' }],
otherFund: [{ required: true, message: '*', trigger: 'change' }],
planTarget: [{ required: true, message: '*', trigger: 'blur' }],
unitAdvice: [{ required: true, message: '*', trigger: 'blur' }],
}, },
talentTypeId: -1,
//type: HTTalent\ALTalent\RTTalent
budgetType: { type: 'HTTalent', trainingYear: 5, EveryYearFee: 10 },
}; };
}, },
created () { created () {
this.getTalentTraningInfo()
if (this.value) if (this.value)
this.getTalentApplyById() this.getTalentApplyById()
else else
...@@ -472,6 +638,13 @@ export default { ...@@ -472,6 +638,13 @@ export default {
}, },
methods: { methods: {
moment, moment,
getTalentTraningInfo () {
this.$api.systemSet.getTalentTraningInfo().then(({ data = {} }) => {
if (data) {
this.talentTraningInfo = data
}
})
},
getNewTalentApply() { getNewTalentApply() {
this.$api.talent.getNewTalentApply({ }).then(({ data = {} }) => { this.$api.talent.getNewTalentApply({ }).then(({ data = {} }) => {
if (data) { if (data) {
...@@ -492,14 +665,16 @@ export default { ...@@ -492,14 +665,16 @@ export default {
this.$api.talent.getTalentApplyById({ id: this.value }).then(({ data = {} }) => { this.$api.talent.getTalentApplyById({ id: this.value }).then(({ data = {} }) => {
if (data) { if (data) {
// 处理字符串转数组 // 处理字符串转数组
let talentType = null
if (typeof data.talentType === 'string' && data.talentType) { if (typeof data.talentType === 'string' && data.talentType) {
data.talentType = data.talentType.split(',') data.talentType = data.talentType.split(',')
talentType = [...data.talentType]
} }
if (typeof data.graduateTeacher === 'string' && data.graduateTeacher) { if (typeof data.graduateTeacher === 'string' && data.graduateTeacher) {
data.graduateTeacher = data.graduateTeacher.split(',') data.graduateTeacher = data.graduateTeacher.split(',')
} }
this.formData = data this.formData = data
this.talentCategoryHolder(talentType)
this.$emit('onStepChange', { step: 0, state: data.completeStatus }) this.$emit('onStepChange', { step: 0, state: data.completeStatus })
this.loadList() this.loadList()
} else { } else {
...@@ -585,9 +760,9 @@ export default { ...@@ -585,9 +760,9 @@ export default {
this.formData.completeStatus = arr.toString() this.formData.completeStatus = arr.toString()
var obj = this.getObj(step) var obj = this.getObj(step)
obj.step = step obj.step = step
let state = obj.projState let state = obj.talentState
if (state != 30 && step == 5) if (state != 30 && step == 5)
obj.projState = 10 obj.talentState = 10
let pars = isEmptyParams(obj) let pars = isEmptyParams(obj)
let par = { ...pars } let par = { ...pars }
this.$api.talent.save(par).then(({ data = {} }) => { this.$api.talent.save(par).then(({ data = {} }) => {
...@@ -624,15 +799,19 @@ export default { ...@@ -624,15 +799,19 @@ export default {
} }
break; break;
case 1: case 1:
obj = { id: null, technicalSkill: null, resumeList: [] } obj = { id: null, technicalSkill: null, completeStatus: null, resumeList: [] }
break; break;
case 2: case 2:
obj = { id: null, qualityTarget: null, researchCondition: null, researchProgress: null, completeStatus: null, scientificList: [] }
break; break;
case 3: case 3:
obj = { id: null, completeStatus: null, membersList: [] }
break; break;
case 4: case 4:
obj = { id: null, applyFund: null, otherFund: null, totalFund: null, planTarget: null, unitAdvice: null, completeStatus: null, budgetList: [] }
break; break;
case 5: case 5:
obj = { id: null, completeStatus: null, talentState: null, fileList: [] }
break; break;
} }
...@@ -680,6 +859,35 @@ export default { ...@@ -680,6 +859,35 @@ export default {
return true return true
}, },
checkScientiticList() {
this.$refs.talentScientific.mergeScientificList()
if (!!!this.formData.scientificList || this.formData.scientificList.length == 0) {
this.$message.error('请至少添加一条申报人才科研成绩!')
return false
}
return true
},
checkMemberList() {
if (!!!this.formData.membersList || this.formData.membersList.length == 0) {
this.$message.error('请至少添加一条申报人才团队人员信息!')
return false
}
return true
},
checkBudgetList() {
// 获取预算编辑组件中的总费用
const totalFee = this.$refs.talentBudget ? this.$refs.talentBudget.getTotalFee() : 0;
// 检查资金来源金额与支出费用金额是否相等
if (parseFloat(this.formData.totalFund) !== parseFloat(totalFee)) {
this.$message.error('资金来源金额与支出费用金额不相等,请检查!');
return false;
}
return true;
},
checkInfo(step) { checkInfo(step) {
switch (step) { switch (step) {
case 0: case 0:
...@@ -696,18 +904,53 @@ export default { ...@@ -696,18 +904,53 @@ export default {
return this.checkResumeList() return this.checkResumeList()
break; break;
case 2: case 2:
return this.checkScientiticList()
break; break;
case 3: case 3:
return this.checkMemberList()
break; break;
case 4: case 4:
return this.checkBudgetList()
break; break;
case 5: case 5:
return true
break; break;
} }
}, },
loadList () { FundChange() {
this.formData.totalFund = this.formData.applyFund + this.formData.otherFund
},
talentCategoryChange() {
this.talentCategoryHolder(null)
},
talentCategoryHolder(talentType) {
if (this.formData.talentCategory === this.talentTraningInfo.HTTalent ||
this.formData.talentCategory === this.talentTraningInfo.RTTalent) {
this.talentTypeId = 23
} else if (this.formData.talentCategory === this.talentTraningInfo.ALTalent) {
this.talentTypeId = 16
} else {
this.talentTypeId = 16
}
if (talentType)
this.formData.talentType = talentType
else
this.formData.talentType = []
this.processBudgetType()
}, },
} processBudgetType() {
if (this.formData.talentCategory === this.talentTraningInfo.HTTalent) {
this.budgetType = { type: 'HTTalent', trainingYear: this.talentTraningInfo.HTTrainingYear, EveryYearFee: this.talentTraningInfo.HTEveryYearFee }
} else if (this.formData.talentCategory === this.talentTraningInfo.ALTalent) {
this.budgetType = { type: 'ALTalent', trainingYear: this.talentTraningInfo.ALTrainingYear, EveryYearFee: this.talentTraningInfo.ALEveryYearFee }
} else {
this.budgetType = { type: 'RTTalent', trainingYear: this.talentTraningInfo.RTTrainingYear, EveryYearFee: this.talentTraningInfo.RTEveryYearFee }
}
if (!!!this.formData.applyFund || this.formData.applyFund == 0)
this.formData.applyFund = this.budgetType.trainingYear * this.budgetType.EveryYearFee
}
},
}; };
</script> </script>
<template> <template>
<div></div> <div class="from-table font-line-space" v-if="tabsData[0].isShow">
<div v-if="tabsData[1].isShow">
<a-row>
<a-col :span="24" style="border-top: 0px;text-align: center;">
<div class="main-title">
<span>申报人基本情况</span>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>身份证号</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.certId }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>人才类别</div>
</div>
</a-col>
<a-col :span="13">
<div class="special-middle">
<div>
{{ value.talentCategoryName }}
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>姓名</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.personName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>性别</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.sex }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>民族</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.nationName }}
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>出生年月</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ moment(value.birthday).format('YYYY-MM-DD') }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>最高学位</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.degreeName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>最高学位授予时间</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ moment(value.degreeTime).format('YYYY-MM-DD') }}
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>最高学位授予单位</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>{{ value.degreeUnit }}</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>目前从事专业</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.specName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>是否为研究生导师</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
<para-check v-model="value.graduateTeacher" :typeId="18" :disabled="true" />
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>专业技术职称</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.titleName }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>党派</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.politicalParty }}
</div>
</div>
</a-col>
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>行政职务</div>
</div>
</a-col>
<a-col :span="5">
<div class="special-middle">
<div>
{{ value.duty }}
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>是否是省级或省级以上人才</div>
</div>
</a-col>
<a-col :span="21">
<div class="special-middle">
<div>
<para-check v-model="value.talentType" :typeId="16" :disabled="true" />
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>省级及以上劳动模范、先进工作者等荣誉称号</div>
</div>
</a-col>
<a-col :span="21">
<div class="special-middle">
<div v-html="toTextarea(value.honoraryTitle)"></div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>在国家、省级一级学术团体任职情况(包括任职时间和职务)</div>
</div>
</a-col>
<a-col :span="21">
<div class="special-middle">
<div v-html="toTextarea(value.holdPost1)"></div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>担任国内统计源期刊职务情况(包括任职时间和职务)</div>
</div>
</a-col>
<a-col :span="21">
<div class="special-middle">
<div>
<div v-html="toTextarea(value.holdPost2)"></div>
</div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>担任国家或省级重点学科/专科、重点实验室、内设研究机构负责人情况(包括任职时间和职务)</div>
</div>
</a-col>
<a-col :span="21">
<div class="special-middle">
<div v-html="toTextarea(value.holdPost3)"></div>
</div>
</a-col>
</a-row>
<a-row type="flex">
<a-col :span="3" class="bg-gray">
<div class="special-middle">
<div>联系方式</div>
</div>
</a-col>
<a-col :span="21">
<a-row>
<a-col :span="4" class="bg-gray">
<div style="margin-top: 10px;">电话</div>
</a-col>
<a-col :span="8">
<div style="margin-top: 10px;">
{{ value.mobile }}
</div>
</a-col>
<a-col :span="4" class="bg-gray">
<div style="margin-top: 10px;">传真</div>
</a-col>
<a-col :span="8">
<div style="margin-top: 10px;">
{{ value.fax }}
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="4" class="bg-gray">
<div style="margin-top: 10px;">Email</div>
</a-col>
<a-col :span="20">
<div style="margin-top: 10px;">
{{ value.email }}
</div>
</a-col>
</a-row>
</a-col>
</a-row>
</div>
<div v-if="tabsData[2].isShow">
<resume-info :resumeList.sync="value.resumeList" />
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>申报人才业务技术能力</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>本人业务技术能力、外语水平及已经开展的主要业务工作(应阐明自身的技术优势、薄弱环节及改进措施)</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24">
<div v-html="toTextarea(value.technicalSkill)"></div>
</a-col>
</a-row>
</div>
<div v-if="tabsData[3].isShow">
<scientific-gain-info :scientificList.sync="value.scientificList" />
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>科学研究规划</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>结合本人业务基础和专长,所在学科的建设目标,获资助后拟研究的关键问题、主要研究内容、创新技术研发与应用及预期成果,要有量化指标:</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24">
<div class="special-middle">
<div v-html="toTextarea(value.qualityTarget)"></div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>目前的研究条件(详述已具备的研究条件,包括主要的仪器设备、实验动物等)</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24">
<div class="special-middle">
<div v-html="toTextarea(value.researchCondition)"></div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24" class="bg-gray">
<div style="margin-top: 10px;">
<span>研究进度:按年度列出研究进度及相关指标</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24">
<div class="special-middle">
<div v-html="toTextarea(value.researchProgress)"></div>
</div>
</a-col>
</a-row>
</div>
<div v-if="tabsData[4].isShow">
<members-info :membersList.sync="value.membersList" />
</div>
<div v-if="tabsData[5].isShow">
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>经费预算及培养计划和目标</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="7" class="bg-gray">
<div class="special-middle">
<div class="required">申请资助金额</div>
</div>
</a-col>
<a-col :span="17">
<div class="special-middle">
<div>{{ parseFloat(value.applyFund).toFixed(2) }}(万元)</div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="7" class="bg-gray">
<div class="special-middle">
<div class="required">其他经费来源</div>
</div>
</a-col>
<a-col :span="17">
<div class="special-middle">
<div>{{ parseFloat(value.otherFund).toFixed(2) }}(万元)</div>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="7" class="bg-gray">
<div class="special-middle">
<div class="required">合计</div>
</div>
</a-col>
<a-col :span="17">
<div class="special-middle">
<div>{{ parseFloat(value.totalFund).toFixed(2) }}(万元)</div>
</div>
</a-col>
</a-row>
<budget-info :budgetList.sync="value.budgetList" :budgetType.sync="budgetType" />
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>申报人所在单位培养计划和培养目标</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24">
<div class="special-middle">
<div v-html="toTextarea(value.planTarget)"></div>
</div>
</a-col>
</a-row>
<a-row>
<a-col :span="24" style="border-top: 0px; text-align: center">
<div class="main-title">
<span>申报人所在单位的学科发展和人才队伍建设专家指导委员会审核意见</span>
</div>
</a-col>
</a-row>
<a-row type="flex" class="row_center">
<a-col :span="24">
<div class="special-middle">
<div v-html="toTextarea(value.unitAdvice)"></div>
</div>
</a-col>
</a-row>
</div>
<div v-if="tabsData[6].isShow">
<file-info :fileList.sync="value.fileList" />
</div>
<div v-if="tabsData[7].isShow">
</div>
</div>
</template> </template>
<script> <script>
import moment from 'moment'
import { toTextarea } from '@/views/utils/common'
import paraCheck from '@/views/components/common/paraCheck'
import resumeInfo from '@/views/report/talent/components/resumeInfo'
import scientificGainInfo from '@/views/report/talent/components/scientificGainInfo'
import membersInfo from '@/views/report/talent/components/membersInfo'
import budgetInfo from '@/views/report/talent/components/budgetInfo'
import fileInfo from '@/views/report/talent/components/fileInfo'
export default { export default {
name: "talentInfo", name: "talentInfo",
components: {
paraCheck, resumeInfo, scientificGainInfo, membersInfo, budgetInfo, fileInfo,
},
props: {
value: {
type: Object,
default: () => {
return null
}
},
tabsData: {
type: Array,
default: () => {
return []
}
},
},
data() { data() {
return {}; return {
talentTraningInfo: {
HTTalent: null,
ALTalent: null,
RTTalent: null,
ALTrainingYear: null,
ALEveryYearFee: null,
HTTrainingYear: null,
HTEveryYearFee: null,
RTTrainingYear: null,
RTEveryYearFee: null,
},
budgetType: { type: 'HTTalent', trainingYear: 5, EveryYearFee: 10 },
};
},
created () {
if (!!!this.tabsData || this.tabsData.length == 0)
this.tabsData = [
{ title: '全部', key: '0', isShow: true },
{ title: '申报人基本情况', key: '1', isShow: true },
{ title: '申报人简历', key: '2', isShow: true },
{ title: '申报人科研成绩', key: '3', isShow: true },
{ title: '科学研究规划及团队人员名单', key: '4', isShow: true },
{ title: '经费预算及培养计划和目标', key: '5', isShow: true },
{ title: '附件', key: '6', isShow: true },
{ title: '项目审核记录', key: '7', isShow: true },
]
if (!!!this.value) {
this.getTalentTraningInfo()
}
}, },
methods: { methods: {
moment, toTextarea,
getTalentTraningInfo () {
this.$api.systemSet.getTalentTraningInfo().then(({ data = {} }) => {
if (data) {
this.talentTraningInfo = data
this.processBudgetType()
}
})
},
processBudgetType() {
if (this.value.talentCategory === this.talentTraningInfo.HTTalent) {
this.budgetType = { type: 'HTTalent', trainingYear: this.talentTraningInfo.HTTrainingYear, EveryYearFee: this.talentTraningInfo.HTEveryYearFee }
} else if (this.formData.talentCategory === this.talentTraningInfo.ALTalent) {
this.budgetType = { type: 'ALTalent', trainingYear: this.talentTraningInfo.ALTrainingYear, EveryYearFee: this.talentTraningInfo.ALEveryYearFee }
} else {
this.budgetType = { type: 'RTTalent', trainingYear: this.talentTraningInfo.RTTrainingYear, EveryYearFee: this.talentTraningInfo.RTEveryYearFee }
}
if (!!!this.formData.applyFund || this.formData.applyFund == 0)
this.formData.applyFund = this.budgetType.trainingYear * this.budgetType.EveryYearFee
}
} }
}; };
</script> </script>
\ No newline at end of file
...@@ -44,16 +44,82 @@ export default { ...@@ -44,16 +44,82 @@ export default {
{ title: '项目审核记录', key: '7', isShow: true }, { title: '项目审核记录', key: '7', isShow: true },
], ],
formData: { formData: {
id: null,
talentCategory: null,
reportYear: null,
certId: null,
personId: null,
personName: null,
nation: null,
sex: null,
birthday: null,
degree: null,
degreeTime: null,
degreeUnit: null,
spec: null,
graduateTeacher: null,
title: null,
politicalParty: null,
duty: null,
talentType: null,
honoraryTitle: null,
holdPost1: null,
holdPost2: null,
holdPost3: null,
mobile: null,
fax: null,
technicalSkill: null,
qualityTarget: null,
researchCondition: null,
researchProgress: null,
email: null,
applyFund: null,
otherFund: null,
totalFund: null,
planTarget: null,
unitAdvice: null,
talentState: null,
resumeList: [],
membersList: [],
budgetList: [],
scientificList: [],
fileList: [],
}, },
loading: false, loading: false,
}; };
}, },
created() { created() {
this.getTalentApplyById()
}, },
methods: { methods: {
callback () { getTalentApplyById() {
if (this.value != null) {
this.$api.talent.getTalentApplyById({ id: this.value }).then(({ data = {} }) => {
if (data) {
// 处理字符串转数组
if (typeof data.talentType === 'string' && data.talentType) {
data.talentType = data.talentType.split(',')
}
if (typeof data.graduateTeacher === 'string' && data.graduateTeacher) {
data.graduateTeacher = data.graduateTeacher.split(',')
}
this.formData = data
this.loading = false
} else
this.$emit('close', 'error')
}).catch(() => { this.$emit('close', 'error') })
}
},
callback (key) {
var index = parseInt(key)
this.tabsData.forEach(e => {
if (key == '0')
e.isShow = true
else
e.isShow = false
})
this.tabsData[0].isShow = true;
this.tabsData[index].isShow = true;
}, },
onTalentExport () { onTalentExport () {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment