Plantilla Vue

Plantilla de Backend para la App CRM
Vue — Guía de Esquema, API y AI

Un esquema de backend de Vue CRM listo para producción y un Kit de Inicio en Back4app: Contacto, Empresa, Negocio, Actividad, etapas del pipeline, diagrama ER, diccionario de datos, esquema JSON, playground de API, y un prompt de Agente de AI con un clic para desplegar en minutos.

Puntos Clave

En esta página obtienes un esquema de CRM listo para producción, un prompt de AI con un clic, y código Vue paso a paso — para que puedas lanzar una app CRM sin construir el backend.

  1. Despliega en minutosPega el aviso del Agente de IA y obtén una aplicación en funcionamiento con contactos, empresas, ofertas y pipeline.
  2. Seguro por defectoACLs y acceso basado en roles para que los usuarios vean solo sus ofertas y datos asignados.
  3. Vue-SDK nativoObjetos tipados, async/await, fijación offline y Live Queries para actualizaciones de pipeline.
  4. REST + GraphQLAmbas APIs generadas automáticamente; filtra ofertas por etapa, lista actividades por relacionado con.
  5. Cinco clases_Usuario (incorporado), Empresa, Contacto, Oferta (pipeline), Actividad (tareas/eventos).

¿Qué es la plantilla de backend de la aplicación CRM de Vue?

Conecta Vue 3 y Pinia al esquema CRM de Back4app con esta plantilla. El SDK de Parse JavaScript se adapta naturalmente en tiendas o composables de Pinia: obtén contactos y negocios, filtra por etapa y mantiene el pipeline Reactivo. Live Queries mantiene la interfaz de usuario sincronizada con los cambios del backend. Sin capa de API personalizada: solo apunta tu aplicación Vue a Back4app.

Mejor para:

Equipos de ventasCreadores de CRMPrototipado rápidoRepresentantes de campoLanzamientos de MVPEquipos eligiendo un BaaS para CRM

Descripción general

Las UIs CRM 3 de Vue mantienen contactos y el estado del pipeline en Pinia o composables. Back4app mantiene los datos; el SDK Parse JavaScript los obtiene y los muta. Usa el nuevo Parse.Query('Deal').equalTo('stage', stage).find() en acciones y expone resultados Reactivamente.

El esquema define _User, Company, Contact, Deal, y Activity. Los componentes de Vue se mantienen simples: llama a las acciones de almacenamiento que usan el SDK Parse; Live Queries opcionales mantienen el pipeline y la lista de contactos actualizados sin necesidad de refresco manual.

Características principales del CRM

Backend de CRM Vue 3 con Pinia y el SDK de Parse: gestión de contactos y empresas, pipeline de negocios y seguimiento de actividades con estado Reactivo y Live Queries.

Gestión de contactos

Almacena y gestiona contactos con nombre, correo electrónico, teléfono, empresa y notas. Ideal para aplicaciones Vue.

Gestión de empresas

Rastrea empresas con nombre, sitio web, industria y dirección. Enlaces a contactos y ofertas.

Tubería de ofertas

Tubería de ventas con etapas, monto, fecha de cierre esperada y asignación. Construido para backends de Vue.

Seguimiento de actividades

Registra llamadas, correos electrónicos, reuniones y notas vinculadas a contactos y negocios. Funciona con el SDK de Vue.

Usuario y permisos

Modelo de usuario integrado y punteros para propiedad y asignación. ACLs listos para usar para Vue.

¿Por qué construir tu backend de CRM Vue con Back4app?

Back4app se empareja con Vue 3 para que puedas concentrarte en el pipeline y la Reactividad de contacto sin construir un backend.

  • Pinia y el SDK: Usa el SDK de Back4app JavaScript dentro de las tiendas Pinia; obtiene y muta contactos, ofertas y actividades con async/await.
  • Autenticación lista para usar: Parse.User.login() y signUp() te dan tokens de sesión; el backend devuelve datos según ACLs y assignedTo.
  • Amigable con la composición: El mismo SDK funciona en setup() o Pinia; se adapta a la API de composición de Vue 3 y TypeScript para CRM.

