|
@@ -1,10 +1,13 @@
|
|
|
import { Component, OnInit, signal } from '@angular/core';
|
|
|
import { CommonModule } from '@angular/common';
|
|
|
import { FormsModule } from '@angular/forms';
|
|
|
+import { Router, RouterModule } from '@angular/router';
|
|
|
import { GroupChatService } from '../services/groupchat.service';
|
|
|
import { ProjectService } from '../services/project.service';
|
|
|
import { WxworkCorp } from 'fmode-ng/core';
|
|
|
-import { FmodeObject } from 'fmode-ng/core';
|
|
|
+import { FmodeObject, FmodeParse } from 'fmode-ng/core';
|
|
|
+
|
|
|
+const Parse = FmodeParse.with('nova');
|
|
|
|
|
|
interface GroupChat {
|
|
|
id: string;
|
|
@@ -25,7 +28,7 @@ interface Project {
|
|
|
@Component({
|
|
|
selector: 'app-groupchats',
|
|
|
standalone: true,
|
|
|
- imports: [CommonModule, FormsModule],
|
|
|
+ imports: [CommonModule, FormsModule, RouterModule],
|
|
|
templateUrl: './groupchats.html',
|
|
|
styleUrls: ['./groupchats.scss']
|
|
|
})
|
|
@@ -52,9 +55,16 @@ export class GroupChats implements OnInit {
|
|
|
private wecorp: WxworkCorp | null = null;
|
|
|
private readonly COMPANY_ID = 'cDL6R1hgSi'; // 映三色帐套
|
|
|
|
|
|
+ // 创建项目相关
|
|
|
+ showCreateProjectModal = false;
|
|
|
+ creatingGroupChat: GroupChat | null = null;
|
|
|
+ newProjectName = '';
|
|
|
+ creating = signal(false);
|
|
|
+
|
|
|
constructor(
|
|
|
private groupChatService: GroupChatService,
|
|
|
- private projectService: ProjectService
|
|
|
+ private projectService: ProjectService,
|
|
|
+ private router: Router
|
|
|
) {
|
|
|
// 初始化企微Corp
|
|
|
this.wecorp = new WxworkCorp(this.COMPANY_ID);
|
|
@@ -245,4 +255,123 @@ export class GroupChats implements OnInit {
|
|
|
a.click();
|
|
|
URL.revokeObjectURL(url);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 打开创建项目模态框
|
|
|
+ */
|
|
|
+ openCreateProjectModal(group: GroupChat) {
|
|
|
+ this.creatingGroupChat = group;
|
|
|
+ this.newProjectName = group.name || '新项目';
|
|
|
+ this.showCreateProjectModal = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关闭创建项目模态框
|
|
|
+ */
|
|
|
+ closeCreateProjectModal() {
|
|
|
+ this.showCreateProjectModal = false;
|
|
|
+ this.creatingGroupChat = null;
|
|
|
+ this.newProjectName = '';
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建项目并关联到GroupChat
|
|
|
+ */
|
|
|
+ async createProject() {
|
|
|
+ if (!this.newProjectName.trim()) {
|
|
|
+ alert('请输入项目名称');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!this.creatingGroupChat) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.creating.set(true);
|
|
|
+ try {
|
|
|
+ console.log('开始创建项目', {
|
|
|
+ projectName: this.newProjectName,
|
|
|
+ groupChatId: this.creatingGroupChat.id,
|
|
|
+ groupChatName: this.creatingGroupChat.name
|
|
|
+ });
|
|
|
+
|
|
|
+ // 1. 创建项目
|
|
|
+ const Project = Parse.Object.extend('Project');
|
|
|
+ const project = new Project();
|
|
|
+
|
|
|
+ // 获取公司对象
|
|
|
+ const company = new Parse.Object('Company');
|
|
|
+ company.id = this.COMPANY_ID;
|
|
|
+
|
|
|
+ project.set('title', this.newProjectName.trim());
|
|
|
+ project.set('company', company.toPointer());
|
|
|
+ project.set('status', '待分配');
|
|
|
+ project.set('currentStage', '订单分配');
|
|
|
+ project.set('data', {
|
|
|
+ createdBy: 'admin',
|
|
|
+ createdFrom: 'admin_groupchat',
|
|
|
+ groupChatId: this.creatingGroupChat.id
|
|
|
+ });
|
|
|
+
|
|
|
+ await project.save();
|
|
|
+ console.log('项目创建成功', { projectId: project.id });
|
|
|
+
|
|
|
+ // 2. 关联GroupChat.project
|
|
|
+ const groupChatQuery = new Parse.Query('GroupChat');
|
|
|
+ const groupChatObject = await groupChatQuery.get(this.creatingGroupChat.id);
|
|
|
+ groupChatObject.set('project', project.toPointer());
|
|
|
+ await groupChatObject.save();
|
|
|
+ console.log('群聊关联项目成功');
|
|
|
+
|
|
|
+ // 3. 创建 ProjectGroup 关联(支持多项目多群)
|
|
|
+ const ProjectGroup = Parse.Object.extend('ProjectGroup');
|
|
|
+ const pg = new ProjectGroup();
|
|
|
+ pg.set('project', project.toPointer());
|
|
|
+ pg.set('groupChat', groupChatObject.toPointer());
|
|
|
+ pg.set('isPrimary', true);
|
|
|
+ pg.set('company', company.toPointer());
|
|
|
+ await pg.save();
|
|
|
+ console.log('ProjectGroup关联创建成功');
|
|
|
+
|
|
|
+ alert('项目创建成功!');
|
|
|
+
|
|
|
+ // 4. 刷新群组列表
|
|
|
+ await this.loadGroupChats();
|
|
|
+
|
|
|
+ // 5. 关闭模态框
|
|
|
+ this.closeCreateProjectModal();
|
|
|
+
|
|
|
+ } catch (err: any) {
|
|
|
+ console.error('创建项目失败:', err);
|
|
|
+ alert('创建失败: ' + (err.message || '未知错误'));
|
|
|
+ } finally {
|
|
|
+ this.creating.set(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导航到项目详情页
|
|
|
+ */
|
|
|
+ async navigateToProjectDetail(group: GroupChat) {
|
|
|
+ if (!group.project) {
|
|
|
+ alert('该群组未关联项目');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const projectId = group.project.id;
|
|
|
+ const cid = this.COMPANY_ID;
|
|
|
+
|
|
|
+ console.log('导航到项目详情', {
|
|
|
+ projectId,
|
|
|
+ cid,
|
|
|
+ groupId: group.id
|
|
|
+ });
|
|
|
+
|
|
|
+ // 导航到项目详情页(企微路由)
|
|
|
+ await this.router.navigate(['/wxwork', cid, 'project', projectId], {
|
|
|
+ queryParams: {
|
|
|
+ groupId: group.id
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|