@qnote/q-ai-note 1.0.6 → 1.0.8
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/README.md +11 -14
- package/dist/cli.js +18 -31
- package/dist/cli.js.map +1 -1
- package/dist/server/accessControl.d.ts +29 -0
- package/dist/server/accessControl.d.ts.map +1 -0
- package/dist/server/accessControl.js +161 -0
- package/dist/server/accessControl.js.map +1 -0
- package/dist/server/api/accessHelpers.d.ts +11 -0
- package/dist/server/api/accessHelpers.d.ts.map +1 -0
- package/dist/server/api/accessHelpers.js +45 -0
- package/dist/server/api/accessHelpers.js.map +1 -0
- package/dist/server/api/chat.d.ts.map +1 -1
- package/dist/server/api/chat.js +31 -0
- package/dist/server/api/chat.js.map +1 -1
- package/dist/server/api/diary.d.ts.map +1 -1
- package/dist/server/api/diary.js +61 -1
- package/dist/server/api/diary.js.map +1 -1
- package/dist/server/api/nodeEntities.d.ts.map +1 -1
- package/dist/server/api/nodeEntities.js +31 -0
- package/dist/server/api/nodeEntities.js.map +1 -1
- package/dist/server/api/projectSettings.d.ts +3 -0
- package/dist/server/api/projectSettings.d.ts.map +1 -0
- package/dist/server/api/projectSettings.js +29 -0
- package/dist/server/api/projectSettings.js.map +1 -0
- package/dist/server/api/sandbox.d.ts.map +1 -1
- package/dist/server/api/sandbox.js +35 -1
- package/dist/server/api/sandbox.js.map +1 -1
- package/dist/server/api/settings.d.ts.map +1 -1
- package/dist/server/api/settings.js +25 -1
- package/dist/server/api/settings.js.map +1 -1
- package/dist/server/api/workItem.d.ts.map +1 -1
- package/dist/server/api/workItem.js +59 -0
- package/dist/server/api/workItem.js.map +1 -1
- package/dist/server/config.d.ts +3 -2
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +6 -1
- package/dist/server/config.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +51 -11
- package/dist/server/index.js.map +1 -1
- package/dist/server/projectConfig.d.ts +37 -0
- package/dist/server/projectConfig.d.ts.map +1 -0
- package/dist/server/projectConfig.js +180 -0
- package/dist/server/projectConfig.js.map +1 -0
- package/dist/web/app.js +618 -39
- package/dist/web/index.html +103 -59
- package/dist/web/styles.css +194 -4
- package/dist/web/vueRenderers.js +7 -5
- package/package.json +2 -3
package/dist/web/index.html
CHANGED
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
<li><a href="#/sandboxes" data-nav="sandboxes">沙盘</a></li>
|
|
22
22
|
<li><a href="#/diaries" data-nav="diaries">日记</a></li>
|
|
23
23
|
<li><a href="#/changes" data-nav="changes">变化</a></li>
|
|
24
|
-
<li><a href="#/settings" data-nav="settings"
|
|
24
|
+
<li><a href="#/settings" data-nav="settings">项目设置</a></li>
|
|
25
|
+
<li><a href="#/system-settings" data-nav="system-settings">系统设置</a></li>
|
|
25
26
|
</ul>
|
|
26
27
|
</nav>
|
|
27
28
|
<main class="content">
|
|
@@ -112,72 +113,83 @@
|
|
|
112
113
|
<div class="drawer-subtitle" id="drawer-node-title"></div>
|
|
113
114
|
</div>
|
|
114
115
|
<div class="drawer-header-actions">
|
|
115
|
-
<button class="btn btn-secondary btn-sm" id="toggle-node-entity-form-btn" type="button">+ 新建记录</button>
|
|
116
116
|
<button class="btn btn-secondary btn-sm" id="close-node-drawer-btn">关闭</button>
|
|
117
117
|
</div>
|
|
118
118
|
</div>
|
|
119
|
-
<
|
|
120
|
-
|
|
121
|
-
<div class="
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
<
|
|
125
|
-
<div class="
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
<button class="btn btn-secondary btn-sm" data-entity-filter="capability">Capability</button>
|
|
134
|
-
<button class="btn btn-secondary btn-sm" data-entity-filter="diary">Diary</button>
|
|
135
|
-
</div>
|
|
136
|
-
|
|
137
|
-
<div class="drawer-create-form hidden" id="drawer-create-form">
|
|
138
|
-
<select id="entity-type-select">
|
|
139
|
-
<option value="issue">Issue</option>
|
|
140
|
-
<option value="knowledge">Knowledge</option>
|
|
141
|
-
<option value="capability">Capability</option>
|
|
142
|
-
</select>
|
|
143
|
-
<input type="text" id="entity-title-input" placeholder="标题(必填)">
|
|
144
|
-
<div class="entity-field-group" id="entity-assignee-group">
|
|
145
|
-
<input type="text" id="entity-assignee-input" placeholder="负责人(Issue可选)">
|
|
119
|
+
<section class="drawer-section">
|
|
120
|
+
<div class="drawer-section-title">节点概览</div>
|
|
121
|
+
<div class="summary-strip compact" id="node-entity-summary"></div>
|
|
122
|
+
</section>
|
|
123
|
+
<section class="drawer-section">
|
|
124
|
+
<div class="drawer-section-title">快速日记</div>
|
|
125
|
+
<div class="drawer-diary-quick-form">
|
|
126
|
+
<div class="sandbox-diary-quick-meta">
|
|
127
|
+
<span id="sandbox-diary-target-label">快速日记:未选中节点</span>
|
|
128
|
+
</div>
|
|
129
|
+
<textarea id="drawer-diary-content" placeholder="记录进展(日记支持 Markdown)"></textarea>
|
|
130
|
+
<div class="sandbox-diary-quick-actions">
|
|
131
|
+
<button class="btn btn-primary btn-sm" id="drawer-diary-save-btn" type="button">记录日记</button>
|
|
132
|
+
</div>
|
|
146
133
|
</div>
|
|
147
|
-
|
|
148
|
-
|
|
134
|
+
</section>
|
|
135
|
+
<section class="drawer-section">
|
|
136
|
+
<div class="drawer-section-title-row">
|
|
137
|
+
<div class="drawer-section-title">记录管理</div>
|
|
138
|
+
<button class="btn btn-secondary btn-sm" id="toggle-node-entity-form-btn" type="button">+ 新建记录</button>
|
|
149
139
|
</div>
|
|
150
|
-
<div class="entity-
|
|
151
|
-
<
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
<option value="critical">critical</option>
|
|
157
|
-
</select>
|
|
140
|
+
<div class="entity-filter-tabs" id="entity-filter-tabs">
|
|
141
|
+
<button class="btn btn-secondary btn-sm active" data-entity-filter="all">全部</button>
|
|
142
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="issue">Issue</button>
|
|
143
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="knowledge">Knowledge</button>
|
|
144
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="capability">Capability</button>
|
|
145
|
+
<button class="btn btn-secondary btn-sm" data-entity-filter="diary">Diary</button>
|
|
158
146
|
</div>
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
<option value="
|
|
163
|
-
<option value="
|
|
164
|
-
<option value="
|
|
165
|
-
<option value="collaboration">collaboration(协作能力)</option>
|
|
166
|
-
<option value="analysis">analysis(分析能力)</option>
|
|
167
|
-
<option value="delivery">delivery(交付能力)</option>
|
|
168
|
-
<option value="governance">governance(治理能力)</option>
|
|
169
|
-
<option value="other">other(其他)</option>
|
|
147
|
+
|
|
148
|
+
<div class="drawer-create-form hidden" id="drawer-create-form">
|
|
149
|
+
<select id="entity-type-select">
|
|
150
|
+
<option value="issue">Issue</option>
|
|
151
|
+
<option value="knowledge">Knowledge</option>
|
|
152
|
+
<option value="capability">Capability</option>
|
|
170
153
|
</select>
|
|
154
|
+
<input type="text" id="entity-title-input" placeholder="标题(必填)">
|
|
155
|
+
<div class="entity-field-group" id="entity-assignee-group">
|
|
156
|
+
<input type="text" id="entity-assignee-input" placeholder="负责人(Issue可选)">
|
|
157
|
+
</div>
|
|
158
|
+
<div class="entity-field-group" id="entity-status-group">
|
|
159
|
+
<select id="entity-status-select"></select>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="entity-field-group" id="entity-priority-group">
|
|
162
|
+
<select id="entity-priority-select">
|
|
163
|
+
<option value="">优先级(Issue可选)</option>
|
|
164
|
+
<option value="low">low</option>
|
|
165
|
+
<option value="medium">medium</option>
|
|
166
|
+
<option value="high">high</option>
|
|
167
|
+
<option value="critical">critical</option>
|
|
168
|
+
</select>
|
|
169
|
+
</div>
|
|
170
|
+
<div class="entity-field-group" id="entity-capability-type-group">
|
|
171
|
+
<select id="entity-capability-type-input">
|
|
172
|
+
<option value="">能力类型(Capability可选)</option>
|
|
173
|
+
<option value="workflow">workflow(流程能力)</option>
|
|
174
|
+
<option value="automation">automation(自动化能力)</option>
|
|
175
|
+
<option value="tooling">tooling(工具能力)</option>
|
|
176
|
+
<option value="collaboration">collaboration(协作能力)</option>
|
|
177
|
+
<option value="analysis">analysis(分析能力)</option>
|
|
178
|
+
<option value="delivery">delivery(交付能力)</option>
|
|
179
|
+
<option value="governance">governance(治理能力)</option>
|
|
180
|
+
<option value="other">other(其他)</option>
|
|
181
|
+
</select>
|
|
182
|
+
</div>
|
|
183
|
+
<textarea id="entity-content-input" rows="4" placeholder="Markdown 内容(Knowledge/Capability 推荐)"></textarea>
|
|
184
|
+
<div class="entity-form-hint" id="entity-form-hint"></div>
|
|
185
|
+
<div class="entity-form-actions">
|
|
186
|
+
<button class="btn btn-secondary btn-sm hidden" id="cancel-edit-entity-btn" type="button">取消编辑</button>
|
|
187
|
+
<button class="btn btn-primary btn-sm" id="create-node-entity-btn" type="button">添加记录</button>
|
|
188
|
+
</div>
|
|
171
189
|
</div>
|
|
172
|
-
<textarea id="entity-content-input" rows="4" placeholder="Markdown 内容(Knowledge/Capability 推荐)"></textarea>
|
|
173
|
-
<div class="entity-form-hint" id="entity-form-hint"></div>
|
|
174
|
-
<div class="entity-form-actions">
|
|
175
|
-
<button class="btn btn-secondary btn-sm hidden" id="cancel-edit-entity-btn" type="button">取消编辑</button>
|
|
176
|
-
<button class="btn btn-primary btn-sm" id="create-node-entity-btn" type="button">添加记录</button>
|
|
177
|
-
</div>
|
|
178
|
-
</div>
|
|
179
190
|
|
|
180
|
-
|
|
191
|
+
<div class="drawer-list" id="node-entity-list"></div>
|
|
192
|
+
</section>
|
|
181
193
|
</aside>
|
|
182
194
|
</div>
|
|
183
195
|
</div>
|
|
@@ -249,7 +261,35 @@
|
|
|
249
261
|
</div>
|
|
250
262
|
|
|
251
263
|
<div id="page-settings" class="page hidden">
|
|
252
|
-
<h2
|
|
264
|
+
<h2>项目设置</h2>
|
|
265
|
+
<div class="settings-form">
|
|
266
|
+
<div class="setting-group project-setting-section">
|
|
267
|
+
<div class="project-setting-header">
|
|
268
|
+
<label>Users(按 IP 精确匹配,IP 不能复用)</label>
|
|
269
|
+
<button class="btn btn-secondary btn-sm" id="add-project-user-btn" type="button">+ 添加用户</button>
|
|
270
|
+
</div>
|
|
271
|
+
<div class="project-setting-list" id="project-users-list"></div>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="setting-group project-setting-section">
|
|
274
|
+
<div class="project-setting-header">
|
|
275
|
+
<label>Profiles(支持 apply_to_all_users)</label>
|
|
276
|
+
<button class="btn btn-secondary btn-sm" id="add-project-profile-btn" type="button">+ 添加 Profile</button>
|
|
277
|
+
</div>
|
|
278
|
+
<div class="project-setting-list" id="project-profiles-list"></div>
|
|
279
|
+
</div>
|
|
280
|
+
<div class="setting-group project-setting-section">
|
|
281
|
+
<div class="project-setting-header">
|
|
282
|
+
<label>Bindings(user -> profiles)</label>
|
|
283
|
+
<button class="btn btn-secondary btn-sm" id="add-project-binding-btn" type="button">+ 添加绑定</button>
|
|
284
|
+
</div>
|
|
285
|
+
<div class="project-setting-list" id="project-bindings-list"></div>
|
|
286
|
+
</div>
|
|
287
|
+
<button class="btn btn-primary" id="save-project-settings-btn">保存项目设置</button>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<div id="page-system-settings" class="page hidden">
|
|
292
|
+
<h2>系统设置</h2>
|
|
253
293
|
<div class="settings-form">
|
|
254
294
|
<div class="setting-group">
|
|
255
295
|
<label>API URL</label>
|
|
@@ -268,6 +308,10 @@
|
|
|
268
308
|
<div class="settings-kv-list" id="setting-headers-list"></div>
|
|
269
309
|
<button class="btn btn-secondary btn-sm" id="add-setting-header-btn" type="button">+ 添加 Header</button>
|
|
270
310
|
</div>
|
|
311
|
+
<div class="setting-group">
|
|
312
|
+
<label>系统可编辑 IP(精确 IP,一行一个)</label>
|
|
313
|
+
<textarea id="setting-editable-ips" rows="5" placeholder="10.1.2.3 192.168.1.20"></textarea>
|
|
314
|
+
</div>
|
|
271
315
|
<button class="btn btn-primary" id="save-settings-btn">保存</button>
|
|
272
316
|
</div>
|
|
273
317
|
</div>
|
package/dist/web/styles.css
CHANGED
|
@@ -134,6 +134,11 @@ body {
|
|
|
134
134
|
animation: fadeIn 0.2s ease;
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
+
#page-sandbox-detail {
|
|
138
|
+
max-width: none;
|
|
139
|
+
margin: 0;
|
|
140
|
+
}
|
|
141
|
+
|
|
137
142
|
.page.hidden {
|
|
138
143
|
display: none;
|
|
139
144
|
}
|
|
@@ -808,6 +813,18 @@ h2 {
|
|
|
808
813
|
border-top: 1.2px solid #9bb3d8;
|
|
809
814
|
}
|
|
810
815
|
|
|
816
|
+
/* Last sibling ends with an "L" connector */
|
|
817
|
+
.lane-tree-children > .lane-tree-node:last-child::after {
|
|
818
|
+
content: '';
|
|
819
|
+
position: absolute;
|
|
820
|
+
left: -10px;
|
|
821
|
+
top: 13px;
|
|
822
|
+
bottom: -2px;
|
|
823
|
+
width: 2px;
|
|
824
|
+
background: var(--bg-secondary);
|
|
825
|
+
pointer-events: none;
|
|
826
|
+
}
|
|
827
|
+
|
|
811
828
|
.dense-lane > .dense-lane-body > .lane-tree-node > .lane-tree-node-row::before {
|
|
812
829
|
display: none;
|
|
813
830
|
}
|
|
@@ -1581,7 +1598,7 @@ h2 {
|
|
|
1581
1598
|
background: var(--bg);
|
|
1582
1599
|
border-radius: 12px;
|
|
1583
1600
|
padding: 24px;
|
|
1584
|
-
max-width:
|
|
1601
|
+
max-width: 980px;
|
|
1585
1602
|
box-shadow: var(--shadow);
|
|
1586
1603
|
}
|
|
1587
1604
|
|
|
@@ -1628,6 +1645,160 @@ h2 {
|
|
|
1628
1645
|
width: 100%;
|
|
1629
1646
|
}
|
|
1630
1647
|
|
|
1648
|
+
.project-setting-section {
|
|
1649
|
+
border: 1px solid var(--border);
|
|
1650
|
+
border-radius: 10px;
|
|
1651
|
+
padding: 12px;
|
|
1652
|
+
background: #fcfdff;
|
|
1653
|
+
}
|
|
1654
|
+
|
|
1655
|
+
.project-setting-header {
|
|
1656
|
+
display: flex;
|
|
1657
|
+
align-items: center;
|
|
1658
|
+
justify-content: space-between;
|
|
1659
|
+
gap: 10px;
|
|
1660
|
+
margin-bottom: 10px;
|
|
1661
|
+
}
|
|
1662
|
+
|
|
1663
|
+
.project-setting-list {
|
|
1664
|
+
display: flex;
|
|
1665
|
+
flex-direction: column;
|
|
1666
|
+
gap: 10px;
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
.project-empty {
|
|
1670
|
+
font-size: 12px;
|
|
1671
|
+
color: var(--text-secondary);
|
|
1672
|
+
background: var(--bg);
|
|
1673
|
+
border: 1px dashed var(--border);
|
|
1674
|
+
border-radius: 8px;
|
|
1675
|
+
padding: 10px;
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1678
|
+
.project-row {
|
|
1679
|
+
display: grid;
|
|
1680
|
+
grid-template-columns: minmax(150px, 0.9fr) minmax(180px, 1fr) minmax(360px, 1.8fr) auto;
|
|
1681
|
+
gap: 8px;
|
|
1682
|
+
align-items: center;
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
.project-row select,
|
|
1686
|
+
.project-profile-grid select,
|
|
1687
|
+
.project-profile-grid input,
|
|
1688
|
+
.project-row input {
|
|
1689
|
+
width: 100%;
|
|
1690
|
+
border: 1px solid var(--border);
|
|
1691
|
+
border-radius: 8px;
|
|
1692
|
+
padding: 8px 10px;
|
|
1693
|
+
font-size: 13px;
|
|
1694
|
+
background: var(--bg);
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
.project-ip-editor {
|
|
1698
|
+
border: 1px solid var(--border);
|
|
1699
|
+
border-radius: 8px;
|
|
1700
|
+
background: var(--bg);
|
|
1701
|
+
padding: 8px;
|
|
1702
|
+
display: flex;
|
|
1703
|
+
flex-direction: column;
|
|
1704
|
+
gap: 8px;
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1707
|
+
.project-ip-chips {
|
|
1708
|
+
display: flex;
|
|
1709
|
+
flex-wrap: wrap;
|
|
1710
|
+
gap: 6px;
|
|
1711
|
+
min-height: 24px;
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1714
|
+
.project-ip-chip {
|
|
1715
|
+
display: inline-flex;
|
|
1716
|
+
align-items: center;
|
|
1717
|
+
gap: 6px;
|
|
1718
|
+
padding: 2px 8px;
|
|
1719
|
+
border-radius: 999px;
|
|
1720
|
+
background: #eef4ff;
|
|
1721
|
+
border: 1px solid #c7d9ff;
|
|
1722
|
+
color: #1d4fae;
|
|
1723
|
+
font-size: 12px;
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1726
|
+
.project-ip-remove {
|
|
1727
|
+
border: none;
|
|
1728
|
+
background: transparent;
|
|
1729
|
+
color: #1d4fae;
|
|
1730
|
+
cursor: pointer;
|
|
1731
|
+
font-size: 14px;
|
|
1732
|
+
line-height: 1;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
.project-ip-input-row {
|
|
1736
|
+
display: grid;
|
|
1737
|
+
grid-template-columns: 1fr auto;
|
|
1738
|
+
gap: 8px;
|
|
1739
|
+
align-items: center;
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
.project-row.compact {
|
|
1743
|
+
grid-template-columns: 1fr 160px auto;
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1746
|
+
.project-profile-card,
|
|
1747
|
+
.project-binding-card {
|
|
1748
|
+
border: 1px solid var(--border);
|
|
1749
|
+
background: var(--bg);
|
|
1750
|
+
border-radius: 8px;
|
|
1751
|
+
padding: 10px;
|
|
1752
|
+
display: flex;
|
|
1753
|
+
flex-direction: column;
|
|
1754
|
+
gap: 10px;
|
|
1755
|
+
}
|
|
1756
|
+
|
|
1757
|
+
.project-profile-grid {
|
|
1758
|
+
display: grid;
|
|
1759
|
+
grid-template-columns: minmax(170px, 1fr) minmax(200px, 1.2fr) minmax(240px, 0.8fr) auto;
|
|
1760
|
+
gap: 8px;
|
|
1761
|
+
align-items: center;
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
.project-profile-pages {
|
|
1765
|
+
display: flex;
|
|
1766
|
+
flex-wrap: wrap;
|
|
1767
|
+
gap: 10px;
|
|
1768
|
+
}
|
|
1769
|
+
|
|
1770
|
+
.project-sandbox-items {
|
|
1771
|
+
display: flex;
|
|
1772
|
+
flex-direction: column;
|
|
1773
|
+
gap: 8px;
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1776
|
+
.project-profile-footer {
|
|
1777
|
+
display: flex;
|
|
1778
|
+
justify-content: flex-end;
|
|
1779
|
+
}
|
|
1780
|
+
|
|
1781
|
+
.project-binding-profiles {
|
|
1782
|
+
display: flex;
|
|
1783
|
+
flex-wrap: wrap;
|
|
1784
|
+
gap: 10px;
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1787
|
+
@media (max-width: 1180px) {
|
|
1788
|
+
.settings-form {
|
|
1789
|
+
max-width: 100%;
|
|
1790
|
+
}
|
|
1791
|
+
.project-row {
|
|
1792
|
+
grid-template-columns: 1fr;
|
|
1793
|
+
}
|
|
1794
|
+
.project-row.compact {
|
|
1795
|
+
grid-template-columns: 1fr;
|
|
1796
|
+
}
|
|
1797
|
+
.project-profile-grid {
|
|
1798
|
+
grid-template-columns: 1fr;
|
|
1799
|
+
}
|
|
1800
|
+
}
|
|
1801
|
+
|
|
1631
1802
|
/* Dialog */
|
|
1632
1803
|
dialog {
|
|
1633
1804
|
position: fixed;
|
|
@@ -1939,7 +2110,7 @@ dialog::backdrop {
|
|
|
1939
2110
|
}
|
|
1940
2111
|
|
|
1941
2112
|
.summary-strip.compact {
|
|
1942
|
-
margin-bottom:
|
|
2113
|
+
margin-bottom: 0;
|
|
1943
2114
|
gap: 8px;
|
|
1944
2115
|
}
|
|
1945
2116
|
|
|
@@ -1953,6 +2124,25 @@ dialog::backdrop {
|
|
|
1953
2124
|
font-size: 14px;
|
|
1954
2125
|
}
|
|
1955
2126
|
|
|
2127
|
+
.drawer-section {
|
|
2128
|
+
margin-bottom: 12px;
|
|
2129
|
+
}
|
|
2130
|
+
|
|
2131
|
+
.drawer-section-title {
|
|
2132
|
+
font-size: 12px;
|
|
2133
|
+
font-weight: 600;
|
|
2134
|
+
color: var(--text-secondary);
|
|
2135
|
+
margin: 0 0 8px;
|
|
2136
|
+
}
|
|
2137
|
+
|
|
2138
|
+
.drawer-section-title-row {
|
|
2139
|
+
display: flex;
|
|
2140
|
+
align-items: center;
|
|
2141
|
+
justify-content: space-between;
|
|
2142
|
+
gap: 8px;
|
|
2143
|
+
margin-bottom: 8px;
|
|
2144
|
+
}
|
|
2145
|
+
|
|
1956
2146
|
.drawer-create-form {
|
|
1957
2147
|
display: grid;
|
|
1958
2148
|
gap: 8px;
|
|
@@ -1960,7 +2150,7 @@ dialog::backdrop {
|
|
|
1960
2150
|
background: #f8f9fb;
|
|
1961
2151
|
border: 1px solid var(--border);
|
|
1962
2152
|
border-radius: 10px;
|
|
1963
|
-
margin-bottom:
|
|
2153
|
+
margin-bottom: 8px;
|
|
1964
2154
|
}
|
|
1965
2155
|
|
|
1966
2156
|
.drawer-create-form.hidden {
|
|
@@ -2053,7 +2243,7 @@ dialog::backdrop {
|
|
|
2053
2243
|
display: flex;
|
|
2054
2244
|
flex-wrap: wrap;
|
|
2055
2245
|
gap: 6px;
|
|
2056
|
-
margin-bottom:
|
|
2246
|
+
margin-bottom: 8px;
|
|
2057
2247
|
}
|
|
2058
2248
|
|
|
2059
2249
|
.entity-filter-tabs .btn.active {
|
package/dist/web/vueRenderers.js
CHANGED
|
@@ -319,6 +319,8 @@ function renderDenseLaneNode(node, byParent, expandedIdSet, entitySummaryByNodeI
|
|
|
319
319
|
const isExpanded = expandedIdSet.has(node.id);
|
|
320
320
|
const nodeSummary = entitySummaryByNodeId?.[node.id] || { issue: 0, knowledge: 0, capability: 0 };
|
|
321
321
|
const useStackSummary = depth >= 3;
|
|
322
|
+
const summaryBadgeHtml = renderEntityBadges(nodeSummary);
|
|
323
|
+
const summaryAssigneeHtml = showAssignee && node.assignee ? `<span class="node-meta">@${esc(node.assignee)}</span>` : '';
|
|
322
324
|
const previewHtml = renderEntityPreviewBoxes(node.id, entityRowsByNodeId, elementPreviewMode);
|
|
323
325
|
const childrenHtml = hasChildren && isExpanded
|
|
324
326
|
? `<div class="lane-tree-children">${children.map((child) => renderDenseLaneNode(child, byParent, expandedIdSet, entitySummaryByNodeId, depth + 1, showAssignee, entityRowsByNodeId, elementPreviewMode, readonly, selectedId)).join('')}</div>`
|
|
@@ -343,13 +345,13 @@ function renderDenseLaneNode(node, byParent, expandedIdSet, entitySummaryByNodeI
|
|
|
343
345
|
<div class="lane-tree-node-main ${useStackSummary ? 'stack-summary' : ''}">
|
|
344
346
|
<div class="lane-tree-title-line">
|
|
345
347
|
<span class="dense-node-name">${esc(node.name)}</span>
|
|
346
|
-
${!useStackSummary ?
|
|
347
|
-
${!useStackSummary
|
|
348
|
+
${!useStackSummary ? summaryBadgeHtml : ''}
|
|
349
|
+
${!useStackSummary ? summaryAssigneeHtml : ''}
|
|
348
350
|
</div>
|
|
349
|
-
${useStackSummary ? `
|
|
351
|
+
${useStackSummary && (summaryBadgeHtml || summaryAssigneeHtml) ? `
|
|
350
352
|
<div class="lane-tree-summary-line">
|
|
351
|
-
${
|
|
352
|
-
${
|
|
353
|
+
${summaryBadgeHtml}
|
|
354
|
+
${summaryAssigneeHtml}
|
|
353
355
|
</div>
|
|
354
356
|
` : ''}
|
|
355
357
|
</div>
|
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qnote/q-ai-note",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AI-assisted personal work sandbox and diary system",
|
|
6
6
|
"main": "dist/server/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"q-ai-note": "dist/cli.js",
|
|
9
|
-
"q-ai-note-server": "dist/cli.js"
|
|
10
|
-
"q-ai-note-my-server": "dist/cli.js"
|
|
9
|
+
"q-ai-note-server": "dist/cli.js"
|
|
11
10
|
},
|
|
12
11
|
"files": [
|
|
13
12
|
"dist/**/*",
|