Ideal para desarrolladores de Vue 3 que construyen CRM o paneles de ventas con Pinia y la API de composición.

Beneficios principales

Un backend CRM listo para producción para que puedas enviar más rápido y concentrarte en tu aplicación.

Envía más rápido, sin código de backend

APIs REST y GraphQL y un esquema listo para usar — conecta tu aplicación y listo.

Seguro por defecto

ACLs y permisos a nivel de clase; restringir por assignedTo y createdBy.

Pipeline en Tiempo Real

Live Queries sobre WebSockets para actualizaciones instantáneas de ofertas y actividades.

Autenticación Integrada

Registro de usuario, inicio de sesión y manejo de sesiones listos para usar.

Funciona Sin Conexión

El anclaje local mantiene contactos y ofertas disponibles sin conexión y se sincroniza cuando te reconectas.

Despliega en Minutos

Usa el Agente de IA para crear y desplegar tu aplicación CRM a partir de esta plantilla.

¿Listo para probarlo?

Deja que el agente de IA de Back4app cree el backend de tu aplicación CRM, conecte el frontend Vue y despliegue — todo desde un solo aviso.

Gratis para comenzar — 50 avisos de agente de IA/mes, no se requiere tarjeta de crédito

Pila técnica

Todo lo que impulsa esta plantilla de aplicación CRM de un vistazo.

Frontend
Vue
Backend
Back4app
Base de datos
MongoDB
Autenticación
Autenticación y Control de Acceso
APIs
REST y GraphQL
Despliegue
Agente de IA / Panel de control

Diagrama ER

Diagrama de entidad-relación para el modelo de datos de la aplicación CRM Vue.

