@becrafter/prompt-manager 0.1.11 → 0.1.12
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/env.example +1 -1
- package/package.json +2 -2
- package/packages/server/app.js +13 -3
- package/packages/server/utils/config.js +1 -1
- package/packages/server/utils/util.js +7 -7
- package/packages/admin-ui/admin.html +0 -49
- package/packages/admin-ui/css/codemirror-theme_xq-light.css +0 -43
- package/packages/admin-ui/css/codemirror.css +0 -344
- package/packages/admin-ui/css/main.css +0 -4485
- package/packages/admin-ui/css/markdown.css +0 -468
- package/packages/admin-ui/css/optimization.css +0 -1015
- package/packages/admin-ui/css/recommended-prompts.css +0 -610
- package/packages/admin-ui/css/terminal-fix.css +0 -571
- package/packages/admin-ui/package-lock.json +0 -8287
- package/packages/admin-ui/package.json +0 -46
- package/packages/admin-ui/src/codemirror.js +0 -53
- package/packages/admin-ui/src/components/ArgumentModal.js +0 -53
- package/packages/admin-ui/src/components/DeletePromptModal.js +0 -30
- package/packages/admin-ui/src/components/HeaderView.js +0 -40
- package/packages/admin-ui/src/components/LoadingOverlay.js +0 -12
- package/packages/admin-ui/src/components/LoginView.js +0 -22
- package/packages/admin-ui/src/components/ModelConfigModal.js +0 -103
- package/packages/admin-ui/src/components/NewFolderModal.js +0 -58
- package/packages/admin-ui/src/components/OptimizationConfigModal.js +0 -36
- package/packages/admin-ui/src/components/OptimizationDrawer.js +0 -135
- package/packages/admin-ui/src/components/PrimaryNav.js +0 -34
- package/packages/admin-ui/src/components/PromptsArea.js +0 -140
- package/packages/admin-ui/src/components/RecommendedPromptModal.js +0 -37
- package/packages/admin-ui/src/components/SidebarView.js +0 -24
- package/packages/admin-ui/src/components/SyncPromptModal.js +0 -44
- package/packages/admin-ui/src/components/TemplateEditorModal.js +0 -75
- package/packages/admin-ui/src/components/TemplateListModal.js +0 -30
- package/packages/admin-ui/src/components/TerminalComponent.js +0 -995
- package/packages/admin-ui/src/components/TerminalView.js +0 -25
- package/packages/admin-ui/src/components/ToolDetailModal.js +0 -23
- package/packages/admin-ui/src/components/ToolsArea.js +0 -119
- package/packages/admin-ui/src/components/ToolsUploadModal.js +0 -59
- package/packages/admin-ui/src/index.js +0 -6766
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
export class PromptsArea {
|
|
2
|
-
static getHTML() {
|
|
3
|
-
return `
|
|
4
|
-
<div class="editor-container" id="promptsArea">
|
|
5
|
-
<!-- 自定义空白内容区域 -->
|
|
6
|
-
<div class="custom-blank-content" id="customBlankContent">
|
|
7
|
-
<div class="blank-placeholder">
|
|
8
|
-
<div class="blank-placeholder-body">
|
|
9
|
-
<div class="blank-placeholder-emoji">📝</div>
|
|
10
|
-
<p class="blank-placeholder-text">请选择左侧的 Prompt 或点击「<button type="button" id="newPromptBtnInBlankArea" class="blank-area-new-prompt-btn">新建 Prompt</button>」开始编辑</p>
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
<!-- 推荐词卡片列表 -->
|
|
15
|
-
<div class="recommended-prompts-section hidden" id="recommendedPromptsSection">
|
|
16
|
-
<div class="recommended-prompts-header">
|
|
17
|
-
<h3>推荐提示词</h3>
|
|
18
|
-
<div class="recommended-prompts-nav">
|
|
19
|
-
<button class="nav-arrow arrow-left disabled" id="recommendedPromptsLeft">
|
|
20
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
21
|
-
<polyline points="15 18 9 12 15 6"></polyline>
|
|
22
|
-
</svg>
|
|
23
|
-
</button>
|
|
24
|
-
<button class="nav-arrow arrow-right" id="recommendedPromptsRight">
|
|
25
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
26
|
-
<polyline points="9 18 15 12 9 6"></polyline>
|
|
27
|
-
</svg>
|
|
28
|
-
</button>
|
|
29
|
-
</div>
|
|
30
|
-
</div>
|
|
31
|
-
<div class="recommended-prompts-container">
|
|
32
|
-
<div class="recommended-prompts-list" id="recommendedPromptsList">
|
|
33
|
-
<!-- 推荐词卡片将通过JavaScript动态加载 -->
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
|
|
39
|
-
<!-- Prompt 编辑区域(默认隐藏) -->
|
|
40
|
-
<div id="promptEditorArea" style="display: none;">
|
|
41
|
-
<div class="editor-header">
|
|
42
|
-
<div class="editor-header-top">
|
|
43
|
-
<button id="backToListBtn" class="btn btn-outline btn-icon" title="返回列表">
|
|
44
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
45
|
-
<rect x="3" y="3" width="7" height="7"></rect>
|
|
46
|
-
<rect x="14" y="3" width="7" height="7"></rect>
|
|
47
|
-
<rect x="14" y="14" width="7" height="7"></rect>
|
|
48
|
-
<rect x="3" y="14" width="7" height="7"></rect>
|
|
49
|
-
</svg>
|
|
50
|
-
</button>
|
|
51
|
-
<input type="text" id="promptName" name="promptName" placeholder="Prompt 名称" />
|
|
52
|
-
<div class="group-selector">
|
|
53
|
-
<button type="button" id="promptGroupBtn" class="group-selector-btn" aria-haspopup="listbox" aria-expanded="false" aria-controls="promptGroupDropdown">
|
|
54
|
-
<span class="group-selector-label" style="display: none;">关联类目</span>
|
|
55
|
-
<span class="group-selector-value" id="promptGroupLabel">default</span>
|
|
56
|
-
<span class="group-selector-icon" aria-hidden="true">
|
|
57
|
-
<svg width="14" height="14" viewBox="0 0 20 20" fill="none">
|
|
58
|
-
<path d="M5 8L10 13L15 8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
|
|
59
|
-
</svg>
|
|
60
|
-
</span>
|
|
61
|
-
</button>
|
|
62
|
-
<select id="promptGroup" class="group-selector-input" aria-hidden="true" tabindex="-1">
|
|
63
|
-
<!-- 选项将通过后端接口动态加载 -->
|
|
64
|
-
</select>
|
|
65
|
-
<div class="group-dropdown" id="promptGroupDropdown" role="dialog" aria-modal="false">
|
|
66
|
-
<div class="group-dropdown-search">
|
|
67
|
-
<input type="text" id="promptGroupSearch" placeholder="搜索类目..." autocomplete="off" />
|
|
68
|
-
</div>
|
|
69
|
-
<div class="group-dropdown-body">
|
|
70
|
-
<div class="group-cascader" id="promptGroupCascader"></div>
|
|
71
|
-
<div class="group-search-results" id="promptGroupSearchResults"></div>
|
|
72
|
-
<div class="group-dropdown-empty hidden" id="promptGroupEmpty">暂无匹配的类目</div>
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
76
|
-
<div class="editor-controls">
|
|
77
|
-
<div class="mode-toggle">
|
|
78
|
-
<button id="editModeBtn" class="mode-btn active" data-mode="edit">编辑</button>
|
|
79
|
-
<button id="previewModeBtn" class="mode-btn" data-mode="preview">预览</button>
|
|
80
|
-
</div>
|
|
81
|
-
<button id="aiOptimizeBtn" class="btn btn-outline btn-sm" title="AI 优化">
|
|
82
|
-
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
83
|
-
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"></path>
|
|
84
|
-
</svg>
|
|
85
|
-
AI 优化
|
|
86
|
-
</button>
|
|
87
|
-
<button id="saveBtn" class="btn btn-primary btn-sm">
|
|
88
|
-
保存
|
|
89
|
-
</button>
|
|
90
|
-
</div>
|
|
91
|
-
</div>
|
|
92
|
-
</div>
|
|
93
|
-
|
|
94
|
-
<div class="editor-content">
|
|
95
|
-
<textarea id="promptDescription" class="prompt-description" placeholder="Prompt 描述"></textarea>
|
|
96
|
-
|
|
97
|
-
<section class="arguments-section collapsed" id="argumentsSection">
|
|
98
|
-
<div class="arguments-header" id="argumentsHeaderToggle">
|
|
99
|
-
<div class="arguments-title">
|
|
100
|
-
<button type="button" class="arguments-toggle" id="argumentsToggleBtn" aria-expanded="false">
|
|
101
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
102
|
-
<polyline points="6 9 12 15 18 9"></polyline>
|
|
103
|
-
</svg>
|
|
104
|
-
</button>
|
|
105
|
-
<span>参数配置</span>
|
|
106
|
-
<span class="arguments-count" id="argumentsCount">(0)</span>
|
|
107
|
-
</div>
|
|
108
|
-
<div class="arguments-actions">
|
|
109
|
-
<button id="addArgumentBtn" class="btn btn-outline btn-sm" type="button">
|
|
110
|
-
新增
|
|
111
|
-
</button>
|
|
112
|
-
</div>
|
|
113
|
-
</div>
|
|
114
|
-
<div class="arguments-list" id="argumentsList">
|
|
115
|
-
<div class="arguments-empty">暂无参数,点击"新增"开始配置</div>
|
|
116
|
-
</div>
|
|
117
|
-
</section>
|
|
118
|
-
<div class="editor-body" id="editorWorkspace">
|
|
119
|
-
<div class="workspace-pane" id="editorPane">
|
|
120
|
-
<div class="pane-header">编辑器</div>
|
|
121
|
-
<div class="pane-content">
|
|
122
|
-
<textarea id="editor"></textarea>
|
|
123
|
-
</div>
|
|
124
|
-
</div>
|
|
125
|
-
<div class="workspace-pane hidden" id="previewPane">
|
|
126
|
-
<div class="pane-header">实时预览</div>
|
|
127
|
-
<div class="pane-content preview">
|
|
128
|
-
<div class="preview-content" id="previewContent">
|
|
129
|
-
<p>选择或创建prompt开始编辑</p>
|
|
130
|
-
</div>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
</div>
|
|
136
|
-
</div>
|
|
137
|
-
`;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export class RecommendedPromptModal {
|
|
2
|
-
static getHTML() {
|
|
3
|
-
return `
|
|
4
|
-
<div id="recommendedPromptModal" class="recommended-prompt-modal hidden">
|
|
5
|
-
<div class="recommended-prompt-modal-content">
|
|
6
|
-
<div class="recommended-prompt-modal-header">
|
|
7
|
-
<h3 id="recommendedPromptTitle">
|
|
8
|
-
<svg class="modal-title-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#666666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
9
|
-
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
|
|
10
|
-
</svg>
|
|
11
|
-
<span class="modal-title-text">推荐提示词</span>
|
|
12
|
-
</h3>
|
|
13
|
-
<button class="recommended-prompt-modal-close" id="recommendedPromptClose">
|
|
14
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
15
|
-
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
16
|
-
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
17
|
-
</svg>
|
|
18
|
-
</button>
|
|
19
|
-
</div>
|
|
20
|
-
<div class="recommended-prompt-modal-body">
|
|
21
|
-
<div class="prompt-detail-description" id="recommendedPromptDescription"></div>
|
|
22
|
-
<div class="prompt-detail-content" id="recommendedPromptContent"></div>
|
|
23
|
-
</div>
|
|
24
|
-
<div class="recommended-prompt-modal-footer">
|
|
25
|
-
<button class="sync-to-my-prompts-btn" id="syncToMyPromptsBtn">
|
|
26
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#ffffff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
27
|
-
<path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"></path>
|
|
28
|
-
</svg>
|
|
29
|
-
一键同步
|
|
30
|
-
</button>
|
|
31
|
-
</div>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
`;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
export class SidebarView {
|
|
2
|
-
static getHTML() {
|
|
3
|
-
return `
|
|
4
|
-
<aside id="promptsSidebar">
|
|
5
|
-
<div class="sidebar-header">
|
|
6
|
-
<button id="newPromptBtn" class="new-prompt-btn">
|
|
7
|
-
新建 Prompt
|
|
8
|
-
</button>
|
|
9
|
-
<div class="search-container">
|
|
10
|
-
<div class="search-box">
|
|
11
|
-
<input type="text" id="searchInput" name="searchInput" placeholder="搜索提示词..." autocomplete="off" />
|
|
12
|
-
<button type="button" class="clear-btn" title="清除搜索"></button>
|
|
13
|
-
</div>
|
|
14
|
-
<button id="newGroupBtn" class="folder-btn" title="新建目录">
|
|
15
|
-
</button>
|
|
16
|
-
</div>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div id="groupList"></div>
|
|
20
|
-
</aside>
|
|
21
|
-
`;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
export class SyncPromptModal {
|
|
2
|
-
static getHTML() {
|
|
3
|
-
return `
|
|
4
|
-
<div id="syncPromptModal" class="sync-prompt-modal hidden">
|
|
5
|
-
<div class="sync-prompt-modal-content">
|
|
6
|
-
<div class="sync-prompt-modal-header">
|
|
7
|
-
<h3>
|
|
8
|
-
<svg class="modal-title-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#666666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
9
|
-
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
|
|
10
|
-
</svg>
|
|
11
|
-
<span class="modal-title-text">同步到我的提示词</span>
|
|
12
|
-
</h3>
|
|
13
|
-
<button class="sync-prompt-modal-close" id="syncPromptClose">
|
|
14
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
15
|
-
<line x1="18" y1="6" x2="6" y2="18"></line>
|
|
16
|
-
<line x1="6" y1="6" x2="18" y2="18"></line>
|
|
17
|
-
</svg>
|
|
18
|
-
</button>
|
|
19
|
-
</div>
|
|
20
|
-
<div class="sync-prompt-modal-body">
|
|
21
|
-
<form class="sync-prompt-form" id="syncPromptForm">
|
|
22
|
-
<div class="form-group">
|
|
23
|
-
<label for="syncPromptName">提示词名称</label>
|
|
24
|
-
<input type="text" id="syncPromptName" name="name" placeholder="请输入提示词名称" required>
|
|
25
|
-
</div>
|
|
26
|
-
<div class="form-group">
|
|
27
|
-
<label for="syncPromptGroup">选择目录</label>
|
|
28
|
-
<select id="syncPromptGroup" name="group" required>
|
|
29
|
-
<option value="">请选择目录</option>
|
|
30
|
-
<!-- 目录选项将通过JavaScript动态加载 -->
|
|
31
|
-
</select>
|
|
32
|
-
</div>
|
|
33
|
-
</form>
|
|
34
|
-
</div>
|
|
35
|
-
<div class="sync-prompt-modal-footer">
|
|
36
|
-
<button class="btn btn-light" id="syncPromptCancel">取消</button>
|
|
37
|
-
<button class="btn btn-primary" id="syncPromptConfirm">同步</button>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
`;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
export class TemplateEditorModal {
|
|
2
|
-
static getHTML() {
|
|
3
|
-
return `
|
|
4
|
-
<div id="templateEditorModal" class="modal hidden" role="dialog" aria-modal="true" aria-labelledby="templateEditorModalTitle">
|
|
5
|
-
<div class="modal-dialog">
|
|
6
|
-
<div class="modal-content">
|
|
7
|
-
<div class="modal-header">
|
|
8
|
-
<h3 id="templateEditorModalTitle">编辑模板</h3>
|
|
9
|
-
<button type="button" id="templateEditorModalClose" class="modal-close" aria-label="关闭">×</button>
|
|
10
|
-
</div>
|
|
11
|
-
<div class="modal-body">
|
|
12
|
-
<form id="templateForm">
|
|
13
|
-
<div class="form-row">
|
|
14
|
-
<div class="form-group col-6">
|
|
15
|
-
<label for="templateType">适用场景 <span class="required">*</span></label>
|
|
16
|
-
<select id="templateType" class="form-control" required>
|
|
17
|
-
<option value="optimize">系统提示词 (用于初始优化)</option>
|
|
18
|
-
<option value="iterate">迭代提示词 (用于继续优化)</option>
|
|
19
|
-
</select>
|
|
20
|
-
</div>
|
|
21
|
-
<div class="form-group col-6">
|
|
22
|
-
<label for="templateFormat">模板格式 <span class="required">*</span></label>
|
|
23
|
-
<select id="templateFormat" class="form-control" required>
|
|
24
|
-
<option value="simple">简单模板 (单文本)</option>
|
|
25
|
-
<option value="advanced">高级模板 (多角色消息)</option>
|
|
26
|
-
</select>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
<div class="form-group">
|
|
30
|
-
<label for="templateName">名称 <span class="required">*</span></label>
|
|
31
|
-
<input type="text" id="templateName" class="form-control" required placeholder="请输入模板名称" />
|
|
32
|
-
</div>
|
|
33
|
-
<div class="form-group">
|
|
34
|
-
<label for="templateDescription">描述</label>
|
|
35
|
-
<textarea id="templateDescription" class="form-control" rows="2" placeholder="请输入模板描述"></textarea>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
<!-- 简单模板内容 -->
|
|
39
|
-
<div id="simpleContentSection" class="form-group">
|
|
40
|
-
<label for="templateContent">内容 <span class="required">*</span></label>
|
|
41
|
-
<textarea id="templateContent" class="form-control" rows="8" placeholder="请输入模板内容"></textarea>
|
|
42
|
-
<div class="template-help-text">
|
|
43
|
-
<p>💡 可用变量:</p>
|
|
44
|
-
<ul id="variableList">
|
|
45
|
-
<li><code>{{prompt}}</code> - 原始输入的提示词</li>
|
|
46
|
-
</ul>
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
<!-- 高级模板内容 -->
|
|
51
|
-
<div id="advancedContentSection" class="form-group hidden">
|
|
52
|
-
<label>多消息配置 <span class="required">*</span></label>
|
|
53
|
-
<div id="advancedMessageList" class="advanced-message-list">
|
|
54
|
-
<!-- 消息列表 -->
|
|
55
|
-
</div>
|
|
56
|
-
<button type="button" id="addMessageBtn" class="btn btn-outline btn-sm" style="margin-top: 10px;">
|
|
57
|
-
+ 添加消息
|
|
58
|
-
</button>
|
|
59
|
-
<div class="template-help-text">
|
|
60
|
-
<p>💡 高级模板说明:</p>
|
|
61
|
-
<p>您可以定义多轮对话,系统会自动替换 <code>{{prompt}}</code> 等变量。支持的角色:system, user, assistant。</p>
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</form>
|
|
65
|
-
</div>
|
|
66
|
-
<div class="modal-footer">
|
|
67
|
-
<button type="button" id="cancelTemplateBtn" class="btn btn-light">取消</button>
|
|
68
|
-
<button type="button" id="saveTemplateBtn" class="btn btn-primary">保存</button>
|
|
69
|
-
</div>
|
|
70
|
-
</div>
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
`;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export class TemplateListModal {
|
|
2
|
-
static getHTML() {
|
|
3
|
-
return `
|
|
4
|
-
<div id="templateListModal" class="modal hidden" role="dialog" aria-modal="true" aria-labelledby="templateListModalTitle">
|
|
5
|
-
<div class="modal-dialog">
|
|
6
|
-
<div class="modal-content">
|
|
7
|
-
<div class="modal-header">
|
|
8
|
-
<h3 id="templateListModalTitle">提示词模板管理</h3>
|
|
9
|
-
<button type="button" id="templateListModalClose" class="modal-close" aria-label="关闭">×</button>
|
|
10
|
-
</div>
|
|
11
|
-
<div class="modal-body">
|
|
12
|
-
<div class="template-list-header">
|
|
13
|
-
<input type="text" id="templateSearch" class="form-control" placeholder="搜索模板..." />
|
|
14
|
-
<button type="button" id="createTemplateBtn" class="btn btn-primary">
|
|
15
|
-
+ 新增模板
|
|
16
|
-
</button>
|
|
17
|
-
</div>
|
|
18
|
-
<div id="templateList" class="template-list">
|
|
19
|
-
<!-- 动态加载模板列表 -->
|
|
20
|
-
</div>
|
|
21
|
-
</div>
|
|
22
|
-
<div class="modal-footer">
|
|
23
|
-
<button type="button" id="templateListCloseBtn" class="btn btn-light">关闭</button>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
`;
|
|
29
|
-
}
|
|
30
|
-
}
|