Selaa lähdekoodia

feat: window?.fmode?.alert confirm input

Future 23 tuntia sitten
vanhempi
commit
cde397fd87
28 muutettua tiedostoa jossa 62 lisäystä ja 60 poistoa
  1. 4 4
      copy/project-detail.ts
  2. 1 1
      docs/requirements-optimization.md
  3. 1 1
      docs/task/2025102221-migration-guide.md
  4. 1 1
      docs/task/team-leader-order-approval-implementation.md
  5. 2 2
      src/app/pages/admin/api-integrations/api-integrations.ts
  6. 1 1
      src/app/pages/admin/departments/departments.ts
  7. 2 2
      src/app/pages/admin/designers/designers.ts
  8. 1 1
      src/app/pages/admin/employees/employees.ts
  9. 1 1
      src/app/pages/admin/groupchats/groupchats.ts
  10. 4 4
      src/app/pages/admin/system-settings/system-settings.ts
  11. 4 4
      src/app/pages/admin/user-management/user-management.ts
  12. 1 1
      src/app/pages/customer-service/case-library/case-library.ts
  13. 1 1
      src/app/pages/customer-service/dashboard/dashboard.ts
  14. 2 2
      src/app/pages/designer/project-detail/components/reference-image-manager/reference-image-manager.component.ts
  15. 9 9
      src/app/pages/designer/project-detail/project-detail.ts
  16. 4 4
      src/app/pages/finance/dashboard/dashboard.ts
  17. 4 4
      src/app/pages/hr/employee-records/employee-records.ts
  18. 2 2
      src/app/pages/team-leader/dashboard/dashboard.ts
  19. 3 2
      src/app/shared/components/auto-settlement-config/auto-settlement-config.ts
  20. 1 1
      src/app/shared/components/order-approval-panel/order-approval-panel.component.ts
  21. 3 2
      src/app/shared/components/panoramic-synthesis-card/panoramic-synthesis-card.ts
  22. 2 2
      src/app/shared/components/settlement-card/settlement-card.ts
  23. 1 1
      src/modules/project/components/project-members-modal/project-members-modal.component.ts
  24. 1 1
      src/modules/project/components/quotation-editor.component.ts
  25. 2 2
      src/modules/project/components/team-assign/team-assign.component.ts
  26. 2 2
      src/modules/project/pages/project-detail/stages/stage-aftercare.component.ts
  27. 1 1
      src/modules/project/pages/project-detail/stages/stage-delivery.component.ts
  28. 1 1
      src/modules/project/pages/project-detail/stages/stage-order.component.ts

+ 4 - 4
copy/project-detail.ts

