@things-factory/ai-dashboard 10.1.213 → 10.1.215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/components/card-dialogs.ts +24 -1
- package/client/components/dashboard-card.ts +24 -70
- package/client/index.ts +2 -0
- package/client/pages/my-dashboard-page.ts +6 -5
- package/client/utils/card-api.ts +3 -2
- package/client/utils/card-words.ts +11 -0
- package/client/utils/examples.ts +15 -0
- package/dist-client/components/card-dialogs.js +22 -1
- package/dist-client/components/card-dialogs.js.map +1 -1
- package/dist-client/components/dashboard-card.d.ts +6 -5
- package/dist-client/components/dashboard-card.js +23 -73
- package/dist-client/components/dashboard-card.js.map +1 -1
- package/dist-client/index.d.ts +1 -0
- package/dist-client/index.js +2 -0
- package/dist-client/index.js.map +1 -1
- package/dist-client/pages/my-dashboard-page.js +6 -5
- package/dist-client/pages/my-dashboard-page.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-client/utils/card-api.d.ts +6 -1
- package/dist-client/utils/card-api.js +1 -1
- package/dist-client/utils/card-api.js.map +1 -1
- package/dist-client/utils/card-words.d.ts +14 -0
- package/dist-client/utils/card-words.js +9 -0
- package/dist-client/utils/card-words.js.map +1 -1
- package/dist-client/utils/examples.d.ts +3 -0
- package/dist-client/utils/examples.js +14 -0
- package/dist-client/utils/examples.js.map +1 -0
- package/dist-server/service/card/card-access.d.ts +8 -2
- package/dist-server/service/card/card-access.js +9 -3
- package/dist-server/service/card/card-access.js.map +1 -1
- package/dist-server/service/card/card-definition.d.ts +42 -6
- package/dist-server/service/card/card-definition.js +172 -18
- package/dist-server/service/card/card-definition.js.map +1 -1
- package/dist-server/service/card/card-names.d.ts +5 -0
- package/dist-server/service/card/card-names.js +6 -1
- package/dist-server/service/card/card-names.js.map +1 -1
- package/dist-server/service/card/card-proposal.d.ts +6 -0
- package/dist-server/service/card/card-proposal.js +9 -0
- package/dist-server/service/card/card-proposal.js.map +1 -1
- package/dist-server/service/card/card-resolver.js +24 -5
- package/dist-server/service/card/card-resolver.js.map +1 -1
- package/dist-server/service/card/card-run.js +5 -1
- package/dist-server/service/card/card-run.js.map +1 -1
- package/dist-server/service/card/card-tool.d.ts +66 -8
- package/dist-server/service/card/card-tool.js +88 -17
- package/dist-server/service/card/card-tool.js.map +1 -1
- package/dist-server/service/card/card-types.d.ts +1 -0
- package/dist-server/service/card/card-types.js +8 -4
- package/dist-server/service/card/card-types.js.map +1 -1
- package/dist-server/service/card/dashboard-card.d.ts +2 -0
- package/dist-server/service/card/dashboard-card.js +5 -3
- package/dist-server/service/card/dashboard-card.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/server/service/card/card-access.test.ts +62 -7
- package/server/service/card/card-access.ts +12 -5
- package/server/service/card/card-definition.ts +182 -18
- package/server/service/card/card-intent.test.ts +250 -0
- package/server/service/card/card-names.ts +5 -0
- package/server/service/card/card-proposal.ts +10 -1
- package/server/service/card/card-resolver.ts +26 -8
- package/server/service/card/card-run.ts +5 -1
- package/server/service/card/card-tool.ts +91 -20
- package/server/service/card/card-types.ts +7 -4
- package/server/service/card/dashboard-card.ts +5 -3
- package/test/card-menu.test.ts +34 -0
- package/test/translations.test.ts +1 -1
- package/translations/en.json +3 -3
- package/translations/es.json +3 -3
- package/translations/ja.json +3 -3
- package/translations/ko.json +3 -3
- package/translations/ms.json +3 -3
- package/translations/zh.json +3 -3
|
@@ -17,11 +17,13 @@ export enum DashboardCardShareScope {
|
|
|
17
17
|
USER = 'USER',
|
|
18
18
|
/** The active members of one department, by department id (organization). */
|
|
19
19
|
DEPARTMENT = 'DEPARTMENT',
|
|
20
|
+
/** Whoever holds one role of the domain, by role id (auth-base). */
|
|
21
|
+
ROLE = 'ROLE',
|
|
20
22
|
/** Everyone in the domain. */
|
|
21
23
|
DOMAIN = 'DOMAIN'
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
registerEnumType(DashboardCardShareScope, { name: 'DashboardCardShareScope', description: 'Who a dashboard card is shared with: a person, a department or the whole domain.' })
|
|
26
|
+
registerEnumType(DashboardCardShareScope, { name: 'DashboardCardShareScope', description: 'Who a dashboard card is shared with: a person, a department, a role or the whole domain.' })
|
|
25
27
|
|
|
26
28
|
@Entity('ai_dashboard_cards')
|
|
27
29
|
@Index('ix_ai_dashboard_card_0', (card: DashboardCard) => [card.domain, card.owner])
|
|
@@ -195,11 +197,11 @@ export class DashboardCardShare {
|
|
|
195
197
|
cardId?: string
|
|
196
198
|
|
|
197
199
|
@Column()
|
|
198
|
-
@Field(type => DashboardCardShareScope, { description: 'A person, a department or the domain.' })
|
|
200
|
+
@Field(type => DashboardCardShareScope, { description: 'A person, a department, a role or the domain.' })
|
|
199
201
|
scope: DashboardCardShareScope
|
|
200
202
|
|
|
201
203
|
@Column()
|
|
202
|
-
@Field({ description: 'The user, department or domain id the scope names.' })
|
|
204
|
+
@Field({ description: 'The user, department, role or domain id the scope names.' })
|
|
203
205
|
targetId: string
|
|
204
206
|
|
|
205
207
|
@Column({ nullable: true })
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A card's ⋯ menu is the platform's popup menu, opened in the body - the menu drawn inside the card was cut by the
|
|
3
|
+
* card's edge and the grid's (2026-10-25). Read from the source: the package has no browser harness.
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync } from 'fs'
|
|
6
|
+
import { join } from 'path'
|
|
7
|
+
|
|
8
|
+
const card = readFileSync(join(__dirname, '..', 'client', 'components', 'dashboard-card.ts'), 'utf8')
|
|
9
|
+
|
|
10
|
+
describe("a card's menu", () => {
|
|
11
|
+
it('★ opens as the platform popup menu in the body, under its button', () => {
|
|
12
|
+
expect(card).toMatch(/OxPopupMenu\.open\(\{[\s\S]*parent: document\.body[\s\S]*\}\)/)
|
|
13
|
+
expect(card).toMatch(/<ox-popup-menuitem /)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
it('★ draws no menu of its own inside the card', () => {
|
|
17
|
+
expect(card).not.toMatch(/class="menu"/)
|
|
18
|
+
expect(card).not.toMatch(/\.menu \{/)
|
|
19
|
+
})
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
const dialogs = readFileSync(join(__dirname, '..', 'client', 'components', 'card-dialogs.ts'), 'utf8')
|
|
23
|
+
|
|
24
|
+
describe("a card's dialogs", () => {
|
|
25
|
+
it('★ scroll in the popup\'s height and keep their buttons in sight - three people shared pushed 저장 out of view', () => {
|
|
26
|
+
const styles = /const FormStyles = css`([\s\S]*?)`/.exec(dialogs)![1]
|
|
27
|
+
expect(styles).toMatch(/:host \{[^}]*height: 100%;[^}]*overflow-y: auto;/)
|
|
28
|
+
expect(styles).toMatch(/\.actions \{[^}]*position: sticky;/)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
it('★ a card may be shared with a role', () => {
|
|
32
|
+
expect(dialogs).toMatch(/scope: 'ROLE'/)
|
|
33
|
+
})
|
|
34
|
+
})
|
|
@@ -18,7 +18,7 @@ const locale = (lang: string): Record<string, string> => JSON.parse(readFileSync
|
|
|
18
18
|
const used = new Set<string>([...text.matchAll(/'(ai-dashboard\.[a-z0-9.-]+[a-z0-9])'/g)].map(match => match[1]).filter(key => key !== 'ai-dashboard.use'))
|
|
19
19
|
/* Keys built from a code: the refusals (refuse(context, '<code>', ...)), the shares' (share-<code>), the issues a card names, the views. */
|
|
20
20
|
for (const [, code] of text.matchAll(/refuse\(context, '([a-z-]+)'/g)) used.add(`ai-dashboard.refusal.${code}`)
|
|
21
|
-
for (const code of ['unknown-scope', 'no-target', 'another-domain', 'no-departments']) used.add(`ai-dashboard.refusal.share-${code}`)
|
|
21
|
+
for (const code of ['unknown-scope', 'no-target', 'another-domain', 'no-departments', 'unknown-role']) used.add(`ai-dashboard.refusal.share-${code}`)
|
|
22
22
|
const issues = /KNOWN_ISSUES = \[([\s\S]*?)\]/.exec(text)![1]
|
|
23
23
|
for (const [, code] of issues.matchAll(/'([a-z-]+)'/g)) used.add(`ai-dashboard.issue.${code}`)
|
|
24
24
|
for (const view of ['number', 'table', 'bar', 'line']) used.add(`ai-dashboard.view.${view}`)
|
package/translations/en.json
CHANGED
|
@@ -15,9 +15,6 @@
|
|
|
15
15
|
"ai-dashboard.page.from-library": "Add a card from the library",
|
|
16
16
|
"ai-dashboard.page.no-tokens": "Drawing a card calls no AI. Its data is read with the viewer's own privileges.",
|
|
17
17
|
"ai-dashboard.page.make-draft": "Make a dashboard card: ",
|
|
18
|
-
"ai-dashboard.example.receivables": "Make a card with bars for the five customers who still owe us the most",
|
|
19
|
-
"ai-dashboard.example.cash-trend": "Make a card with a line of money in and out each month for the last six months",
|
|
20
|
-
"ai-dashboard.example.month-count": "Make a card with this month's count and total of bank lines",
|
|
21
18
|
"ai-dashboard.card.refresh": "Draw again",
|
|
22
19
|
"ai-dashboard.card.ai": "Change with AI",
|
|
23
20
|
"ai-dashboard.card.more": "More",
|
|
@@ -53,6 +50,8 @@
|
|
|
53
50
|
"ai-dashboard.share.everyone": "everyone",
|
|
54
51
|
"ai-dashboard.share.departments": "My departments",
|
|
55
52
|
"ai-dashboard.share.department-members": "active members",
|
|
53
|
+
"ai-dashboard.share.roles": "Roles",
|
|
54
|
+
"ai-dashboard.share.role-holders": "whoever holds this role",
|
|
56
55
|
"ai-dashboard.share.people": "People",
|
|
57
56
|
"ai-dashboard.share.find-person": "Find by name",
|
|
58
57
|
"ai-dashboard.share.add": "Add",
|
|
@@ -118,6 +117,7 @@
|
|
|
118
117
|
"ai-dashboard.refusal.share-no-target": "The share names no one.",
|
|
119
118
|
"ai-dashboard.refusal.share-another-domain": "A card cannot be shared with another site.",
|
|
120
119
|
"ai-dashboard.refusal.share-no-departments": "This application has no departments to share with.",
|
|
120
|
+
"ai-dashboard.refusal.share-unknown-role": "A card can be shared only with a role of this domain.",
|
|
121
121
|
"ai-dashboard.refusal.unknown-place": "That card is not on your dashboard.",
|
|
122
122
|
"ai-dashboard.refusal.size-out-of-range": "A card spans 1 to 4 columns and 1 to 2 rows.",
|
|
123
123
|
"ai-dashboard.refusal.people-unavailable": "People cannot be looked up here.",
|
package/translations/es.json
CHANGED
|
@@ -15,9 +15,6 @@
|
|
|
15
15
|
"ai-dashboard.page.from-library": "Añadir una tarjeta de la biblioteca",
|
|
16
16
|
"ai-dashboard.page.no-tokens": "Dibujar una tarjeta no llama a la IA. Sus datos se leen con los permisos de quien la ve.",
|
|
17
17
|
"ai-dashboard.page.make-draft": "Crea una tarjeta del panel: ",
|
|
18
|
-
"ai-dashboard.example.receivables": "Crea una tarjeta con barras de los cinco clientes que más nos deben",
|
|
19
|
-
"ai-dashboard.example.cash-trend": "Crea una tarjeta con una línea de entradas y salidas de cada mes de los últimos seis meses",
|
|
20
|
-
"ai-dashboard.example.month-count": "Crea una tarjeta con el número y el total de movimientos bancarios de este mes",
|
|
21
18
|
"ai-dashboard.card.refresh": "Volver a dibujar",
|
|
22
19
|
"ai-dashboard.card.ai": "Cambiar con IA",
|
|
23
20
|
"ai-dashboard.card.more": "Más",
|
|
@@ -53,6 +50,8 @@
|
|
|
53
50
|
"ai-dashboard.share.everyone": "todos",
|
|
54
51
|
"ai-dashboard.share.departments": "Mis departamentos",
|
|
55
52
|
"ai-dashboard.share.department-members": "miembros activos",
|
|
53
|
+
"ai-dashboard.share.roles": "Roles",
|
|
54
|
+
"ai-dashboard.share.role-holders": "quien tenga este rol",
|
|
56
55
|
"ai-dashboard.share.people": "Personas",
|
|
57
56
|
"ai-dashboard.share.find-person": "Buscar por nombre",
|
|
58
57
|
"ai-dashboard.share.add": "Añadir",
|
|
@@ -118,6 +117,7 @@
|
|
|
118
117
|
"ai-dashboard.refusal.share-no-target": "El uso compartido no nombra a nadie.",
|
|
119
118
|
"ai-dashboard.refusal.share-another-domain": "No se puede compartir una tarjeta con otro sitio.",
|
|
120
119
|
"ai-dashboard.refusal.share-no-departments": "Esta aplicación no tiene departamentos con los que compartir.",
|
|
120
|
+
"ai-dashboard.refusal.share-unknown-role": "Solo se puede compartir con un rol de este dominio.",
|
|
121
121
|
"ai-dashboard.refusal.unknown-place": "Esa tarjeta no está en su panel.",
|
|
122
122
|
"ai-dashboard.refusal.size-out-of-range": "Una tarjeta ocupa de 1 a 4 columnas y de 1 a 2 filas.",
|
|
123
123
|
"ai-dashboard.refusal.people-unavailable": "Aquí no se pueden buscar personas.",
|
package/translations/ja.json
CHANGED
|
@@ -15,9 +15,6 @@
|
|
|
15
15
|
"ai-dashboard.page.from-library": "ライブラリからカードを追加",
|
|
16
16
|
"ai-dashboard.page.no-tokens": "カードを描くときAIは呼びません。データは見る人の権限で読みます。",
|
|
17
17
|
"ai-dashboard.page.make-draft": "ダッシュボードカードにして: ",
|
|
18
|
-
"ai-dashboard.example.receivables": "未回収額が多い取引先5社を棒グラフで示すカードを作って",
|
|
19
|
-
"ai-dashboard.example.cash-trend": "直近6か月の入金と出金を月ごとに線で示すカードを作って",
|
|
20
|
-
"ai-dashboard.example.month-count": "今月の銀行入出金の件数と合計を数字で示すカードを作って",
|
|
21
18
|
"ai-dashboard.card.refresh": "再描画",
|
|
22
19
|
"ai-dashboard.card.ai": "AIで修正",
|
|
23
20
|
"ai-dashboard.card.more": "その他",
|
|
@@ -53,6 +50,8 @@
|
|
|
53
50
|
"ai-dashboard.share.everyone": "事業所全員",
|
|
54
51
|
"ai-dashboard.share.departments": "自分の部署",
|
|
55
52
|
"ai-dashboard.share.department-members": "在籍中の部署員",
|
|
53
|
+
"ai-dashboard.share.roles": "ロール",
|
|
54
|
+
"ai-dashboard.share.role-holders": "このロールを持つ人",
|
|
56
55
|
"ai-dashboard.share.people": "人",
|
|
57
56
|
"ai-dashboard.share.find-person": "名前で探す",
|
|
58
57
|
"ai-dashboard.share.add": "追加",
|
|
@@ -118,6 +117,7 @@
|
|
|
118
117
|
"ai-dashboard.refusal.share-no-target": "共有の対象がありません。",
|
|
119
118
|
"ai-dashboard.refusal.share-another-domain": "他の事業所には共有できません。",
|
|
120
119
|
"ai-dashboard.refusal.share-no-departments": "このアプリには部署がないため、部署に共有できません。",
|
|
120
|
+
"ai-dashboard.refusal.share-unknown-role": "この事業所にないロールには共有できません。",
|
|
121
121
|
"ai-dashboard.refusal.unknown-place": "そのカードはダッシュボードにありません。",
|
|
122
122
|
"ai-dashboard.refusal.size-out-of-range": "カードは横1〜4列、縦1〜2行です。",
|
|
123
123
|
"ai-dashboard.refusal.people-unavailable": "ここでは人を探せません。",
|
package/translations/ko.json
CHANGED
|
@@ -15,9 +15,6 @@
|
|
|
15
15
|
"ai-dashboard.page.from-library": "라이브러리에서 카드 가져오기",
|
|
16
16
|
"ai-dashboard.page.no-tokens": "카드를 그릴 때는 AI 를 부르지 않습니다. 데이터는 보는 사람의 권한으로 읽습니다.",
|
|
17
17
|
"ai-dashboard.page.make-draft": "대시보드 카드로 만들어 줘: ",
|
|
18
|
-
"ai-dashboard.example.receivables": "받을 돈이 많이 남은 거래처 5곳을 막대로 보여 주는 카드 만들어 줘",
|
|
19
|
-
"ai-dashboard.example.cash-trend": "최근 6개월 입금과 출금을 달마다 선으로 보여 주는 카드 만들어 줘",
|
|
20
|
-
"ai-dashboard.example.month-count": "이번 달 은행 입출금 건수와 합계를 숫자로 보여 주는 카드 만들어 줘",
|
|
21
18
|
"ai-dashboard.card.refresh": "새로 그리기",
|
|
22
19
|
"ai-dashboard.card.ai": "AI로 고치기",
|
|
23
20
|
"ai-dashboard.card.more": "더 보기",
|
|
@@ -53,6 +50,8 @@
|
|
|
53
50
|
"ai-dashboard.share.everyone": "사업장 전체",
|
|
54
51
|
"ai-dashboard.share.departments": "내 부서",
|
|
55
52
|
"ai-dashboard.share.department-members": "재직 중인 부서원",
|
|
53
|
+
"ai-dashboard.share.roles": "역할",
|
|
54
|
+
"ai-dashboard.share.role-holders": "이 역할을 가진 사람",
|
|
56
55
|
"ai-dashboard.share.people": "사람",
|
|
57
56
|
"ai-dashboard.share.find-person": "이름으로 찾기",
|
|
58
57
|
"ai-dashboard.share.add": "추가",
|
|
@@ -118,6 +117,7 @@
|
|
|
118
117
|
"ai-dashboard.refusal.share-no-target": "공유할 대상이 없습니다.",
|
|
119
118
|
"ai-dashboard.refusal.share-another-domain": "다른 사업장에는 공유할 수 없습니다.",
|
|
120
119
|
"ai-dashboard.refusal.share-no-departments": "이 앱에는 부서가 없어 부서로 공유할 수 없습니다.",
|
|
120
|
+
"ai-dashboard.refusal.share-unknown-role": "사업장에 없는 역할에는 공유할 수 없습니다.",
|
|
121
121
|
"ai-dashboard.refusal.unknown-place": "그 카드는 대시보드에 없습니다.",
|
|
122
122
|
"ai-dashboard.refusal.size-out-of-range": "카드는 가로 1~4칸, 세로 1~2줄입니다.",
|
|
123
123
|
"ai-dashboard.refusal.people-unavailable": "여기서는 사람을 찾을 수 없습니다.",
|
package/translations/ms.json
CHANGED
|
@@ -15,9 +15,6 @@
|
|
|
15
15
|
"ai-dashboard.page.from-library": "Tambah kad daripada pustaka",
|
|
16
16
|
"ai-dashboard.page.no-tokens": "Melukis kad tidak memanggil AI. Datanya dibaca dengan keistimewaan pelihat sendiri.",
|
|
17
17
|
"ai-dashboard.page.make-draft": "Buat kad papan pemuka: ",
|
|
18
|
-
"ai-dashboard.example.receivables": "Buat kad dengan bar untuk lima pelanggan yang paling banyak berhutang",
|
|
19
|
-
"ai-dashboard.example.cash-trend": "Buat kad dengan garis wang masuk dan keluar setiap bulan untuk enam bulan lepas",
|
|
20
|
-
"ai-dashboard.example.month-count": "Buat kad dengan bilangan dan jumlah transaksi bank bulan ini",
|
|
21
18
|
"ai-dashboard.card.refresh": "Lukis semula",
|
|
22
19
|
"ai-dashboard.card.ai": "Ubah dengan AI",
|
|
23
20
|
"ai-dashboard.card.more": "Lagi",
|
|
@@ -53,6 +50,8 @@
|
|
|
53
50
|
"ai-dashboard.share.everyone": "semua",
|
|
54
51
|
"ai-dashboard.share.departments": "Jabatan saya",
|
|
55
52
|
"ai-dashboard.share.department-members": "ahli aktif",
|
|
53
|
+
"ai-dashboard.share.roles": "Peranan",
|
|
54
|
+
"ai-dashboard.share.role-holders": "sesiapa yang memegang peranan ini",
|
|
56
55
|
"ai-dashboard.share.people": "Orang",
|
|
57
56
|
"ai-dashboard.share.find-person": "Cari mengikut nama",
|
|
58
57
|
"ai-dashboard.share.add": "Tambah",
|
|
@@ -118,6 +117,7 @@
|
|
|
118
117
|
"ai-dashboard.refusal.share-no-target": "Perkongsian tidak menamakan sesiapa.",
|
|
119
118
|
"ai-dashboard.refusal.share-another-domain": "Kad tidak boleh dikongsi dengan tapak lain.",
|
|
120
119
|
"ai-dashboard.refusal.share-no-departments": "Aplikasi ini tiada jabatan untuk dikongsi.",
|
|
120
|
+
"ai-dashboard.refusal.share-unknown-role": "Kad hanya boleh dikongsi dengan peranan dalam domain ini.",
|
|
121
121
|
"ai-dashboard.refusal.unknown-place": "Kad itu tiada pada papan pemuka anda.",
|
|
122
122
|
"ai-dashboard.refusal.size-out-of-range": "Kad merangkumi 1 hingga 4 lajur dan 1 hingga 2 baris.",
|
|
123
123
|
"ai-dashboard.refusal.people-unavailable": "Orang tidak boleh dicari di sini.",
|
package/translations/zh.json
CHANGED
|
@@ -15,9 +15,6 @@
|
|
|
15
15
|
"ai-dashboard.page.from-library": "从卡片库添加卡片",
|
|
16
16
|
"ai-dashboard.page.no-tokens": "绘制卡片时不调用AI。数据以查看者自己的权限读取。",
|
|
17
17
|
"ai-dashboard.page.make-draft": "做成仪表板卡片:",
|
|
18
|
-
"ai-dashboard.example.receivables": "制作一张用柱状图显示欠款最多的5家客户的卡片",
|
|
19
|
-
"ai-dashboard.example.cash-trend": "制作一张按月用折线显示最近6个月收支的卡片",
|
|
20
|
-
"ai-dashboard.example.month-count": "制作一张以数字显示本月银行收支笔数和合计的卡片",
|
|
21
18
|
"ai-dashboard.card.refresh": "重新绘制",
|
|
22
19
|
"ai-dashboard.card.ai": "用AI修改",
|
|
23
20
|
"ai-dashboard.card.more": "更多",
|
|
@@ -53,6 +50,8 @@
|
|
|
53
50
|
"ai-dashboard.share.everyone": "全体",
|
|
54
51
|
"ai-dashboard.share.departments": "我的部门",
|
|
55
52
|
"ai-dashboard.share.department-members": "在职部门成员",
|
|
53
|
+
"ai-dashboard.share.roles": "角色",
|
|
54
|
+
"ai-dashboard.share.role-holders": "拥有此角色的人",
|
|
56
55
|
"ai-dashboard.share.people": "人员",
|
|
57
56
|
"ai-dashboard.share.find-person": "按姓名查找",
|
|
58
57
|
"ai-dashboard.share.add": "添加",
|
|
@@ -118,6 +117,7 @@
|
|
|
118
117
|
"ai-dashboard.refusal.share-no-target": "共享没有指定对象。",
|
|
119
118
|
"ai-dashboard.refusal.share-another-domain": "不能共享到其他业务单位。",
|
|
120
119
|
"ai-dashboard.refusal.share-no-departments": "此应用没有部门,无法按部门共享。",
|
|
120
|
+
"ai-dashboard.refusal.share-unknown-role": "只能共享给本域中的角色。",
|
|
121
121
|
"ai-dashboard.refusal.unknown-place": "该卡片不在您的仪表板上。",
|
|
122
122
|
"ai-dashboard.refusal.size-out-of-range": "卡片横跨1至4列、1至2行。",
|
|
123
123
|
"ai-dashboard.refusal.people-unavailable": "此处无法查找人员。",
|