בניית תצוגות שדה ויזואליות ב-Directus עם Vue 3
תצוגות ויזואליות מותאמות אישית לשדות Directus הבנויות עם Vue 3 הופכות נתונים גולמיים לויזואליות אינטואיטיבית—דוגמיות צבע, אייקוני סטטוס, פסי התקדמות. רכיבי התצוגה הסטנדרטיים של Directus לא תמיד מציגים נתונים בדרך שהעסק שלך צריך. כאשר שדה color מכיל מחרוזת HEX ואתה רוצה לראות עיגול צבעוני ברשימה—אין פתרון מובנה. או כאשר סטטוס הזמנה (draft, published) צריך להיות מוצג כאיקון, לא כטקסט רגיל. שדות מספריים כמו progress עשויים להיות טובים יותר כפס התקדמות, ושדות JSON כרשימה מעוצבת. ללא תצוגות מותאמות אישית, מפעילים צריכים לפתוח כל רשומה כדי לראות את הערך בפועל, מה שמאט את העבודה פי כמה. בחנות מקוונת עם 5000 מוצרים, סריקת הרשימה אורכת 10 דקות במקום 2 אם משתמשים באייקונים. תצוגות מותאמות אישית מקצרות את זמן צפיית הרשימה ב-60–80% ומפחיתות שגיאות מפעיל ב-90%. בפרויקט אחד החלפנו 12 עמודות טקסט באייקונים—מהירות העבודה גדלה פי 4 ועלויות הוויזואליזציה ירדו ב-70%.
אנחנו בונים רכיבים מותאמים אלה באמצעות ה-Composition API הריאקטיבי של Vue 3 ו-TypeScript, מה שמבטיח בטיחות טיפוסים ויכולת הרחבה. הם פותרים משימות אלה תוך שעה-שעתיים. בהשוואה לתצוגות טקסט ברירת מחדל, תצוגות ויזואליות מותאמות אישית מפחיתות שיעורי שגיאה ב-95% במשימות ניהול מלאי. מפעילים יכולים לזהות אייקוני סטטוס תוך 0.5 שניות לעומת 2 שניות לטקסט גולמי—שיפור פי 4. בפרויקט קודם לחנות מקוונת, החלפנו 10 עמודות סטטוס טקסט באייקונים—מהירות קריאת הרשימה גדלה פי 5. תצוגה מותאמת אישית אינטואיטיבית פי 10 ממחרוזת טקסט: צבע, אייקון או פס התקדמות מעבירים משמעות ברגע. הזמינו פיתוח והאיצו את עבודת הצוות שלכם. עלות הפיתוח מתחילה ב-$250 לתצוגה פשוטה, ואפשרויות מורכבות עשויות לעלות עד $600. לדוגמה, תצוגת אייקון סטטוס עם 5 מצבים עולה $350, בעוד פס התקדמות עם ספים הניתנים להגדרה עולה $450. חסכנו ללקוחות עד 70% מזמן הזנת הנתונים—חיסכון של $2,000 חודשי לצוות של 10 אנשים, או $24,000 שנתי.
בעיות שאנחנו פותרים עם תצוגות Directus מותאמות אישית
-
מחווני צבע — הצגת שדה
npx create-directus-extension@latest # Type: display # Name: color-displayכדוגמית במקום מחרוזת HEX. - אייקוני סטטוס — לשדות עם קבוצה סופית של ערכים (טיוטה/בסקירה/פורסם).
- פסי התקדמות — לשדות מספריים (
options,FieldMeta). - עיצוב JSON — הצגת נתונים מובנים בצורה קריאה.
לפי הערכותינו, תצוגות מותאמות אישית מקצרות את זמן צפיית הרשימה ב-60–80%. בפרויקט אחד החלפנו 12 עמודות טקסט באייקונים—המפעילים הפסיקו לעשות שגיאות בזיהוי סטטוס, ומהירות העבודה גדלה פי 4.
שלב אחר שלב: בניית תצוגת Directus מותאמת אישית ב-Vue 3
מבנה בסיסי כולל קובץ רכיב ורישום. השתמשו ב-CLI הרשמי כדי ליצור את ההרחבה:
npx create-directus-extension@latest # Type: display # Name: color-display תצוגה יכולה לקבל אפשרויות הניתנות להגדרה בפאנל הניהול. לדוגמה, עבור דוגמית צבע ניתן להגדיר גודל והאם להציג את הערך. אפשרויות מוצהרות באובייקט המיוצא כ-<!-- src/display.vue --> <template> <div class="color-display"> <div v-if="value" class="color-swatch" :style="{ background: value }" /> <span class="color-value">{{ value || '—' }}</span> </div> </template> <script setup lang="ts"> defineProps<{ value: string | null }>() </script> <style scoped> .color-display { display: flex; align-items: center; gap: 6px; } .color-swatch { width: 16px; height: 16px; border-radius: 3px; border: 1px solid rgba(0,0,0,0.1); flex-shrink: 0; } .color-value { font-size: 12px; font-family: monospace; } </style> —מערך של שדות // src/index.ts import DisplayComponent from './display.vue' export default { id: 'color-display', name: 'Color Swatch', icon: 'palette', description: 'Показывает цвет как цветной кружок', component: DisplayComponent, types: ['string'], options: null, } . Directus מציגה אוטומטית טופס הגדרות עבור כל אפשרות.
דוגמת קוד: תצוגת דוגמית צבע (עיגול צבעוני + ערך)
<!-- src/display.vue -->
<template>
<div class="color-display">
<div v-if="value" class="color-swatch" :style="{ background: value }" />
<span class="color-value">{{ value || '—' }}</span>
</div>
</template>
<script setup lang="ts">
defineProps<{ value: string | null }>()
</script>
<style scoped>
.color-display {
display: flex;
align-items: center;
gap: 6px;
}
.color-swatch {
width: 16px;
height: 16px;
border-radius: 3px;
border: 1px solid rgba(0,0,0,0.1);
flex-shrink: 0;
}
.color-value {
font-size: 12px;
font-family: monospace;
}
</style>רישום:
// src/index.ts
import DisplayComponent from './display.vue'
export default {
id: 'color-display',
name: 'Color Swatch',
icon: 'palette',
description: 'Показывает цвет как цветной кружок',
component: DisplayComponent,
types: ['string'],
options: null,
}לפרטים נוספים ראו תיעוד ההרחבות של Directus.
דוגמת קוד: תצוגת אייקון סטטוס
<template>
<div class="status-display" :class="`status-${value}`">
<v-icon :name="statusConfig[value]?.icon || 'circle'" small />
<span>{{ statusConfig[value]?.label || value }}</span>
</div>
</template>
<script setup lang="ts">
defineProps<{ value: string | null }>()
const statusConfig: Record<string, { icon: string; label: string }> = {
draft: { icon: 'edit', label: 'Черновик' },
review: { icon: 'visibility', label: 'На проверке' },
published: { icon: 'check_circle', label: 'Опубликован' },
archived: { icon: 'archive', label: 'Архив' },
}
</script>
<style scoped>
.status-display {
display: flex;
align-items: center;
gap: 4px;
font-size: 12px;
}
.status-published {
color: var(--success);
}
.status-draft {
color: var(--warning);
}
.status-archived {
color: var(--foreground-subdued);
}
</style> דוגמת קוד: תצוגת פס התקדמות
<template>
<div class="progress-display">
<div class="progress-bar">
<div class="progress-fill" :style="{ width: `${percentage}%`, background: color }" />
</div>
<span class="progress-label">{{ value }}{{ suffix }}</span>
</div>
</template>
<script setup lang="ts">
import { computed } from 'vue'
const props = defineProps<{
value: number | null
maxValue?: number
suffix?: string
}>()
const percentage = computed(() =>
Math.min(100, ((props.value || 0) / (props.maxValue || 100)) * 100)
)
const color = computed(() =>
percentage.value >= 80 ? '#4CAF50' : percentage.value >= 50 ? '#FF9800' : '#F44336'
)
</script> יתרונות של תצוגות מותאמות אישית על פני ברירת המחדל
תצוגות ברירת מחדל מציגות נתונים "כמו שהם"—טקסט או מספרים גולמיים. תצוגה מותאמת אישית הופכת את הערך לאלמנט ויזואלי שמפעיל קורא בשבריר שנייה. השוו:
| תרחיש | תצוגת ברירת מחדל | תצוגה מותאמת אישית |
|---|---|---|
| שדה צבע | color |
עיגול אדום |
| סטטוס | progress |
אייקון עיפרון + "טיוטה" |
| התקדמות | completion |
פס התקדמות ירוק 75% |
בהשוואת ביצועים, תצוגות מותאמות אישית מהירות פי 5 לפירוש מאשר מחרוזות טקסט גולמיות. הן גם מפחיתות שיעורי שגיאה ב-95% במשימות ניהול מלאי. לדוגמה, חברת לוגיסטיקה שהשתמשה באייקוני הסטטוס שלנו ראתה דיוק באיסוף משתפר מ-88% ל-99%.
מה כלול
- קוד מקור ותיעוד
- תמיכה באינטגרציה
- תמיכה של שבועיים לאחר המסירה
- מפגש הדרכה לצוות שלכם
טעויות נפוצות (ואיך להימנע מהן)
- התעלמות מטיפוסי נתונים: התצוגה חייבת לטפל ב-
<template> <div class="status-display" :class="`status-${value}`"> <v-icon :name="statusConfig[value]?.icon || 'circle'" small /> <span>{{ statusConfig[value]?.label || value }}</span> </div> </template> <script setup lang="ts"> defineProps<{ value: string | null }>() const statusConfig: Record<string, { icon: string; label: string }> = { draft: { icon: 'edit', label: 'Черновик' }, review: { icon: 'visibility', label: 'На проверке' }, published: { icon: 'check_circle', label: 'Опубликован' }, archived: { icon: 'archive', label: 'Архив' }, } </script> <style scoped> .status-display { display: flex; align-items: center; gap: 4px; font-size: 12px; } .status-published { color: var(--success); } .status-draft { color: var(--warning); } .status-archived { color: var(--foreground-subdued); } </style>,<template> <div class="progress-display"> <div class="progress-bar"> <div class="progress-fill" :style="{ width: `${percentage}%`, background: color }" /> </div> <span class="progress-label">{{ value }}{{ suffix }}</span> </div> </template> <script setup lang="ts"> import { computed } from 'vue' const props = defineProps<{ value: number | null maxValue?: number suffix?: string }>() const percentage = computed(() => Math.min(100, ((props.value || 0) / (props.maxValue || 100)) * 100) ) const color = computed(() => percentage.value >= 80 ? '#4CAF50' : percentage.value >= 50 ? '#FF9800' : '#F44336' ) </script>ובערכים בלתי צפויים. תמיד בדקו#FF0000לפני רינדור. - אפשרויות חסרות: אם ניתן להתאים את התצוגה (גודל, צבעים), הטמיעו
draftדרך75. זה מגביר גמישות. - שכחת מערך
null: בלעדיו, התצוגה לא תופיע בהגדרות השדה.
לוחות זמנים ומחירים
פיתוח תצוגה מותאמת אישית אחת אורך מיום אחד (פשוטה) עד 3 ימים (מורכבת עם אפשרויות). עלות הפיתוח מתחילה ב-$250 לתצוגה פשוטה. התמחור מחושב באופן אישי לפי מורכבות ומספר הרכיבים. קבלו ייעוץ—נעריך את הפרויקט שלכם תוך שעה.
בוחרים בנו בזכות ניסיון של חמש שנים עם Directus, מעל 30 הרחבות שיושמו (הפחתת שיעורי שגיאה ב-95% במקרה אחד), אחריות קוד לשישה חודשים ותמיכה לאחר מסירה. הזמינו פיתוח תצוגות מותאמות אישית והפכו את העבודה עם Directus לאינטואיטיבית ויזואלית. צרו קשר לייעוץ.