@@ -1552,7 +1552,7 @@ export class ProjectDetail implements OnInit, OnDestroy {
     const warning = this.getSkillMismatchWarning();
     if (warning) {
       // 显示技能不匹配警告
-      if (confirm(`${warning}\n是否联系技术组长协调支持?`)) {
+      if (await window?.fmode?.confirm(`${warning}\n是否联系技术组长协调支持?`)) {
         this.notifyTeamLeader('skill-mismatch');
       }
     }
@@ -3747,7 +3747,7 @@ export class ProjectDetail implements OnInit, OnDestroy {
     
     // 验收状态检查
     if (!this.isProjectAccepted()) {
-      const confirmStart = confirm('项目尚未完成全部验收,确定要启动结算流程吗?');
+      const confirmStart = await window?.fmode?.confirm('项目尚未完成全部验收,确定要启动结算流程吗?');
       if (!confirmStart) return;
     }
     
@@ -4357,7 +4357,7 @@ export class ProjectDetail implements OnInit, OnDestroy {
     console.log('⚙️ 设置关键词监控');
     
     if (this.isKeywordMonitoringActive) {
-      const confirmStop = confirm('关键词监控已激活,是否停止监控?');
+      const confirmStop = await window?.fmode?.confirm('关键词监控已激活,是否停止监控?');
       if (confirmStop) {
         this.isKeywordMonitoringActive = false;
        window?.fmode?.alert('✅ 关键词监控已停止');
@@ -4467,7 +4467,7 @@ export class ProjectDetail implements OnInit, OnDestroy {
     const pendingComplaints = this.exceptionHistories.filter(c => c.status === '待处理');
     
     if (pendingComplaints.length > 0) {
-      const confirmAnyway = confirm(`还有 ${pendingComplaints.length} 个投诉未处理,确定要标记为已完成吗?`);
+      const confirmAnyway = await window?.fmode?.confirm(`还有 ${pendingComplaints.length} 个投诉未处理,确定要标记为已完成吗?`);
       if (!confirmAnyway) return;
     }
     

+ 1 - 1
docs/requirements-optimization.md

@@ -1298,7 +1298,7 @@ export class AnnotationToolComponent {
   }
   
   clearAnnotations(): void {
-    if (confirm('确定清除所有标注吗?')) {
+    if (await window?.fmode?.confirm('确定清除所有标注吗?')) {
       this.annotations = [];
     }
   }

+ 1 - 1
docs/task/2025102221-migration-guide.md

@@ -62,7 +62,7 @@ export class ProjectManagement {
   
   // ✅ 添加迁移方法
   async migrateProjects() {
-    const confirmed = confirm('确定要批量更新所有项目的负责人吗?');
+    const confirmed = await window?.fmode?.confirm('确定要批量更新所有项目的负责人吗?');
     if (!confirmed) return;
     
     try {

+ 1 - 1
docs/task/team-leader-order-approval-implementation.md

@@ -282,7 +282,7 @@ export class OrderApprovalPanelComponent implements OnInit {
   async approveOrder() {
     if (this.isSubmitting) return;
     
-    const confirmed = confirm('确认通过此订单审批吗?');
+    const confirmed = await window?.fmode?.confirm('确认通过此订单审批吗?');
     if (!confirmed) return;
 
     this.isSubmitting = true;

+ 2 - 2
src/app/pages/admin/api-integrations/api-integrations.ts

@@ -567,8 +567,8 @@ export class ApiIntegrations implements OnInit {
     this.applyIntegrationFilters();
   }
 
-  deleteIntegration(id: string): void {
-    if (confirm('确定要删除这个API集成吗?')) {
+  async deleteIntegration(id: string): Promise<void> {
+    if (await window?.fmode?.confirm('确定要删除这个API集成吗?')) {
       this.apiIntegrations.set(this.apiIntegrations().filter(integration => integration.id !== id));
       this.applyIntegrationFilters();
     }

+ 1 - 1
src/app/pages/admin/departments/departments.ts

@@ -221,7 +221,7 @@ export class Departments implements OnInit {
 
   // 删除
   async deleteDepartment(dept: Department) {
-    if (!confirm(`确定要删除项目组 "${dept.name}" 吗?`)) {
+    if (!await window?.fmode?.confirm(`确定要删除项目组 "${dept.name}" 吗?`)) {
       return;
     }
 

+ 2 - 2
src/app/pages/admin/designers/designers.ts

@@ -269,8 +269,8 @@ export class Designers implements OnInit {
   }
 
   // 删除设计师
-  deleteDesigner(designer: Designer): void {
-    if (confirm(`确定要删除设计师 ${designer.name} 吗?`)) {
+  async deleteDesigner(designer: Designer): Promise<void> {
+    if (await window?.fmode?.confirm(`确定要删除设计师 ${designer.name} 吗?`)) {
       const updatedDesigners = this.designers().filter(d => d.id !== designer.id);
       this.designers.set(updatedDesigners);
       console.log('删除设计师:', designer);

+ 1 - 1
src/app/pages/admin/employees/employees.ts

@@ -268,7 +268,7 @@ export class Employees implements OnInit {
   // 禁用/启用员工
   async toggleEmployee(emp: Employee) {
     const action = emp.isDisabled ? '启用' : '禁用';
-    if (!confirm(`确定要${action}员工 "${emp.name}" 吗?`)) {
+    if (!await window?.fmode?.confirm(`确定要${action}员工 "${emp.name}" 吗?`)) {
       return;
     }
 

+ 1 - 1
src/app/pages/admin/groupchats/groupchats.ts

@@ -213,7 +213,7 @@ export class GroupChats implements OnInit {
 
   async toggleGroupChat(group: GroupChat) {
     const action = group.isDisabled ? '启用' : '禁用';
-    if (!confirm(`确定要${action}群组 "${group.name}" 吗?`)) {
+    if (!await window?.fmode?.confirm(`确定要${action}群组 "${group.name}" 吗?`)) {
       return;
     }
 

+ 4 - 4
src/app/pages/admin/system-settings/system-settings.ts

@@ -519,11 +519,11 @@ export class SystemSettings implements OnInit {
   }
 
   // 批量删除
-  bulkDeleteWorkflow(): void {
+  async bulkDeleteWorkflow(): Promise<void> {
     if (this.bulkSelectedIds.size === 0) return;
     const names = this.workflowStages.filter(s => this.bulkSelectedIds.has(s.id)).map(s => s.name);
     const preview = names.slice(0, 5).join('、') + (names.length > 5 ? ` 等 ${names.length} 项` : '');
-    if (confirm(`确认删除以下阶段?\n${preview}`)) {
+    if (await window?.fmode?.confirm(`确认删除以下阶段?\n${preview}`)) {
       this.workflowStages = this.workflowStages.filter(s => !this.bulkSelectedIds.has(s.id));
       this.onWorkflowSearch();
       this.recalcCoreWorkflowStages();
@@ -673,8 +673,8 @@ export class SystemSettings implements OnInit {
   }
   
   // 删除设置项
-  deleteSetting(type: string, id: string): void {
-    if (confirm('确定要删除此项设置吗?')) {
+  async deleteSetting(type: string, id: string): Promise<void> {
+    if (await window?.fmode?.confirm('确定要删除此项设置吗?')) {
       switch (type) {
         case 'workflow':
           this.workflowStages = this.workflowStages.filter(stage => stage.id !== id);

+ 4 - 4
src/app/pages/admin/user-management/user-management.ts

@@ -458,8 +458,8 @@ export class UserManagement implements OnInit {
     this.applyUserFilters();
   }
 
-  deleteUser(id: string): void {
-    if (confirm('确定要删除这个用户吗?')) {
+  async deleteUser(id: string): Promise<void> {
+    if (await window?.fmode?.confirm('确定要删除这个用户吗?')) {
       this.users.set(this.users().filter(user => user.id !== id));
       this.applyUserFilters();
     }
@@ -486,7 +486,7 @@ export class UserManagement implements OnInit {
     this.applyRoleFilters();
   }
 
-  deleteRole(id: string): void {
+  async deleteRole(id: string): Promise<void> {
     // 检查是否有用户正在使用该角色
     const role = this.roles().find(r => r.id === id);
     if (role && role.usersCount > 0) {
@@ -494,7 +494,7 @@ export class UserManagement implements OnInit {
       return;
     }
     
-    if (confirm('确定要删除这个角色吗?')) {
+    if (await window?.fmode?.confirm('确定要删除这个角色吗?')) {
       this.roles.set(this.roles().filter(role => role.id !== id));
       this.roleList = this.roles().map(role => role.name);
       this.applyRoleFilters();

+ 1 - 1
src/app/pages/customer-service/case-library/case-library.ts

@@ -403,7 +403,7 @@ export class CaseLibrary implements OnInit, OnDestroy {
    * 删除案例
    */
   async deleteCase(caseItem: Case) {
-    if (!confirm(`确定要删除案例"${caseItem.name}"吗?此操作不可恢复。`)) {
+    if (!await window?.fmode?.confirm(`确定要删除案例"${caseItem.name}"吗?此操作不可恢复。`)) {
       return;
     }
 

+ 1 - 1
src/app/pages/customer-service/dashboard/dashboard.ts

@@ -522,7 +522,7 @@ export class Dashboard implements OnInit, OnDestroy {
   
   // 删除任务
   async deleteTask(taskId: string): Promise<void> {
-    if (!confirm('确定要删除这个紧急事项吗?')) {
+    if (!await window?.fmode?.confirm('确定要删除这个紧急事项吗?')) {
       return;
     }
     

+ 2 - 2
src/app/pages/designer/project-detail/components/reference-image-manager/reference-image-manager.component.ts

@@ -397,10 +397,10 @@ export class ReferenceImageManagerComponent implements OnInit {
   }
 
   // 删除图片
-  deleteImage(image: ReferenceImage, event: Event) {
+  async deleteImage(image: ReferenceImage, event: Event): Promise<void> {
     event.stopPropagation();
     
-    if (confirm(`确定要删除 "${image.name}" 吗?`)) {
+    if (await window?.fmode?.confirm(`确定要删除 "${image.name}" 吗?`)) {
       this.referenceImages = this.referenceImages.filter(img => img.id !== image.id);
       this.filterByCategory(this.activeFilter);
       this.imagesUpdated.emit(this.referenceImages);

+ 9 - 9
src/app/pages/designer/project-detail/project-detail.ts

@@ -1722,11 +1722,11 @@ export class ProjectDetail implements OnInit, OnDestroy {
   }
 
   // 检查技能匹配度并提示
-  checkSkillMismatch(): void {
+  async checkSkillMismatch(): Promise<void> {
     const warning = this.getSkillMismatchWarning();
     if (warning) {
       // 显示技能不匹配警告
-      if (confirm(`${warning}\n是否联系技术组长协调支持?`)) {
+      if (await window?.fmode?.confirm(`${warning}\n是否联系技术组长协调支持?`)) {
         this.notifyTeamLeader('skill-mismatch');
       }
     }
@@ -3938,7 +3938,7 @@ export class ProjectDetail implements OnInit, OnDestroy {
   }
   
   // 启动自动结算(只有技术人员可触发)
-  initiateAutoSettlement(): void {
+  async initiateAutoSettlement(): Promise<void> {
     if (this.isAutoSettling) return;
     
     // 权限检查
@@ -3949,7 +3949,7 @@ export class ProjectDetail implements OnInit, OnDestroy {
     
     // 验收状态检查
     if (!this.isProjectAccepted()) {
-      const confirmStart = confirm('项目尚未完成全部验收,确定要启动结算流程吗?');
+      const confirmStart = await window?.fmode?.confirm('项目尚未完成全部验收,确定要启动结算流程吗?');
       if (!confirmStart) return;
     }
     
@@ -4565,7 +4565,7 @@ export class ProjectDetail implements OnInit, OnDestroy {
     console.log('⚙️ 设置关键词监控');
     
     if (this.isKeywordMonitoringActive) {
-      const confirmStop = confirm('⚙️ 关键词监控管理\n\n状态:✅ 已激活\n监控关键词:' + this.complaintKeywords.join('、') + '\n\n是否停止监控?');
+      const confirmStop = await window?.fmode?.confirm('⚙️ 关键词监控管理\n\n状态:✅ 已激活\n监控关键词:' + this.complaintKeywords.join('、') + '\n\n是否停止监控?');
       if (confirmStop) {
         this.isKeywordMonitoringActive = false;
        await window?.fmode?.alert('⏸️ 关键词监控已停止\n\n系统将不再自动抓取企业微信群中的投诉关键词');
@@ -4671,14 +4671,14 @@ export class ProjectDetail implements OnInit, OnDestroy {
   }
   
   // 确认投诉处理完成
-  confirmComplaint(): void {
+  async confirmComplaint(): Promise<void> {
     console.log('✅ 确认投诉处理完成');
     
     // 检查是否有未处理的投诉
     const pendingComplaints = this.exceptionHistories.filter(c => c.status === '待处理');
     
     if (pendingComplaints.length > 0) {
-      const confirmAnyway = confirm(`还有 ${pendingComplaints.length} 个投诉未处理,确定要标记为已完成吗?`);
+      const confirmAnyway = await window?.fmode?.confirm(`还有 ${pendingComplaints.length} 个投诉未处理,确定要标记为已完成吗?`);
       if (!confirmAnyway) return;
     }
     
@@ -5537,10 +5537,10 @@ export class ProjectDetail implements OnInit, OnDestroy {
   /**
    * 采纳建议
    */
-  acceptSuggestion(suggestion: any): void {
+  async acceptSuggestion(suggestion: any): Promise<void> {
     const confirmMessage = `确定要采纳这条优化建议吗?\n\n类别:${suggestion.category}\n预期提升:${suggestion.expectedImprovement}`;
     
-    if (confirm(confirmMessage)) {
+    if (await window?.fmode?.confirm(confirmMessage)) {
       // 标记建议为已采纳
       suggestion.accepted = true;
       suggestion.acceptedAt = new Date();

+ 4 - 4
src/app/pages/finance/dashboard/dashboard.ts

@@ -205,7 +205,7 @@ export class Dashboard implements OnInit {
   }
 
   // 处理待办任务点击
-  handleTaskClick(task: any) {
+  async handleTaskClick(task: any): Promise<void> {
     // 检查财务相关任务的权限
     if ((task.title === '临时收款待核定' || task.title === '报价待审核') && !this.checkUserRole('teamLead')) {
      window?.fmode?.alert('⚠️ 权限不足\n\n只有组长及以上权限可以处理此任务\n\n请联系管理员申请权限');
@@ -215,7 +215,7 @@ export class Dashboard implements OnInit {
     // 显示任务详情
     const taskDetails = `📋 待办任务详情\n\n任务:${task.title}\n优先级:${task.priority === 'high' ? '高' : task.priority === 'medium' ? '中' : '低'}\n截止时间:${task.time}\n\n是否立即处理此任务?`;
     
-    if (confirm(taskDetails)) {
+    if (await window?.fmode?.confirm(taskDetails)) {
       // 根据任务来源跳转到对应页面
       switch(task.source) {
         case 'reconciliation':
@@ -233,7 +233,7 @@ export class Dashboard implements OnInit {
   }
 
   // 处理快捷操作点击
-  handleQuickAction(action: string) {
+  async handleQuickAction(action: string): Promise<void> {
     // 检查权限
     if ((action === 'recordPayment' || action === 'generateReport') && !this.checkUserRole('teamLead')) {
      window?.fmode?.alert('⚠️ 权限不足\n\n只有组长及以上权限可以执行此操作\n\n请联系管理员申请权限');
@@ -254,7 +254,7 @@ export class Dashboard implements OnInit {
         this.showGenerateReportDialog();
         break;
       case 'quotationApproval':
-        const confirmNavigation = confirm('💼 即将跳转到报价审核页面\n\n是否继续?');
+        const confirmNavigation = await window?.fmode?.confirm('💼 即将跳转到报价审核页面\n\n是否继续?');
         if (confirmNavigation) {
           this.router.navigate(['/finance/quotation-approval']);
         }

+ 4 - 4
src/app/pages/hr/employee-records/employee-records.ts

@@ -781,8 +781,8 @@ export class EmployeeRecords implements OnInit {
   }
   
   // 删除员工
-  deleteEmployee(employee: Employee) {
-    if (confirm(`确定要删除员工 ${employee.name} 吗?`)) {
+  async deleteEmployee(employee: Employee) {
+    if (await window?.fmode?.confirm(`确定要删除员工 ${employee.name} 吗?`)) {
       this.employees.update(employees => 
         employees.filter(emp => emp.id !== employee.id)
       );
@@ -791,13 +791,13 @@ export class EmployeeRecords implements OnInit {
   }
   
   // 批量删除员工
-  batchDelete() {
+  async batchDelete() {
     if (this.selectedEmployees().length === 0) {
       this.showSnackBar('请先选择要删除的员工');
       return;
     }
     
-    if (confirm(`确定要删除选中的 ${this.selectedEmployees().length} 名员工吗?`)) {
+    if (await window?.fmode?.confirm(`确定要删除选中的 ${this.selectedEmployees().length} 名员工吗?`)) {
       this.employees.update(employees => 
         employees.filter(emp => !this.selectedEmployees().includes(emp.id))
       );

+ 2 - 2
src/app/pages/team-leader/dashboard/dashboard.ts

@@ -2536,7 +2536,7 @@ export class Dashboard implements OnInit, OnDestroy {
   }
 
   // 快速分配项目(增强:加入智能推荐)
-  quickAssignProject(projectId: string): void {
+  async quickAssignProject(projectId: string): Promise<void> {
     const project = this.projects.find(p => p.id === projectId);
     if (!project) {
      window?.fmode?.alert('未找到对应项目');
@@ -2548,7 +2548,7 @@ export class Dashboard implements OnInit, OnDestroy {
       const reassigning = !!project.designerName;
       const message = `推荐设计师:${recommended.name}(工作负载:${recommended.workload}%,评分:${recommended.avgRating}分)` +
                 (reassigning ? `\n\n该项目当前已由「${project.designerName}」负责,是否改为分配给「${recommended.name}」?` : '\n\n是否确认分配?');
-      const confirmAssign = confirm(message);
+      const confirmAssign = await window?.fmode?.confirm(message);
       if (confirmAssign) {
         project.designerName = recommended.name;
         if (project.currentStage === 'pendingAssignment' || project.currentStage === 'pendingApproval') {

+ 3 - 2
src/app/shared/components/auto-settlement-config/auto-settlement-config.ts

@@ -139,8 +139,9 @@ export class AutoSettlementConfigComponent implements OnInit {
   }
 
   // 删除规则
-  deleteRule(ruleId: string) {
-    if (confirm('确定要删除这条规则吗?')) {
+  async deleteRule(ruleId: string): Promise<void> {
+    const ok = await window?.fmode?.confirm('确定要删除这条规则吗?');
+    if (ok) {
       this.autoSettlementService.deleteRule(ruleId);
       this.loadRules();
     }

+ 1 - 1
src/app/shared/components/order-approval-panel/order-approval-panel.component.ts

@@ -106,7 +106,7 @@ export class OrderApprovalPanelComponent implements OnInit {
   async approveOrder() {
     if (this.isSubmitting) return;
     
-    const confirmed = confirm('确认通过此订单审批吗?');
+    const confirmed = await window?.fmode?.confirm('确认通过此订单审批吗?');
     if (!confirmed) return;
 
     this.isSubmitting = true;

+ 3 - 2
src/app/shared/components/panoramic-synthesis-card/panoramic-synthesis-card.ts

@@ -135,8 +135,9 @@ export class PanoramicSynthesisCardComponent {
     // 实际实现中会导航到编辑页面
   }
 
-  onDelete(synthesis: PanoramicSynthesis): void {
-    if (confirm('确定要删除这个全景合成吗?')) {
+  async onDelete(synthesis: PanoramicSynthesis): Promise<void> {
+    const ok = await window?.fmode?.confirm('确定要删除这个全景合成吗?');
+    if (ok) {
       console.log('删除全景合成:', synthesis);
       // 实际实现中会调用删除API
     }

+ 2 - 2
src/app/shared/components/settlement-card/settlement-card.ts

@@ -274,7 +274,7 @@ export class SettlementCardComponent implements OnInit {
 3. 标记为已结算
     `.trim();
     
-    if (confirm(overdueMessage + '\n\n点击"确定"发送催款提醒,点击"取消"查看更多选项')) {
+    if (await window?.fmode?.confirm(overdueMessage + '\n\n点击"确定"发送催款提醒,点击"取消"查看更多选项')) {
       // 发送催款提醒
       this.sendOverdueReminder(settlement);
     } else {
@@ -418,7 +418,7 @@ export class SettlementCardComponent implements OnInit {
   private async cancelSettlement(settlement: Settlement): Promise<void> {
     const reason = await window?.fmode?.input('请输入取消结算的原因:');
     if (reason && reason.trim()) {
-      if (confirm(`确定要取消此结算吗?\n项目:${settlement.projectName}\n金额:¥${settlement.amount}`)) {
+      if (await window?.fmode?.confirm(`确定要取消此结算吗?\n项目:${settlement.projectName}\n金额:¥${settlement.amount}`)) {
         settlement.status = '已取消';
         
         this.snackBar.open(

+ 1 - 1
src/modules/project/components/project-members-modal/project-members-modal.component.ts

@@ -327,7 +327,7 @@ export class ProjectMembersModalComponent implements OnInit {
     }
 
     const confirmMsg = `确定将 \"${member.name}\" 移出项目吗?`;
-    if (!confirm(confirmMsg)) return;
+    if (!await window?.fmode?.confirm(confirmMsg)) return;
 
     try {
       this.loading = true;

+ 1 - 1
src/modules/project/components/quotation-editor.component.ts

@@ -760,7 +760,7 @@ export class QuotationEditorComponent implements OnInit, OnChanges, OnDestroy {
    * 删除产品
    */
   async deleteProduct(productId: string): Promise<void> {
-    if (!confirm('确定要删除这个产品吗?相关数据将被清除。')) return;
+    if (!await window?.fmode?.confirm('确定要删除这个产品吗?相关数据将被清除。')) return;
 
     try {
       const product = this.products.find(p => p.id === productId);

+ 2 - 2
src/modules/project/components/team-assign/team-assign.component.ts

@@ -323,7 +323,7 @@ export class TeamAssignComponent implements OnInit {
   async confirmDeleteMember() {
     if (!this.editingTeam) return;
 
-    const ok = window.confirm('确定要删除该成员的项目分配吗?');
+    const ok = await window?.fmode?.confirm('确定要删除该成员的项目分配吗?');
     if (!ok) return;
 
     try {
@@ -395,7 +395,7 @@ export class TeamAssignComponent implements OnInit {
    * 移除团队成员
    */
   async removeMember(team: FmodeObject) {
-    if (!confirm(`确定要移除 ${team.get('profile')?.get('name')} 吗?`)) {
+    if (!await window?.fmode?.confirm(`确定要移除 ${team.get('profile')?.get('name')} 吗?`)) {
       return;
     }
 

+ 2 - 2
src/modules/project/pages/project-detail/stages/stage-aftercare.component.ts

@@ -591,7 +591,7 @@ export class StageAftercareComponent implements OnInit {
    * 删除支付凭证
    */
   async deletePaymentVoucher(voucherId: string) {
-    if (!confirm('确定删除此凭证吗?')) return;
+    if (!await window?.fmode?.confirm('确定删除此凭证吗?')) return;
 
     try {
       const voucher = this.finalPayment.paymentVouchers.find(v => v.id === voucherId);
@@ -1065,7 +1065,7 @@ export class StageAftercareComponent implements OnInit {
     }
 
     if (this.finalPayment.status !== 'completed') {
-      if (!confirm('尾款尚未结清,确定要归档吗?')) return;
+      if (!await window?.fmode?.confirm('尾款尚未结清,确定要归档吗?')) return;
     }
 
     try {

+ 1 - 1
src/modules/project/pages/project-detail/stages/stage-delivery.component.ts

@@ -359,7 +359,7 @@ export class StageDeliveryComponent implements OnInit {
    * 删除交付文件
    */
   async deleteDeliveryFile(productId: string, deliveryType: string, fileId: string): Promise<void> {
-    if (!confirm('确定要删除这个文件吗?')) {
+    if (!await window?.fmode?.confirm('确定要删除这个文件吗?')) {
       return;
     }
 

+ 1 - 1
src/modules/project/pages/project-detail/stages/stage-order.component.ts

@@ -554,7 +554,7 @@ export class StageOrderComponent implements OnInit {
    * 删除空间
    */
   async deleteSpace(spaceId: string) {
-    if (!confirm('确定要删除这个空间吗?相关数据将被清除。')) return;
+    if (!await window?.fmode?.confirm('确定要删除这个空间吗?相关数据将被清除。')) return;
 
     try {
       await this.productSpaceService.deleteProductSpace(spaceId);