Ver fuente del diagrama
Mermaid
erDiagram
    _User {
        String objectId PK
        String username
        String email
        String password
        Date createdAt
        Date updatedAt
    }

    Company {
        String objectId PK
        String name
        String website
        String industry
        String address
        String notes
        Pointer createdBy FK
        Date createdAt
        Date updatedAt
    }

    Contact {
        String objectId PK
        String name
        String email
        String phone
        Pointer company FK
        String notes
        Pointer createdBy FK
        Date createdAt
        Date updatedAt
    }

    Deal {
        String objectId PK
        String title
        Number amount
        String stage
        Pointer contact FK
        Pointer company FK
        Date expectedCloseDate
        String notes
        Pointer assignedTo FK
        Date createdAt
        Date updatedAt
    }

    Activity {
        String objectId PK
        String type
        String subject
        String description
        Date dueDate
        Date completedAt
        Pointer relatedTo FK
        Pointer createdBy FK
        Date createdAt
        Date updatedAt
    }

    Company ||--o{ Contact : "has"
    Company ||--o{ Deal : "has"
    Contact ||--o{ Deal : "has"
    _User ||--o{ Deal : "assignedTo"
    _User ||--o{ Activity : "createdBy"
    Contact ||--o{ Activity : "relatedTo"
    Deal ||--o{ Activity : "relatedTo"
    _User ||--o{ Company : "createdBy"
    _User ||--o{ Contact : "createdBy"

Flujo de integración

Secuencia de Auth-to-CRUD: cómo tu aplicación Vue se comunica con Back4app — iniciar sesión, luego consultar contactos y negocios, actualizar el pipeline.

Ver fuente del diagrama
Mermaid
sequenceDiagram
  participant User
  participant App as Vue App
  participant Back4app as Back4app Cloud

  User->>App: Login
  App->>Back4app: Parse.User.logIn(username, password)
  Back4app-->>App: Session token
  App-->>User: Logged in

  User->>App: Load contacts and deals
  App->>Back4app: new Parse.Query('Deal').find() or Parse.Query('Contact').find()
  Back4app-->>App: List of Deal / Contact
  App-->>User: Show pipeline

  User->>App: Create deal or contact
  App->>Back4app: deal.save() or contact.save()
  Back4app-->>App: Deal (objectId)
  App-->>User: Updated list

Diccionario de datos

Referencia completa de campos para cada clase en el esquema.

CampoTipoDescripciónRequerido
objectIdStringAuto-generated unique identifierautomático
nameStringFull name of the contact
emailStringEmail address
phoneStringPhone number
companyPointer<Company>Company this contact belongs to
notesStringFree-form notes
createdByPointer<_User>User who created this contact
createdAtDateAuto-generated creation timestampautomático
updatedAtDateAuto-generated last-update timestampautomático

9 campos en Contact

Seguridad y permisos

Cómo la propiedad, ACLs y permisos a nivel de clase protegen los datos en este esquema de CRM.

ACLs a Nivel de Fila

Usa ACLs y punteros (assignedTo, createdBy) para que los usuarios solo vean y editen sus tratos asignados y datos relacionados.

Permisos a Nivel de Clase

Los CLPs restringen qué roles o usuarios pueden crear, leer, actualizar o eliminar objetos a nivel de clase.

Propiedad Basada en Punteros

Deal.assignedTo y Activity.createdBy se vinculan a _User; Cloud Code puede hacer cumplir la visibilidad y las ediciones por rol.

Esquema (JSON)

Definición de esquema JSON en bruto — copia y usa en tu aplicación Back4app o importa a través de la API.

JSON
{
  "classes": [
    {
      "className": "Contact",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "name": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": false
        },
        "phone": {
          "type": "String",
          "required": false
        },
        "company": {
          "type": "Pointer",
          "targetClass": "Company",
          "required": false
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdBy": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Company",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "name": {
          "type": "String",
          "required": true
        },
        "website": {
          "type": "String",
          "required": false
        },
        "industry": {
          "type": "String",
          "required": false
        },
        "address": {
          "type": "String",
          "required": false
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdBy": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Deal",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "title": {
          "type": "String",
          "required": true
        },
        "amount": {
          "type": "Number",
          "required": false
        },
        "stage": {
          "type": "String",
          "required": false
        },
        "contact": {
          "type": "Pointer",
          "targetClass": "Contact",
          "required": false
        },
        "company": {
          "type": "Pointer",
          "targetClass": "Company",
          "required": false
        },
        "expectedCloseDate": {
          "type": "Date",
          "required": false
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "assignedTo": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Activity",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "type": {
          "type": "String",
          "required": false
        },
        "subject": {
          "type": "String",
          "required": false
        },
        "description": {
          "type": "String",
          "required": false
        },
        "dueDate": {
          "type": "Date",
          "required": false
        },
        "completedAt": {
          "type": "Date",
          "required": false
        },
        "relatedTo": {
          "type": "Pointer",
          "required": false
        },
        "createdBy": {
          "type": "Pointer",
          "targetClass": "_User",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "_User",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

Construir con el Agente de IA

Utiliza el Agente de IA de Back4app para construir una aplicación CRM real a partir de esta plantilla: creará el frontend, el backend (este esquema, autenticación y APIs) y lo desplegará — sin configuración manual. El aviso a continuación describe esta pila CRM para que el Agente pueda generar una aplicación lista para producción de una sola vez.

Agente de IA Back4app
Listo para construir
Crea una aplicación CRM en Back4app con este esquema y comportamiento exactos.

Esquema:
1. _Usuario (usar Back4app incorporado): nombre de usuario (String, requerido), correo electrónico (String, requerido), contraseña (String, requerido); objectId, createdAt, updatedAt (sistema).
2. Empresa: nombre (String, requerido), sitio web (String), industria (String), dirección (String), notas (String), creadoPor (Puntero a _Usuario); objectId, createdAt, updatedAt (sistema).
3. Contacto: nombre (String, requerido), correo electrónico (String), teléfono (String), empresa (Puntero a Empresa), notas (String), creadoPor (Puntero a _Usuario); objectId, createdAt, updatedAt (sistema).
4. Negocio: título (String, requerido), monto (Número), etapa (String; por ejemplo, cliente potencial, calificado, propuesta, negociación, ganado, perdido), contacto (Puntero a Contacto), empresa (Puntero a Empresa), fechaEsperadaCierre (Fecha), notas (String), asignadoA (Puntero a _Usuario); objectId, createdAt, updatedAt (sistema).
5. Actividad: tipo (String; por ejemplo, llamada, correo electrónico, reunión, nota), asunto (String), descripción (String), fechaVencimiento (Fecha), completadoEn (Fecha), relacionadoCon (Puntero a Contacto o Negocio), creadoPor (Puntero a _Usuario); objectId, createdAt, updatedAt (sistema).

Seguridad:
- Establecer ACLs para que solo los usuarios autenticados puedan acceder a los datos; usar reglas basadas en roles o basadas en propietarios donde sea apropiado (por ejemplo, asignadoA, creadoPor).
- Usar Permisos a Nivel de Clase para que solo los usuarios autenticados puedan crear/leer/actualizar/eliminar estas clases.

Autenticación:
- Registro (nombre de usuario, correo electrónico, contraseña) e inicio de sesión; soporte para cerrar sesión/sesión.

Comportamiento:
- CRUD completo para Empresa, Contacto, Negocio y Actividad.
- Listar negocios con filtro por etapa y ordenar por fechaEsperadaCierre o updatedAt (vista de pipeline).
- Listar actividades por relacionadoCon (Contacto o Negocio).
- Opcional: Live Queries en tiempo real para Negocio y Actividad para actualizaciones de panel/pipeline.
- Opcional: fijación fuera de línea para móvil (Contactos, Negocios, Actividades).

Entregar:
- Crear la aplicación Back4app con el esquema anterior, ACLs y cualquier Código en la Nube necesario.
- Generar el frontend y conectarlo a este backend; desplegar para que la aplicación sea ejecutable de extremo a extremo.

Presiona el botón a continuación para abrir el Agente con el aviso de esta plantilla prellenado.

Desplegar en minutos50 mensajes gratuitos / mesNo se requiere tarjeta de crédito

API Playground

Prueba los endpoints REST y GraphQL para el esquema CRM. Respuestas de los datos de ejemplo anteriores — no se necesita cuenta de Back4app.

Cargando espacio de trabajo…

Utiliza el mismo esquema CRM (Contacto, Empresa, Negocio, Actividad) que esta plantilla.

Integración paso a paso Vue

Conéctate a tu backend de Back4app desde una app Vue utilizando el SDK Back4app Vue.

  1. Paso 1: Instalar el SDK Back4app Vue

    Agrega el SDK Back4app para tu stack (por ejemplo, npm, pubspec o gestor de paquetes).

    Bash
    npm install parse pinia
  2. Paso 2: Inicializa Back4app en tu app

    Inicializa el SDK de Back4app al iniciar la aplicación con tu ID de aplicación y URL del servidor.

    JavaScript
    // main.ts
    import { createApp } from 'vue';
    import { createPinia } from 'pinia';
    import Parse from 'parse';
    import App from './App.vue';
    
    Parse.initialize(
      import.meta.env.VITE_PARSE_APP_ID,
      import.meta.env.VITE_PARSE_JS_KEY,
      { serverURL: 'https://parseapi.back4app.com' }
    );
    Parse.serverURL = 'https://parseapi.back4app.com';
    
    createApp(App).use(createPinia()).mount('#app');
  3. Paso 3: Consultar contactos y ofertas

    Utiliza el SDK para obtener objetos de Contacto y Oferta; filtra las ofertas por etapa para el pipeline.

    JavaScript
    // In component or store
    async function getDeals(stage = 'qualified') {
      const query = new Parse.Query('Deal');
      query.equalTo('stage', stage);
      query.ascending('expectedCloseDate');
      return await query.find();
    }
    async function getContacts() {
      const query = new Parse.Query('Contact');
      return await query.find();
    }
  4. Paso 4: Crear un contacto u oferta

    Crea un nuevo Contacto u Oferta con los campos y punteros requeridos (empresa, contacto, asignadoA), luego guarda.

    JavaScript
    async function createDeal(title: string, stage = 'lead', amount?: number) {
      const Deal = Parse.Object.extend('Deal');
      const deal = new Deal();
      deal.set('title', title);
      deal.set('stage', stage);
      if (amount != null) deal.set('amount', amount);
      await deal.save();
      return deal;
    }
    async function createContact(name: string, email?: string, phone?: string) {
      const Contact = Parse.Object.extend('Contact');
      const contact = new Contact();
      contact.set('name', name);
      if (email) contact.set('email', email);
      if (phone) contact.set('phone', phone);
      await contact.save();
      return contact;
    }
  5. Paso 5: Actualizar la etapa de la oferta y actividades

    Actualiza Deal.stage al mover en el pipeline; crea y lista Actividad por relacionadoCon.

    JavaScript
    async function updateDealStage(objectId: string, stage: string) {
      const query = new Parse.Query('Deal');
      const deal = await query.get(objectId);
      deal.set('stage', stage);
      await deal.save();
    }
    async function deleteDeal(objectId: string) {
      const query = new Parse.Query('Deal');
      const deal = await query.get(objectId);
      await deal.destroy();
    }

Integración de Gestión de Estado

Integra el SDK de Back4app con la capa de estado de tu aplicación (por ejemplo, contexto, tienda o servicios) para el estado de pipeline y contacto.

Modelo de Datos Completo

Copia un modelo CRM completo para la serialización segura por tipo (por ejemplo, clase, interfaz o definición de tipo).

JavaScript
// types/crm.ts
interface Deal {
  objectId?: string;
  title: string;
  amount?: number;
  stage?: string;
  expectedCloseDate?: string;
  contact?: { __type: string; className: string; objectId: string };
  company?: { __type: string; className: string; objectId: string };
  assignedTo?: { __type: string; className: string; objectId: string };
  createdAt?: string;
  updatedAt?: string;
}

interface Contact {
  objectId?: string;
  name: string;
  email?: string;
  phone?: string;
  company?: { __type: string; className: string; objectId: string };
  notes?: string;
  createdAt?: string;
  updatedAt?: string;
}

function toDeal(obj: Parse.Object): Deal {
  return {
    objectId: obj.id,
    title: obj.get('title'),
    amount: obj.get('amount'),
    stage: obj.get('stage'),
    expectedCloseDate: obj.get('expectedCloseDate')?.toISOString?.() ?? undefined,
    contact: obj.get('contact'),
    company: obj.get('company'),
    assignedTo: obj.get('assignedTo'),
    createdAt: obj.get('createdAt')?.toISOString?.() ?? undefined,
    updatedAt: obj.get('updatedAt')?.toISOString?.() ?? undefined,
  };
}
function toContact(obj: Parse.Object): Contact {
  return {
    objectId: obj.id,
    name: obj.get('name'),
    email: obj.get('email'),
    phone: obj.get('phone'),
    company: obj.get('company'),
    notes: obj.get('notes'),
    createdAt: obj.get('createdAt')?.toISOString?.() ?? undefined,
    updatedAt: obj.get('updatedAt')?.toISOString?.() ?? undefined,
  };
}

Preguntas Frecuentes

Preguntas comunes sobre la plantilla del backend de la aplicación CRM.

¿Qué es Back4app?
¿Por qué usar Back4app para una aplicación CRM Vue?
¿Cómo filtro las ofertas por etapa en Vue?
¿Puedo usar Pinia con el SDK de Back4app para CRM?

Confiado por desarrolladores de todo el mundo

Únete a la comunidad que está construyendo el futuro de las aplicaciones

G2 Users Love Us Badge

¿Listo para construir tu aplicación CRM?

Comienza tu proyecto Vue en minutos. No se requiere tarjeta de crédito.

Construye con Agente AI