diff --git a/package-lock.json b/package-lock.json
index 02c29fa71..91734769c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -43,6 +43,7 @@
"markmap-view": "^0.16.0",
"min-dash": "^4.1.1",
"mitt": "^3.0.1",
+ "moment": "^2.30.1",
"nprogress": "^0.2.0",
"pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
@@ -57,6 +58,7 @@
"vue-dompurify-html": "^4.1.4",
"vue-i18n": "9.10.2",
"vue-router": "4.4.5",
+ "vue-signature-pad": "^3.0.2",
"vue-types": "^5.1.1",
"vue3-signature": "^0.2.4",
"vuedraggable": "^4.1.0",
@@ -12844,6 +12846,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/merge-images": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmmirror.com/merge-images/-/merge-images-1.2.0.tgz",
+ "integrity": "sha512-hEGvgnTdXr08uzGvEArxRsKpy7WmozM73YaSi4s5IYF4LxrhANpqfHaz9CgBZ5+0+s2NsjPnPdStz3aCc0Yulw==",
+ "license": "MIT"
+ },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -13057,6 +13065,15 @@
"saxen": "^8.1.2"
}
},
+ "node_modules/moment": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/mpd-parser": {
"version": "0.22.1",
"resolved": "https://registry.npmjs.org/mpd-parser/-/mpd-parser-0.22.1.tgz",
@@ -16967,6 +16984,22 @@
"vue": "^3.2.0"
}
},
+ "node_modules/vue-signature-pad": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmmirror.com/vue-signature-pad/-/vue-signature-pad-3.0.2.tgz",
+ "integrity": "sha512-o25o+lROfCmzASS2+fU8ZV801kV+D4/02zkZ+ez3NKeiUmbxW7kwlUf5oKQkvA+l7Ou9xGsGLsirBLch3jyX8A==",
+ "license": "MIT",
+ "dependencies": {
+ "merge-images": "^1.1.0",
+ "signature_pad": "^3.0.0-beta.3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
"node_modules/vue-template-compiler": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
diff --git a/package.json b/package.json
index 307b915ec..a945aaf01 100644
--- a/package.json
+++ b/package.json
@@ -59,6 +59,7 @@
"markmap-view": "^0.16.0",
"min-dash": "^4.1.1",
"mitt": "^3.0.1",
+ "moment": "^2.30.1",
"nprogress": "^0.2.0",
"pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
@@ -73,6 +74,7 @@
"vue-dompurify-html": "^4.1.4",
"vue-i18n": "9.10.2",
"vue-router": "4.4.5",
+ "vue-signature-pad": "^3.0.2",
"vue-types": "^5.1.1",
"vue3-signature": "^0.2.4",
"vuedraggable": "^4.1.0",
diff --git a/src/api/crm/capitalcost/index.ts b/src/api/crm/capitalcost/index.ts
index a9fb2e3e6..3894fd3e2 100644
--- a/src/api/crm/capitalcost/index.ts
+++ b/src/api/crm/capitalcost/index.ts
@@ -1,49 +1,48 @@
-import request from '@/config/axios'
-
-// 资金成本 VO
-export interface CapitalCostVO {
- id: number // 主键
- projectCode: string // 项目编码
- paymentTerm: string // 结算账期
- creditMethod: number // 授信方式
- applicableProjects: number // 适用项目,全部产品、机票
- creditCalcCycle: number // 授信额度计算周期
- ticketIssuanceCycle: number // 出票周期
- settlementCycle: number // 结算周期
- usageDays: number // 实际资金使用天数
- annualInterestRate: number // 年利率
- remark: string // 备注
-}
-
-// 资金成本 API
-export const CapitalCostApi = {
- // 查询资金成本分页
- getCapitalCostPage: async (params: any) => {
- return await request.get({ url: `/crm/capital-cost/page`, params })
- },
-
- // 查询资金成本详情
- getCapitalCost: async (id: number) => {
- return await request.get({ url: `/crm/capital-cost/get?id=` + id })
- },
-
- // 新增资金成本
- createCapitalCost: async (data: CapitalCostVO) => {
- return await request.post({ url: `/crm/capital-cost/create`, data })
- },
-
- // 修改资金成本
- updateCapitalCost: async (data: CapitalCostVO) => {
- return await request.put({ url: `/crm/capital-cost/update`, data })
- },
-
- // 删除资金成本
- deleteCapitalCost: async (id: number) => {
- return await request.delete({ url: `/crm/capital-cost/delete?id=` + id })
- },
-
- // 导出资金成本 Excel
- exportCapitalCost: async (params) => {
- return await request.download({ url: `/crm/capital-cost/export-excel`, params })
- },
-}
\ No newline at end of file
+import request from '@/config/axios'
+
+// 资金成本 VO
+export interface CapitalCostVO {
+ id: number // 主键
+ projectCode: string // 项目编码
+ paymentTerm: string // 结算账期
+ creditMethod: number // 授信方式
+ applicableProjects: number // 适用项目,全部产品、机票
+ creditCalcCycle: number // 授信额度计算周期
+ ticketIssuanceCycle: number // 出票周期
+ settlementCycle: number // 结算周期
+ usageDays: number // 实际资金使用天数
+ annualInterestRate: number // 年利率
+}
+
+// 资金成本 API
+export const CapitalCostApi = {
+ // 查询资金成本分页
+ getCapitalCostPage: async (params: any) => {
+ return await request.get({ url: `/crm/capital-cost/page`, params })
+ },
+
+ // 查询资金成本详情
+ getCapitalCost: async (id: number) => {
+ return await request.get({ url: `/crm/capital-cost/get?id=` + id })
+ },
+
+ // 新增资金成本
+ createCapitalCost: async (data: CapitalCostVO) => {
+ return await request.post({ url: `/crm/capital-cost/create`, data })
+ },
+
+ // 修改资金成本
+ updateCapitalCost: async (data: CapitalCostVO) => {
+ return await request.put({ url: `/crm/capital-cost/update`, data })
+ },
+
+ // 删除资金成本
+ deleteCapitalCost: async (id: number) => {
+ return await request.delete({ url: `/crm/capital-cost/delete?id=` + id })
+ },
+
+ // 导出资金成本 Excel
+ exportCapitalCost: async (params) => {
+ return await request.download({ url: `/crm/capital-cost/export-excel`, params })
+ },
+}
diff --git a/src/api/crm/contract/index.ts b/src/api/crm/contract/index.ts
index 3f500505c..c8ab0e4d8 100644
--- a/src/api/crm/contract/index.ts
+++ b/src/api/crm/contract/index.ts
@@ -125,6 +125,12 @@ export const changeContract = async (data: TransferReqVO) => {
return await request.put({ url: '/crm/contract/changeContract', data })
}
+// 合同变更列表
+export const changeContractList = async (data: TransferReqVO) => {
+ return await request.get({ url: '/crm/contract-change-record/page', data })
+}
+
+
// 获得待审核合同数量
export const getAuditContractCount = async () => {
return await request.get({ url: '/crm/contract/audit-count' })
diff --git a/src/api/crm/customer/index.ts b/src/api/crm/customer/index.ts
index 45e396098..200cc9ef7 100644
--- a/src/api/crm/customer/index.ts
+++ b/src/api/crm/customer/index.ts
@@ -112,6 +112,11 @@ export const getCustomer = async (id: number) => {
return await request.get({ url: `/crm/customer/get?id=` + id })
}
+// 查询客户详情带报价单
+export const getCustomerDetail = async (id: number) => {
+ return await request.get({ url: `/crm/customer/get-contract-customer-detail?id=` + id })
+}
+
// 新增客户
export const createCustomer = async (data: CustomerVO) => {
return await request.post({ url: `/crm/customer/create`, data })
diff --git a/src/api/crm/projectdifficulty/index.ts b/src/api/crm/projectdifficulty/index.ts
new file mode 100644
index 000000000..43c2b3ec4
--- /dev/null
+++ b/src/api/crm/projectdifficulty/index.ts
@@ -0,0 +1,42 @@
+import request from '@/config/axios'
+
+// 项目难度 VO
+export interface ProjectDifficultyVO {
+ id: number // 主键ID
+ projectDifficulty: string // 项目难度
+ dockingMode: string // 说明
+ dockingHours: number // 对接工时(人天)
+}
+
+// 项目难度 API
+export const ProjectDifficultyApi = {
+ // 查询项目难度分页
+ getProjectDifficultyPage: async (params: any) => {
+ return await request.get({ url: `/crm/project-difficulty/page`, params })
+ },
+
+ // 查询项目难度详情
+ getProjectDifficulty: async (id: number) => {
+ return await request.get({ url: `/crm/project-difficulty/get?id=` + id })
+ },
+
+ // 新增项目难度
+ createProjectDifficulty: async (data: ProjectDifficultyVO) => {
+ return await request.post({ url: `/crm/project-difficulty/create`, data })
+ },
+
+ // 修改项目难度
+ updateProjectDifficulty: async (data: ProjectDifficultyVO) => {
+ return await request.put({ url: `/crm/project-difficulty/update`, data })
+ },
+
+ // 删除项目难度
+ deleteProjectDifficulty: async (id: number) => {
+ return await request.delete({ url: `/crm/project-difficulty/delete?id=` + id })
+ },
+
+ // 导出项目难度 Excel
+ exportProjectDifficulty: async (params) => {
+ return await request.download({ url: `/crm/project-difficulty/export-excel`, params })
+ },
+}
\ No newline at end of file
diff --git a/src/api/crm/quotation/index.ts b/src/api/crm/quotation/index.ts
index 1192cfac1..41b6c6bb3 100644
--- a/src/api/crm/quotation/index.ts
+++ b/src/api/crm/quotation/index.ts
@@ -44,6 +44,11 @@ export const QuotationApi = {
getSimpleQuotationList : async () => {
return await request.get({ url: `/crm/quotation/simple-all-list` })
},
+ // 获得 CRM 方案营收分析
+ getRevenueList : async (data: any) => {
+ return await request.post({ url: `/crm/quotation/get-revenue-analysis`,
+ data })
+ },
// 获得 CRM 方案列表(精简)
getSelfSimpleQuotationList : async () => {
@@ -75,6 +80,11 @@ export const QuotationApi = {
return await request.put({ url: `/crm/quotation/submit?id=${id}` })
},
+ // 客户确认
+ enterQuotation: async (data: QuotationVO) => {
+ return await request.post({ url: `/crm/quotation/customer-confirm`, data })
+ },
+
// ==================== 子表(CRM 报价产品关联) ====================
// 获得CRM 报价产品关联列表
diff --git a/src/api/crm/servicefeecollectionmethod/index.ts b/src/api/crm/servicefeecollectionmethod/index.ts
new file mode 100644
index 000000000..fbfeb4442
--- /dev/null
+++ b/src/api/crm/servicefeecollectionmethod/index.ts
@@ -0,0 +1,46 @@
+import request from '@/config/axios'
+
+// 服务费收取方式 VO
+export interface ServiceFeeCollectionMethodVO {
+ id: number // 主键
+ type: number // 类型
+ productDetail: string // 产品明细
+ customerPrice: number // 客单价
+ unit: number // 单位
+ procurementCost: number // 采购成本
+ profit: number // 客单价 - 采购成本
+ describe: string // 说明
+}
+
+// 服务费收取方式 API
+export const ServiceFeeCollectionMethodApi = {
+ // 查询服务费收取方式分页
+ getServiceFeeCollectionMethodPage: async (params: any) => {
+ return await request.get({ url: `/crm/service-fee-collection-method/page`, params })
+ },
+
+ // 查询服务费收取方式详情
+ getServiceFeeCollectionMethod: async (id: number) => {
+ return await request.get({ url: `/crm/service-fee-collection-method/get?id=` + id })
+ },
+
+ // 新增服务费收取方式
+ createServiceFeeCollectionMethod: async (data: ServiceFeeCollectionMethodVO) => {
+ return await request.post({ url: `/crm/service-fee-collection-method/create`, data })
+ },
+
+ // 修改服务费收取方式
+ updateServiceFeeCollectionMethod: async (data: ServiceFeeCollectionMethodVO) => {
+ return await request.put({ url: `/crm/service-fee-collection-method/update`, data })
+ },
+
+ // 删除服务费收取方式
+ deleteServiceFeeCollectionMethod: async (id: number) => {
+ return await request.delete({ url: `/crm/service-fee-collection-method/delete?id=` + id })
+ },
+
+ // 导出服务费收取方式 Excel
+ exportServiceFeeCollectionMethod: async (params) => {
+ return await request.download({ url: `/crm/service-fee-collection-method/export-excel`, params })
+ },
+}
\ No newline at end of file
diff --git a/src/api/crm/technicaldockingchecklist/index.ts b/src/api/crm/technicaldockingchecklist/index.ts
new file mode 100644
index 000000000..03476a814
--- /dev/null
+++ b/src/api/crm/technicaldockingchecklist/index.ts
@@ -0,0 +1,51 @@
+import request from '@/config/axios'
+
+// 技术对接清单 VO
+export interface TechnicalDockingChecklistVO {
+ id: number // 主键ID
+ name: string // 平台名称
+ dockingMode: number // 对接模式
+ dockingHours: number // 技术对接人力(小时)
+ singleSignOn: number // 单点登录
+ architectureSynchronization: number // 架构同步
+ businessTripSynchronization: number // 出差单同步
+ orderSynchronization: number // 订单同步
+ billSynchronization: number // 账单同步
+ approvalMessageSynchronization: number // 审批/消息同步
+ dockingProductSynchronization: number // 对接产品类型
+ progress: number // 进度
+ notes: string // 备注
+}
+
+// 技术对接清单 API
+export const TechnicalDockingChecklistApi = {
+ // 查询技术对接清单分页
+ getTechnicalDockingChecklistPage: async (params: any) => {
+ return await request.get({ url: `/crm/technical-docking-checklist/page`, params })
+ },
+
+ // 查询技术对接清单详情
+ getTechnicalDockingChecklist: async (id: number) => {
+ return await request.get({ url: `/crm/technical-docking-checklist/get?id=` + id })
+ },
+
+ // 新增技术对接清单
+ createTechnicalDockingChecklist: async (data: TechnicalDockingChecklistVO) => {
+ return await request.post({ url: `/crm/technical-docking-checklist/create`, data })
+ },
+
+ // 修改技术对接清单
+ updateTechnicalDockingChecklist: async (data: TechnicalDockingChecklistVO) => {
+ return await request.put({ url: `/crm/technical-docking-checklist/update`, data })
+ },
+
+ // 删除技术对接清单
+ deleteTechnicalDockingChecklist: async (id: number) => {
+ return await request.delete({ url: `/crm/technical-docking-checklist/delete?id=` + id })
+ },
+
+ // 导出技术对接清单 Excel
+ exportTechnicalDockingChecklist: async (params) => {
+ return await request.download({ url: `/crm/technical-docking-checklist/export-excel`, params })
+ },
+}
\ No newline at end of file
diff --git a/src/api/task/bonus/index.ts b/src/api/task/bonus/index.ts
new file mode 100644
index 000000000..5302b9f2f
--- /dev/null
+++ b/src/api/task/bonus/index.ts
@@ -0,0 +1,45 @@
+import request from '@/config/axios'
+
+// 项目奖金 VO
+export interface ProjectBonusVO {
+ id: number // 唯一主键
+ projectId: number // 项目ID
+ userId: number // 员工ID
+ bonusPercentage: number // 奖金百分比
+ bonusAmount: number // 奖金金额
+ bonusIssueDate: Date // 奖金发放日期
+ bonusState: number // 奖金发放状态
+}
+
+// 项目奖金 API
+export const ProjectBonusApi = {
+ // 查询项目奖金分页
+ getProjectBonusPage: async (params: any) => {
+ return await request.get({ url: `/tts/project-bonus/page`, params })
+ },
+
+ // 查询项目奖金详情
+ getProjectBonus: async (id: number) => {
+ return await request.get({ url: `/tts/project-bonus/get?id=` + id })
+ },
+
+ // 新增项目奖金
+ createProjectBonus: async (data: ProjectBonusVO) => {
+ return await request.post({ url: `/tts/project-bonus/create`, data })
+ },
+
+ // 修改项目奖金
+ updateProjectBonus: async (data: ProjectBonusVO) => {
+ return await request.put({ url: `/tts/project-bonus/update`, data })
+ },
+
+ // 删除项目奖金
+ deleteProjectBonus: async (id: number) => {
+ return await request.delete({ url: `/tts/project-bonus/delete?id=` + id })
+ },
+
+ // 导出项目奖金 Excel
+ exportProjectBonus: async (params) => {
+ return await request.download({ url: `/tts/project-bonus/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/task/briefWork/index.ts b/src/api/task/briefWork/index.ts
new file mode 100644
index 000000000..0942b8635
--- /dev/null
+++ b/src/api/task/briefWork/index.ts
@@ -0,0 +1,56 @@
+import request from '@/config/axios'
+
+// 工作简报 VO
+export interface BriefWorkVO {
+ id: number // 唯一主键
+ briefType: number // 简报类型:1-日报,2-周报,3-月报
+ briefCount: number // 周报为周数/月报为月数
+ briefStartDate: Date // 简报开始日期
+ briefEndDate: Date // 简报结束日期
+ selectCustomer: boolean // 是否选择客户
+ workComplate: string // 本周期完成工作
+ workPlan: string // 下周期工作计划
+ workAssistance: string // 工作困难及协助
+ workExperience: string // 工作心得分享
+ attachment: string // 附件
+ processInstanceId: string // 工作流编号
+ auditStatus: number // 审批状态
+}
+
+// 工作简报 API
+export const BriefWorkApi = {
+ // 查询工作简报分页
+ getBriefWorkPage: async (params: any) => {
+ return await request.get({ url: `/tts/brief-work/page`, params })
+ },
+
+ // 查询工作简报分页-根据周报查询
+ getBriefWorkTimePage: async (params: any) => {
+ return await request.get({ url: `/tts/brief-work/page`, params })
+ },
+
+ // 查询工作简报详情
+ getBriefWork: async (params: any) => {
+ return await request.get({ url: `/tts/brief-work/get`, params})
+ },
+
+ // 新增工作简报
+ createBriefWork: async (data: BriefWorkVO) => {
+ return await request.post({ url: `/tts/brief-work/create`, data })
+ },
+
+ // 修改工作简报
+ updateBriefWork: async (data: BriefWorkVO) => {
+ return await request.put({ url: `/tts/brief-work/update`, data })
+ },
+
+ // 删除工作简报
+ deleteBriefWork: async (id: number) => {
+ return await request.delete({ url: `/tts/brief-work/delete?id=` + id })
+ },
+
+ // 导出工作简报 Excel
+ exportBriefWork: async (params) => {
+ return await request.download({ url: `/tts/brief-work/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/task/briefWorkCustomer/index.ts b/src/api/task/briefWorkCustomer/index.ts
new file mode 100644
index 000000000..c2dd93583
--- /dev/null
+++ b/src/api/task/briefWorkCustomer/index.ts
@@ -0,0 +1,40 @@
+import request from '@/config/axios'
+
+// 工作简报客户 VO
+export interface BriefWorkCustomerVO {
+ briefId: number // 简报ID
+ customerId: number // 客户Id
+}
+
+// 工作简报客户 API
+export const BriefWorkCustomerApi = {
+ // 查询工作简报客户分页
+ getBriefWorkCustomerPage: async (params: any) => {
+ return await request.get({ url: `/tts/brief-work-customer/page`, params })
+ },
+
+ // 查询工作简报客户详情
+ getBriefWorkCustomer: async (id: number) => {
+ return await request.get({ url: `/tts/brief-work-customer/get?id=` + id })
+ },
+
+ // 新增工作简报客户
+ createBriefWorkCustomer: async (data: BriefWorkCustomerVO) => {
+ return await request.post({ url: `/tts/brief-work-customer/create`, data })
+ },
+
+ // 修改工作简报客户
+ updateBriefWorkCustomer: async (data: BriefWorkCustomerVO) => {
+ return await request.put({ url: `/tts/brief-work-customer/update`, data })
+ },
+
+ // 删除工作简报客户
+ deleteBriefWorkCustomer: async (id: number) => {
+ return await request.delete({ url: `/tts/brief-work-customer/delete?id=` + id })
+ },
+
+ // 导出工作简报客户 Excel
+ exportBriefWorkCustomer: async (params) => {
+ return await request.download({ url: `/tts/brief-work-customer/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/task/online/index.ts b/src/api/task/online/index.ts
new file mode 100644
index 000000000..924cb08a7
--- /dev/null
+++ b/src/api/task/online/index.ts
@@ -0,0 +1,51 @@
+import request from '@/config/axios'
+
+// 上线申请 VO
+export interface OnlineApplicationVO {
+ id: number // 唯一主键
+ projectName: string // 产品名称
+ projectType: number // 项目类型
+ deptId: number // 申请部门
+ userId: number // 申请人
+ testCompletionDate: Date // 测试完成日期
+ onlineDate: Date // 申请上线日期
+ externalSystem: string // 上线系统是否涉及第三方系统(如:是/否)
+ precautions: string // 上线注意事项
+ emergencyManagement: string // 失败应急处理
+ applicantSign: string // 申请人签字
+ processInstanceId: string // 工作流编号
+ auditStatus: number // 审批状态
+}
+
+// 上线申请 API
+export const OnlineApplicationApi = {
+ // 查询上线申请分页
+ getOnlineApplicationPage: async (params: any) => {
+ return await request.get({ url: `/tts/online-application/page`, params })
+ },
+
+ // 查询上线申请详情
+ getOnlineApplication: async (id: number) => {
+ return await request.get({ url: `/tts/online-application/get?id=` + id })
+ },
+
+ // 新增上线申请
+ createOnlineApplication: async (data: OnlineApplicationVO) => {
+ return await request.post({ url: `/tts/online-application/create`, data })
+ },
+
+ // 修改上线申请
+ updateOnlineApplication: async (data: OnlineApplicationVO) => {
+ return await request.put({ url: `/tts/online-application/update`, data })
+ },
+
+ // 删除上线申请
+ deleteOnlineApplication: async (id: number) => {
+ return await request.delete({ url: `/tts/online-application/delete?id=` + id })
+ },
+
+ // 导出上线申请 Excel
+ exportOnlineApplication: async (params) => {
+ return await request.download({ url: `/tts/online-application/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/task/onlineModule/index.ts b/src/api/task/onlineModule/index.ts
new file mode 100644
index 000000000..1a96851fd
--- /dev/null
+++ b/src/api/task/onlineModule/index.ts
@@ -0,0 +1,43 @@
+import request from '@/config/axios'
+
+// 上线模块信息 VO
+export interface OnlineModuleInfoVO {
+ id: number // 唯一主键
+ onlineApplicationId: number // 上线申请ID
+ involvingModule: string // 涉及模块
+ version: string // 版本
+ moduleDescription: string // 模块说明
+}
+
+// 上线模块信息 API
+export const OnlineModuleInfoApi = {
+ // 查询上线模块信息分页
+ getOnlineModuleInfoPage: async (params: any) => {
+ return await request.get({ url: `/tts/online-module-info/page`, params })
+ },
+
+ // 查询上线模块信息详情
+ getOnlineModuleInfo: async (id: number) => {
+ return await request.get({ url: `/tts/online-module-info/get?id=` + id })
+ },
+
+ // 新增上线模块信息
+ createOnlineModuleInfo: async (data: OnlineModuleInfoVO) => {
+ return await request.post({ url: `/tts/online-module-info/create`, data })
+ },
+
+ // 修改上线模块信息
+ updateOnlineModuleInfo: async (data: OnlineModuleInfoVO) => {
+ return await request.put({ url: `/tts/online-module-info/update`, data })
+ },
+
+ // 删除上线模块信息
+ deleteOnlineModuleInfo: async (id: number) => {
+ return await request.delete({ url: `/tts/online-module-info/delete?id=` + id })
+ },
+
+ // 导出上线模块信息 Excel
+ exportOnlineModuleInfo: async (params) => {
+ return await request.download({ url: `/tts/online-module-info/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/task/project/index.ts b/src/api/task/project/index.ts
new file mode 100644
index 000000000..9cfc3ffd0
--- /dev/null
+++ b/src/api/task/project/index.ts
@@ -0,0 +1,56 @@
+import request from '@/config/axios'
+
+// 项目管理 VO
+export interface ProjectVO {
+ id: number // 唯一主键
+ projectCode: string // 项目编号
+ name: string // 项目名称
+ projectLevel: number // 项目级别,字典值:简单、一般、中等、困难、比较困难
+ projectType: number // 项目类型,字典值
+ userId: number // 项目负责人ID
+ startDate: Date // 项目开始日期
+ endDate: Date // 项目结束日期
+ attachment: string // 项目附件
+ bonusEvaluation: boolean // 立项奖金评估,1: 是,2: 否
+ bonusAmount: number // 立项奖金金额
+ bonusIssueDate: Date // 奖金发放日期
+ background: string // 项目背景
+ introduction: string // 项目简介
+ expectation: string // 项目预期成果
+ progress: number // 项目进度
+ processInstanceId: string // 工作流编号
+ auditStatus: number // 审批状态
+}
+
+// 项目管理 API
+export const ProjectApi = {
+ // 查询项目管理分页
+ getProjectPage: async (params: any) => {
+ return await request.get({ url: `/tts/project/page`, params })
+ },
+
+ // 查询项目管理详情
+ getProject: async (id: number) => {
+ return await request.get({ url: `/tts/project/get?id=` + id })
+ },
+
+ // 新增项目管理
+ createProject: async (data: ProjectVO) => {
+ return await request.post({ url: `/tts/project/create`, data })
+ },
+
+ // 修改项目管理
+ updateProject: async (data: ProjectVO) => {
+ return await request.put({ url: `/tts/project/update`, data })
+ },
+
+ // 删除项目管理
+ deleteProject: async (id: number) => {
+ return await request.delete({ url: `/tts/project/delete?id=` + id })
+ },
+
+ // 导出项目管理 Excel
+ exportProject: async (params) => {
+ return await request.download({ url: `/tts/project/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/task/task/index.ts b/src/api/task/task/index.ts
new file mode 100644
index 000000000..00b7a8fdb
--- /dev/null
+++ b/src/api/task/task/index.ts
@@ -0,0 +1,51 @@
+import request from '@/config/axios'
+
+// 任务 VO
+export interface ProjectTaskVO {
+ id: number // 唯一主键
+ taskName: string // 任务名称
+ userId: number // 任务负责人
+ taskLevel: number // 任务优先级
+ startDate: Date // 开始日期
+ endDate: Date // 截止日期
+ attachment: string // 任务附件
+ taskDescribe: string // 任务描述
+ taskProgress: number // 任务进度
+ projectId: number // 项目Id
+ taskState: number // 任务状态
+ processInstanceId: string // 工作流编号
+ auditStatus: number // 审批状态
+}
+
+// 任务 API
+export const ProjectTaskApi = {
+ // 查询任务分页
+ getProjectTaskPage: async (params: any) => {
+ return await request.get({ url: `/tts/project-task/page`, params })
+ },
+
+ // 查询任务详情
+ getProjectTask: async (id: number) => {
+ return await request.get({ url: `/tts/project-task/get?id=` + id })
+ },
+
+ // 新增任务
+ createProjectTask: async (data: ProjectTaskVO) => {
+ return await request.post({ url: `/tts/project-task/create`, data })
+ },
+
+ // 修改任务
+ updateProjectTask: async (data: ProjectTaskVO) => {
+ return await request.put({ url: `/tts/project-task/update`, data })
+ },
+
+ // 删除任务
+ deleteProjectTask: async (id: number) => {
+ return await request.delete({ url: `/tts/project-task/delete?id=` + id })
+ },
+
+ // 导出任务 Excel
+ exportProjectTask: async (params) => {
+ return await request.download({ url: `/tts/project-task/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/components/IFrame/src/preview.vue b/src/components/IFrame/src/preview.vue
new file mode 100644
index 000000000..faad24718
--- /dev/null
+++ b/src/components/IFrame/src/preview.vue
@@ -0,0 +1,20 @@
+
+
+