Merge branch 'master' of https://gitee.com/mtrain/yudao-ui-admin-vue3
# Conflicts: # src/views/apply/apply/MainForm.vue # src/views/apply/apply/components/InfoForm.vuepull/480/head
commit
487cbfccda
|
|
@ -1,70 +1,103 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 验收主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
contractId: string // 合同主键ID
|
||||
code: string // 课题编号
|
||||
year: string // 年度
|
||||
name: string // 课题名称
|
||||
beginDate: string // 开始时间
|
||||
endDate: string // 结束时间
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
}
|
||||
|
||||
// 验收主 API
|
||||
export const MainApi = {
|
||||
// 查询验收主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/acceptance/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询验收主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/acceptance/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增验收主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/acceptance/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改验收主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/acceptance/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除验收主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/acceptance/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出验收主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/acceptance/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收经费) ====================
|
||||
|
||||
// 获得验收经费列表
|
||||
getFundsListByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/funds/list-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收详细信息) ====================
|
||||
|
||||
// 获得验收详细信息
|
||||
getInfoByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/info/get-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 验收 VO
|
||||
export interface MainVO {
|
||||
id: number // 主键Id
|
||||
contractId: number // 合同Id
|
||||
projectCode: string // 任务书编号
|
||||
projectName: string // 任务书名称
|
||||
projectLeader: string // 项目负责人
|
||||
projectLeaderId: number // 项目负责人ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: number // 承担单位ID
|
||||
beginDate: Date // 开始时间
|
||||
endDate: Date // 结束时间
|
||||
accYear: string // 验收年度
|
||||
accDate: Date // 验收时间
|
||||
competentDeptId: number // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: number // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: number // 维护单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: number // 审核单位ID
|
||||
accMode: string // 验收形式
|
||||
accResult: string // 验收结果
|
||||
state: string // 状态
|
||||
}
|
||||
|
||||
// 验收 API
|
||||
export const MainApi = {
|
||||
// 查询验收分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/acceptance/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询验收详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/acceptance/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增验收
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/acceptance/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改验收
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/acceptance/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除验收
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/acceptance/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出验收 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/acceptance/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收详细) ====================
|
||||
|
||||
// 获得验收详细
|
||||
getInfoByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/info/get-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收项目目标) ====================
|
||||
|
||||
// 获得验收项目目标列表
|
||||
getTargetListByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/target/list-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收考核指标) ====================
|
||||
|
||||
// 获得验收考核指标列表
|
||||
getCheckListByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/check/list-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收项目论文成果) ====================
|
||||
|
||||
// 获得验收项目论文成果列表
|
||||
getPublicationsListByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/publications/list-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收其他成果) ====================
|
||||
|
||||
// 获得验收其他成果列表
|
||||
getAchieListByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/achie/list-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收经费-新) ====================
|
||||
|
||||
// 获得验收经费-新列表
|
||||
getFundsListByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/funds/list-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
}
|
||||
|
|
@ -1,116 +1,63 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 立项申请主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
number: string // 编号
|
||||
name: string // 项目名称
|
||||
technicalField: string // 所属技术领域
|
||||
year: string // 年度
|
||||
beginDate: string // 开始时间
|
||||
endDate: string // 结束时间
|
||||
directorId: string // 负责人Id
|
||||
director: string // 负责人姓名
|
||||
gender: string // 负责人性别
|
||||
age: string // 年龄
|
||||
education: string // 学历
|
||||
major: string // 所学专业
|
||||
engagMajor: string // 从事专业
|
||||
position: string // 职务(职称)
|
||||
phoneNo: string // 电话
|
||||
email: string // 邮箱
|
||||
fax: string // 传真
|
||||
postalCode: string // 邮编
|
||||
address: string // 通讯地址
|
||||
achievement: string // 主要业绩
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
creator: string // 创建人
|
||||
createTime: Date // 创建时间
|
||||
updater: string // 更新人
|
||||
updateTime: Date // 更新时间
|
||||
deleted: number // 是否删除
|
||||
}
|
||||
|
||||
// 立项申请主 API
|
||||
export const MainApi = {
|
||||
// 查询立项申请主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/apply/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询立项申请主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/apply/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增立项申请主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/apply/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改立项申请主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/apply/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除立项申请主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/apply/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出立项申请主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/apply/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项详细信息) ====================
|
||||
|
||||
// 获得立项详细信息
|
||||
getInfoByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/info/get-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项单位信息) ====================
|
||||
|
||||
// 获得立项单位信息列表
|
||||
getUnitsListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/units/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(主要参加人员) ====================
|
||||
|
||||
// 获得主要参加人员列表
|
||||
getParticipantListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/participant/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项实施计划) ====================
|
||||
|
||||
// 获得立项实施计划列表
|
||||
getPlanListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/plan/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
|
||||
// ==================== 子表(立项经费) ====================
|
||||
|
||||
// 获得立项经费列表
|
||||
getFundsListByApplyId: async (applyId) => {
|
||||
return await request.get({ url: `/apply/main/funds/list-by-apply-id?applyId=` + applyId })
|
||||
},
|
||||
getRecordList: async (params: any) => {
|
||||
return await request.get({ url: `/apply/main/audit/records?itemId=` + params })
|
||||
},
|
||||
saveRecordList: async (data: any) => {
|
||||
return await request.post({ url: `/apply/main/audit`, data })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 立项 VO
|
||||
export interface MainVO {
|
||||
id: number // 主键id
|
||||
projectName: string // 项目名称
|
||||
year: string // 立项年度
|
||||
undertakingUnitName: string // 牵头单位
|
||||
undertakingUnitId: number // 牵头单位ID
|
||||
mainUnits: string // 主要完成单位
|
||||
coopUnits: string // 合作单位
|
||||
briefObjectives: string // 项目简介—项目目标
|
||||
briefContents: string // 项目简介—研究内容
|
||||
briefInnovate: string // 项目简介—创新点
|
||||
briefAchievement: string // 项目简介—科技及产业化成果
|
||||
briefBenefit: string // 项目简介—经济、社会效益
|
||||
developmentCycle: string // 研发周期
|
||||
totalFee: string // 总经费
|
||||
applyFee: string // 拨款
|
||||
sefeFee: string // 自筹
|
||||
competentDeptId: number // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: number // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: number // 维护单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: number // 审核单位ID
|
||||
state: string // 审核状态
|
||||
}
|
||||
|
||||
// 立项 API
|
||||
export const MainApi = {
|
||||
// 查询立项分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/apply/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询立项详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/apply/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增立项
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/apply/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改立项
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/apply/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除立项
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/apply/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出立项 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/apply/main/export-excel`, params })
|
||||
},
|
||||
}
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 验收主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
contractId: string // 合同主键ID
|
||||
code: string // 课题编号
|
||||
year: string // 年度
|
||||
name: string // 课题名称
|
||||
beginDate: string // 开始时间
|
||||
endDate: string // 结束时间
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
}
|
||||
|
||||
// 验收主 API
|
||||
export const MainApi = {
|
||||
// 查询验收主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/acceptance/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询验收主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/acceptance/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增验收主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/acceptance/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改验收主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/acceptance/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除验收主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/acceptance/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出验收主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/acceptance/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收经费) ====================
|
||||
|
||||
// 获得验收经费列表
|
||||
getFundsListByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/funds/list-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
|
||||
// ==================== 子表(验收详细信息) ====================
|
||||
|
||||
// 获得验收详细信息
|
||||
getInfoByAcceptanceId: async (acceptanceId) => {
|
||||
return await request.get({ url: `/acceptance/main/info/get-by-acceptance-id?acceptanceId=` + acceptanceId })
|
||||
},
|
||||
}
|
||||
|
|
@ -1,53 +1,61 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 变更主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
contractId: number // 合同ID
|
||||
changeType: string // 变更类型
|
||||
changeContent: string // 变更内容
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
}
|
||||
|
||||
// 变更主 API
|
||||
export const MainApi = {
|
||||
// 查询变更主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/change/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询变更主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/change/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增变更主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/change/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改变更主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/change/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除变更主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/change/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出变更主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/change/main/export-excel`, params })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 变更申请 VO
|
||||
export interface MainVO {
|
||||
id: number // 主键Id
|
||||
contractId: number // 任务书Id
|
||||
projectName: string // 项目名称
|
||||
projectLeader: string // 项目负责人
|
||||
projectLeaderId: string // 项目负责人Id
|
||||
projectCode: string // 项目编号
|
||||
bfChange: string // 变更前
|
||||
afChange: string // 变更后
|
||||
detailReasons: string // 详细原因及具体举措
|
||||
year: string // 变更年度
|
||||
chengeType: string // 变更类型;1:延长期限;2:调整经费;3:调整负责人;4:调整设备;5:其他
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
revision: number // 乐观锁
|
||||
}
|
||||
|
||||
// 变更申请 API
|
||||
export const MainApi = {
|
||||
// 查询变更申请分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/change/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询变更申请详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/change/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增变更申请
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/change/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改变更申请
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/change/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除变更申请
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/change/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出变更申请 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/change/main/export-excel`, params })
|
||||
},
|
||||
}
|
||||
|
|
@ -1,107 +1,129 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 合同(任务书)信息主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
code: string // 合同编号
|
||||
name: string // 任务名称
|
||||
technicalField: string // 所属技术领域
|
||||
planId: string // 计划类型Id
|
||||
planName: string // 计划类型名称
|
||||
year: string // 年度
|
||||
beginDate: string // 开始时间
|
||||
endDate: string // 结束时间
|
||||
directorId: string // 负责人Id
|
||||
director: string // 负责人姓名
|
||||
gender: string // 负责人性别
|
||||
age: string // 年龄
|
||||
education: string // 学历
|
||||
major: string // 所学专业
|
||||
engagMajor: string // 从事专业
|
||||
position: string // 职务(职称)
|
||||
phoneNo: string // 电话
|
||||
email: string // 邮箱
|
||||
fax: string // 传真
|
||||
postalCode: string // 邮编
|
||||
address: string // 通讯地址
|
||||
achievement: string // 主要业绩
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: string // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: string // 审核单位ID
|
||||
state: string // 状态
|
||||
}
|
||||
|
||||
// 合同(任务书)信息主 API
|
||||
export const MainApi = {
|
||||
// 查询合同(任务书)信息主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/contract/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询合同(任务书)信息主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/contract/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增合同(任务书)信息主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/contract/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改合同(任务书)信息主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/contract/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除合同(任务书)信息主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/contract/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出合同(任务书)信息主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/contract/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(合同经费) ====================
|
||||
|
||||
// 获得合同经费列表
|
||||
getFundsListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/funds/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(合同详细信息) ====================
|
||||
|
||||
// 获得合同详细信息
|
||||
getInfoByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/info/get-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(合同主要参加人员) ====================
|
||||
|
||||
// 获得合同主要参加人员列表
|
||||
getParticipantListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/participant/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(合同实施计划) ====================
|
||||
|
||||
// 获得合同实施计划列表
|
||||
getPlanListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/plan/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(合同单位信息) ====================
|
||||
|
||||
// 获得合同单位信息列表
|
||||
getUnitsListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/units/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 任务书主 VO
|
||||
export interface MainVO {
|
||||
id: number // 主键id
|
||||
projectName: string // 项目名称
|
||||
projectLeader: string // 项目负责人
|
||||
projectLeaderId: number // 项目负责人Id
|
||||
projectCode: string // 项目编号
|
||||
technicalField: string // 所属技术领域
|
||||
year: string // 年度
|
||||
beginDate: Date // 开始时间
|
||||
endDate: Date // 结束时间
|
||||
planName: string // 计划类型
|
||||
planId: string // 计划Id
|
||||
supportingCondition: string // 课题实施所需的其他配套条件
|
||||
gender: number // 性别
|
||||
age: string // 年龄
|
||||
education: string // 学历
|
||||
major: string // 所学专业
|
||||
engagMajor: string // 从事专业
|
||||
position: string // 职务(职称)
|
||||
phoneNo: string // 电话
|
||||
email: string // 邮箱
|
||||
fax: string // 传真
|
||||
postalCode: string // 邮编
|
||||
address: string // 通讯地址
|
||||
achievement: string // 主要业绩
|
||||
competentDeptId: number // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: number // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
maintenanceUnitName: string // 维护单位名称
|
||||
maintenanceUnitId: number // 维护单位ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: number // 承担单位ID
|
||||
reviewUnitName: string // 审核单位名称
|
||||
reviewUnitId: number // 审核单位ID
|
||||
state: string // 状态
|
||||
}
|
||||
|
||||
// 任务书主 API
|
||||
export const MainApi = {
|
||||
// 查询任务书主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/contract/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询任务书主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/contract/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增任务书主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/contract/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改任务书主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/contract/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除任务书主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/contract/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出任务书主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/contract/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(任务书详细信息) ====================
|
||||
|
||||
// 获得任务书详细信息
|
||||
getInfoByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/info/get-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(任务书项目目标) ====================
|
||||
|
||||
// 获得任务书项目目标列表
|
||||
getTargetListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/target/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(任务书考核指标) ====================
|
||||
|
||||
// 获得任务书考核指标列表
|
||||
getCheckListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/check/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(项目实施计划) ====================
|
||||
|
||||
// 获得项目实施计划列表
|
||||
getPlanListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/plan/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(任务书经费) ====================
|
||||
|
||||
// 获得任务书经费列表
|
||||
getFundsListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/funds/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(参加单位) ====================
|
||||
|
||||
// 获得参加单位列表
|
||||
getUnitListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/unit/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(项目所需设备) ====================
|
||||
|
||||
// 获得项目所需设备列表
|
||||
getDeviceListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/device/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
|
||||
// ==================== 子表(主要参加人员) ====================
|
||||
|
||||
// 获得主要参加人员列表
|
||||
getParticipantListByContractId: async (contractId) => {
|
||||
return await request.get({ url: `/contract/main/participant/list-by-contract-id?contractId=` + contractId })
|
||||
},
|
||||
}
|
||||
|
|
@ -1,59 +1,59 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 专利信息 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
contractId: number // 合同id
|
||||
contractCode: string // 合同编号
|
||||
name: string // 专利名称
|
||||
number: string // 专利号
|
||||
inventorName: string // 发明人姓名
|
||||
filingDate: string // 申请日期
|
||||
publicationDate: string // 公开日期
|
||||
grantDate: string // 授权日期
|
||||
patentType: string // 专利类型(如发明、实用新型、外观设计等)
|
||||
patenteeName: string // 专利权人姓名或公司名称
|
||||
relatedTechArea: string // 相关技术领域
|
||||
technicalEffect: string // 技术效果
|
||||
legalStatus: string // 法律状态(如审查中、已授权、无效等)
|
||||
}
|
||||
|
||||
// 专利信息 API
|
||||
export const MainApi = {
|
||||
// 查询专利信息分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/patents/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询专利信息详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/patents/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增专利信息
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/patents/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改专利信息
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/patents/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除专利信息
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/patents/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出专利信息 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/patents/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(专利信息) ====================
|
||||
|
||||
// 获得专利信息列表
|
||||
getInfoListByPatentsId: async (patentsId) => {
|
||||
return await request.get({ url: `/patents/main/info/list-by-patents-id?patentsId=` + patentsId })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 专利信息 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
contractId: number // 合同id
|
||||
contractCode: string // 合同编号
|
||||
name: string // 专利名称
|
||||
number: string // 专利号
|
||||
inventorName: string // 发明人姓名
|
||||
filingDate: string // 申请日期
|
||||
publicationDate: string // 公开日期
|
||||
grantDate: string // 授权日期
|
||||
patentType: string // 专利类型(如发明、实用新型、外观设计等)
|
||||
patenteeName: string // 专利权人姓名或公司名称
|
||||
relatedTechArea: string // 相关技术领域
|
||||
technicalEffect: string // 技术效果
|
||||
legalStatus: string // 法律状态(如审查中、已授权、无效等)
|
||||
}
|
||||
|
||||
// 专利信息 API
|
||||
export const MainApi = {
|
||||
// 查询专利信息分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/patents/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询专利信息详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/patents/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增专利信息
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/patents/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改专利信息
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/patents/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除专利信息
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/patents/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出专利信息 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/patents/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(专利信息) ====================
|
||||
|
||||
// 获得专利信息列表
|
||||
getInfoListByPatentsId: async (patentsId) => {
|
||||
return await request.get({ url: `/patents/main/info/list-by-patents-id?patentsId=` + patentsId })
|
||||
},
|
||||
}
|
||||
|
|
@ -1,63 +1,52 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 执行主 VO
|
||||
export interface MainVO {
|
||||
id: number // id
|
||||
contractId: number // 合同主键Id
|
||||
contractCode: string // 合同编号
|
||||
section: string // 执行区段
|
||||
progress: string // 进展情况(正常,拖延,停顿)
|
||||
directorId: string // 负责人Id
|
||||
director: string // 负责人姓名
|
||||
competentDeptId: string // 主管部门ID
|
||||
competentDeptName: string // 主管部门
|
||||
managerId: string // 主管工程师ID
|
||||
managerName: string // 主管工程师
|
||||
}
|
||||
|
||||
// 执行主 API
|
||||
export const MainApi = {
|
||||
// 查询执行主分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/process/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询执行主详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/process/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增执行主
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/process/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改执行主
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/process/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除执行主
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/process/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出执行主 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/process/main/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(执行经费情况) ====================
|
||||
|
||||
// 获得执行经费情况列表
|
||||
getFundsListByProcessId: async (processId) => {
|
||||
return await request.get({ url: `/process/main/funds/list-by-process-id?processId=` + processId })
|
||||
},
|
||||
|
||||
// ==================== 子表(执行详细信息) ====================
|
||||
|
||||
// 获得执行详细信息
|
||||
getInfoByProcessId: async (processId) => {
|
||||
return await request.get({ url: `/process/main/info/get-by-process-id?processId=` + processId })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 执行 VO
|
||||
export interface MainVO {
|
||||
id: number // 主键id
|
||||
contractId: number // 任务书Id
|
||||
projectCode: string // 任务书编号
|
||||
projectName: string // 任务书名称
|
||||
projectLeader: string // 项目负责人
|
||||
projectLeaderId: string // 项目负责人ID
|
||||
undertakingUnitName: string // 承担单位名称
|
||||
undertakingUnitId: string // 承担单位ID
|
||||
projectObjectives: string // 项目目标
|
||||
projectEvaluation: string // 考核指标
|
||||
processDate: string // 执行时间区段
|
||||
deviation: string // 是否偏差
|
||||
reason: string // 偏差原因
|
||||
schedule: string // 实际进度
|
||||
}
|
||||
|
||||
// 执行 API
|
||||
export const MainApi = {
|
||||
// 查询执行分页
|
||||
getMainPage: async (params: any) => {
|
||||
return await request.get({ url: `/process/main/page`, params })
|
||||
},
|
||||
|
||||
// 查询执行详情
|
||||
getMain: async (id: number) => {
|
||||
return await request.get({ url: `/process/main/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增执行
|
||||
createMain: async (data: MainVO) => {
|
||||
return await request.post({ url: `/process/main/create`, data })
|
||||
},
|
||||
|
||||
// 修改执行
|
||||
updateMain: async (data: MainVO) => {
|
||||
return await request.put({ url: `/process/main/update`, data })
|
||||
},
|
||||
|
||||
// 删除执行
|
||||
deleteMain: async (id: number) => {
|
||||
return await request.delete({ url: `/process/main/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出执行 Excel
|
||||
exportMain: async (params) => {
|
||||
return await request.download({ url: `/process/main/export-excel`, params })
|
||||
},
|
||||
}
|
||||
|
|
@ -1,49 +1,50 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 公共实验室信 VO
|
||||
export interface LabInfoVO {
|
||||
id: number // id
|
||||
userName: string // 用户姓名
|
||||
userContact: string // 用户联系方式
|
||||
reservationDate: string // 预约日期
|
||||
labName: string // 实验室名称
|
||||
reservationDuration: string // 预约时长(小时)
|
||||
status: string // 预约状态(如待审核、已确认、已拒绝等)
|
||||
reviewerId: string // 审核人ID
|
||||
reviewerName: string // 审核人姓名
|
||||
reviewComments: string // 审核意见(如有)
|
||||
reservationNotes: string // 预约备注(如有)
|
||||
}
|
||||
|
||||
// 公共实验室信 API
|
||||
export const LabInfoApi = {
|
||||
// 查询公共实验室信分页
|
||||
getLabInfoPage: async (params: any) => {
|
||||
return await request.get({ url: `/publicLab/lab-info/page`, params })
|
||||
},
|
||||
|
||||
// 查询公共实验室信详情
|
||||
getLabInfo: async (id: number) => {
|
||||
return await request.get({ url: `/publicLab/lab-info/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增公共实验室信
|
||||
createLabInfo: async (data: LabInfoVO) => {
|
||||
return await request.post({ url: `/publicLab/lab-info/create`, data })
|
||||
},
|
||||
|
||||
// 修改公共实验室信
|
||||
updateLabInfo: async (data: LabInfoVO) => {
|
||||
return await request.put({ url: `/publicLab/lab-info/update`, data })
|
||||
},
|
||||
|
||||
// 删除公共实验室信
|
||||
deleteLabInfo: async (id: number) => {
|
||||
return await request.delete({ url: `/publicLab/lab-info/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出公共实验室信 Excel
|
||||
exportLabInfo: async (params) => {
|
||||
return await request.download({ url: `/publicLab/lab-info/export-excel`, params })
|
||||
},
|
||||
}
|
||||
import request from '@/config/axios'
|
||||
|
||||
// 公共实验室信 VO
|
||||
export interface VO {
|
||||
id: number // 主键ID
|
||||
userName: string // 用户姓名
|
||||
userContact: string // 用户联系方式
|
||||
reservationDate: string // 预约日期
|
||||
reservationTime: Date // 预约时间
|
||||
labName: string // 实验室名称
|
||||
joinPeople: string // 参与人员
|
||||
equipment: string // 实验内容及设备
|
||||
reservationNotes: string // 备注
|
||||
deptId: number // 单位ID
|
||||
deptName: string // 单位名称
|
||||
revision: number // 乐观锁
|
||||
}
|
||||
|
||||
// 公共实验室信 API
|
||||
export const Api = {
|
||||
// 查询公共实验室信分页
|
||||
getPage: async (params: any) => {
|
||||
return await request.get({ url: `/publicLab//page`, params })
|
||||
},
|
||||
|
||||
// 查询公共实验室信详情
|
||||
get: async (id: number) => {
|
||||
return await request.get({ url: `/publicLab//get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增公共实验室信
|
||||
create: async (data: VO) => {
|
||||
return await request.post({ url: `/publicLab//create`, data })
|
||||
},
|
||||
|
||||
// 修改公共实验室信
|
||||
update: async (data: VO) => {
|
||||
return await request.put({ url: `/publicLab//update`, data })
|
||||
},
|
||||
|
||||
// 删除公共实验室信
|
||||
delete: async (id: number) => {
|
||||
return await request.delete({ url: `/publicLab//delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出公共实验室信 Excel
|
||||
export: async (params) => {
|
||||
return await request.download({ url: `/publicLab//export-excel`, params })
|
||||
},
|
||||
}
|
||||
|
|
@ -128,9 +128,9 @@ export enum DICT_TYPE {
|
|||
|
||||
// ========== 所属技术领域 ==========
|
||||
TECHNICAL_FIELD = "technical_field",
|
||||
APPLY_UNIT_TYPE = "apply_unit_type" //立项-单位类型
|
||||
APPLY_UNIT_TYPE = "apply_unit_type", //立项-单位类型
|
||||
|
||||
/* // ========== INFRA 模块 ==========
|
||||
// ========== INFRA 模块 ==========
|
||||
INFRA_BOOLEAN_STRING = 'infra_boolean_string',
|
||||
INFRA_JOB_STATUS = 'infra_job_status',
|
||||
INFRA_JOB_LOG_STATUS = 'infra_job_log_status',
|
||||
|
|
@ -141,7 +141,7 @@ export enum DICT_TYPE {
|
|||
INFRA_CODEGEN_SCENE = 'infra_codegen_scene',
|
||||
INFRA_FILE_STORAGE = 'infra_file_storage',
|
||||
|
||||
// ========== BPM 模块 ==========
|
||||
/* // ========== BPM 模块 ==========
|
||||
BPM_MODEL_CATEGORY = 'bpm_model_category',
|
||||
BPM_MODEL_FORM_TYPE = 'bpm_model_form_type',
|
||||
BPM_TASK_ASSIGN_RULE_TYPE = 'bpm_task_assign_rule_type',
|
||||
|
|
|
|||
|
|
@ -7,17 +7,26 @@
|
|||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="合同主键ID" prop="contractId">
|
||||
<el-input v-model="formData.contractId" placeholder="请输入合同主键ID" />
|
||||
<el-form-item label="合同Id" prop="contractId">
|
||||
<el-input v-model="formData.contractId" placeholder="请输入合同Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="课题编号" prop="code">
|
||||
<el-input v-model="formData.code" placeholder="请输入课题编号" />
|
||||
<el-form-item label="任务书编号" prop="projectCode">
|
||||
<el-input v-model="formData.projectCode" placeholder="请输入任务书编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="年度" prop="year">
|
||||
<el-input v-model="formData.year" placeholder="请输入年度" />
|
||||
<el-form-item label="任务书名称" prop="projectName">
|
||||
<el-input v-model="formData.projectName" placeholder="请输入任务书名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="课题名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入课题名称" />
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input v-model="formData.projectLeader" placeholder="请输入项目负责人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人ID" prop="projectLeaderId">
|
||||
<el-input v-model="formData.projectLeaderId" placeholder="请输入项目负责人ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input v-model="formData.undertakingUnitName" placeholder="请输入承担单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位ID" prop="undertakingUnitId">
|
||||
<el-input v-model="formData.undertakingUnitId" placeholder="请输入承担单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开始时间" prop="beginDate">
|
||||
<el-date-picker
|
||||
|
|
@ -35,6 +44,17 @@
|
|||
placeholder="选择结束时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="验收年度" prop="accYear">
|
||||
<el-input v-model="formData.accYear" placeholder="请输入验收年度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="验收时间" prop="accDate">
|
||||
<el-date-picker
|
||||
v-model="formData.accDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择验收时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
||||
</el-form-item>
|
||||
|
|
@ -53,30 +73,49 @@
|
|||
<el-form-item label="维护单位ID" prop="maintenanceUnitId">
|
||||
<el-input v-model="formData.maintenanceUnitId" placeholder="请输入维护单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input v-model="formData.undertakingUnitName" placeholder="请输入承担单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位ID" prop="undertakingUnitId">
|
||||
<el-input v-model="formData.undertakingUnitId" placeholder="请输入承担单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位名称" prop="reviewUnitName">
|
||||
<el-input v-model="formData.reviewUnitName" placeholder="请输入审核单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位ID" prop="reviewUnitId">
|
||||
<el-input v-model="formData.reviewUnitId" placeholder="请输入审核单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="验收形式" prop="accMode">
|
||||
<el-select v-model="formData.accMode" placeholder="请选择验收形式">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.ACC_MODE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="验收结果" prop="accResult">
|
||||
<el-input v-model="formData.accResult" placeholder="请输入验收结果" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="state">
|
||||
<el-input v-model="formData.state" placeholder="请输入状态" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
<el-tab-pane label="验收经费" name="funds">
|
||||
<FundsForm ref="fundsFormRef" :acceptance-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="验收详细信息" name="info">
|
||||
<el-tab-pane label="验收详细" name="info">
|
||||
<InfoForm ref="infoFormRef" :acceptance-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="验收项目目标" name="target">
|
||||
<TargetForm ref="targetFormRef" :acceptance-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="验收考核指标" name="check">
|
||||
<CheckForm ref="checkFormRef" :acceptance-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="验收项目论文成果" name="publications">
|
||||
<PublicationsForm ref="publicationsFormRef" :acceptance-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="验收其他成果" name="achie">
|
||||
<AchieForm ref="achieFormRef" :acceptance-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="验收经费-新" name="funds">
|
||||
<FundsForm ref="fundsFormRef" :acceptance-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
|
|
@ -85,11 +124,16 @@
|
|||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi, MainVO } from '@/api/acceptance/acceptance'
|
||||
import FundsForm from './components/FundsForm.vue'
|
||||
import InfoForm from './components/InfoForm.vue'
|
||||
import TargetForm from './components/TargetForm.vue'
|
||||
import CheckForm from './components/CheckForm.vue'
|
||||
import PublicationsForm from './components/PublicationsForm.vue'
|
||||
import AchieForm from './components/AchieForm.vue'
|
||||
import FundsForm from './components/FundsForm.vue'
|
||||
|
||||
/** 验收主 表单 */
|
||||
/** 验收 表单 */
|
||||
defineOptions({ name: 'MainForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
|
|
@ -102,21 +146,26 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|||
const formData = ref({
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
code: undefined,
|
||||
year: undefined,
|
||||
name: undefined,
|
||||
projectCode: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
beginDate: undefined,
|
||||
endDate: undefined,
|
||||
accYear: undefined,
|
||||
accDate: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
maintenanceUnitId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
accMode: undefined,
|
||||
accResult: undefined,
|
||||
state: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
|
|
@ -124,9 +173,13 @@ const formRules = reactive({
|
|||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('funds')
|
||||
const fundsFormRef = ref()
|
||||
const subTabsName = ref('info')
|
||||
const infoFormRef = ref()
|
||||
const targetFormRef = ref()
|
||||
const checkFormRef = ref()
|
||||
const publicationsFormRef = ref()
|
||||
const achieFormRef = ref()
|
||||
const fundsFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
|
|
@ -152,25 +205,53 @@ const submitForm = async () => {
|
|||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await fundsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'funds'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await infoFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'info'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await targetFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'target'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await checkFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'check'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await publicationsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'publications'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await achieFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'achie'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await fundsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'funds'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as MainVO
|
||||
// 拼接子表的数据
|
||||
data.fundss = fundsFormRef.value.getData()
|
||||
data.info = infoFormRef.value.getData()
|
||||
data.targets = targetFormRef.value.getData()
|
||||
data.checks = checkFormRef.value.getData()
|
||||
data.publicationss = publicationsFormRef.value.getData()
|
||||
data.achies = achieFormRef.value.getData()
|
||||
data.fundss = fundsFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await MainApi.createMain(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
@ -191,23 +272,28 @@ const resetForm = () => {
|
|||
formData.value = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
code: undefined,
|
||||
year: undefined,
|
||||
name: undefined,
|
||||
projectCode: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
beginDate: undefined,
|
||||
endDate: undefined,
|
||||
accYear: undefined,
|
||||
accDate: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
maintenanceUnitId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
accMode: undefined,
|
||||
accResult: undefined,
|
||||
state: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="排序号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.number`" :rules="formRules.number" class="mb-0px!">
|
||||
<el-input v-model="row.number" placeholder="请输入排序号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="取得的成果" min-width="400">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.achieContent`" :rules="formRules.achieContent" class="mb-0px!">
|
||||
<Editor v-model="row.achieContent" height="150px" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加验收其他成果</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/acceptance/acceptance'
|
||||
|
||||
const props = defineProps<{
|
||||
acceptanceId: undefined // 验收主键ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
number: [{ required: true, message: '排序号不能为空', trigger: 'blur' }],
|
||||
achieContent: [{ required: true, message: '取得的成果不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.acceptanceId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getAchieListByAcceptanceId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
acceptanceId: undefined,
|
||||
number: undefined,
|
||||
achieContent: undefined,
|
||||
}
|
||||
row.acceptanceId = props.acceptanceId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="序号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.number`" :rules="formRules.number" class="mb-0px!">
|
||||
<el-input v-model="row.number" placeholder="请输入序号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="考核指标" min-width="200">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.check`" :rules="formRules.check" class="mb-0px!">
|
||||
<el-input v-model="row.check" type="textarea" placeholder="请输入考核指标" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实际完成情况" min-width="200">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.actual`" :rules="formRules.actual" class="mb-0px!">
|
||||
<el-input v-model="row.actual" type="textarea" placeholder="请输入实际完成情况" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否完成:0:未完成 1:完成" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.isComplete`" :rules="formRules.isComplete" class="mb-0px!">
|
||||
<el-select v-model="row.isComplete" placeholder="请选择是否完成:0:未完成 1:完成">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.IS_COMPLETE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加验收考核指标</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi } from '@/api/acceptance/acceptance'
|
||||
|
||||
const props = defineProps<{
|
||||
acceptanceId: undefined // 验收主键ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.acceptanceId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getCheckListByAcceptanceId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
acceptanceId: undefined,
|
||||
number: undefined,
|
||||
check: undefined,
|
||||
actual: undefined,
|
||||
isComplete: undefined,
|
||||
}
|
||||
row.acceptanceId = props.acceptanceId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -9,59 +9,45 @@
|
|||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="经费来源ID" min-width="150">
|
||||
<el-table-column label="设备购置费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sourceId`" :rules="formRules.sourceId" class="mb-0px!">
|
||||
<el-input v-model="row.sourceId" placeholder="请输入经费来源ID" />
|
||||
<el-form-item :prop="`${$index}.equipmentFund`" :rules="formRules.equipmentFund" class="mb-0px!">
|
||||
<el-input v-model="row.equipmentFund" placeholder="请输入设备购置费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="支出类型ID" min-width="150">
|
||||
<el-table-column label="材料费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.expenseId`" :rules="formRules.expenseId" class="mb-0px!">
|
||||
<el-input v-model="row.expenseId" placeholder="请输入支出类型ID" />
|
||||
<el-form-item :prop="`${$index}.materialFund`" :rules="formRules.materialFund" class="mb-0px!">
|
||||
<el-input v-model="row.materialFund" placeholder="请输入材料费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="二级科目" min-width="150">
|
||||
<el-table-column label="实验外协费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.secondaryCategory`" :rules="formRules.secondaryCategory" class="mb-0px!">
|
||||
<el-input v-model="row.secondaryCategory" placeholder="请输入二级科目" />
|
||||
<el-form-item :prop="`${$index}.experimentFund`" :rules="formRules.experimentFund" class="mb-0px!">
|
||||
<el-input v-model="row.experimentFund" placeholder="请输入实验外协费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费金额" min-width="150">
|
||||
<el-table-column label="人员费用" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.amount`" :rules="formRules.amount" class="mb-0px!">
|
||||
<el-input v-model="row.amount" placeholder="请输入经费金额" />
|
||||
<el-form-item :prop="`${$index}.peopleFund`" :rules="formRules.peopleFund" class="mb-0px!">
|
||||
<el-input v-model="row.peopleFund" placeholder="请输入人员费用" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费年度" min-width="150">
|
||||
<el-table-column label="其他费用" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.fiscalYear`" :rules="formRules.fiscalYear" class="mb-0px!">
|
||||
<el-input v-model="row.fiscalYear" placeholder="请输入经费年度" />
|
||||
<el-form-item :prop="`${$index}.otherFund`" :rules="formRules.otherFund" class="mb-0px!">
|
||||
<el-input v-model="row.otherFund" placeholder="请输入其他费用" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="总金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.totalAmount`" :rules="formRules.totalAmount" class="mb-0px!">
|
||||
<el-input v-model="row.totalAmount" placeholder="请输入总金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位Id" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.unitId`" :rules="formRules.unitId" class="mb-0px!">
|
||||
<el-input v-model="row.unitId" placeholder="请输入单位Id" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.unitName`" :rules="formRules.unitName" class="mb-0px!">
|
||||
<el-input v-model="row.unitName" placeholder="请输入单位名称" />
|
||||
<el-form-item :prop="`${$index}.totalFund`" :rules="formRules.totalFund" class="mb-0px!">
|
||||
<el-input v-model="row.totalFund" placeholder="请输入总金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -73,7 +59,7 @@
|
|||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加验收经费</el-button>
|
||||
<el-button @click="handleAdd" round>+ 添加验收经费-新</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
|
|
@ -113,14 +99,12 @@ const handleAdd = () => {
|
|||
const row = {
|
||||
id: undefined,
|
||||
acceptanceId: undefined,
|
||||
sourceId: undefined,
|
||||
expenseId: undefined,
|
||||
secondaryCategory: undefined,
|
||||
amount: undefined,
|
||||
fiscalYear: undefined,
|
||||
totalAmount: undefined,
|
||||
unitId: undefined,
|
||||
unitName: undefined,
|
||||
equipmentFund: undefined,
|
||||
materialFund: undefined,
|
||||
experimentFund: undefined,
|
||||
peopleFund: undefined,
|
||||
otherFund: undefined,
|
||||
totalFund: undefined,
|
||||
}
|
||||
row.acceptanceId = props.acceptanceId
|
||||
formData.value.push(row)
|
||||
|
|
@ -142,4 +126,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -6,17 +6,38 @@
|
|||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="研究目标、考核指标等完成情况" prop="researchTarget">
|
||||
<el-input v-model="formData.researchTarget" type="textarea" placeholder="请输入研究目标、考核指标等完成情况" />
|
||||
<el-form-item label="项目背景" prop="background">
|
||||
<Editor v-model="formData.background" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要研究工作" prop="mainWork">
|
||||
<el-input v-model="formData.mainWork" type="textarea" placeholder="请输入主要研究工作" />
|
||||
<el-form-item label="项目完成的主要工作-研制内容" prop="researchContents">
|
||||
<Editor v-model="formData.researchContents" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经济、社会与环境效益" prop="economicBenefits">
|
||||
<el-input v-model="formData.economicBenefits" type="textarea" placeholder="请输入经济、社会与环境效益" />
|
||||
<el-form-item label="项目完成的主要工作-技术路线" prop="researchRoadmap">
|
||||
<Editor v-model="formData.researchRoadmap" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产业化情况" prop="industrialize">
|
||||
<el-input v-model="formData.industrialize" type="textarea" placeholder="请输入产业化情况" />
|
||||
<el-form-item label="项目完成的主要工作-解决的问题" prop="researchSolved">
|
||||
<Editor v-model="formData.researchSolved" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目完成的主要工作-技术创新点" prop="researchTechnical">
|
||||
<Editor v-model="formData.researchTechnical" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目完成的主要工作-取得的成果" prop="researchGain">
|
||||
<Editor v-model="formData.researchGain" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经济指标" prop="economicIndicator">
|
||||
<Editor v-model="formData.economicIndicator" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="社会效益" prop="socialBenefits">
|
||||
<Editor v-model="formData.socialBenefits" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目推广前景" prop="prospects">
|
||||
<Editor v-model="formData.prospects" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="示范工程建设情况" prop="cngi">
|
||||
<Editor v-model="formData.cngi" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目获得的知识产权情况" prop="intellectualProperty">
|
||||
<Editor v-model="formData.intellectualProperty" height="150px" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
|
@ -24,7 +45,7 @@
|
|||
import { MainApi } from '@/api/acceptance/acceptance'
|
||||
|
||||
const props = defineProps<{
|
||||
acceptanceId: undefined // 验收ID(主表的关联字段)
|
||||
acceptanceId: undefined // 验收表Id(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
|
|
@ -40,10 +61,17 @@ watch(
|
|||
formData.value = {
|
||||
id: undefined,
|
||||
acceptanceId: undefined,
|
||||
researchTarget: undefined,
|
||||
mainWork: undefined,
|
||||
economicBenefits: undefined,
|
||||
industrialize: undefined,
|
||||
background: undefined,
|
||||
researchContents: undefined,
|
||||
researchRoadmap: undefined,
|
||||
researchSolved: undefined,
|
||||
researchTechnical: undefined,
|
||||
researchGain: undefined,
|
||||
economicIndicator: undefined,
|
||||
socialBenefits: undefined,
|
||||
prospects: undefined,
|
||||
cngi: undefined,
|
||||
intellectualProperty: undefined,
|
||||
}
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,149 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="排序号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.number`" :rules="formRules.number" class="mb-0px!">
|
||||
<el-input v-model="row.number" placeholder="请输入排序号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="论文标题" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.title`" :rules="formRules.title" class="mb-0px!">
|
||||
<el-input v-model="row.title" placeholder="请输入论文标题" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发表日期" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.publicationDate`" :rules="formRules.publicationDate" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.publicationDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择发表日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发表论文的期刊名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.journalName`" :rules="formRules.journalName" class="mb-0px!">
|
||||
<el-input v-model="row.journalName" placeholder="请输入发表论文的期刊名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="期刊的卷号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.volumeNumbe`" :rules="formRules.volumeNumbe" class="mb-0px!">
|
||||
<el-input v-model="row.volumeNumbe" placeholder="请输入期刊的卷号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="期刊的期号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.issueNumber`" :rules="formRules.issueNumber" class="mb-0px!">
|
||||
<el-input v-model="row.issueNumber" placeholder="请输入期刊的期号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="作者" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.authors`" :rules="formRules.authors" class="mb-0px!">
|
||||
<el-input v-model="row.authors" placeholder="请输入作者" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加验收项目论文成果</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/acceptance/acceptance'
|
||||
|
||||
const props = defineProps<{
|
||||
acceptanceId: undefined // 验收主键Id(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
number: [{ required: true, message: '排序号不能为空', trigger: 'blur' }],
|
||||
title: [{ required: true, message: '论文标题不能为空', trigger: 'blur' }],
|
||||
publicationDate: [{ required: true, message: '发表日期不能为空', trigger: 'blur' }],
|
||||
journalName: [{ required: true, message: '发表论文的期刊名称不能为空', trigger: 'blur' }],
|
||||
volumeNumbe: [{ required: true, message: '期刊的卷号不能为空', trigger: 'blur' }],
|
||||
issueNumber: [{ required: true, message: '期刊的期号不能为空', trigger: 'blur' }],
|
||||
authors: [{ required: true, message: '作者不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.acceptanceId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getPublicationsListByAcceptanceId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
acceptanceId: undefined,
|
||||
number: undefined,
|
||||
title: undefined,
|
||||
publicationDate: undefined,
|
||||
journalName: undefined,
|
||||
volumeNumbe: undefined,
|
||||
issueNumber: undefined,
|
||||
authors: undefined,
|
||||
}
|
||||
row.acceptanceId = props.acceptanceId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="序号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.number`" :rules="formRules.number" class="mb-0px!">
|
||||
<el-input v-model="row.number" placeholder="请输入序号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目目标" min-width="200">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.target`" :rules="formRules.target" class="mb-0px!">
|
||||
<el-input v-model="row.target" type="textarea" placeholder="请输入项目目标" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实际完成情况" min-width="200">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.actual`" :rules="formRules.actual" class="mb-0px!">
|
||||
<el-input v-model="row.actual" type="textarea" placeholder="请输入实际完成情况" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否完成:0:未完成 1:完成" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.isComplete`" :rules="formRules.isComplete" class="mb-0px!">
|
||||
<el-select v-model="row.isComplete" placeholder="请选择是否完成:0:未完成 1:完成">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.IS_COMPLETE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加验收项目目标</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi } from '@/api/acceptance/acceptance'
|
||||
|
||||
const props = defineProps<{
|
||||
acceptanceId: undefined // 验收主键ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.acceptanceId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getTargetListByAcceptanceId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
acceptanceId: undefined,
|
||||
number: undefined,
|
||||
target: undefined,
|
||||
actual: undefined,
|
||||
isComplete: undefined,
|
||||
}
|
||||
row.acceptanceId = props.acceptanceId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -8,28 +8,202 @@
|
|||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="课题编号" prop="code">
|
||||
<el-form-item label="合同Id" prop="contractId">
|
||||
<el-input
|
||||
v-model="queryParams.code"
|
||||
placeholder="请输入课题编号"
|
||||
v-model="queryParams.contractId"
|
||||
placeholder="请输入合同Id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="年度" prop="year">
|
||||
<el-form-item label="任务书编号" prop="projectCode">
|
||||
<el-input
|
||||
v-model="queryParams.year"
|
||||
placeholder="请输入年度"
|
||||
v-model="queryParams.projectCode"
|
||||
placeholder="请输入任务书编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="课题名称" prop="name">
|
||||
<el-form-item label="任务书名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入课题名称"
|
||||
v-model="queryParams.projectName"
|
||||
placeholder="请输入任务书名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input
|
||||
v-model="queryParams.projectLeader"
|
||||
placeholder="请输入项目负责人"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人ID" prop="projectLeaderId">
|
||||
<el-input
|
||||
v-model="queryParams.projectLeaderId"
|
||||
placeholder="请输入项目负责人ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.undertakingUnitName"
|
||||
placeholder="请输入承担单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位ID" prop="undertakingUnitId">
|
||||
<el-input
|
||||
v-model="queryParams.undertakingUnitId"
|
||||
placeholder="请输入承担单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="开始时间" prop="beginDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.beginDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="结束时间" prop="endDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.endDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="验收年度" prop="accYear">
|
||||
<el-input
|
||||
v-model="queryParams.accYear"
|
||||
placeholder="请输入验收年度"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="验收时间" prop="accDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.accDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input
|
||||
v-model="queryParams.competentDeptId"
|
||||
placeholder="请输入主管部门ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-input
|
||||
v-model="queryParams.competentDeptName"
|
||||
placeholder="请输入主管部门"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师ID" prop="managerId">
|
||||
<el-input
|
||||
v-model="queryParams.managerId"
|
||||
placeholder="请输入主管工程师ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-input
|
||||
v-model="queryParams.managerName"
|
||||
placeholder="请输入主管工程师"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="维护单位名称" prop="maintenanceUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.maintenanceUnitName"
|
||||
placeholder="请输入维护单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="维护单位ID" prop="maintenanceUnitId">
|
||||
<el-input
|
||||
v-model="queryParams.maintenanceUnitId"
|
||||
placeholder="请输入维护单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位名称" prop="reviewUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.reviewUnitName"
|
||||
placeholder="请输入审核单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位ID" prop="reviewUnitId">
|
||||
<el-input
|
||||
v-model="queryParams.reviewUnitId"
|
||||
placeholder="请输入审核单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="验收形式" prop="accMode">
|
||||
<el-select
|
||||
v-model="queryParams.accMode"
|
||||
placeholder="请选择验收形式"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.ACC_MODE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="验收结果" prop="accResult">
|
||||
<el-input
|
||||
v-model="queryParams.accResult"
|
||||
placeholder="请输入验收结果"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
|
|
@ -71,17 +245,50 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="课题编号" align="center" prop="code" />
|
||||
<el-table-column label="年度" align="center" prop="year" />
|
||||
<el-table-column label="课题名称" align="center" prop="name" />
|
||||
<el-table-column label="开始时间" align="center" prop="beginDate" />
|
||||
<el-table-column label="结束时间" align="center" prop="endDate" />
|
||||
<el-table-column label="主键Id" align="center" prop="id" />
|
||||
<el-table-column label="合同Id" align="center" prop="contractId" />
|
||||
<el-table-column label="任务书编号" align="center" prop="projectCode" />
|
||||
<el-table-column label="任务书名称" align="center" prop="projectName" />
|
||||
<el-table-column label="项目负责人" align="center" prop="projectLeader" />
|
||||
<el-table-column label="项目负责人ID" align="center" prop="projectLeaderId" />
|
||||
<el-table-column label="承担单位名称" align="center" prop="undertakingUnitName" />
|
||||
<el-table-column label="承担单位ID" align="center" prop="undertakingUnitId" />
|
||||
<el-table-column
|
||||
label="开始时间"
|
||||
align="center"
|
||||
prop="beginDate"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
label="结束时间"
|
||||
align="center"
|
||||
prop="endDate"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="验收年度" align="center" prop="accYear" />
|
||||
<el-table-column
|
||||
label="验收时间"
|
||||
align="center"
|
||||
prop="accDate"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="主管部门ID" align="center" prop="competentDeptId" />
|
||||
<el-table-column label="主管部门" align="center" prop="competentDeptName" />
|
||||
<el-table-column label="主管工程师ID" align="center" prop="managerId" />
|
||||
<el-table-column label="主管工程师" align="center" prop="managerName" />
|
||||
<el-table-column label="维护单位名称" align="center" prop="maintenanceUnitName" />
|
||||
<el-table-column label="承担单位名称" align="center" prop="undertakingUnitName" />
|
||||
<el-table-column label="维护单位ID" align="center" prop="maintenanceUnitId" />
|
||||
<el-table-column label="审核单位名称" align="center" prop="reviewUnitName" />
|
||||
<el-table-column label="审核单位ID" align="center" prop="reviewUnitId" />
|
||||
<el-table-column label="验收形式" align="center" prop="accMode">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.ACC_MODE" :value="scope.row.accMode" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="验收结果" align="center" prop="accResult" />
|
||||
<el-table-column label="状态" align="center" prop="state" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
|
|
@ -118,11 +325,13 @@
|
|||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { MainApi, MainVO } from '@/api/acceptance/acceptance'
|
||||
import MainForm from './MainForm.vue'
|
||||
|
||||
/** 验收主 列表 */
|
||||
/** 验收 列表 */
|
||||
defineOptions({ name: 'AcceptanceMain' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -134,9 +343,27 @@ const total = ref(0) // 列表的总页数
|
|||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
code: undefined,
|
||||
year: undefined,
|
||||
name: undefined,
|
||||
contractId: undefined,
|
||||
projectCode: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
beginDate: [],
|
||||
endDate: [],
|
||||
accYear: undefined,
|
||||
accDate: [],
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
maintenanceUnitId: undefined,
|
||||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
accMode: undefined,
|
||||
accResult: undefined,
|
||||
state: undefined,
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
|
@ -193,7 +420,7 @@ const handleExport = async () => {
|
|||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await MainApi.exportMain(queryParams)
|
||||
download.excel(data, '验收主.xls')
|
||||
download.excel(data, '验收.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
|
|
@ -204,4 +431,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,198 +1,85 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName" type="border-card">
|
||||
<el-tab-pane label="基本信息" name="basic">
|
||||
<fieldset>
|
||||
<legend>基本信息</legend>
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
|
||||
<el-row :gutter="20">
|
||||
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
|
||||
<el-form-item label="编号" prop="number">
|
||||
<el-input v-model="formData.number" placeholder="请输入编号" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="项目名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入项目名称" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="所属技术领域" prop="technicalField">
|
||||
<el-select v-model="formData.technicalField" clearable placeholder="请选择所属技术领域">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TECHNICAL_FIELD)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item></el-col>
|
||||
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="年度" prop="year">
|
||||
<el-input v-model="formData.year" placeholder="请输入年度" />
|
||||
</el-form-item></el-col> -->
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="开始时间" prop="beginDate">
|
||||
<el-date-picker v-model="formData.beginDate" type="date" value-format="x" placeholder="选择开始时间"
|
||||
style="width:100%" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="结束时间" prop="endDate">
|
||||
<el-date-picker v-model="formData.endDate" type="date" value-format="x" placeholder="请输入结束时间"
|
||||
style="width:100%" />
|
||||
</el-form-item></el-col>
|
||||
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="负责人Id" prop="directorId">
|
||||
<el-input v-model="formData.directorId" placeholder="请输入负责人Id" />
|
||||
</el-form-item></el-col> -->
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="负责人姓名" prop="director">
|
||||
<el-input v-model="formData.director" placeholder="请输入负责人姓名" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="负责人性别" prop="gender">
|
||||
<el-select v-model="formData.gender" clearable placeholder="请选择负责人性别">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input v-model="formData.age" placeholder="请输入年龄" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="学历" prop="education">
|
||||
<el-select v-model="formData.education" clearable placeholder="请选择学历">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_EDUCATION)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="所学专业" prop="major">
|
||||
<el-select v-model="formData.major" clearable placeholder="请选择所学专业">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="从事专业" prop="engagMajor">
|
||||
<el-select v-model="formData.engagMajor" clearable placeholder="请选择从事专业">
|
||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_MAJOR)" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="职务(职称)" prop="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入职务(职称)" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="电话" prop="phoneNo">
|
||||
<el-input v-model="formData.phoneNo" placeholder="请输入电话" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入邮箱" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="传真" prop="fax">
|
||||
<el-input v-model="formData.fax" placeholder="请输入传真" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="邮编" prop="postalCode">
|
||||
<el-input v-model="formData.postalCode" placeholder="请输入邮编" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="通讯地址" prop="address">
|
||||
<el-input v-model="formData.address" placeholder="请输入通讯地址" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24">
|
||||
<el-form-item label="主要业绩" prop="achievement">
|
||||
<el-input v-model="formData.achievement" placeholder="请输入主要业绩" type="textarea" :rows="4"/>
|
||||
</el-form-item></el-col>
|
||||
<!-- <el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-input v-model="formData.competentDeptName" placeholder="请输入主管部门" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="主管工程师ID" prop="managerId">
|
||||
<el-input v-model="formData.managerId" placeholder="请输入主管工程师ID" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-input v-model="formData.managerName" placeholder="请输入主管工程师" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="维护单位名称" prop="maintenanceUnitName">
|
||||
<el-input v-model="formData.maintenanceUnitName" placeholder="请输入维护单位名称" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="维护单位ID" prop="maintenanceUnitId">
|
||||
<el-input v-model="formData.maintenanceUnitId" placeholder="请输入维护单位ID" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input v-model="formData.undertakingUnitName" placeholder="请输入承担单位名称" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="承担单位ID" prop="undertakingUnitId">
|
||||
<el-input v-model="formData.undertakingUnitId" placeholder="请输入承担单位ID" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="审核单位名称" prop="reviewUnitName">
|
||||
<el-input v-model="formData.reviewUnitName" placeholder="请输入审核单位名称" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="审核单位ID" prop="reviewUnitId">
|
||||
<el-input v-model="formData.reviewUnitId" placeholder="请输入审核单位ID" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="状态" prop="state">
|
||||
<el-input v-model="formData.state" placeholder="请输入状态" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="创建人" prop="creator">
|
||||
<el-input v-model="formData.creator" placeholder="请输入创建人" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="formData.createTime" type="date" value-format="x" placeholder="选择创建时间"
|
||||
style="width:100%" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="更新人" prop="updater">
|
||||
<el-input v-model="formData.updater" placeholder="请输入更新人" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="更新时间" prop="updateTime">
|
||||
<el-date-picker v-model="formData.updateTime" type="date" value-format="x" placeholder="选择更新时间"
|
||||
style="width:100%" />
|
||||
</el-form-item></el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item label="是否删除" prop="deleted">
|
||||
<el-input v-model="formData.deleted" placeholder="请输入是否删除" />
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
</el-form>
|
||||
</fieldset>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="立项详细信息" name="info">
|
||||
<InfoForm ref="infoFormRef" :apply-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="立项单位信息" name="units">
|
||||
<UnitsForm ref="unitsFormRef" :apply-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="主要参加人员" name="participant">
|
||||
<ParticipantForm ref="participantFormRef" :apply-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="立项实施计划" name="plan">
|
||||
<PlanForm ref="planFormRef" :apply-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="立项经费" name="funds">
|
||||
<FundsForm ref="fundsFormRef" :apply-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="formData.projectName" placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="立项年度" prop="year">
|
||||
<el-input v-model="formData.year" placeholder="请输入立项年度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="牵头单位" prop="undertakingUnitName">
|
||||
<el-input v-model="formData.undertakingUnitName" placeholder="请输入牵头单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="牵头单位ID" prop="undertakingUnitId">
|
||||
<el-input v-model="formData.undertakingUnitId" placeholder="请输入牵头单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要完成单位" prop="mainUnits">
|
||||
<el-input v-model="formData.mainUnits" placeholder="请输入主要完成单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合作单位" prop="coopUnits">
|
||||
<el-input v-model="formData.coopUnits" placeholder="请输入合作单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目简介—项目目标" prop="briefObjectives">
|
||||
<Editor v-model="formData.briefObjectives" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目简介—研究内容" prop="briefContents">
|
||||
<Editor v-model="formData.briefContents" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目简介—创新点" prop="briefInnovate">
|
||||
<Editor v-model="formData.briefInnovate" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目简介—科技及产业化成果" prop="briefAchievement">
|
||||
<Editor v-model="formData.briefAchievement" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目简介—经济、社会效益" prop="briefBenefit">
|
||||
<Editor v-model="formData.briefBenefit" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="研发周期" prop="developmentCycle">
|
||||
<el-input v-model="formData.developmentCycle" placeholder="请输入研发周期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="总经费" prop="totalFee">
|
||||
<el-input v-model="formData.totalFee" placeholder="请输入总经费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="拨款" prop="applyFee">
|
||||
<el-input v-model="formData.applyFee" placeholder="请输入拨款" />
|
||||
</el-form-item>
|
||||
<el-form-item label="自筹" prop="sefeFee">
|
||||
<el-input v-model="formData.sefeFee" placeholder="请输入自筹" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-input v-model="formData.competentDeptName" placeholder="请输入主管部门" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师ID" prop="managerId">
|
||||
<el-input v-model="formData.managerId" placeholder="请输入主管工程师ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-input v-model="formData.managerName" placeholder="请输入主管工程师" />
|
||||
</el-form-item>
|
||||
<el-form-item label="维护单位名称" prop="maintenanceUnitName">
|
||||
<el-input v-model="formData.maintenanceUnitName" placeholder="请输入维护单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="维护单位ID" prop="maintenanceUnitId">
|
||||
<el-input v-model="formData.maintenanceUnitId" placeholder="请输入维护单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位名称" prop="reviewUnitName">
|
||||
<el-input v-model="formData.reviewUnitName" placeholder="请输入审核单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位ID" prop="reviewUnitId">
|
||||
<el-input v-model="formData.reviewUnitId" placeholder="请输入审核单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核状态" prop="state">
|
||||
<el-input v-model="formData.state" placeholder="请输入审核状态" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
|
|
@ -201,14 +88,8 @@
|
|||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi, MainVO } from '@/api/apply/apply'
|
||||
import InfoForm from './components/InfoForm.vue'
|
||||
import UnitsForm from './components/UnitsForm.vue'
|
||||
import ParticipantForm from './components/ParticipantForm.vue'
|
||||
import PlanForm from './components/PlanForm.vue'
|
||||
import FundsForm from './components/FundsForm.vue'
|
||||
import { DICT_TYPE, getIntDictOptions } from "@/utils/dict";
|
||||
|
||||
/** 立项申请主 表单 */
|
||||
/** 立项 表单 */
|
||||
defineOptions({ name: 'MainForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
|
|
@ -220,55 +101,35 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
number: undefined,
|
||||
name: undefined,
|
||||
technicalField: undefined,
|
||||
projectName: undefined,
|
||||
year: undefined,
|
||||
beginDate: new Date().getTime(),
|
||||
endDate: undefined,
|
||||
directorId: undefined,
|
||||
director: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
education: undefined,
|
||||
major: 1,
|
||||
engagMajor: 1,
|
||||
position: undefined,
|
||||
phoneNo: undefined,
|
||||
email: undefined,
|
||||
fax: undefined,
|
||||
postalCode: undefined,
|
||||
address: undefined,
|
||||
achievement: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
mainUnits: undefined,
|
||||
coopUnits: undefined,
|
||||
briefObjectives: undefined,
|
||||
briefContents: undefined,
|
||||
briefInnovate: undefined,
|
||||
briefAchievement: undefined,
|
||||
briefBenefit: undefined,
|
||||
developmentCycle: undefined,
|
||||
totalFee: undefined,
|
||||
applyFee: undefined,
|
||||
sefeFee: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
maintenanceUnitId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
state: undefined,
|
||||
creator: undefined,
|
||||
createTime: undefined,
|
||||
updater: undefined,
|
||||
updateTime: undefined,
|
||||
deleted: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('basic')
|
||||
const infoFormRef = ref()
|
||||
const unitsFormRef = ref()
|
||||
const participantFormRef = ref()
|
||||
const planFormRef = ref()
|
||||
const fundsFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
|
|
@ -280,27 +141,6 @@ const open = async (type: string, id?: number) => {
|
|||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await MainApi.getMain(id)
|
||||
if(formData.value.technicalField){
|
||||
formData.value.technicalField = Number(formData.value.technicalField)
|
||||
}
|
||||
if(formData.value.beginDate){
|
||||
formData.value.beginDate = Number(formData.value.beginDate)
|
||||
}
|
||||
if(formData.value.endDate){
|
||||
formData.value.endDate = Number(formData.value.endDate)
|
||||
}
|
||||
if(formData.value.engagMajor){
|
||||
formData.value.engagMajor =Number(formData.value.engagMajor)
|
||||
}
|
||||
if(formData.value.major){
|
||||
formData.value.major =Number(formData.value.major)
|
||||
}
|
||||
if(formData.value.gender){
|
||||
formData.value.gender =Number(formData.value.gender)
|
||||
}
|
||||
if(formData.value.education){
|
||||
formData.value.education =Number(formData.value.education)
|
||||
}
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
@ -313,47 +153,10 @@ const emit = defineEmits(['success']) // 定义 success 事件,用于操作成
|
|||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await infoFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'info'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await unitsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'units'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await participantFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'participant'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await planFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'plan'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await fundsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'funds'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as MainVO
|
||||
// 拼接子表的数据
|
||||
data.info = infoFormRef.value.getData()
|
||||
data.unitss = unitsFormRef.value.getData()
|
||||
data.participants = participantFormRef.value.getData()
|
||||
data.plans = planFormRef.value.getData()
|
||||
data.fundss = fundsFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await MainApi.createMain(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
@ -373,42 +176,30 @@ const submitForm = async () => {
|
|||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
number: undefined,
|
||||
name: undefined,
|
||||
technicalField: undefined,
|
||||
projectName: undefined,
|
||||
year: undefined,
|
||||
beginDate: undefined,
|
||||
endDate: undefined,
|
||||
directorId: undefined,
|
||||
director: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
education: undefined,
|
||||
major: undefined,
|
||||
engagMajor: undefined,
|
||||
position: undefined,
|
||||
phoneNo: undefined,
|
||||
email: undefined,
|
||||
fax: undefined,
|
||||
postalCode: undefined,
|
||||
address: undefined,
|
||||
achievement: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
mainUnits: undefined,
|
||||
coopUnits: undefined,
|
||||
briefObjectives: undefined,
|
||||
briefContents: undefined,
|
||||
briefInnovate: undefined,
|
||||
briefAchievement: undefined,
|
||||
briefBenefit: undefined,
|
||||
developmentCycle: undefined,
|
||||
totalFee: undefined,
|
||||
applyFee: undefined,
|
||||
sefeFee: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
maintenanceUnitId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
state: undefined,
|
||||
creator: undefined,
|
||||
createTime: undefined,
|
||||
updater: undefined,
|
||||
updateTime: undefined,
|
||||
deleted: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,162 +0,0 @@
|
|||
<template>
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="0px"
|
||||
:inline-message="true">
|
||||
<fieldset v-for="(item, index) in formData" :key="index">
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.fiscalYear" label="经费年度">
|
||||
<el-date-picker v-model="item.fiscalYear" value-format="YYYY-MM-DD" type="date" placeholder="选择经费年度"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.amount" label="经费金额">
|
||||
<el-date-picker v-model="item.amount" value-format="YYYY-MM-DD" type="date" placeholder="请输入经费金额"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.amount" label="经费金额">
|
||||
<el-date-picker v-model="item.amount" value-format="YYYY-MM-DD" type="date" placeholder="请输入经费金额"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</fieldset>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column v-for="(item, index) in cloumnList" :key="index" :label="item.title">
|
||||
<template #default="{ row }">
|
||||
<el-form-item class="mb-0px!">
|
||||
<el-input v-model="row[item.key]" :placeholder="'请输入' + row[item.key]" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费来源ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sourceId`" :rules="formRules.sourceId" class="mb-0px!">
|
||||
<el-input v-model="row.sourceId" placeholder="请输入经费来源ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="支出类型ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.expenseId`" :rules="formRules.expenseId" class="mb-0px!">
|
||||
<el-input v-model="row.expenseId" placeholder="请输入支出类型ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="二级科目" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.secondaryCategory`" :rules="formRules.secondaryCategory" class="mb-0px!">
|
||||
<el-input v-model="row.secondaryCategory" placeholder="请输入二级科目" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.amount`" :rules="formRules.amount" class="mb-0px!">
|
||||
<el-input v-model="row.amount" placeholder="请输入经费金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费年度" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.fiscalYear`" :rules="formRules.fiscalYear" class="mb-0px!">
|
||||
<el-input v-model="row.fiscalYear" placeholder="请输入经费年度" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="总金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.totalAmount`" :rules="formRules.totalAmount" class="mb-0px!">
|
||||
<el-input v-model="row.totalAmount" placeholder="请输入总金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加立项经费</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/apply/apply'
|
||||
|
||||
const props = defineProps<{
|
||||
applyId: undefined // 立项ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.applyId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getFundsListByApplyId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
applyId: undefined,
|
||||
sourceId: undefined,
|
||||
expenseId: undefined,
|
||||
secondaryCategory: undefined,
|
||||
amount: undefined,
|
||||
fiscalYear: undefined,
|
||||
totalAmount: undefined,
|
||||
}
|
||||
row.applyId = props.applyId
|
||||
formData.value.push(row)
|
||||
}
|
||||
//列表
|
||||
const cloumnList = ref(
|
||||
[{
|
||||
"key": "secondaryCategory",
|
||||
"title": '科目'
|
||||
}, {
|
||||
"key": "2024",
|
||||
"title": '2024年'
|
||||
}]
|
||||
)
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,123 +0,0 @@
|
|||
<template>
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="180px">
|
||||
<fieldset>
|
||||
<legend>项目信息</legend>
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="项目目的与意义" prop="purposeSignificance">
|
||||
<el-input v-model="formData.purposeSignificance" placeholder="请输入项目目的与意义" type="textarea" :rows="6" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="项目所属领域国内外产业、技术的现状和发展趋势" prop="currentSituation">
|
||||
<el-input v-model="formData.currentSituation" placeholder="请输入项目所属领域国内外产业、技术的现状和发展趋势" type="textarea"
|
||||
:rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="项目现有工作基础" prop="workFoundation">
|
||||
<el-input v-model="formData.workFoundation" placeholder="请输入项目现有工作基础" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="课题实施的风险分析" prop="riskAnalysis">
|
||||
<el-input v-model="formData.riskAnalysis" placeholder="请输入课题实施的风险分析" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
</el-row>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>项目实施目标及考核指标</legend>
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="项目目标" prop="objectives">
|
||||
<el-input v-model="formData.objectives" placeholder="请输入项目实施目标及考核指标-项目目标" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="考核指标" prop="evaluation">
|
||||
<el-input v-model="formData.evaluation" placeholder="请输入项目实施目标及考核指标-考核指标" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="考核指标依据" prop="according">
|
||||
<el-input v-model="formData.according" placeholder="请输入项目实施目标及考核指标-考核指标依据" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
</el-row>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<legend>主要研究内容开发内容</legend>
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="主要研究内容" prop="researchContents">
|
||||
<el-input v-model="formData.researchContents" placeholder="请输入主要研究开发内容-主要研究内容" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="技术路线" prop="roadmap">
|
||||
<el-input v-model="formData.roadmap" placeholder="请输入主要研究开发内容-技术路线" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :xs="24" :sm="12" :md="12" :lg="12">
|
||||
<el-form-item label="创新性" prop="innovation">
|
||||
<el-input v-model="formData.innovation" placeholder="请输入主要研究开发内容-创新性" type="textarea" :rows="6" />
|
||||
</el-form-item> </el-col>
|
||||
|
||||
</el-row>
|
||||
</fieldset>
|
||||
</el-form>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/apply/apply'
|
||||
|
||||
const props = defineProps<{
|
||||
applyId: undefined // 立项主表ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.applyId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
applyId: undefined,
|
||||
purposeSignificance: undefined,
|
||||
currentSituation: undefined,
|
||||
workFoundation: undefined,
|
||||
objectives: undefined,
|
||||
evaluation: undefined,
|
||||
according: undefined,
|
||||
researchContents: undefined,
|
||||
roadmap: undefined,
|
||||
innovation: undefined,
|
||||
riskAnalysis: undefined,
|
||||
}
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
const data = await MainApi.getInfoByApplyId(val)
|
||||
if (!data) {
|
||||
return
|
||||
}
|
||||
formData.value = data
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,138 +0,0 @@
|
|||
<template>
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" label-width="150px"
|
||||
:inline-message="true">
|
||||
<fieldset v-for="(item, index) in formData" :key="index">
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.orderNo" label="排序号">
|
||||
<el-input v-model="item.orderNo" placeholder="请输入排序号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.name" label="姓名">
|
||||
<el-input v-model="item.name" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.gender" label="性别">
|
||||
<el-input v-model="item.gender" placeholder="请输入性别" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.age" label="年龄">
|
||||
<el-input v-model="item.age" placeholder="请输入年龄" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.education" label="学历">
|
||||
<el-input v-model="item.education" placeholder="请输入学历" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.position" label="职务(职称)">
|
||||
<el-input v-model="item.position" placeholder="请输入职务(职称)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.engagingProfession" label="从事专业">
|
||||
<el-input v-model="item.engagingProfession" placeholder="请输入从事专业" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.divideWork" label="课题主要分工">
|
||||
<el-input v-model="item.divideWork" placeholder="请输入课题主要分工" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.deptName" label="所在单位名称">
|
||||
<el-input v-model="item.deptName" placeholder="请输入所在单位名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col><el-button @click="handleDelete(index)" link style="float:right" type="danger" plain>
|
||||
<Icon icon="ep:delete" class="mr-5px" /> 删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</fieldset>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加主要参加人员</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/apply/apply'
|
||||
|
||||
const props = defineProps<{
|
||||
applyId: undefined // 立项ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.applyId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getParticipantListByApplyId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
applyId: undefined,
|
||||
name: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
education: undefined,
|
||||
position: undefined,
|
||||
engagingProfession: undefined,
|
||||
divideWork: undefined,
|
||||
deptId: undefined,
|
||||
deptName: undefined,
|
||||
orderNo: undefined,
|
||||
creator: undefined,
|
||||
createTime: undefined,
|
||||
updater: undefined,
|
||||
updateTime: undefined,
|
||||
}
|
||||
row.applyId = props.applyId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,148 +0,0 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="时间" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.implDate`" :rules="formRules.implDate" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.implDate"
|
||||
value-format="x"
|
||||
type="datetimerange"
|
||||
placeholder="选择时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实施内容" min-width="400">
|
||||
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.name`" :rules="formRules.implContent" class="mb-0px!">
|
||||
<el-input v-model="row.implContent" placeholder="请输入实施内容" type="textarea" :rows="6"/>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item :prop="`${$index}.implContent`" :rules="formRules.implContent" class="mb-0px!">
|
||||
<Editor v-model="row.implContent" height="150px" />
|
||||
</el-form-item> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="创建人" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.creator`" :rules="formRules.creator" class="mb-0px!">
|
||||
<el-input v-model="row.creator" placeholder="请输入创建人" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.createTime`" :rules="formRules.createTime" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.createTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择创建时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新人" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.updater`" :rules="formRules.updater" class="mb-0px!">
|
||||
<el-input v-model="row.updater" placeholder="请输入更新人" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.updateTime`" :rules="formRules.updateTime" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.updateTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择更新时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加立项实施计划</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/apply/apply'
|
||||
|
||||
const props = defineProps<{
|
||||
applyId: undefined // 立项ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.applyId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getPlanListByApplyId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
applyId: undefined,
|
||||
implDate: undefined,
|
||||
implContent: undefined,
|
||||
creator: undefined,
|
||||
createTime: undefined,
|
||||
updater: undefined,
|
||||
updateTime: undefined,
|
||||
}
|
||||
row.applyId = props.applyId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,157 +0,0 @@
|
|||
<template>
|
||||
<el-form ref="formRef" :model="formData" :rules="formRules" v-loading="formLoading" :inline-message="true" label-width="150px">
|
||||
<fieldset v-for="(item, index) in formData" :key="index">
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.orderNo" label="排序号">
|
||||
<el-input v-model="item.orderNo" placeholder="请输入排序号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.deptName" label="单位名称">
|
||||
<el-input v-model="item.deptName" placeholder="请输入单位名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.groupFunds" label="集团经费">
|
||||
<el-input v-model="item.groupFunds" placeholder="请输入集团经费" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.selfFunds" label="自筹">
|
||||
<el-input v-model="item.selfFunds" placeholder="请输入自筹" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.otheerFunds" label="其他">
|
||||
<el-input v-model="item.otheerFunds" placeholder="请输入其他" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.linkPerson" label="联系人">
|
||||
<el-input v-model="item.linkPerson" placeholder="请输入联系人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.phoneNo" label="联系电话">
|
||||
<el-input v-model="item.phoneNo" placeholder="请输入联系电话" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.email" label="邮箱">
|
||||
<el-input v-model="item.email" placeholder="请输入邮箱" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.fax" label="传真">
|
||||
<el-input v-model="item.fax" placeholder="请输入传真" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.postalCode" label="邮编">
|
||||
<el-input v-model="item.postalCode" placeholder="请输入邮编" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6">
|
||||
<el-form-item :rules="formRules.address" label="通讯地址">
|
||||
<el-input v-model="item.address" placeholder="请输入通讯地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="24" :lg="24">
|
||||
<el-form-item :rules="formRules.sign" label="标识(1:承担单位,2:联合承担单位,3:参加单位 )" label-width="200px">
|
||||
<el-input v-model="item.sign" placeholder="请输入标识1:承担单位,2:联合承担单位,3:参加单位" type="textarea" :rows="3" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col><el-button @click="handleDelete(index)" link style="float:right" type="danger" plain>
|
||||
<Icon icon="ep:delete" class="mr-5px" /> 删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</fieldset>
|
||||
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加立项单位信息</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/apply/apply'
|
||||
|
||||
const props = defineProps<{
|
||||
applyId: undefined // 立项表ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.applyId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getUnitsListByApplyId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
applyId: undefined,
|
||||
deptId: undefined,
|
||||
deptName: undefined,
|
||||
groupFunds: undefined,
|
||||
selfFunds: undefined,
|
||||
otheerFunds: undefined,
|
||||
linkPerson: undefined,
|
||||
phoneNo: undefined,
|
||||
email: undefined,
|
||||
fax: undefined,
|
||||
postalCode: undefined,
|
||||
address: undefined,
|
||||
sign: undefined,
|
||||
orderNo: undefined,
|
||||
tenantId: undefined,
|
||||
creator: undefined,
|
||||
createTime: undefined,
|
||||
updater: undefined,
|
||||
updateTime: undefined,
|
||||
}
|
||||
row.applyId = props.applyId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,60 +1,67 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="100px">
|
||||
<el-form-item label="编号" prop="number">
|
||||
<el-input v-model="queryParams.number" placeholder="请输入编号" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.projectName"
|
||||
placeholder="请输入项目名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
<el-form-item label="立项年度" prop="year">
|
||||
<el-input
|
||||
v-model="queryParams.year"
|
||||
placeholder="请输入立项年度"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属技术领域" prop="technicalField">
|
||||
<el-input v-model="queryParams.technicalField" placeholder="请输入所属技术领域" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
<el-form-item label="牵头单位" prop="undertakingUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.undertakingUnitName"
|
||||
placeholder="请输入牵头单位"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="年度" prop="year">
|
||||
<el-input v-model="queryParams.year" placeholder="请输入年度" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人姓名" prop="director">
|
||||
<el-input v-model="queryParams.director" placeholder="请输入负责人姓名" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-input v-model="queryParams.competentDeptName" placeholder="请输入主管部门" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-input v-model="queryParams.managerName" placeholder="请输入主管工程师" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="维护单位名称" prop="maintenanceUnitName">
|
||||
<el-input v-model="queryParams.maintenanceUnitName" placeholder="请输入维护单位名称" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input v-model="queryParams.undertakingUnitName" placeholder="请输入承担单位名称" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位名称" prop="reviewUnitName">
|
||||
<el-input v-model="queryParams.reviewUnitName" placeholder="请输入审核单位名称" clearable @keyup.enter="handleQuery"
|
||||
class="!w-240px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="state">
|
||||
<el-input v-model="queryParams.state" placeholder="请输入状态" clearable @keyup.enter="handleQuery" class="!w-240px" />
|
||||
<el-form-item label="审核状态" prop="state">
|
||||
<el-input
|
||||
v-model="queryParams.state"
|
||||
placeholder="请输入审核状态"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery">
|
||||
<Icon icon="ep:search" class="mr-5px" /> 搜索
|
||||
</el-button>
|
||||
<el-button @click="resetQuery">
|
||||
<Icon icon="ep:refresh" class="mr-5px" /> 重置
|
||||
</el-button>
|
||||
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['apply:main:create']">
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['apply:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button type="success" plain @click="handleExport" :loading="exportLoading" v-hasPermi="['apply:main:export']">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['apply:main:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
|
@ -64,78 +71,50 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<!-- <el-table-column label="id" align="center" prop="id" /> -->
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="编号" align="center" prop="number" />
|
||||
<el-table-column label="项目名称" align="center" prop="name" width="200"/>
|
||||
<el-table-column label="所属技术领域" align="center" prop="technicalField" width="200"/>
|
||||
<el-table-column label="年度" align="center" prop="year" />
|
||||
<el-table-column label="负责人姓名" align="center" prop="director" width="200"/>
|
||||
<el-table-column label="电话" align="center" prop="phoneNo" width="200"/>
|
||||
<el-table-column label="主管部门" align="center" prop="competentDeptName" />
|
||||
<el-table-column label="主管工程师" align="center" prop="managerName" width="200"/>
|
||||
<el-table-column label="维护单位名称" align="center" prop="maintenanceUnitName" width="200"/>
|
||||
<el-table-column label="承担单位名称" align="center" prop="undertakingUnitName" width="200"/>
|
||||
<el-table-column label="审核单位名称" align="center" prop="reviewUnitName" width="200"/>
|
||||
<el-table-column label="状态" align="center" prop="state" />
|
||||
<el-table-column label="操作" align="center" fixed="right" width="300">
|
||||
<el-table-column label="主键id" align="center" prop="id" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="立项年度" align="center" prop="year" />
|
||||
<el-table-column label="牵头单位" align="center" prop="undertakingUnitName" />
|
||||
<el-table-column label="牵头单位ID" align="center" prop="undertakingUnitId" />
|
||||
<el-table-column label="主要完成单位" align="center" prop="mainUnits" />
|
||||
<el-table-column label="合作单位" align="center" prop="coopUnits" />
|
||||
<el-table-column label="研发周期" align="center" prop="developmentCycle" />
|
||||
<el-table-column label="总经费" align="center" prop="totalFee" />
|
||||
<el-table-column label="拨款" align="center" prop="applyFee" />
|
||||
<el-table-column label="自筹" align="center" prop="sefeFee" />
|
||||
<el-table-column label="审核状态" align="center" prop="state" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['apply:main:update']">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['apply:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button link type="primary" @click="handleAduit(scope.row.id)" >
|
||||
审核
|
||||
</el-button>
|
||||
<el-button link type="primary" @click="aduitRecord(scope.row.id)" >
|
||||
审核记录
|
||||
</el-button>
|
||||
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['apply:main:delete']">
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['apply:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<MainForm ref="formRef" @success="getList" />
|
||||
<!-- 审核意见 -->
|
||||
<el-dialog title="审核" v-model="Visible" width="600px" append-to-body destroy-on-close>
|
||||
<el-form :model="listenerFieldForm" size="small" label-width="96px" ref="listenerFieldFormRef" style="height: 136px">
|
||||
<el-form-item label="审核意见:" prop="comment" :rules="{ required: true, trigger: ['blur', 'change'] }">
|
||||
<el-input v-model="listenerFieldForm.comment" clearable type="textarea" :rows="6" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核状态:">
|
||||
<el-radio-group v-model="listenerFieldForm.status">
|
||||
<el-radio-button label="1">通过</el-radio-button>
|
||||
<el-radio-button label="0">不通过</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button size="small" @click="Visible = false">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="saveListenerFiled">确 定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<!-- 审核记录 -->
|
||||
<el-dialog title="审核记录" v-model="Visible1" width="600px" append-to-body destroy-on-close>
|
||||
<el-timeline style="max-width: 600px">
|
||||
<el-timeline-item :timestamp="item.createTime" placement="top" v-for="(item,index) in listRecord" :key="index">
|
||||
<el-card>
|
||||
<div class="flex items-center justify-between ">
|
||||
<h4>{{item.creatorName}}</h4>
|
||||
<span style="color:#409eff" v-if="item.status==1">通过</span>
|
||||
<span v-else style="color: #f00000">不通过</span>
|
||||
</div>
|
||||
<p>{{item.comment}}</p>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
|
||||
</el-timeline>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
|
@ -143,31 +122,21 @@ import download from '@/utils/download'
|
|||
import { MainApi, MainVO } from '@/api/apply/apply'
|
||||
import MainForm from './MainForm.vue'
|
||||
|
||||
/** 立项申请主 列表 */
|
||||
/** 立项 列表 */
|
||||
defineOptions({ name: 'ApplyMain' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
const Visible = ref(false) // 监听器 显示状态
|
||||
const Visible1 = ref(false) // 监听器 显示状态
|
||||
const listenerFieldForm = ref<any>({}) // 监听器 注入字段 详情表单
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<MainVO[]>([]) // 列表的数据
|
||||
const listRecord = ref([]) // 审核列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
number: undefined,
|
||||
name: undefined,
|
||||
technicalField: undefined,
|
||||
projectName: undefined,
|
||||
year: undefined,
|
||||
director: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
reviewUnitName: undefined,
|
||||
state: undefined,
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
|
@ -213,7 +182,7 @@ const handleDelete = async (id: number) => {
|
|||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch { }
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
|
|
@ -224,59 +193,15 @@ const handleExport = async () => {
|
|||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await MainApi.exportMain(queryParams)
|
||||
download.excel(data, '立项申请主.xls')
|
||||
download.excel(data, '立项.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
const listenerFieldFormRef = ref()
|
||||
//审核
|
||||
const listid = ref()
|
||||
const handleAduit = (id?: number) => {
|
||||
listid.value = id
|
||||
Visible.value = true
|
||||
}
|
||||
// 保存监听器注入字段
|
||||
const saveListenerFiled = async () => {
|
||||
|
||||
let validateStatus = await listenerFieldFormRef.value.validate()
|
||||
if (!validateStatus) return // 验证不通过直接返回
|
||||
try {
|
||||
var param ={
|
||||
itemId: listid.value,
|
||||
status:listenerFieldForm.value.status,
|
||||
comment:listenerFieldForm.value.comment
|
||||
}
|
||||
await MainApi.saveRecordList(param)
|
||||
Visible.value = false
|
||||
} finally {
|
||||
|
||||
}
|
||||
}
|
||||
//审核记录
|
||||
const aduitRecord = async (id?: number) => {
|
||||
try {
|
||||
const data = await MainApi.getRecordList(id)
|
||||
listRecord.value = data
|
||||
Visible1.value = true
|
||||
|
||||
} finally {
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
<style>
|
||||
.el-timeline-item__content .el-card__body{
|
||||
padding:10px;
|
||||
}
|
||||
.el-timeline-item__content .el-card__body h4{
|
||||
line-height: 30px;
|
||||
margin: 0;
|
||||
padding:0
|
||||
}
|
||||
</style>
|
||||
</script>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
|
||||
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -7,17 +7,43 @@
|
|||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="合同ID" prop="contractId">
|
||||
<el-input v-model="formData.contractId" placeholder="请输入合同ID" />
|
||||
<el-form-item label="任务书Id" prop="contractId">
|
||||
<el-input v-model="formData.contractId" placeholder="请输入任务书Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更类型" prop="changeType">
|
||||
<el-select v-model="formData.changeType" placeholder="请选择变更类型">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="formData.projectName" placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input v-model="formData.projectLeader" placeholder="请输入项目负责人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人Id" prop="projectLeaderId">
|
||||
<el-input v-model="formData.projectLeaderId" placeholder="请输入项目负责人Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input v-model="formData.projectCode" placeholder="请输入项目编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更前" prop="bfChange">
|
||||
<el-input v-model="formData.bfChange" type="textarea" placeholder="请输入变更前" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更后" prop="afChange">
|
||||
<el-input v-model="formData.afChange" type="textarea" placeholder="请输入变更后" />
|
||||
</el-form-item>
|
||||
<el-form-item label="详细原因及具体举措" prop="detailReasons">
|
||||
<el-input v-model="formData.detailReasons" type="textarea" placeholder="请输入详细原因及具体举措" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更年度" prop="year">
|
||||
<el-input v-model="formData.year" placeholder="请输入变更年度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更类型;1:延长期限;2:调整经费;3:调整负责人;4:调整设备;5:其他" prop="chengeType">
|
||||
<el-select v-model="formData.chengeType" placeholder="请选择变更类型;1:延长期限;2:调整经费;3:调整负责人;4:调整设备;5:其他">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.CHENGE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="变更内容" prop="changeContent">
|
||||
<Editor v-model="formData.changeContent" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
||||
</el-form-item>
|
||||
|
|
@ -51,6 +77,9 @@
|
|||
<el-form-item label="状态" prop="state">
|
||||
<el-input v-model="formData.state" placeholder="请输入状态" />
|
||||
</el-form-item>
|
||||
<el-form-item label="乐观锁" prop="revision">
|
||||
<el-input v-model="formData.revision" placeholder="请输入乐观锁" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
|
|
@ -59,9 +88,10 @@
|
|||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi, MainVO } from '@/api/change/change'
|
||||
|
||||
/** 变更主 表单 */
|
||||
/** 变更申请 表单 */
|
||||
defineOptions({ name: 'MainForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
|
|
@ -74,8 +104,15 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|||
const formData = ref({
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
changeType: undefined,
|
||||
changeContent: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
projectCode: undefined,
|
||||
bfChange: undefined,
|
||||
afChange: undefined,
|
||||
detailReasons: undefined,
|
||||
year: undefined,
|
||||
chengeType: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
|
|
@ -87,6 +124,7 @@ const formData = ref({
|
|||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
state: undefined,
|
||||
revision: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
})
|
||||
|
|
@ -139,8 +177,15 @@ const resetForm = () => {
|
|||
formData.value = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
changeType: undefined,
|
||||
changeContent: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
projectCode: undefined,
|
||||
bfChange: undefined,
|
||||
afChange: undefined,
|
||||
detailReasons: undefined,
|
||||
year: undefined,
|
||||
chengeType: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
|
|
@ -152,7 +197,8 @@ const resetForm = () => {
|
|||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
state: undefined,
|
||||
revision: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -8,25 +8,84 @@
|
|||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="合同ID" prop="contractId">
|
||||
<el-form-item label="任务书Id" prop="contractId">
|
||||
<el-input
|
||||
v-model="queryParams.contractId"
|
||||
placeholder="请输入合同ID"
|
||||
placeholder="请输入任务书Id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="变更类型" prop="changeType">
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.projectName"
|
||||
placeholder="请输入项目名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input
|
||||
v-model="queryParams.projectLeader"
|
||||
placeholder="请输入项目负责人"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人Id" prop="projectLeaderId">
|
||||
<el-input
|
||||
v-model="queryParams.projectLeaderId"
|
||||
placeholder="请输入项目负责人Id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input
|
||||
v-model="queryParams.projectCode"
|
||||
placeholder="请输入项目编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="变更年度" prop="year">
|
||||
<el-input
|
||||
v-model="queryParams.year"
|
||||
placeholder="请输入变更年度"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="变更类型;1:延长期限;2:调整经费;3:调整负责人;4:调整设备;5:其他" prop="chengeType">
|
||||
<el-select
|
||||
v-model="queryParams.changeType"
|
||||
placeholder="请选择变更类型"
|
||||
v-model="queryParams.chengeType"
|
||||
placeholder="请选择变更类型;1:延长期限;2:调整经费;3:调整负责人;4:调整设备;5:其他"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.CHENGE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input
|
||||
v-model="queryParams.competentDeptId"
|
||||
placeholder="请输入主管部门ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-input
|
||||
v-model="queryParams.competentDeptName"
|
||||
|
|
@ -36,6 +95,15 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师ID" prop="managerId">
|
||||
<el-input
|
||||
v-model="queryParams.managerId"
|
||||
placeholder="请输入主管工程师ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-input
|
||||
v-model="queryParams.managerName"
|
||||
|
|
@ -54,6 +122,15 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="维护单位ID" prop="maintenanceUnitId">
|
||||
<el-input
|
||||
v-model="queryParams.maintenanceUnitId"
|
||||
placeholder="请输入维护单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.undertakingUnitName"
|
||||
|
|
@ -63,6 +140,15 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位ID" prop="undertakingUnitId">
|
||||
<el-input
|
||||
v-model="queryParams.undertakingUnitId"
|
||||
placeholder="请输入承担单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位名称" prop="reviewUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.reviewUnitName"
|
||||
|
|
@ -72,6 +158,15 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位ID" prop="reviewUnitId">
|
||||
<el-input
|
||||
v-model="queryParams.reviewUnitId"
|
||||
placeholder="请输入审核单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="state">
|
||||
<el-input
|
||||
v-model="queryParams.state"
|
||||
|
|
@ -81,6 +176,26 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="乐观锁" prop="revision">
|
||||
<el-input
|
||||
v-model="queryParams.revision"
|
||||
placeholder="请输入乐观锁"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
|
|
@ -108,15 +223,40 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="合同ID" align="center" prop="contractId" />
|
||||
<el-table-column label="变更类型" align="center" prop="changeType" />
|
||||
<el-table-column label="主键Id" align="center" prop="id" />
|
||||
<el-table-column label="任务书Id" align="center" prop="contractId" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="项目负责人" align="center" prop="projectLeader" />
|
||||
<el-table-column label="项目负责人Id" align="center" prop="projectLeaderId" />
|
||||
<el-table-column label="项目编号" align="center" prop="projectCode" />
|
||||
<el-table-column label="变更前" align="center" prop="bfChange" />
|
||||
<el-table-column label="变更后" align="center" prop="afChange" />
|
||||
<el-table-column label="详细原因及具体举措" align="center" prop="detailReasons" />
|
||||
<el-table-column label="变更年度" align="center" prop="year" />
|
||||
<el-table-column label="变更类型;1:延长期限;2:调整经费;3:调整负责人;4:调整设备;5:其他" align="center" prop="chengeType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.CHENGE_TYPE" :value="scope.row.chengeType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="主管部门ID" align="center" prop="competentDeptId" />
|
||||
<el-table-column label="主管部门" align="center" prop="competentDeptName" />
|
||||
<el-table-column label="主管工程师ID" align="center" prop="managerId" />
|
||||
<el-table-column label="主管工程师" align="center" prop="managerName" />
|
||||
<el-table-column label="维护单位名称" align="center" prop="maintenanceUnitName" />
|
||||
<el-table-column label="维护单位ID" align="center" prop="maintenanceUnitId" />
|
||||
<el-table-column label="承担单位名称" align="center" prop="undertakingUnitName" />
|
||||
<el-table-column label="承担单位ID" align="center" prop="undertakingUnitId" />
|
||||
<el-table-column label="审核单位名称" align="center" prop="reviewUnitName" />
|
||||
<el-table-column label="审核单位ID" align="center" prop="reviewUnitId" />
|
||||
<el-table-column label="状态" align="center" prop="state" />
|
||||
<el-table-column label="乐观锁" align="center" prop="revision" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
@ -152,11 +292,13 @@
|
|||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { MainApi, MainVO } from '@/api/change/change'
|
||||
import MainForm from './MainForm.vue'
|
||||
|
||||
/** 变更主 列表 */
|
||||
/** 变更申请 列表 */
|
||||
defineOptions({ name: 'ChangeMain' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -169,13 +311,28 @@ const queryParams = reactive({
|
|||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined,
|
||||
changeType: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
projectCode: undefined,
|
||||
bfChange: undefined,
|
||||
afChange: undefined,
|
||||
detailReasons: undefined,
|
||||
year: undefined,
|
||||
chengeType: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
maintenanceUnitId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
reviewUnitName: undefined,
|
||||
reviewUnitId: undefined,
|
||||
state: undefined,
|
||||
revision: undefined,
|
||||
createTime: [],
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
|
@ -231,7 +388,7 @@ const handleExport = async () => {
|
|||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await MainApi.exportMain(queryParams)
|
||||
download.excel(data, '变更主.xls')
|
||||
download.excel(data, '变更申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
|
|
@ -242,4 +399,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -7,11 +7,17 @@
|
|||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="合同编号" prop="code">
|
||||
<el-input v-model="formData.code" placeholder="请输入合同编号" />
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="formData.projectName" placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="任务名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入任务名称" />
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input v-model="formData.projectLeader" placeholder="请输入项目负责人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目负责人Id" prop="projectLeaderId">
|
||||
<el-input v-model="formData.projectLeaderId" placeholder="请输入项目负责人Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input v-model="formData.projectCode" placeholder="请输入项目编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所属技术领域" prop="technicalField">
|
||||
<el-select v-model="formData.technicalField" placeholder="请选择所属技术领域">
|
||||
|
|
@ -23,19 +29,6 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划类型Id" prop="planId">
|
||||
<el-input v-model="formData.planId" placeholder="请输入计划类型Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计划类型名称" prop="planName">
|
||||
<el-select v-model="formData.planName" placeholder="请选择计划类型名称">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.PLAN_ID)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="年度" prop="year">
|
||||
<el-input v-model="formData.year" placeholder="请输入年度" />
|
||||
</el-form-item>
|
||||
|
|
@ -55,47 +48,36 @@
|
|||
placeholder="选择结束时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人Id" prop="directorId">
|
||||
<el-input v-model="formData.directorId" placeholder="请输入负责人Id" />
|
||||
<el-form-item label="计划类型" prop="planName">
|
||||
<el-select v-model="formData.planName" placeholder="请选择计划类型">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.PLAN_ID)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人姓名" prop="director">
|
||||
<el-input v-model="formData.director" placeholder="请输入负责人姓名" />
|
||||
<el-form-item label="计划Id" prop="planId">
|
||||
<el-input v-model="formData.planId" placeholder="请输入计划Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人性别" prop="gender">
|
||||
<el-input v-model="formData.gender" placeholder="请输入负责人性别" />
|
||||
<el-form-item label="课题实施所需的其他配套条件" prop="supportingCondition">
|
||||
<el-input v-model="formData.supportingCondition" placeholder="请输入课题实施所需的其他配套条件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-input v-model="formData.gender" placeholder="请输入性别" />
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input v-model="formData.age" placeholder="请输入年龄" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学历" prop="education">
|
||||
<el-select v-model="formData.education" placeholder="请选择学历">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input v-model="formData.education" placeholder="请输入学历" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所学专业" prop="major">
|
||||
<el-select v-model="formData.major" placeholder="请选择所学专业">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MAJOR)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input v-model="formData.major" placeholder="请输入所学专业" />
|
||||
</el-form-item>
|
||||
<el-form-item label="从事专业" prop="engagMajor">
|
||||
<el-select v-model="formData.engagMajor" placeholder="请选择从事专业">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MAJOR)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input v-model="formData.engagMajor" placeholder="请输入从事专业" />
|
||||
</el-form-item>
|
||||
<el-form-item label="职务(职称)" prop="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入职务(职称)" />
|
||||
|
|
@ -113,10 +95,10 @@
|
|||
<el-input v-model="formData.postalCode" placeholder="请输入邮编" />
|
||||
</el-form-item>
|
||||
<el-form-item label="通讯地址" prop="address">
|
||||
<el-input v-model="formData.address" type="textarea" placeholder="请输入通讯地址" />
|
||||
<el-input v-model="formData.address" placeholder="请输入通讯地址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要业绩" prop="achievement">
|
||||
<el-input v-model="formData.achievement" type="textarea" placeholder="请输入主要业绩" />
|
||||
<el-input v-model="formData.achievement" placeholder="请输入主要业绩" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
||||
|
|
@ -154,20 +136,29 @@
|
|||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
<el-tab-pane label="合同经费" name="funds">
|
||||
<FundsForm ref="fundsFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同详细信息" name="info">
|
||||
<el-tab-pane label="任务书详细信息" name="info">
|
||||
<InfoForm ref="infoFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同主要参加人员" name="participant">
|
||||
<ParticipantForm ref="participantFormRef" :contract-id="formData.id" />
|
||||
<el-tab-pane label="任务书项目目标" name="target">
|
||||
<TargetForm ref="targetFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同实施计划" name="plan">
|
||||
<el-tab-pane label="任务书考核指标" name="check">
|
||||
<CheckForm ref="checkFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目实施计划" name="plan">
|
||||
<PlanForm ref="planFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="合同单位信息" name="units">
|
||||
<UnitsForm ref="unitsFormRef" :contract-id="formData.id" />
|
||||
<el-tab-pane label="任务书经费" name="funds">
|
||||
<FundsForm ref="fundsFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="参加单位" name="unit">
|
||||
<UnitForm ref="unitFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目所需设备" name="device">
|
||||
<DeviceForm ref="deviceFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="主要参加人员" name="participant">
|
||||
<ParticipantForm ref="participantFormRef" :contract-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
|
|
@ -179,13 +170,16 @@
|
|||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi, MainVO } from '@/api/contract/contract'
|
||||
import FundsForm from './components/FundsForm.vue'
|
||||
import InfoForm from './components/InfoForm.vue'
|
||||
import ParticipantForm from './components/ParticipantForm.vue'
|
||||
import TargetForm from './components/TargetForm.vue'
|
||||
import CheckForm from './components/CheckForm.vue'
|
||||
import PlanForm from './components/PlanForm.vue'
|
||||
import UnitsForm from './components/UnitsForm.vue'
|
||||
import FundsForm from './components/FundsForm.vue'
|
||||
import UnitForm from './components/UnitForm.vue'
|
||||
import DeviceForm from './components/DeviceForm.vue'
|
||||
import ParticipantForm from './components/ParticipantForm.vue'
|
||||
|
||||
/** 合同(任务书)信息主 表单 */
|
||||
/** 任务书主 表单 */
|
||||
defineOptions({ name: 'MainForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
|
|
@ -197,16 +191,17 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
code: undefined,
|
||||
name: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
projectCode: undefined,
|
||||
technicalField: undefined,
|
||||
planId: undefined,
|
||||
planName: undefined,
|
||||
year: undefined,
|
||||
beginDate: undefined,
|
||||
endDate: undefined,
|
||||
directorId: undefined,
|
||||
director: undefined,
|
||||
planName: undefined,
|
||||
planId: undefined,
|
||||
supportingCondition: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
education: undefined,
|
||||
|
|
@ -232,16 +227,52 @@ const formData = ref({
|
|||
state: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
projectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
|
||||
projectLeader: [{ required: true, message: '项目负责人不能为空', trigger: 'blur' }],
|
||||
projectLeaderId: [{ required: true, message: '项目负责人Id不能为空', trigger: 'blur' }],
|
||||
projectCode: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }],
|
||||
technicalField: [{ required: true, message: '所属技术领域不能为空', trigger: 'change' }],
|
||||
year: [{ required: true, message: '年度不能为空', trigger: 'blur' }],
|
||||
beginDate: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
|
||||
endDate: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
|
||||
planName: [{ required: true, message: '计划类型不能为空', trigger: 'change' }],
|
||||
planId: [{ required: true, message: '计划Id不能为空', trigger: 'blur' }],
|
||||
supportingCondition: [{ required: true, message: '课题实施所需的其他配套条件不能为空', trigger: 'blur' }],
|
||||
gender: [{ required: true, message: '性别不能为空', trigger: 'blur' }],
|
||||
age: [{ required: true, message: '年龄不能为空', trigger: 'blur' }],
|
||||
education: [{ required: true, message: '学历不能为空', trigger: 'blur' }],
|
||||
major: [{ required: true, message: '所学专业不能为空', trigger: 'blur' }],
|
||||
engagMajor: [{ required: true, message: '从事专业不能为空', trigger: 'blur' }],
|
||||
position: [{ required: true, message: '职务(职称)不能为空', trigger: 'blur' }],
|
||||
phoneNo: [{ required: true, message: '电话不能为空', trigger: 'blur' }],
|
||||
email: [{ required: true, message: '邮箱不能为空', trigger: 'blur' }],
|
||||
fax: [{ required: true, message: '传真不能为空', trigger: 'blur' }],
|
||||
postalCode: [{ required: true, message: '邮编不能为空', trigger: 'blur' }],
|
||||
address: [{ required: true, message: '通讯地址不能为空', trigger: 'blur' }],
|
||||
achievement: [{ required: true, message: '主要业绩不能为空', trigger: 'blur' }],
|
||||
competentDeptId: [{ required: true, message: '主管部门ID不能为空', trigger: 'blur' }],
|
||||
competentDeptName: [{ required: true, message: '主管部门不能为空', trigger: 'blur' }],
|
||||
managerId: [{ required: true, message: '主管工程师ID不能为空', trigger: 'blur' }],
|
||||
managerName: [{ required: true, message: '主管工程师不能为空', trigger: 'blur' }],
|
||||
maintenanceUnitName: [{ required: true, message: '维护单位名称不能为空', trigger: 'blur' }],
|
||||
maintenanceUnitId: [{ required: true, message: '维护单位ID不能为空', trigger: 'blur' }],
|
||||
undertakingUnitName: [{ required: true, message: '承担单位名称不能为空', trigger: 'blur' }],
|
||||
undertakingUnitId: [{ required: true, message: '承担单位ID不能为空', trigger: 'blur' }],
|
||||
reviewUnitName: [{ required: true, message: '审核单位名称不能为空', trigger: 'blur' }],
|
||||
reviewUnitId: [{ required: true, message: '审核单位ID不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('funds')
|
||||
const fundsFormRef = ref()
|
||||
const subTabsName = ref('info')
|
||||
const infoFormRef = ref()
|
||||
const participantFormRef = ref()
|
||||
const targetFormRef = ref()
|
||||
const checkFormRef = ref()
|
||||
const planFormRef = ref()
|
||||
const unitsFormRef = ref()
|
||||
const fundsFormRef = ref()
|
||||
const unitFormRef = ref()
|
||||
const deviceFormRef = ref()
|
||||
const participantFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
|
|
@ -267,12 +298,6 @@ const submitForm = async () => {
|
|||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await fundsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'funds'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await infoFormRef.value.validate()
|
||||
} catch (e) {
|
||||
|
|
@ -280,9 +305,15 @@ const submitForm = async () => {
|
|||
return
|
||||
}
|
||||
try {
|
||||
await participantFormRef.value.validate()
|
||||
await targetFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'participant'
|
||||
subTabsName.value = 'target'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await checkFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'check'
|
||||
return
|
||||
}
|
||||
try {
|
||||
|
|
@ -292,9 +323,27 @@ const submitForm = async () => {
|
|||
return
|
||||
}
|
||||
try {
|
||||
await unitsFormRef.value.validate()
|
||||
await fundsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'units'
|
||||
subTabsName.value = 'funds'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await unitFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'unit'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await deviceFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'device'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await participantFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'participant'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
|
|
@ -302,11 +351,14 @@ const submitForm = async () => {
|
|||
try {
|
||||
const data = formData.value as unknown as MainVO
|
||||
// 拼接子表的数据
|
||||
data.fundss = fundsFormRef.value.getData()
|
||||
data.info = infoFormRef.value.getData()
|
||||
data.participants = participantFormRef.value.getData()
|
||||
data.targets = targetFormRef.value.getData()
|
||||
data.checks = checkFormRef.value.getData()
|
||||
data.plans = planFormRef.value.getData()
|
||||
data.unitss = unitsFormRef.value.getData()
|
||||
data.fundss = fundsFormRef.value.getData()
|
||||
data.units = unitFormRef.value.getData()
|
||||
data.devices = deviceFormRef.value.getData()
|
||||
data.participants = participantFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await MainApi.createMain(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
@ -326,16 +378,17 @@ const submitForm = async () => {
|
|||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
code: undefined,
|
||||
name: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
projectCode: undefined,
|
||||
technicalField: undefined,
|
||||
planId: undefined,
|
||||
planName: undefined,
|
||||
year: undefined,
|
||||
beginDate: undefined,
|
||||
endDate: undefined,
|
||||
directorId: undefined,
|
||||
director: undefined,
|
||||
planName: undefined,
|
||||
planId: undefined,
|
||||
supportingCondition: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
education: undefined,
|
||||
|
|
@ -362,4 +415,4 @@ const resetForm = () => {
|
|||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,163 +0,0 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="成果类型包含(论文、期刊、专利、软著等)" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.type`" :rules="formRules.type" class="mb-0px!">
|
||||
<el-select v-model="row.type" placeholder="请选择成果类型包含(论文、期刊、专利、软著等)">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.CG_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数量" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.number`" :rules="formRules.number" class="mb-0px!">
|
||||
<el-input v-model="row.number" placeholder="请输入数量" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="归属(甲方独有,共有)" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.belong`" :rules="formRules.belong" class="mb-0px!">
|
||||
<el-input v-model="row.belong" placeholder="请输入归属(甲方独有,共有)" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="乐观锁" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.revision`" :rules="formRules.revision" class="mb-0px!">
|
||||
<el-input v-model="row.revision" placeholder="请输入乐观锁" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建人" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.createdBy`" :rules="formRules.createdBy" class="mb-0px!">
|
||||
<el-input v-model="row.createdBy" placeholder="请输入创建人" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.createdTime`" :rules="formRules.createdTime" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.createdTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择创建时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新人" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.updatedBy`" :rules="formRules.updatedBy" class="mb-0px!">
|
||||
<el-input v-model="row.updatedBy" placeholder="请输入更新人" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.updatedTime`" :rules="formRules.updatedTime" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.updatedTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择更新时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同预期主要成果形式、知识产权归属</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 立项主表ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getAchieListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
type: undefined,
|
||||
number: undefined,
|
||||
belong: undefined,
|
||||
revision: undefined,
|
||||
createdBy: undefined,
|
||||
createdTime: undefined,
|
||||
updatedBy: undefined,
|
||||
updatedTime: undefined,
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,141 +0,0 @@
|
|||
<template>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['contract:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="成果类型包含(论文、期刊、专利、软著等)" align="center" prop="type">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.CG_TYPE" :value="scope.row.type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="数量" align="center" prop="number" />
|
||||
<el-table-column label="归属(甲方独有,共有)" align="center" prop="belong" />
|
||||
<el-table-column label="乐观锁" align="center" prop="revision" />
|
||||
<el-table-column label="创建人" align="center" prop="createdBy" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createdTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="更新人" align="center" prop="updatedBy" />
|
||||
<el-table-column
|
||||
label="更新时间"
|
||||
align="center"
|
||||
prop="updatedTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['contract:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['contract:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<AchieForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
import AchieForm from './AchieForm.vue'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 立项主表ID(主表的关联字段)
|
||||
}>()
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined
|
||||
})
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
(val) => {
|
||||
queryParams.contractId = val
|
||||
handleQuery()
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MainApi.getAchiePage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
if (!props.contractId) {
|
||||
message.error('请选择一个合同(任务书)信息主')
|
||||
return
|
||||
}
|
||||
formRef.value.open(type, id, props.contractId)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MainApi.deleteAchie(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="序号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.number`" :rules="formRules.number" class="mb-0px!">
|
||||
<el-input v-model="row.number" placeholder="请输入序号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="考核指标" min-width="200">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.check`" :rules="formRules.check" class="mb-0px!">
|
||||
<el-input v-model="row.check" type="textarea" placeholder="请输入考核指标" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加任务书考核指标</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 任务书主键Id(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '任务书主键Id不能为空', trigger: 'blur' }],
|
||||
number: [{ required: true, message: '序号不能为空', trigger: 'blur' }],
|
||||
check: [{ required: true, message: '考核指标不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getCheckListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
number: undefined,
|
||||
check: undefined,
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="设备名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
|
||||
<el-input v-model="row.name" placeholder="请输入设备名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="设备型号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.type`" :rules="formRules.type" class="mb-0px!">
|
||||
<el-select v-model="row.type" placeholder="请选择设备型号">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="费用" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.expense`" :rules="formRules.expense" class="mb-0px!">
|
||||
<el-input v-model="row.expense" placeholder="请输入费用" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="生产厂家(供应商)" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.supplier`" :rules="formRules.supplier" class="mb-0px!">
|
||||
<el-input v-model="row.supplier" placeholder="请输入生产厂家(供应商)" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="作用" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.influence`" :rules="formRules.influence" class="mb-0px!">
|
||||
<el-input v-model="row.influence" placeholder="请输入作用" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="课题实施所需的其他配套条件" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.complement`" :rules="formRules.complement" class="mb-0px!">
|
||||
<el-input v-model="row.complement" placeholder="请输入课题实施所需的其他配套条件" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加项目所需设备</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同主键Id(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getDeviceListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
name: undefined,
|
||||
type: undefined,
|
||||
expense: undefined,
|
||||
supplier: undefined,
|
||||
influence: undefined,
|
||||
complement: undefined,
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -9,59 +9,94 @@
|
|||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="经费来源ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sourceId`" :rules="formRules.sourceId" class="mb-0px!">
|
||||
<el-input v-model="row.sourceId" placeholder="请输入经费来源ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="支出类型ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.expenseId`" :rules="formRules.expenseId" class="mb-0px!">
|
||||
<el-input v-model="row.expenseId" placeholder="请输入支出类型ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="二级科目" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.secondaryCategory`" :rules="formRules.secondaryCategory" class="mb-0px!">
|
||||
<el-input v-model="row.secondaryCategory" placeholder="请输入二级科目" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.amount`" :rules="formRules.amount" class="mb-0px!">
|
||||
<el-input v-model="row.amount" placeholder="请输入经费金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费年度" min-width="150">
|
||||
<el-table-column label="经费年度" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.fiscalYear`" :rules="formRules.fiscalYear" class="mb-0px!">
|
||||
<el-input v-model="row.fiscalYear" placeholder="请输入经费年度" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="来源或支出;0:来源;1:支出" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sourceExpend`" :rules="formRules.sourceExpend" class="mb-0px!">
|
||||
<el-input v-model="row.sourceExpend" placeholder="请输入来源或支出;0:来源;1:支出" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="集团经费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sGroupFund`" :rules="formRules.sGroupFund" class="mb-0px!">
|
||||
<el-input v-model="row.sGroupFund" placeholder="请输入集团经费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="政府拨款" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sGovernmentFund`" :rules="formRules.sGovernmentFund" class="mb-0px!">
|
||||
<el-input v-model="row.sGovernmentFund" placeholder="请输入政府拨款" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目承担单位自筹经费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sSelfFinancing`" :rules="formRules.sSelfFinancing" class="mb-0px!">
|
||||
<el-input v-model="row.sSelfFinancing" placeholder="请输入项目承担单位自筹经费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="其他" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sOtherFund`" :rules="formRules.sOtherFund" class="mb-0px!">
|
||||
<el-input v-model="row.sOtherFund" placeholder="请输入其他" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="合计" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sTotalFund`" :rules="formRules.sTotalFund" class="mb-0px!">
|
||||
<el-input v-model="row.sTotalFund" placeholder="请输入合计" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="设备购置费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.equipmentFund`" :rules="formRules.equipmentFund" class="mb-0px!">
|
||||
<el-input v-model="row.equipmentFund" placeholder="请输入设备购置费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="材料费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.materialFund`" :rules="formRules.materialFund" class="mb-0px!">
|
||||
<el-input v-model="row.materialFund" placeholder="请输入材料费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实验外协费" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.experimentFund`" :rules="formRules.experimentFund" class="mb-0px!">
|
||||
<el-input v-model="row.experimentFund" placeholder="请输入实验外协费" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="人员费用" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.peopleFund`" :rules="formRules.peopleFund" class="mb-0px!">
|
||||
<el-input v-model="row.peopleFund" placeholder="请输入人员费用" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="其他费用" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.otherFund`" :rules="formRules.otherFund" class="mb-0px!">
|
||||
<el-input v-model="row.otherFund" placeholder="请输入其他费用" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="总金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.totalAmount`" :rules="formRules.totalAmount" class="mb-0px!">
|
||||
<el-input v-model="row.totalAmount" placeholder="请输入总金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位Id" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.unitId`" :rules="formRules.unitId" class="mb-0px!">
|
||||
<el-input v-model="row.unitId" placeholder="请输入单位Id" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.unitName`" :rules="formRules.unitName" class="mb-0px!">
|
||||
<el-input v-model="row.unitName" placeholder="请输入单位名称" />
|
||||
<el-form-item :prop="`${$index}.totalFund`" :rules="formRules.totalFund" class="mb-0px!">
|
||||
<el-input v-model="row.totalFund" placeholder="请输入总金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -73,14 +108,14 @@
|
|||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同经费</el-button>
|
||||
<el-button @click="handleAdd" round>+ 添加任务书经费</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
contractId: undefined // 任务书ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
|
|
@ -113,14 +148,19 @@ const handleAdd = () => {
|
|||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
sourceId: undefined,
|
||||
expenseId: undefined,
|
||||
secondaryCategory: undefined,
|
||||
amount: undefined,
|
||||
fiscalYear: undefined,
|
||||
totalAmount: undefined,
|
||||
unitId: undefined,
|
||||
unitName: undefined,
|
||||
sourceExpend: undefined,
|
||||
sGroupFund: undefined,
|
||||
sGovernmentFund: undefined,
|
||||
sSelfFinancing: undefined,
|
||||
sOtherFund: undefined,
|
||||
sTotalFund: undefined,
|
||||
equipmentFund: undefined,
|
||||
materialFund: undefined,
|
||||
experimentFund: undefined,
|
||||
peopleFund: undefined,
|
||||
otherFund: undefined,
|
||||
totalFund: undefined,
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
|
|
@ -142,4 +182,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,120 +0,0 @@
|
|||
<template>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['contract:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="经费科目" align="center" prop="secondaryCategory" />
|
||||
<el-table-column label="经费金额" align="center" prop="amount" />
|
||||
<el-table-column label="经费年度" align="center" prop="fiscalYear" />
|
||||
<el-table-column label="总金额" align="center" prop="totalAmount" />
|
||||
<el-table-column label="单位名称" align="center" prop="unitName" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['contract:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['contract:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<FundsForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
import FundsForm from './FundsForm.vue'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
}>()
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined
|
||||
})
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
(val) => {
|
||||
queryParams.contractId = val
|
||||
handleQuery()
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MainApi.getFundsPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
if (!props.contractId) {
|
||||
message.error('请选择一个合同(任务书)信息主')
|
||||
return
|
||||
}
|
||||
formRef.value.open(type, id, props.contractId)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MainApi.deleteFunds(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -7,54 +7,53 @@
|
|||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="项目目的与意义" prop="purposeSignificance">
|
||||
<el-input v-model="formData.purposeSignificance" type="textarea" placeholder="请输入项目目的与意义" />
|
||||
<Editor v-model="formData.purposeSignificance" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目所属领域国内外产业、技术的现状和发展趋势" prop="currentSituation">
|
||||
<el-select v-model="formData.currentSituation" placeholder="请选择项目所属领域国内外产业、技术的现状和发展趋势">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.TECHNICAL_FIELD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<Editor v-model="formData.currentSituation" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目现有工作基础" prop="workFoundation">
|
||||
<el-input v-model="formData.workFoundation" type="textarea" placeholder="请输入项目现有工作基础" />
|
||||
<Editor v-model="formData.workFoundation" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目实施目标及考核指标-项目目标" prop="objectives">
|
||||
<el-input v-model="formData.objectives" type="textarea" placeholder="请输入项目实施目标及考核指标-项目目标" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目实施目标及考核指标-考核指标" prop="evaluation">
|
||||
<el-input v-model="formData.evaluation" type="textarea" placeholder="请输入项目实施目标及考核指标-考核指标" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目实施目标及考核指标-考核指标依据" prop="according">
|
||||
<el-input v-model="formData.according" type="textarea" placeholder="请输入项目实施目标及考核指标-考核指标依据" />
|
||||
<el-form-item label="项目实施目标及考核指标-考核指标依据" prop="projectAccording">
|
||||
<Editor v-model="formData.projectAccording" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要研究开发内容-主要研究内容" prop="researchContents">
|
||||
<el-input v-model="formData.researchContents" type="textarea" placeholder="请输入主要研究开发内容-主要研究内容" />
|
||||
<Editor v-model="formData.researchContents" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要研究开发内容-技术路线" prop="roadmap">
|
||||
<el-input v-model="formData.roadmap" type="textarea" placeholder="请输入主要研究开发内容-技术路线" />
|
||||
<el-form-item label="主要研究开发内容-技术路线" prop="researchRoadmap">
|
||||
<Editor v-model="formData.researchRoadmap" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主要研究开发内容-创新性" prop="innovation">
|
||||
<el-input v-model="formData.innovation" type="textarea" placeholder="请输入主要研究开发内容-创新性" />
|
||||
<el-form-item label="主要研究开发内容-创新性" prop="researchInnovation">
|
||||
<Editor v-model="formData.researchInnovation" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="课题实施的风险分析" prop="riskAnalysis">
|
||||
<el-input v-model="formData.riskAnalysis" type="textarea" placeholder="请输入课题实施的风险分析" />
|
||||
<Editor v-model="formData.riskAnalysis" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="预期主要成果形式、知识产权归属" prop="projectAchie">
|
||||
<Editor v-model="formData.projectAchie" height="150px" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同主键ID(主表的关联字段)
|
||||
contractId: undefined // 任务书ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '任务书ID不能为空', trigger: 'blur' }],
|
||||
purposeSignificance: [{ required: true, message: '项目目的与意义不能为空', trigger: 'blur' }],
|
||||
currentSituation: [{ required: true, message: '项目所属领域国内外产业、技术的现状和发展趋势不能为空', trigger: 'blur' }],
|
||||
workFoundation: [{ required: true, message: '项目现有工作基础不能为空', trigger: 'blur' }],
|
||||
projectAccording: [{ required: true, message: '项目实施目标及考核指标-考核指标依据不能为空', trigger: 'blur' }],
|
||||
researchContents: [{ required: true, message: '主要研究开发内容-主要研究内容不能为空', trigger: 'blur' }],
|
||||
researchRoadmap: [{ required: true, message: '主要研究开发内容-技术路线不能为空', trigger: 'blur' }],
|
||||
researchInnovation: [{ required: true, message: '主要研究开发内容-创新性不能为空', trigger: 'blur' }],
|
||||
riskAnalysis: [{ required: true, message: '课题实施的风险分析不能为空', trigger: 'blur' }],
|
||||
projectAchie: [{ required: true, message: '预期主要成果形式、知识产权归属不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
|
|
@ -69,13 +68,12 @@ watch(
|
|||
purposeSignificance: undefined,
|
||||
currentSituation: undefined,
|
||||
workFoundation: undefined,
|
||||
objectives: undefined,
|
||||
evaluation: undefined,
|
||||
according: undefined,
|
||||
projectAccording: undefined,
|
||||
researchContents: undefined,
|
||||
roadmap: undefined,
|
||||
innovation: undefined,
|
||||
researchRoadmap: undefined,
|
||||
researchInnovation: undefined,
|
||||
riskAnalysis: undefined,
|
||||
projectAchie: undefined,
|
||||
}
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
|
|
@ -106,4 +104,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,125 +0,0 @@
|
|||
<template>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['contract:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="项目目的与意义" align="center" prop="purposeSignificance" />
|
||||
<el-table-column label="项目所属领域国内外产业、技术的现状和发展趋势" align="center" prop="currentSituation" />
|
||||
<el-table-column label="项目现有工作基础" align="center" prop="workFoundation" />
|
||||
<el-table-column label="项目实施目标及考核指标-项目目标" align="center" prop="objectives" />
|
||||
<el-table-column label="项目实施目标及考核指标-考核指标" align="center" prop="evaluation" />
|
||||
<el-table-column label="项目实施目标及考核指标-考核指标依据" align="center" prop="according" />
|
||||
<el-table-column label="主要研究开发内容-主要研究内容" align="center" prop="researchContents" />
|
||||
<el-table-column label="主要研究开发内容-技术路线" align="center" prop="roadmap" />
|
||||
<el-table-column label="主要研究开发内容-创新性" align="center" prop="innovation" />
|
||||
<el-table-column label="课题实施的风险分析" align="center" prop="riskAnalysis" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['contract:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['contract:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<InfoForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
import InfoForm from './InfoForm.vue'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同主键ID(主表的关联字段)
|
||||
}>()
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined
|
||||
})
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
(val) => {
|
||||
queryParams.contractId = val
|
||||
handleQuery()
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MainApi.getInfoPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
if (!props.contractId) {
|
||||
message.error('请选择一个合同(任务书)信息主')
|
||||
return
|
||||
}
|
||||
formRef.value.open(type, id, props.contractId)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MainApi.deleteInfo(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -33,37 +33,21 @@
|
|||
<el-table-column label="学历" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.education`" :rules="formRules.education" class="mb-0px!">
|
||||
<el-select v-model="row.education" placeholder="请选择学历">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input v-model="row.education" placeholder="请输入学历" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="职务(职称)" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.position`" :rules="formRules.position" class="mb-0px!">
|
||||
<el-select v-model="row.position" placeholder="请选择职务(职称)">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
<el-input v-model="row.position" placeholder="请输入职务(职称)" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="从事专业" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.engagingProfession`" :rules="formRules.engagingProfession" class="mb-0px!">
|
||||
<el-select v-model="row.engagingProfession" placeholder="请选择从事专业">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MAJOR)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-input v-model="row.engagingProfession" placeholder="请输入从事专业" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -103,15 +87,14 @@
|
|||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同主要参加人员</el-button>
|
||||
<el-button @click="handleAdd" round>+ 添加主要参加人员</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
contractId: undefined // 合同id(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
|
|
@ -175,4 +158,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,125 +0,0 @@
|
|||
<template>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['contract:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="姓名" align="center" prop="name" />
|
||||
<el-table-column label="性别" align="center" prop="gender" />
|
||||
<el-table-column label="年龄" align="center" prop="age" />
|
||||
<el-table-column label="学历" align="center" prop="education" />
|
||||
<el-table-column label="职务(职称)" align="center" prop="position" />
|
||||
<el-table-column label="从事专业" align="center" prop="engagingProfession" />
|
||||
<el-table-column label="课题主要分工" align="center" prop="divideWork" />
|
||||
<el-table-column label="所在单位id" align="center" prop="deptId" />
|
||||
<el-table-column label="所在单位名称" align="center" prop="deptName" />
|
||||
<el-table-column label="排序号" align="center" prop="orderNo" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['contract:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['contract:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<ParticipantForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
import ParticipantForm from './ParticipantForm.vue'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
}>()
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined
|
||||
})
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
(val) => {
|
||||
queryParams.contractId = val
|
||||
handleQuery()
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MainApi.getParticipantPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
if (!props.contractId) {
|
||||
message.error('请选择一个合同(任务书)信息主')
|
||||
return
|
||||
}
|
||||
formRef.value.open(type, id, props.contractId)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MainApi.deleteParticipant(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -21,10 +21,17 @@
|
|||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="实施内容" min-width="400">
|
||||
<el-table-column label="实施内容" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.implContent`" :rules="formRules.implContent" class="mb-0px!">
|
||||
<Editor v-model="row.implContent" height="150px" />
|
||||
<el-input v-model="row.implContent" placeholder="请输入实施内容" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="乐观锁" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.revision`" :rules="formRules.revision" class="mb-0px!">
|
||||
<el-input v-model="row.revision" placeholder="请输入乐观锁" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -36,14 +43,14 @@
|
|||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同实施计划</el-button>
|
||||
<el-button @click="handleAdd" round>+ 添加项目实施计划</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
contractId: undefined // 任务书ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
|
|
@ -78,6 +85,7 @@ const handleAdd = () => {
|
|||
contractId: undefined,
|
||||
implDate: undefined,
|
||||
implContent: undefined,
|
||||
revision: undefined,
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
|
|
@ -99,4 +107,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,117 +0,0 @@
|
|||
<template>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['contract:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="时间" align="center" prop="implDate" />
|
||||
<el-table-column label="实施内容" align="center" prop="implContent" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['contract:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['contract:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<PlanForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
import PlanForm from './PlanForm.vue'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同ID(主表的关联字段)
|
||||
}>()
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined
|
||||
})
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
(val) => {
|
||||
queryParams.contractId = val
|
||||
handleQuery()
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MainApi.getPlanPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
if (!props.contractId) {
|
||||
message.error('请选择一个合同(任务书)信息主')
|
||||
return
|
||||
}
|
||||
formRef.value.open(type, id, props.contractId)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MainApi.deletePlan(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="序号" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.number`" :rules="formRules.number" class="mb-0px!">
|
||||
<el-input v-model="row.number" placeholder="请输入序号" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目目标" min-width="200">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.target`" :rules="formRules.target" class="mb-0px!">
|
||||
<el-input v-model="row.target" type="textarea" placeholder="请输入项目目标" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加任务书项目目标</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 任务书主键Id(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '任务书主键Id不能为空', trigger: 'blur' }],
|
||||
number: [{ required: true, message: '序号不能为空', trigger: 'blur' }],
|
||||
target: [{ required: true, message: '项目目标不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getTargetListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
number: undefined,
|
||||
target: undefined,
|
||||
}
|
||||
row.contractId = props.contractId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -39,8 +39,8 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="其他" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.otheerFunds`" :rules="formRules.otheerFunds" class="mb-0px!">
|
||||
<el-input v-model="row.otheerFunds" placeholder="请输入其他" />
|
||||
<el-form-item :prop="`${$index}.otherFunds`" :rules="formRules.otherFunds" class="mb-0px!">
|
||||
<el-input v-model="row.otherFunds" placeholder="请输入其他" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
@ -108,14 +108,14 @@
|
|||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加合同单位信息</el-button>
|
||||
<el-button @click="handleAdd" round>+ 添加参加单位</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同表ID(主表的关联字段)
|
||||
contractId: undefined // 任务书Id(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
|
|
@ -135,7 +135,7 @@ watch(
|
|||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getUnitsListByContractId(val)
|
||||
formData.value = await MainApi.getUnitListByContractId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
@ -152,7 +152,7 @@ const handleAdd = () => {
|
|||
deptName: undefined,
|
||||
groupFunds: undefined,
|
||||
selfFunds: undefined,
|
||||
otheerFunds: undefined,
|
||||
otherFunds: undefined,
|
||||
linkPerson: undefined,
|
||||
phoneNo: undefined,
|
||||
email: undefined,
|
||||
|
|
@ -182,4 +182,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,126 +0,0 @@
|
|||
<template>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['contract:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="单位名称" align="center" prop="deptName" />
|
||||
<el-table-column label="集团经费" align="center" prop="groupFunds" />
|
||||
<el-table-column label="自筹" align="center" prop="selfFunds" />
|
||||
<el-table-column label="其他" align="center" prop="otheerFunds" />
|
||||
<el-table-column label="联系人" align="center" prop="linkPerson" />
|
||||
<el-table-column label="联系电话" align="center" prop="phoneNo" />
|
||||
<el-table-column label="邮箱" align="center" prop="email" />
|
||||
<el-table-column label="传真" align="center" prop="fax" />
|
||||
<el-table-column label="邮编" align="center" prop="postalCode" />
|
||||
<el-table-column label="通讯地址" align="center" prop="address" />
|
||||
<el-table-column label="排序号" align="center" prop="orderNo" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['contract:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['contract:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<UnitsForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/contract/contract'
|
||||
import UnitsForm from './UnitsForm.vue'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const props = defineProps<{
|
||||
contractId: undefined // 合同表ID(主表的关联字段)
|
||||
}>()
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined
|
||||
})
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.contractId,
|
||||
(val) => {
|
||||
queryParams.contractId = val
|
||||
handleQuery()
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MainApi.getUnitsPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
if (!props.contractId) {
|
||||
message.error('请选择一个合同(任务书)信息主')
|
||||
return
|
||||
}
|
||||
formRef.value.open(type, id, props.contractId)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MainApi.deleteUnits(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -8,19 +8,28 @@
|
|||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="合同编号" prop="code">
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.code"
|
||||
placeholder="请输入合同编号"
|
||||
v-model="queryParams.projectName"
|
||||
placeholder="请输入项目名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="任务名称" prop="name">
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入任务名称"
|
||||
v-model="queryParams.projectLeader"
|
||||
placeholder="请输入项目负责人"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input
|
||||
v-model="queryParams.projectCode"
|
||||
placeholder="请输入项目编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
|
|
@ -41,21 +50,6 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划类型名称" prop="planName">
|
||||
<el-select
|
||||
v-model="queryParams.planName"
|
||||
placeholder="请选择计划类型名称"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.PLAN_ID)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="年度" prop="year">
|
||||
<el-input
|
||||
v-model="queryParams.year"
|
||||
|
|
@ -65,69 +59,6 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人姓名" prop="director">
|
||||
<el-input
|
||||
v-model="queryParams.director"
|
||||
placeholder="请输入负责人姓名"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-input
|
||||
v-model="queryParams.competentDeptName"
|
||||
placeholder="请输入主管部门"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-input
|
||||
v-model="queryParams.managerName"
|
||||
placeholder="请输入主管工程师"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="维护单位名称" prop="maintenanceUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.maintenanceUnitName"
|
||||
placeholder="请输入维护单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.undertakingUnitName"
|
||||
placeholder="请输入承担单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核单位名称" prop="reviewUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.reviewUnitName"
|
||||
placeholder="请输入审核单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="state">
|
||||
<el-input
|
||||
v-model="queryParams.state"
|
||||
placeholder="请输入状态"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
|
|
@ -155,54 +86,39 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="合同编号" align="center" prop="code" />
|
||||
<el-table-column label="任务名称" align="center" prop="name" />
|
||||
<el-table-column label="主键id" align="center" prop="id" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
||||
<el-table-column label="项目负责人" align="center" prop="projectLeader" />
|
||||
<el-table-column label="项目负责人Id" align="center" prop="projectLeaderId" />
|
||||
<el-table-column label="项目编号" align="center" prop="projectCode" />
|
||||
<el-table-column label="所属技术领域" align="center" prop="technicalField">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.TECHNICAL_FIELD" :value="scope.row.technicalField" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="计划类型Id" align="center" prop="planId" />
|
||||
<el-table-column label="计划类型名称" align="center" prop="planName">
|
||||
<el-table-column label="年度" align="center" prop="year" />
|
||||
<el-table-column
|
||||
label="开始时间"
|
||||
align="center"
|
||||
prop="beginDate"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
label="结束时间"
|
||||
align="center"
|
||||
prop="endDate"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="计划类型" align="center" prop="planName">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.PLAN_ID" :value="scope.row.planName" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年度" align="center" prop="year" />
|
||||
<el-table-column label="开始时间" align="center" prop="beginDate" />
|
||||
<el-table-column label="结束时间" align="center" prop="endDate" />
|
||||
<el-table-column label="负责人Id" align="center" prop="directorId" />
|
||||
<el-table-column label="负责人姓名" align="center" prop="director" />
|
||||
<el-table-column label="负责人性别" align="center" prop="gender" />
|
||||
<el-table-column label="年龄" align="center" prop="age" />
|
||||
<el-table-column label="学历" align="center" prop="education">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.EDUCATION" :value="scope.row.education" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="所学专业" align="center" prop="major">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.MAJOR" :value="scope.row.major" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="从事专业" align="center" prop="engagMajor">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.MAJOR" :value="scope.row.engagMajor" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="职务(职称)" align="center" prop="position" />
|
||||
<el-table-column label="电话" align="center" prop="phoneNo" />
|
||||
<el-table-column label="邮箱" align="center" prop="email" />
|
||||
<el-table-column label="传真" align="center" prop="fax" />
|
||||
<el-table-column label="邮编" align="center" prop="postalCode" />
|
||||
<el-table-column label="通讯地址" align="center" prop="address" />
|
||||
<el-table-column label="主要业绩" align="center" prop="achievement" />
|
||||
<el-table-column label="主管部门ID" align="center" prop="competentDeptId" />
|
||||
<el-table-column label="主管部门" align="center" prop="competentDeptName" />
|
||||
<el-table-column label="主管工程师ID" align="center" prop="managerId" />
|
||||
<el-table-column label="主管工程师" align="center" prop="managerName" />
|
||||
<el-table-column label="维护单位名称" align="center" prop="maintenanceUnitName" />
|
||||
<el-table-column label="承担单位名称" align="center" prop="undertakingUnitName" />
|
||||
<el-table-column label="审核单位名称" align="center" prop="reviewUnitName" />
|
||||
<el-table-column label="状态" align="center" prop="state" />
|
||||
|
|
@ -254,7 +170,7 @@ import download from '@/utils/download'
|
|||
import { MainApi, MainVO } from '@/api/contract/contract'
|
||||
import MainForm from './MainForm.vue'
|
||||
|
||||
/** 合同(任务书)信息主 列表 */
|
||||
/** 任务书主 列表 */
|
||||
defineOptions({ name: 'ContractMain' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -266,18 +182,11 @@ const total = ref(0) // 列表的总页数
|
|||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
code: undefined,
|
||||
name: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectCode: undefined,
|
||||
technicalField: undefined,
|
||||
planName: undefined,
|
||||
year: undefined,
|
||||
director: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerName: undefined,
|
||||
maintenanceUnitName: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
reviewUnitName: undefined,
|
||||
state: undefined,
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
|
@ -333,7 +242,7 @@ const handleExport = async () => {
|
|||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await MainApi.exportMain(queryParams)
|
||||
download.excel(data, '合同(任务书)信息主.xls')
|
||||
download.excel(data, '任务书主.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
|
|
@ -344,4 +253,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
<template>
|
||||
<!--
|
||||
<doc-alert title="【线索】线索管理" url="https://doc.iocoder.cn/crm/clue/" />
|
||||
<doc-alert title="【通用】数据权限" url="https://doc.iocoder.cn/crm/permission/" />
|
||||
-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
|
||||
<!-- <doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
|
||||
<!-- <doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<doc-alert title="代码生成(单表)" url="https://doc.iocoder.cn/new-feature/" />
|
||||
<!-- <doc-alert title="代码生成(单表)" url="https://doc.iocoder.cn/new-feature/" />
|
||||
<doc-alert title="代码生成(树表)" url="https://doc.iocoder.cn/new-feature/tree/" />
|
||||
<doc-alert title="代码生成(主子表)" url="https://doc.iocoder.cn/new-feature/master-sub/" />
|
||||
<doc-alert title="单元测试" url="https://doc.iocoder.cn/unit-test/" />
|
||||
<doc-alert title="单元测试" url="https://doc.iocoder.cn/unit-test/" />-->
|
||||
|
||||
<!-- 搜索 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="配置中心" url="https://doc.iocoder.cn/config-center/" />
|
||||
<!-- <doc-alert title="配置中心" url="https://doc.iocoder.cn/config-center/" />-->
|
||||
|
||||
<!-- 搜索 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="数据库文档" url="https://doc.iocoder.cn/db-doc/" />
|
||||
<!-- <doc-alert title="数据库文档" url="https://doc.iocoder.cn/db-doc/" />-->
|
||||
|
||||
<ContentWrap title="数据库文档">
|
||||
<div class="mb-10px">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="代码生成(单表)" url="https://doc.iocoder.cn/new-feature/" />
|
||||
<!-- <doc-alert title="代码生成(单表)" url="https://doc.iocoder.cn/new-feature/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="代码生成(树表)" url="https://doc.iocoder.cn/new-feature/tree/" />
|
||||
<!-- <doc-alert title="代码生成(树表)" url="https://doc.iocoder.cn/new-feature/tree/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="代码生成(主子表)" url="https://doc.iocoder.cn/new-feature/master-sub/" />
|
||||
<!-- <doc-alert title="代码生成(主子表)" url="https://doc.iocoder.cn/new-feature/master-sub/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="代码生成(主子表)" url="https://doc.iocoder.cn/new-feature/master-sub/" />
|
||||
<!-- <doc-alert title="代码生成(主子表)" url="https://doc.iocoder.cn/new-feature/master-sub/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="代码生成(主子表)" url="https://doc.iocoder.cn/new-feature/master-sub/" />
|
||||
<!-- <doc-alert title="代码生成(主子表)" url="https://doc.iocoder.cn/new-feature/master-sub/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<doc-alert title="数据库 MyBatis" url="https://doc.iocoder.cn/mybatis/" />
|
||||
<doc-alert title="多数据源(读写分离)" url="https://doc.iocoder.cn/dynamic-datasource/" />
|
||||
<!-- <doc-alert title="数据库 MyBatis" url="https://doc.iocoder.cn/mybatis/" />-->
|
||||
<!-- <doc-alert title="多数据源(读写分离)" url="https://doc.iocoder.cn/dynamic-datasource/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<IFrame v-if="!loading" :src="url" />
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" />
|
||||
<!-- <doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" />-->
|
||||
<!-- 搜索 -->
|
||||
<ContentWrap>
|
||||
<el-form
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" />
|
||||
<!-- <doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" />-->
|
||||
|
||||
<!-- 搜索 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<doc-alert title="定时任务" url="https://doc.iocoder.cn/job/" />
|
||||
<doc-alert title="异步任务" url="https://doc.iocoder.cn/async-task/" />
|
||||
<doc-alert title="消息队列" url="https://doc.iocoder.cn/message-queue/" />
|
||||
<!-- <doc-alert title="定时任务" url="https://doc.iocoder.cn/job/" />-->
|
||||
<!-- <doc-alert title="异步任务" url="https://doc.iocoder.cn/async-task/" />-->
|
||||
<!-- <doc-alert title="消息队列" url="https://doc.iocoder.cn/message-queue/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<doc-alert title="Redis 缓存" url="https://doc.iocoder.cn/redis-cache/" />
|
||||
<doc-alert title="本地缓存" url="https://doc.iocoder.cn/local-cache/" />
|
||||
<!-- <doc-alert title="Redis 缓存" url="https://doc.iocoder.cn/redis-cache/" />-->
|
||||
<!-- <doc-alert title="本地缓存" url="https://doc.iocoder.cn/local-cache/" />-->
|
||||
<el-scrollbar height="calc(100vh - 88px - 40px - 50px)">
|
||||
<el-row>
|
||||
<!-- 基本信息 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
|
||||
<!-- <doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<IFrame v-if="!loading" v-loading="loading" :src="src" />
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
|
||||
<!-- <doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<IFrame v-if="!loading" v-loading="loading" :src="src" />
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="接口文档" url="https://doc.iocoder.cn/api-doc/" />
|
||||
<!-- <doc-alert title="接口文档" url="https://doc.iocoder.cn/api-doc/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<IFrame :src="src" />
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="WebSocket 实时通信" url="https://doc.iocoder.cn/websocket/" />
|
||||
<!-- <doc-alert title="WebSocket 实时通信" url="https://doc.iocoder.cn/websocket/" />-->
|
||||
|
||||
<div class="flex">
|
||||
<!-- 左侧:建立连接、发送消息 -->
|
||||
|
|
|
|||
|
|
@ -67,7 +67,13 @@
|
|||
</el-form-item>
|
||||
<el-form-item label="法律状态(如审查中、已授权、无效等)" prop="legalStatus">
|
||||
<el-radio-group v-model="formData.legalStatus">
|
||||
<el-radio label="1">请选择字典生成</el-radio>
|
||||
<el-radio
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LEGAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
|
@ -115,6 +121,8 @@ const formData = ref({
|
|||
legalStatus: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '合同id不能为空', trigger: 'blur' }],
|
||||
contractCode: [{ required: true, message: '合同编号不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
|
|
@ -193,4 +201,4 @@ const resetForm = () => {
|
|||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -37,6 +37,13 @@
|
|||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新人" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.updated`" :rules="formRules.updated" class="mb-0px!">
|
||||
<el-input v-model="row.updated" placeholder="请输入更新人" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
|
|
@ -57,6 +64,11 @@ const props = defineProps<{
|
|||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
patentsId: [{ required: true, message: '专利ID不能为空', trigger: 'blur' }],
|
||||
inventorName: [{ required: true, message: '发明人姓名不能为空', trigger: 'blur' }],
|
||||
inventorIdno: [{ required: true, message: '发明人身份证号不能为空', trigger: 'blur' }],
|
||||
number: [{ required: true, message: '排序号不能为空', trigger: 'blur' }],
|
||||
deptName: [{ required: true, message: '所在单位不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
|
|
@ -89,6 +101,7 @@ const handleAdd = () => {
|
|||
inventorIdno: undefined,
|
||||
number: undefined,
|
||||
deptName: undefined,
|
||||
updated: undefined,
|
||||
}
|
||||
row.patentsId = props.patentsId
|
||||
formData.value.push(row)
|
||||
|
|
|
|||
|
|
@ -1,119 +0,0 @@
|
|||
<template>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['patents:main:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="发明人姓名" align="center" prop="inventorName" />
|
||||
<el-table-column label="发明人身份证号" align="center" prop="inventorIdno" />
|
||||
<el-table-column label="排序号" align="center" prop="number" />
|
||||
<el-table-column label="所在单位" align="center" prop="deptName" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['patents:main:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['patents:main:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<InfoForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/patents/patents'
|
||||
import InfoForm from './InfoForm.vue'
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const props = defineProps<{
|
||||
patentsId: undefined // 专利ID(主表的关联字段)
|
||||
}>()
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const list = ref([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
patentsId: undefined
|
||||
})
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.patentsId,
|
||||
(val) => {
|
||||
queryParams.patentsId = val
|
||||
handleQuery()
|
||||
},
|
||||
{ immediate: false }
|
||||
)
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MainApi.getInfoPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
if (!props.patentsId) {
|
||||
message.error('请选择一个专利信息')
|
||||
return
|
||||
}
|
||||
formRef.value.open(type, id, props.patentsId)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MainApi.deleteInfo(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -8,6 +8,15 @@
|
|||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="合同编号" prop="contractCode">
|
||||
<el-input
|
||||
v-model="queryParams.contractCode"
|
||||
placeholder="请输入合同编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="专利名称" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
|
|
@ -26,6 +35,39 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期" prop="filingDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.filingDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="公开日期" prop="publicationDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.publicationDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="授权日期" prop="grantDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.grantDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="专利类型(如发明、实用新型、外观设计等)" prop="patentType">
|
||||
<el-select
|
||||
v-model="queryParams.patentType"
|
||||
|
|
@ -41,12 +83,29 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="专利权人姓名或公司名称" prop="patenteeName">
|
||||
<el-input
|
||||
v-model="queryParams.patenteeName"
|
||||
placeholder="请输入专利权人姓名或公司名称"
|
||||
<el-form-item label="法律状态(如审查中、已授权、无效等)" prop="legalStatus">
|
||||
<el-select
|
||||
v-model="queryParams.legalStatus"
|
||||
placeholder="请选择法律状态(如审查中、已授权、无效等)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.LEGAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
|
@ -91,10 +150,20 @@
|
|||
<dict-tag :type="DICT_TYPE.PATENT_TYPE" :value="scope.row.patentType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="专利权人姓名或公司名称" align="center" prop="patenteeName" />
|
||||
<el-table-column label="相关技术领域" align="center" prop="relatedTechArea" />
|
||||
<el-table-column label="技术效果" align="center" prop="technicalEffect" />
|
||||
<el-table-column label="法律状态(如审查中、已授权、无效等)" align="center" prop="legalStatus" />
|
||||
<el-table-column label="法律状态(如审查中、已授权、无效等)" align="center" prop="legalStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.LEGAL_STATUS" :value="scope.row.legalStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
@ -131,6 +200,7 @@
|
|||
|
||||
<script setup lang="ts">
|
||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { MainApi, MainVO } from '@/api/patents/patents'
|
||||
import MainForm from './MainForm.vue'
|
||||
|
|
@ -147,10 +217,15 @@ const total = ref(0) // 列表的总页数
|
|||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractCode: undefined,
|
||||
name: undefined,
|
||||
number: undefined,
|
||||
filingDate: [],
|
||||
publicationDate: [],
|
||||
grantDate: [],
|
||||
patentType: undefined,
|
||||
patenteeName: undefined,
|
||||
legalStatus: undefined,
|
||||
createTime: [],
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
|
@ -217,4 +292,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -7,48 +7,51 @@
|
|||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="合同主键Id" prop="contractId">
|
||||
<el-input v-model="formData.contractId" placeholder="请输入合同主键Id" />
|
||||
<el-form-item label="任务书Id" prop="contractId">
|
||||
<el-input v-model="formData.contractId" placeholder="请输入任务书Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同编号" prop="contractCode">
|
||||
<el-input v-model="formData.contractCode" placeholder="请输入合同编号" />
|
||||
<el-form-item label="任务书编号" prop="projectCode">
|
||||
<el-input v-model="formData.projectCode" placeholder="请输入任务书编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="执行区段" prop="section">
|
||||
<el-input v-model="formData.section" placeholder="请输入执行区段" />
|
||||
<el-form-item label="任务书名称" prop="projectName">
|
||||
<el-input v-model="formData.projectName" placeholder="请输入任务书名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="进展情况(正常,拖延,停顿)" prop="progress">
|
||||
<el-select v-model="formData.progress" placeholder="请选择进展情况(正常,拖延,停顿)">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input v-model="formData.projectLeader" placeholder="请输入项目负责人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人Id" prop="directorId">
|
||||
<el-input v-model="formData.directorId" placeholder="请输入负责人Id" />
|
||||
<el-form-item label="项目负责人ID" prop="projectLeaderId">
|
||||
<el-input v-model="formData.projectLeaderId" placeholder="请输入项目负责人ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人姓名" prop="director">
|
||||
<el-input v-model="formData.director" placeholder="请输入负责人姓名" />
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input v-model="formData.undertakingUnitName" placeholder="请输入承担单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门ID" prop="competentDeptId">
|
||||
<el-input v-model="formData.competentDeptId" placeholder="请输入主管部门ID" />
|
||||
<el-form-item label="承担单位ID" prop="undertakingUnitId">
|
||||
<el-input v-model="formData.undertakingUnitId" placeholder="请输入承担单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-input v-model="formData.competentDeptName" placeholder="请输入主管部门" />
|
||||
<el-form-item label="项目目标" prop="projectObjectives">
|
||||
<el-input v-model="formData.projectObjectives" type="textarea" placeholder="请输入项目目标" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师ID" prop="managerId">
|
||||
<el-input v-model="formData.managerId" placeholder="请输入主管工程师ID" />
|
||||
<el-form-item label="考核指标" prop="projectEvaluation">
|
||||
<el-input v-model="formData.projectEvaluation" type="textarea" placeholder="请输入考核指标" />
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-input v-model="formData.managerName" placeholder="请输入主管工程师" />
|
||||
<el-form-item label="执行时间区段" prop="processDate">
|
||||
<el-date-picker
|
||||
v-model="formData.processDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择执行时间区段"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否偏差" prop="deviation">
|
||||
<el-input v-model="formData.deviation" placeholder="请输入是否偏差" />
|
||||
</el-form-item>
|
||||
<el-form-item label="偏差原因" prop="reason">
|
||||
<el-input v-model="formData.reason" placeholder="请输入偏差原因" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际进度" prop="schedule">
|
||||
<el-input v-model="formData.schedule" type="textarea" placeholder="请输入实际进度" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
<el-tab-pane label="执行经费情况" name="funds">
|
||||
<FundsForm ref="fundsFormRef" :process-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="执行详细信息" name="info">
|
||||
<InfoForm ref="infoFormRef" :process-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
|
|
@ -57,10 +60,8 @@
|
|||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi, MainVO } from '@/api/process/process'
|
||||
import FundsForm from './components/FundsForm.vue'
|
||||
import InfoForm from './components/InfoForm.vue'
|
||||
|
||||
/** 执行主 表单 */
|
||||
/** 执行 表单 */
|
||||
defineOptions({ name: 'MainForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
|
|
@ -73,25 +74,36 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|||
const formData = ref({
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
contractCode: undefined,
|
||||
section: undefined,
|
||||
progress: undefined,
|
||||
directorId: undefined,
|
||||
director: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
projectCode: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
projectObjectives: undefined,
|
||||
projectEvaluation: undefined,
|
||||
processDate: undefined,
|
||||
deviation: undefined,
|
||||
reason: undefined,
|
||||
schedule: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
contractId: [{ required: true, message: '任务书Id不能为空', trigger: 'blur' }],
|
||||
projectCode: [{ required: true, message: '任务书编号不能为空', trigger: 'blur' }],
|
||||
projectName: [{ required: true, message: '任务书名称不能为空', trigger: 'blur' }],
|
||||
projectLeader: [{ required: true, message: '项目负责人不能为空', trigger: 'blur' }],
|
||||
projectLeaderId: [{ required: true, message: '项目负责人ID不能为空', trigger: 'blur' }],
|
||||
undertakingUnitName: [{ required: true, message: '承担单位名称不能为空', trigger: 'blur' }],
|
||||
undertakingUnitId: [{ required: true, message: '承担单位ID不能为空', trigger: 'blur' }],
|
||||
projectObjectives: [{ required: true, message: '项目目标不能为空', trigger: 'blur' }],
|
||||
projectEvaluation: [{ required: true, message: '考核指标不能为空', trigger: 'blur' }],
|
||||
processDate: [{ required: true, message: '执行时间区段不能为空', trigger: 'blur' }],
|
||||
deviation: [{ required: true, message: '是否偏差不能为空', trigger: 'blur' }],
|
||||
reason: [{ required: true, message: '偏差原因不能为空', trigger: 'blur' }],
|
||||
schedule: [{ required: true, message: '实际进度不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('funds')
|
||||
const fundsFormRef = ref()
|
||||
const infoFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
|
|
@ -115,26 +127,10 @@ const emit = defineEmits(['success']) // 定义 success 事件,用于操作成
|
|||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await fundsFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'funds'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await infoFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'info'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as MainVO
|
||||
// 拼接子表的数据
|
||||
data.fundss = fundsFormRef.value.getData()
|
||||
data.info = infoFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await MainApi.createMain(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
|
|
@ -155,16 +151,19 @@ const resetForm = () => {
|
|||
formData.value = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
contractCode: undefined,
|
||||
section: undefined,
|
||||
progress: undefined,
|
||||
directorId: undefined,
|
||||
director: undefined,
|
||||
competentDeptId: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerId: undefined,
|
||||
managerName: undefined,
|
||||
projectCode: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
projectObjectives: undefined,
|
||||
projectEvaluation: undefined,
|
||||
processDate: undefined,
|
||||
deviation: undefined,
|
||||
reason: undefined,
|
||||
schedule: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,153 +0,0 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="合同ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.contractId`" :rules="formRules.contractId" class="mb-0px!">
|
||||
<el-input v-model="row.contractId" placeholder="请输入合同ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费来源ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.sourceId`" :rules="formRules.sourceId" class="mb-0px!">
|
||||
<el-input v-model="row.sourceId" placeholder="请输入经费来源ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="支出类型ID" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.expenseId`" :rules="formRules.expenseId" class="mb-0px!">
|
||||
<el-input v-model="row.expenseId" placeholder="请输入支出类型ID" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="二级科目" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.secondaryCategory`" :rules="formRules.secondaryCategory" class="mb-0px!">
|
||||
<el-input v-model="row.secondaryCategory" placeholder="请输入二级科目" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.amount`" :rules="formRules.amount" class="mb-0px!">
|
||||
<el-input v-model="row.amount" placeholder="请输入经费金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="经费年度" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.fiscalYear`" :rules="formRules.fiscalYear" class="mb-0px!">
|
||||
<el-input v-model="row.fiscalYear" placeholder="请输入经费年度" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="总金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.totalAmount`" :rules="formRules.totalAmount" class="mb-0px!">
|
||||
<el-input v-model="row.totalAmount" placeholder="请输入总金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位Id" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.unitId`" :rules="formRules.unitId" class="mb-0px!">
|
||||
<el-input v-model="row.unitId" placeholder="请输入单位Id" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.unitName`" :rules="formRules.unitName" class="mb-0px!">
|
||||
<el-input v-model="row.unitName" placeholder="请输入单位名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加执行经费情况</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/process/process'
|
||||
|
||||
const props = defineProps<{
|
||||
processId: undefined // 执行ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.processId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await MainApi.getFundsListByProcessId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
contractId: undefined,
|
||||
processId: undefined,
|
||||
sourceId: undefined,
|
||||
expenseId: undefined,
|
||||
secondaryCategory: undefined,
|
||||
amount: undefined,
|
||||
fiscalYear: undefined,
|
||||
totalAmount: undefined,
|
||||
unitId: undefined,
|
||||
unitName: undefined,
|
||||
}
|
||||
row.processId = props.processId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="课题总体进展及本阶段开展的主要研究工作" prop="mainWork">
|
||||
<el-input v-model="formData.mainWork" type="textarea" placeholder="请输入课题总体进展及本阶段开展的主要研究工作" />
|
||||
</el-form-item>
|
||||
<el-form-item label="投入研究的工作量" prop="injectWork">
|
||||
<el-input v-model="formData.injectWork" type="textarea" placeholder="请输入投入研究的工作量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目执行情况工作过程的描述、遇到的问题、采取的措施和方法" prop="describe">
|
||||
<el-input v-model="formData.describe" type="textarea" placeholder="请输入项目执行情况工作过程的描述、遇到的问题、采取的措施和方法" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { MainApi } from '@/api/process/process'
|
||||
|
||||
const props = defineProps<{
|
||||
processId: undefined // 执行ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.processId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
processId: undefined,
|
||||
mainWork: undefined,
|
||||
injectWork: undefined,
|
||||
describe: undefined,
|
||||
}
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
const data = await MainApi.getInfoByProcessId(val)
|
||||
if (!data) {
|
||||
return
|
||||
}
|
||||
formData.value = data
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -8,65 +8,93 @@
|
|||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="合同主键Id" prop="contractId">
|
||||
<el-form-item label="任务书Id" prop="contractId">
|
||||
<el-input
|
||||
v-model="queryParams.contractId"
|
||||
placeholder="请输入合同主键Id"
|
||||
placeholder="请输入任务书Id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同编号" prop="contractCode">
|
||||
<el-form-item label="任务书编号" prop="projectCode">
|
||||
<el-input
|
||||
v-model="queryParams.contractCode"
|
||||
placeholder="请输入合同编号"
|
||||
v-model="queryParams.projectCode"
|
||||
placeholder="请输入任务书编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="执行区段" prop="section">
|
||||
<el-form-item label="任务书名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.section"
|
||||
placeholder="请输入执行区段"
|
||||
v-model="queryParams.projectName"
|
||||
placeholder="请输入任务书名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进展情况(正常,拖延,停顿)" prop="progress">
|
||||
<el-select
|
||||
v-model="queryParams.progress"
|
||||
placeholder="请选择进展情况(正常,拖延,停顿)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人姓名" prop="director">
|
||||
<el-form-item label="项目负责人" prop="projectLeader">
|
||||
<el-input
|
||||
v-model="queryParams.director"
|
||||
placeholder="请输入负责人姓名"
|
||||
v-model="queryParams.projectLeader"
|
||||
placeholder="请输入项目负责人"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管部门" prop="competentDeptName">
|
||||
<el-form-item label="项目负责人ID" prop="projectLeaderId">
|
||||
<el-input
|
||||
v-model="queryParams.competentDeptName"
|
||||
placeholder="请输入主管部门"
|
||||
v-model="queryParams.projectLeaderId"
|
||||
placeholder="请输入项目负责人ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="主管工程师" prop="managerName">
|
||||
<el-form-item label="承担单位名称" prop="undertakingUnitName">
|
||||
<el-input
|
||||
v-model="queryParams.managerName"
|
||||
placeholder="请输入主管工程师"
|
||||
v-model="queryParams.undertakingUnitName"
|
||||
placeholder="请输入承担单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="承担单位ID" prop="undertakingUnitId">
|
||||
<el-input
|
||||
v-model="queryParams.undertakingUnitId"
|
||||
placeholder="请输入承担单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="执行时间区段" prop="processDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.processDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否偏差" prop="deviation">
|
||||
<el-input
|
||||
v-model="queryParams.deviation"
|
||||
placeholder="请输入是否偏差"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="偏差原因" prop="reason">
|
||||
<el-input
|
||||
v-model="queryParams.reason"
|
||||
placeholder="请输入偏差原因"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
|
|
@ -99,13 +127,20 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="合同编号" align="center" prop="contractCode" />
|
||||
<el-table-column label="执行区段" align="center" prop="section" />
|
||||
<el-table-column label="进展情况(正常,拖延,停顿)" align="center" prop="progress" />
|
||||
<el-table-column label="负责人姓名" align="center" prop="director" />
|
||||
<el-table-column label="主管部门" align="center" prop="competentDeptName" />
|
||||
<el-table-column label="主管工程师" align="center" prop="managerName" />
|
||||
<el-table-column label="主键id" align="center" prop="id" />
|
||||
<el-table-column label="任务书Id" align="center" prop="contractId" />
|
||||
<el-table-column label="任务书编号" align="center" prop="projectCode" />
|
||||
<el-table-column label="任务书名称" align="center" prop="projectName" />
|
||||
<el-table-column label="项目负责人" align="center" prop="projectLeader" />
|
||||
<el-table-column label="项目负责人ID" align="center" prop="projectLeaderId" />
|
||||
<el-table-column label="承担单位名称" align="center" prop="undertakingUnitName" />
|
||||
<el-table-column label="承担单位ID" align="center" prop="undertakingUnitId" />
|
||||
<el-table-column label="项目目标" align="center" prop="projectObjectives" />
|
||||
<el-table-column label="考核指标" align="center" prop="projectEvaluation" />
|
||||
<el-table-column label="执行时间区段" align="center" prop="processDate" />
|
||||
<el-table-column label="是否偏差" align="center" prop="deviation" />
|
||||
<el-table-column label="偏差原因" align="center" prop="reason" />
|
||||
<el-table-column label="实际进度" align="center" prop="schedule" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
|
|
@ -145,7 +180,7 @@ import download from '@/utils/download'
|
|||
import { MainApi, MainVO } from '@/api/process/process'
|
||||
import MainForm from './MainForm.vue'
|
||||
|
||||
/** 执行主 列表 */
|
||||
/** 执行 列表 */
|
||||
defineOptions({ name: 'ProcessMain' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -158,12 +193,18 @@ const queryParams = reactive({
|
|||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
contractId: undefined,
|
||||
contractCode: undefined,
|
||||
section: undefined,
|
||||
progress: undefined,
|
||||
director: undefined,
|
||||
competentDeptName: undefined,
|
||||
managerName: undefined,
|
||||
projectCode: undefined,
|
||||
projectName: undefined,
|
||||
projectLeader: undefined,
|
||||
projectLeaderId: undefined,
|
||||
undertakingUnitName: undefined,
|
||||
undertakingUnitId: undefined,
|
||||
projectObjectives: undefined,
|
||||
projectEvaluation: undefined,
|
||||
processDate: [],
|
||||
deviation: undefined,
|
||||
reason: undefined,
|
||||
schedule: undefined,
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
|
@ -219,7 +260,7 @@ const handleExport = async () => {
|
|||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await MainApi.exportMain(queryParams)
|
||||
download.excel(data, '执行主.xls')
|
||||
download.excel(data, '执行.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
|
|
@ -230,4 +271,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -21,28 +21,34 @@
|
|||
placeholder="选择预约日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="预约时间" prop="reservationTime">
|
||||
<el-date-picker
|
||||
v-model="formData.reservationTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择预约时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实验室名称" prop="labName">
|
||||
<el-input v-model="formData.labName" placeholder="请输入实验室名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="预约时长(小时)" prop="reservationDuration">
|
||||
<el-input v-model="formData.reservationDuration" placeholder="请输入预约时长(小时)" />
|
||||
<el-form-item label="参与人员" prop="joinPeople">
|
||||
<el-input v-model="formData.joinPeople" placeholder="请输入参与人员" />
|
||||
</el-form-item>
|
||||
<el-form-item label="预约状态(如待审核、已确认、已拒绝等)" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio label="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
<el-form-item label="实验内容及设备" prop="equipment">
|
||||
<el-input v-model="formData.equipment" placeholder="请输入实验内容及设备" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核人ID" prop="reviewerId">
|
||||
<el-input v-model="formData.reviewerId" placeholder="请输入审核人ID" />
|
||||
<el-form-item label="备注" prop="reservationNotes">
|
||||
<el-input v-model="formData.reservationNotes" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核人姓名" prop="reviewerName">
|
||||
<el-input v-model="formData.reviewerName" placeholder="请输入审核人姓名" />
|
||||
<el-form-item label="单位ID" prop="deptId">
|
||||
<el-input v-model="formData.deptId" placeholder="请输入单位ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审核意见(如有)" prop="reviewComments">
|
||||
<el-input v-model="formData.reviewComments" placeholder="请输入审核意见(如有)" />
|
||||
<el-form-item label="单位名称" prop="deptName">
|
||||
<el-input v-model="formData.deptName" placeholder="请输入单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="预约备注(如有)" prop="reservationNotes">
|
||||
<el-input v-model="formData.reservationNotes" placeholder="请输入预约备注(如有)" />
|
||||
<el-form-item label="乐观锁" prop="revision">
|
||||
<el-input v-model="formData.revision" placeholder="请输入乐观锁" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
|
|
@ -52,10 +58,10 @@
|
|||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { LabInfoApi, LabInfoVO } from '@/api/publicLab/publicLab'
|
||||
import { Api, VO } from '@/api/publicLab/publicLab'
|
||||
|
||||
/** 公共实验室信 表单 */
|
||||
defineOptions({ name: 'LabInfoForm' })
|
||||
defineOptions({ name: 'Form' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
|
@ -69,13 +75,14 @@ const formData = ref({
|
|||
userName: undefined,
|
||||
userContact: undefined,
|
||||
reservationDate: undefined,
|
||||
reservationTime: undefined,
|
||||
labName: undefined,
|
||||
reservationDuration: undefined,
|
||||
status: undefined,
|
||||
reviewerId: undefined,
|
||||
reviewerName: undefined,
|
||||
reviewComments: undefined,
|
||||
joinPeople: undefined,
|
||||
equipment: undefined,
|
||||
reservationNotes: undefined,
|
||||
deptId: undefined,
|
||||
deptName: undefined,
|
||||
revision: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
})
|
||||
|
|
@ -91,7 +98,7 @@ const open = async (type: string, id?: number) => {
|
|||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await LabInfoApi.getLabInfo(id)
|
||||
formData.value = await Api.get(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
|
|
@ -107,12 +114,12 @@ const submitForm = async () => {
|
|||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as LabInfoVO
|
||||
const data = formData.value as unknown as VO
|
||||
if (formType.value === 'create') {
|
||||
await LabInfoApi.createLabInfo(data)
|
||||
await Api.create(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await LabInfoApi.updateLabInfo(data)
|
||||
await Api.update(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
|
|
@ -130,13 +137,14 @@ const resetForm = () => {
|
|||
userName: undefined,
|
||||
userContact: undefined,
|
||||
reservationDate: undefined,
|
||||
reservationTime: undefined,
|
||||
labName: undefined,
|
||||
reservationDuration: undefined,
|
||||
status: undefined,
|
||||
reviewerId: undefined,
|
||||
reviewerName: undefined,
|
||||
reviewComments: undefined,
|
||||
joinPeople: undefined,
|
||||
equipment: undefined,
|
||||
reservationNotes: undefined,
|
||||
deptId: undefined,
|
||||
deptName: undefined,
|
||||
revision: undefined,
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
|
@ -17,6 +17,15 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户联系方式" prop="userContact">
|
||||
<el-input
|
||||
v-model="queryParams.userContact"
|
||||
placeholder="请输入用户联系方式"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="预约日期" prop="reservationDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.reservationDate"
|
||||
|
|
@ -28,6 +37,17 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="预约时间" prop="reservationTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.reservationTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实验室名称" prop="labName">
|
||||
<el-input
|
||||
v-model="queryParams.labName"
|
||||
|
|
@ -37,24 +57,70 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="预约时长(小时)" prop="reservationDuration">
|
||||
<el-form-item label="参与人员" prop="joinPeople">
|
||||
<el-input
|
||||
v-model="queryParams.reservationDuration"
|
||||
placeholder="请输入预约时长(小时)"
|
||||
v-model="queryParams.joinPeople"
|
||||
placeholder="请输入参与人员"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="预约状态(如待审核、已确认、已拒绝等)" prop="status">
|
||||
<el-select
|
||||
v-model="queryParams.status"
|
||||
placeholder="请选择预约状态(如待审核、已确认、已拒绝等)"
|
||||
<el-form-item label="实验内容及设备" prop="equipment">
|
||||
<el-input
|
||||
v-model="queryParams.equipment"
|
||||
placeholder="请输入实验内容及设备"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="reservationNotes">
|
||||
<el-input
|
||||
v-model="queryParams.reservationNotes"
|
||||
placeholder="请输入备注"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位ID" prop="deptId">
|
||||
<el-input
|
||||
v-model="queryParams.deptId"
|
||||
placeholder="请输入单位ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位名称" prop="deptName">
|
||||
<el-input
|
||||
v-model="queryParams.deptName"
|
||||
placeholder="请输入单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="乐观锁" prop="revision">
|
||||
<el-input
|
||||
v-model="queryParams.revision"
|
||||
placeholder="请输入乐观锁"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
|
|
@ -63,7 +129,7 @@
|
|||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['publicLab:lab-info:create']"
|
||||
v-hasPermi="['publicLab::create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
|
|
@ -72,7 +138,7 @@
|
|||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['publicLab:lab-info:export']"
|
||||
v-hasPermi="['publicLab::export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
|
|
@ -83,23 +149,38 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="id" align="center" prop="id" />
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="用户姓名" align="center" prop="userName" />
|
||||
<el-table-column label="用户联系方式" align="center" prop="userContact" />
|
||||
<el-table-column label="预约日期" align="center" prop="reservationDate" />
|
||||
<el-table-column
|
||||
label="预约时间"
|
||||
align="center"
|
||||
prop="reservationTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="实验室名称" align="center" prop="labName" />
|
||||
<el-table-column label="预约时长(小时)" align="center" prop="reservationDuration" />
|
||||
<el-table-column label="预约状态(如待审核、已确认、已拒绝等)" align="center" prop="status" />
|
||||
<el-table-column label="审核人姓名" align="center" prop="reviewerName" />
|
||||
<el-table-column label="审核意见(如有)" align="center" prop="reviewComments" />
|
||||
<el-table-column label="预约备注(如有)" align="center" prop="reservationNotes" />
|
||||
<el-table-column label="参与人员" align="center" prop="joinPeople" />
|
||||
<el-table-column label="实验内容及设备" align="center" prop="equipment" />
|
||||
<el-table-column label="备注" align="center" prop="reservationNotes" />
|
||||
<el-table-column label="单位ID" align="center" prop="deptId" />
|
||||
<el-table-column label="单位名称" align="center" prop="deptName" />
|
||||
<el-table-column label="乐观锁" align="center" prop="revision" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['publicLab:lab-info:update']"
|
||||
v-hasPermi="['publicLab::update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
|
|
@ -107,7 +188,7 @@
|
|||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['publicLab:lab-info:delete']"
|
||||
v-hasPermi="['publicLab::delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
|
|
@ -124,31 +205,39 @@
|
|||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<LabInfoForm ref="formRef" @success="getList" />
|
||||
<Form ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { LabInfoApi, LabInfoVO } from '@/api/publicLab/publicLab'
|
||||
import LabInfoForm from './LabInfoForm.vue'
|
||||
import { Api, VO } from '@/api/publicLab/publicLab'
|
||||
import Form from './Form.vue'
|
||||
|
||||
/** 公共实验室信 列表 */
|
||||
defineOptions({ name: 'LabInfo' })
|
||||
defineOptions({ name: 'PublicLab' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<LabInfoVO[]>([]) // 列表的数据
|
||||
const list = ref<VO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userName: undefined,
|
||||
userContact: undefined,
|
||||
reservationDate: [],
|
||||
reservationTime: [],
|
||||
labName: undefined,
|
||||
reservationDuration: undefined,
|
||||
status: undefined,
|
||||
joinPeople: undefined,
|
||||
equipment: undefined,
|
||||
reservationNotes: undefined,
|
||||
deptId: undefined,
|
||||
deptName: undefined,
|
||||
revision: undefined,
|
||||
createTime: [],
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
|
@ -157,7 +246,7 @@ const exportLoading = ref(false) // 导出的加载中
|
|||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await LabInfoApi.getLabInfoPage(queryParams)
|
||||
const data = await Api.getPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
|
|
@ -189,7 +278,7 @@ const handleDelete = async (id: number) => {
|
|||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await LabInfoApi.deleteLabInfo(id)
|
||||
await Api.delete(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
|
|
@ -203,7 +292,7 @@ const handleExport = async () => {
|
|||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await LabInfoApi.exportLabInfo(queryParams)
|
||||
const data = await Api.export(queryParams)
|
||||
download.excel(data, '公共实验室信.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
|
|
@ -215,4 +304,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="地区 & IP" url="https://doc.iocoder.cn/area-and-ip/" />
|
||||
<!-- <doc-alert title="地区 & IP" url="https://doc.iocoder.cn/area-and-ip/" />-->
|
||||
|
||||
<!-- 操作栏 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="异常处理(错误码)" url="https://doc.iocoder.cn/exception/" />
|
||||
<!-- <doc-alert title="异常处理(错误码)" url="https://doc.iocoder.cn/exception/" />-->
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
|
||||
<!-- <doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
|
||||
<!-- <doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />-->
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
|
||||
<!-- <doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />-->
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
|
||||
<!-- <doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />-->
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
<template>
|
||||
<!--
|
||||
<doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
|
||||
<doc-alert title="菜单路由" url="https://doc.iocoder.cn/vue3/route/" />
|
||||
-->
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
|
||||
<!-- <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
|
||||
<!-- <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
|
||||
<!-- <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />-->
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="OAuth 2.0(SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
|
||||
<!-- <doc-alert title="OAuth 2.0(SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />-->
|
||||
|
||||
<!-- 搜索 -->
|
||||
<ContentWrap>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="OAuth 2.0(SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
|
||||
<!-- <doc-alert title="OAuth 2.0(SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
|
||||
<!-- <doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
|
||||
<doc-alert title="数据权限" url="https://doc.iocoder.cn/data-permission" />
|
||||
<!-- <doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
|
||||
<doc-alert title="数据权限" url="https://doc.iocoder.cn/data-permission" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
|
||||
<!-- <doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<el-form
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
|
||||
<!-- <doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
|
||||
<!-- <doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="三方登录" url="https://doc.iocoder.cn/social-user/" />
|
||||
<!-- <doc-alert title="三方登录" url="https://doc.iocoder.cn/social-user/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<doc-alert title="三方登录" url="https://doc.iocoder.cn/social-user/" />
|
||||
<!-- <doc-alert title="三方登录" url="https://doc.iocoder.cn/social-user/" />-->
|
||||
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
|
|
|
|||
Loading…
Reference in New Issue