#!/usr/bin/env node
/**
* CRM Module Setup Script
* Run this to create a complete CRM module with pages
*
* Usage: npx ts-node scripts/setup-crm.ts
*/
import { NocoBaseClient } from '../src/client.js';
import * as PageTools from '../src/page-tools.js';
const NOCOBASE_URL = process.env.NOCOBASE_URL || 'http://erp.nexpo.vn';
const NOCOBASE_EMAIL = process.env.NOCOBASE_EMAIL || 'admin@nocobase.com';
const NOCOBASE_PASSWORD = process.env.NOCOBASE_PASSWORD || 'admin123';
const CRM_COLLECTIONS = [
{ name: 'leads', title: 'Leads', icon: 'UserOutlined' },
{ name: 'contacts', title: 'Contacts', icon: 'ContactsOutlined' },
{ name: 'accounts', title: 'Accounts', icon: 'BankOutlined' },
{ name: 'opportunities', title: 'Opportunities', icon: 'DollarOutlined' },
{ name: 'activities', title: 'Activities', icon: 'CalendarOutlined' },
];
async function main() {
const client = new NocoBaseClient(NOCOBASE_URL, {
email: NOCOBASE_EMAIL,
password: NOCOBASE_PASSWORD
});
console.log('š Authenticating...');
await client.authenticate();
console.log('ā
Connected to', NOCOBASE_URL);
// 1. Create CRM Group
console.log('\nš Creating CRM Group...');
const groupResult = await PageTools.createGroup(client, {
title: 'CRM',
icon: 'TeamOutlined'
});
const groupId = groupResult.groupId;
console.log('ā
Group created:', groupId);
// 2. Create pages for each collection
for (const col of CRM_COLLECTIONS) {
console.log(`\nš Creating page: ${col.title}...`);
try {
// Check if collection exists
const colCheck = await client.get(`/collections:get?filterByTk=${col.name}`);
if (!colCheck.data?.data) {
console.log(`ā ļø Collection ${col.name} not found, skipping...`);
continue;
}
// Create V2 page (pre-configured with actions)
const pageResult = await PageTools.createCRMTablePage(client, {
title: col.title,
collection: col.name,
icon: col.icon,
parentId: groupId
});
console.log(`ā
Page created: ${pageResult.url}`);
} catch (error: any) {
console.error(`ā Error creating ${col.title}:`, error.message);
}
}
console.log('\nš CRM Module setup complete!');
console.log('š Refresh NocoBase browser to see the new pages.');
}
main().catch(console.error);