- C# 47.6%
- Vue 46.6%
- JavaScript 5%
- CSS 0.3%
- Dockerfile 0.3%
- Other 0.1%
|
|
||
|---|---|---|
| .branding@9c1a222971 | ||
| .forgejo/workflows | ||
| CaviCode-WorkshopCRM.Api | ||
| CaviCode-WorkshopCRM.Frontend | ||
| docs | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| API.md | ||
| CaviCode-WorkshopCRM.slnx | ||
| Development.md | ||
| docker-compose.yml | ||
| README.md | ||
CaviCode Workshop CRM
CaviCode Workshop CRM — CRM-система для мастерской 3D-печати. Она помогает вести заказы, клиентов, парк принтеров, склад расходников и каталог 3D-моделей в одном интерфейсе.
Зачем нужен проект
Проект закрывает типичный рабочий поток небольшой 3D-печатной мастерской: принять заказ, выбрать клиента, модель, принтер и материал, провести заказ по статусам, списать расходники, сохранить отзывы и файлы моделей.
Что умеет
- Канбан заказов:
New → Slicing → Printing → PostProcessing → Ready → Shipped. - CRUD для клиентов, проектов, заказов, принтеров, расходников, категорий и 3D-моделей.
- Клиентские проекты: единый заказчик, несколько сборок, множество позиций моделей и связанных производственных заказов.
- Сборки моделей в каталоге: переиспользуемые комплекты из нескольких 3D-моделей с количеством и заметками по деталям.
- Склад FDM/SLA-материалов с остатками, цветами и быстрым списанием.
- Каталог моделей с превью, STL/G-Code/project-файлами и требованиями к материалам.
- GCODE-файлы можно привязывать к целевому принтеру и отправлять на печать прямо из карточки модели.
- Перед отправкой на печать CRM показывает окно подтверждения с камерой принтера.
- Интеграция с Klipper/Moonraker: live-статус, телеметрия, прокси камеры, загрузка GCODE и очередь для принтеров с меткой
Конвеерный. - PWA-интерфейс на Vue 3 для работы с десктопа и мобильных устройств.
- Авторизация через ZITADEL или демо-режим без авторизации.
- Локальные пользователи и роли, синхронизируемые с ZITADEL.
- Настраиваемые права ролей, блокировка пользователей и назначение исполнителей на заказы.
- Swagger UI / OpenAPI JSON для ручной проверки REST API.
Быстрый запуск через Docker
cp .env.example .env
nano .env
docker compose up -d --build
После запуска откройте приложение на порту из APP_PORT, например http://localhost:80.
Если нужно открыть Swagger в Docker, включите SWAGGER_ENABLED=true в .env и перейдите на http://localhost:<APP_PORT>/swagger.
Для запуска без ZITADEL включите демо-режим:
DEMO_MODE=true
В демо-режиме frontend не отправляет пользователя на страницу входа, а API принимает встроенного demo-пользователя. Этот режим удобен для локального просмотра и тестовых стендов, но не предназначен для production.
Для production-режима с ZITADEL дополнительно настройте:
ZITADEL_AUTHORITY=https://auth.example.com
ZITADEL_CLIENT_ID=...
ZITADEL_PROJECT_ID=...
ZITADEL_ORGANIZATION_ID=...
ZITADEL_API_TOKEN=...
ZITADEL_PROJECT_ID нужен для role claims и синхронизации ролей проекта. ZITADEL_ORGANIZATION_ID опционален, но полезен для self-hosted/мультиорганизационного ZITADEL: backend передаёт его в x-zitadel-orgid при API-синхронизации. ZITADEL_API_TOKEN используется только backend-ом для чтения пользователей, ролей и назначений ролей из ZITADEL.
Локальный запуск для разработки
docker run -d \
--name workshop-db \
-e POSTGRES_DB=workshopdb \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-p 5432:5432 \
postgres:17-alpine
cd CaviCode-WorkshopCRM.Api
ASPNETCORE_URLS=http://localhost:5000 dotnet run --no-launch-profile
Во втором терминале:
cd CaviCode-WorkshopCRM.Frontend
cp .env.example .env.local
npm install --legacy-peer-deps
npm run dev
Frontend будет доступен на http://localhost:5173, API — на http://localhost:5000.
Swagger UI в development-режиме доступен на http://localhost:5000/swagger; через Vite proxy также можно открыть http://localhost:5173/swagger.
Документация
- Development.md — архитектура, конфигурация, запуск, Docker, auth, внутренняя структура.
- API.md — REST API, модели, payload-ы, загрузка файлов и форматы ответов.