更新全部数据

pull/480/head
admin 2024-06-08 22:22:27 +08:00
parent 702fd1bea7
commit 461785ac3c
93 changed files with 2162 additions and 4071 deletions

View File

@ -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 })
},
}

View File

@ -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 })
},
}

View File

@ -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 })
},
}

View File

@ -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 })
},
}

View File

@ -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 })
},
}

View File

@ -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 })
},
}

View File

@ -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 })
},
}

View File

@ -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 })
},
}

View File

@ -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',

View File

@ -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>

View File

@ -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>

View File

@ -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) {

View File

@ -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>

View File

@ -1,195 +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-input v-model="formData.gender" placeholder="请输入负责人性别" />
</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>
@ -198,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() //
@ -217,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
@ -277,15 +141,6 @@ const open = async (type: string, id?: number) => {
formLoading.value = true
try {
formData.value = await MainApi.getMain(id)
if(formData.value.beginDate){
formData.value.beginDate = Number(formData.value.beginDate)
}
if(formData.value.engagMajor){
formData.value.engagMajor =Number(formData.value.engagMajor)
}
if(formData.value.major){
formData.value.major =Number(formData.value.major)
}
} finally {
formLoading.value = false
}
@ -298,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'))
@ -358,43 +176,31 @@ 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()
}
</script>
</script>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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">

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />
<!-- <doc-alert title="工作流手册" url="https://doc.iocoder.cn/bpm/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -1,185 +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}.deptId`" :rules="formRules.deptId" class="mb-0px!">
<el-input v-model="row.deptId" 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}.deptName`" :rules="formRules.deptName" class="mb-0px!">
<el-input v-model="row.deptName" placeholder="请输入单位名称" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="集团经费" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.groupFunds`" :rules="formRules.groupFunds" class="mb-0px!">
<el-input v-model="row.groupFunds" placeholder="请输入集团经费" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="自筹" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.selfFunds`" :rules="formRules.selfFunds" class="mb-0px!">
<el-input v-model="row.selfFunds" placeholder="请输入自筹" />
</el-form-item>
</template>
</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>
</template>
</el-table-column>
<el-table-column label="联系人" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.linkPerson`" :rules="formRules.linkPerson" class="mb-0px!">
<el-input v-model="row.linkPerson" placeholder="请输入联系人" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="联系电话" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.phoneNo`" :rules="formRules.phoneNo" class="mb-0px!">
<el-input v-model="row.phoneNo" placeholder="请输入联系电话" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="邮箱" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.email`" :rules="formRules.email" class="mb-0px!">
<el-input v-model="row.email" placeholder="请输入邮箱" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="传真" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.fax`" :rules="formRules.fax" class="mb-0px!">
<el-input v-model="row.fax" placeholder="请输入传真" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="邮编" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.postalCode`" :rules="formRules.postalCode" class="mb-0px!">
<el-input v-model="row.postalCode" placeholder="请输入邮编" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="通讯地址" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.address`" :rules="formRules.address" class="mb-0px!">
<el-input v-model="row.address" placeholder="请输入通讯地址" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="标识1承担单位2联合承担单位3参加单位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.sign`" :rules="formRules.sign" class="mb-0px!">
<el-input v-model="row.sign" placeholder="请输入标识1承担单位2联合承担单位3参加单位" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="排序号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.orderNo`" :rules="formRules.orderNo" class="mb-0px!">
<el-input v-model="row.orderNo" 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.getUnitsListByContractId(val)
} finally {
formLoading.value = false
}
},
{ immediate: true }
)
/** 新增按钮操作 */
const handleAdd = () => {
const row = {
id: undefined,
contractId: 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,
}
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>

View File

@ -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>

View File

@ -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>

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>

View File

@ -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>

View File

@ -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">

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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" />

View File

@ -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

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" />
<!-- <doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" />-->
<!-- 搜索 -->
<ContentWrap>

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 基本信息 -->

View File

@ -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" />

View File

@ -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" />

View File

@ -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" />

View File

@ -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">
<!-- 左侧建立连接发送消息 -->

View File

@ -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>

View File

@ -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)

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -1,143 +0,0 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="用户姓名" prop="userName">
<el-input v-model="formData.userName" placeholder="请输入用户姓名" />
</el-form-item>
<el-form-item label="用户联系方式" prop="userContact">
<el-input v-model="formData.userContact" placeholder="请输入用户联系方式" />
</el-form-item>
<el-form-item label="预约日期" prop="reservationDate">
<el-date-picker
v-model="formData.reservationDate"
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>
<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>
<el-form-item label="审核人ID" prop="reviewerId">
<el-input v-model="formData.reviewerId" placeholder="请输入审核人ID" />
</el-form-item>
<el-form-item label="审核人姓名" prop="reviewerName">
<el-input v-model="formData.reviewerName" placeholder="请输入审核人姓名" />
</el-form-item>
<el-form-item label="审核意见(如有)" prop="reviewComments">
<el-input v-model="formData.reviewComments" placeholder="请输入审核意见(如有)" />
</el-form-item>
<el-form-item label="预约备注(如有)" prop="reservationNotes">
<el-input v-model="formData.reservationNotes" 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>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { LabInfoApi, LabInfoVO } from '@/api/publicLab/publicLab'
/** 公共实验室信 表单 */
defineOptions({ name: 'LabInfoForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
userName: undefined,
userContact: undefined,
reservationDate: undefined,
labName: undefined,
reservationDuration: undefined,
status: undefined,
reviewerId: undefined,
reviewerName: undefined,
reviewComments: undefined,
reservationNotes: undefined,
})
const formRules = reactive({
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await LabInfoApi.getLabInfo(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as LabInfoVO
if (formType.value === 'create') {
await LabInfoApi.createLabInfo(data)
message.success(t('common.createSuccess'))
} else {
await LabInfoApi.updateLabInfo(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
userName: undefined,
userContact: undefined,
reservationDate: undefined,
labName: undefined,
reservationDuration: undefined,
status: undefined,
reviewerId: undefined,
reviewerName: undefined,
reviewComments: undefined,
reservationNotes: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -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>

View File

@ -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>

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="异常处理(错误码)" url="https://doc.iocoder.cn/exception/" />
<!-- <doc-alert title="异常处理(错误码)" url="https://doc.iocoder.cn/exception/" />-->
<!-- 搜索工作栏 -->
<ContentWrap>

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- <doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />-->
<!-- 搜索工作栏 -->
<ContentWrap>

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- <doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />-->
<!-- 搜索工作栏 -->
<ContentWrap>

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- <doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />-->
<!-- 搜索工作栏 -->
<ContentWrap>

View File

@ -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>

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
<!-- <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
<!-- <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
<!-- <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />-->
<!-- 搜索工作栏 -->
<ContentWrap>

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
<!-- <doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />-->
<!-- 搜索 -->
<ContentWrap>

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
<!-- <doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
<!-- <doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -1,5 +1,5 @@
<template>
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
<!-- <doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />-->
<ContentWrap>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->

View File

@ -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>
<!-- 搜索工作栏 -->