m8-mcp-server 1.0.1 → 1.1.0
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 +118 -32
- package/dist/index.d.mts +449 -0
- package/dist/index.d.ts +449 -0
- package/dist/index.js +700 -1
- package/dist/index.mjs +700 -0
- package/package.json +34 -21
- package/prompts/PROMPTS.md +476 -0
- package/bin/m8-mcp.js +0 -2
- package/dist/constants.js +0 -1
- package/dist/data/ejs-doc/api_audio/api_audio.md +0 -225
- package/dist/data/ejs-doc/api_auth/api_auth.md +0 -256
- package/dist/data/ejs-doc/api_contact/api_contact.md +0 -295
- package/dist/data/ejs-doc/api_contact/images/component_contact.jpg +0 -0
- package/dist/data/ejs-doc/api_device/api_device.md +0 -761
- package/dist/data/ejs-doc/api_event/api_event.md +0 -244
- package/dist/data/ejs-doc/api_global/api_global.md +0 -440
- package/dist/data/ejs-doc/api_io/api_io.md +0 -369
- package/dist/data/ejs-doc/api_navigator/api_navigator.md +0 -654
- package/dist/data/ejs-doc/api_navigator/images/navigator.backbtn.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.hide.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.hidestatus.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.leftarrowbtn.jpg +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.leftbtn.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.leftbtnimg.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.multititle.jpg +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtn.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtn2.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtnimg.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.rightbtnimg2.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.rightmenu.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.searchbar.png +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.subtitle.jpg +0 -0
- package/dist/data/ejs-doc/api_navigator/images/navigator.title.png +0 -0
- package/dist/data/ejs-doc/api_page/api_page.md +0 -261
- package/dist/data/ejs-doc/api_runtime/api_runtime.md +0 -788
- package/dist/data/ejs-doc/api_storage/api_storage.md +0 -320
- package/dist/data/ejs-doc/api_stream/api_stream.md +0 -152
- package/dist/data/ejs-doc/api_stream/images/body_multiform.jpg +0 -0
- package/dist/data/ejs-doc/api_ui/api_ui.md +0 -836
- package/dist/data/ejs-doc/api_ui/images/ui.popwindow.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_actionsheet.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_alert.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_confirm.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_pickDateTime.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_pickdate.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_pickmonth.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_picktime.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_poppicker.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_poppicker2.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_poppicker3.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_prompt.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_select.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_select2.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_select3.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_showdebugdialog.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_showwaiting.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_toast.png +0 -0
- package/dist/data/ejs-doc/api_ui/images/ui_toastAndEvent.png +0 -0
- package/dist/data/ejs-doc/api_util/api_util.md +0 -615
- package/dist/data/ejs-doc/api_util/images/util.playvideo.png +0 -0
- package/dist/data/ejs-doc/api_util/images/util.previmage.png +0 -0
- package/dist/data/ejs-doc/api_util/images/util.selectfile.png +0 -0
- package/dist/data/ejs-doc/api_util/images/util.selectimage.png +0 -0
- package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205.md +0 -247
- package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/345/210/227/350/241/250/350/257/246/346/203/205vue3.md +0 -276
- package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244.md +0 -130
- package/dist/data/m8mpdoc-develop/003-/345/205/270/345/236/213/346/241/210/344/276/213/003-/350/241/250/345/215/225/346/217/220/344/272/244vue3.md +0 -115
- package/dist/data/m8mpdoc-develop/005-/346/240/270/345/277/203/351/200/232/347/224/250Util/000-/346/240/270/345/277/203/346/226/271/346/263/225.md +0 -398
- package/dist/data/m8mpdoc-develop/005-/346/240/270/345/277/203/351/200/232/347/224/250Util/001-Ajax/344/270/216/346/226/207/344/273/266/344/270/212/344/274/240.md +0 -456
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/000-charset.md +0 -128
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/001-base64.md +0 -142
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/002-date.md +0 -210
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/004-math.md +0 -85
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/006-sha1.md +0 -21
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/007-sha256.md +0 -36
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/008-storage.md +0 -128
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/009-string.md +0 -148
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/010-Util/346/211/251/345/261/225/346/214/207/345/215/227.md +0 -76
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/011-cookie.md +0 -59
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/012-util-sm.md +0 -95
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-1.baseapi.md +0 -76
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-2.network.md +0 -202
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-2.socketTask.md +0 -92
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-3.uiapi.md +0 -412
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-4.eventapi.md +0 -146
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/013-5.otherapi.md +0 -137
- package/dist/data/m8mpdoc-develop/006-Util/345/267/245/345/205/267/351/233/206/014-util-mpVerifyManager.md +0 -363
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/000-/347/273/204/344/273/266/345/272/223/344/270/213/350/275/275/344/275/277/347/224/250.md +0 -188
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/001-actionsheet/345/212/250/344/275/234/351/235/242/346/235/277.md +0 -460
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/004-amap/345/234/260/345/233/276.md +0 -285
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/005-button/346/214/211/351/222/256.md +0 -211
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/008-cell/345/215/225/345/205/203/346/240/274.md +0 -213
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/009-checkbox/345/244/215/351/200/211/346/241/206.md +0 -501
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/010-circle/347/216/257/345/275/242/350/277/233/345/272/246/346/235/241.md +0 -168
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/011-datepicker/346/227/245/346/234/237/351/200/211/346/213/251.md +0 -617
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/013-field/350/276/223/345/205/245/346/241/206.md +0 -539
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/015-form/350/241/250/345/215/225.md +0 -999
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/018-header/345/244/264/351/203/250/345/257/274/350/210/252/346/240/217.md +0 -150
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/019-icon/345/233/276/346/240/207.md +0 -133
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/020-loading/345/212/240/350/275/275.md +0 -117
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/021-noticebar/351/200/232/347/237/245/346/240/217.md +0 -152
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/022-numberkeyboard/346/225/260/345/255/227/351/224/256/347/233/230.md +0 -427
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/023-pagination/345/210/206/351/241/265.md +0 -212
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/024-panel/351/235/242/346/235/277.md +0 -85
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/025-passwordinput/345/257/206/347/240/201/350/276/223/345/205/245/346/241/206.md +0 -175
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/026-picker/351/200/211/346/213/251/345/231/250.md +0 -519
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/027-popup/345/274/271/345/207/272/345/261/202.md +0 -152
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/028-progress/350/277/233/345/272/246/346/235/241.md +0 -103
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/029-radio/345/215/225/351/200/211/346/241/206.md +0 -285
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/030-rate/350/257/204/345/210/206.md +0 -189
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/031-search/346/220/234/347/264/242.md +0 -217
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/032-slider/346/273/221/345/235/227.md +0 -166
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/033-stepper/346/255/245/350/277/233/345/231/250.md +0 -340
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/035-swipecell/346/273/221/345/212/250/345/215/225/345/205/203/346/240/274.md +0 -265
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/036-switch/345/274/200/345/205/263.md +0 -196
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/037-switchcell/345/274/200/345/205/263/345/215/225/345/205/203/346/240/274.md +0 -115
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/038-tag/346/240/207/350/256/260.md +0 -232
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/039-treeselect/345/210/206/347/261/273/351/200/211/346/213/251.md +0 -631
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/040-uploader/346/226/207/344/273/266/344/270/212/344/274/240.md +0 -531
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/041-verifycode/351/252/214/350/257/201/347/240/201.md +0 -111
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/042-minirefresh/344/270/213/346/213/211/345/210/267/346/226/260.md +0 -337
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/043-layout/345/270/203/345/261/200.md +0 -150
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/044-image/345/233/276/347/211/207.md +0 -144
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/045-toast/350/275/273/346/217/220/347/244/272.md +0 -429
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/046-calendar/346/227/245/345/216/206.md +0 -467
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/047-area/347/234/201/345/270/202/345/214/272/351/200/211/346/213/251.md +0 -295
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/048-tab/346/240/207/347/255/276/351/241/265.md +0 -577
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/049-dialog/345/274/271/345/207/272/346/241/206.md +0 -491
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/050-dropdownmenu/344/270/213/346/213/211/350/217/234/345/215/225.md +0 -265
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/051-notify/346/266/210/346/201/257/351/200/232/347/237/245.md +0 -203
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/052-overlay/351/201/256/347/275/251/345/261/202.md +0 -139
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/053-collapse/346/212/230/345/217/240/351/235/242/346/235/277.md +0 -199
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/054-grid/345/256/253/346/240/274.md +0 -183
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/055-countdown/345/200/222/350/256/241/346/227/266.md +0 -289
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/056-divider/345/210/206/345/211/262/347/272/277.md +0 -97
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/057-empty/347/251/272/347/212/266/346/200/201.md +0 -146
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/058-imagepreview/345/233/276/347/211/207/351/242/204/350/247/210.md +0 -292
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/059-lazyload/346/207/222/345/212/240/350/275/275.md +0 -120
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/060-skeleton/351/252/250/346/236/266/345/261/217.md +0 -114
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/061-steps/346/255/245/351/252/244/346/235/241.md +0 -119
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/062-sticky/347/262/230/346/200/247/345/270/203/345/261/200.md +0 -208
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/063-indexbar/347/264/242/345/274/225/346/240/217.md +0 -161
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/064-sidebar/344/276/247/350/276/271/345/257/274/350/210/252.md +0 -248
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/065-tabbar/346/240/207/347/255/276/346/240/217.md +0 -314
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/066-badge/345/276/275/346/240/207.md +0 -162
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/067-popover/346/260/224/346/263/241/345/274/271/345/207/272/346/241/206.md +0 -325
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/068-cascader/347/272/247/350/201/224/351/200/211/346/213/251.md +0 -360
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/069-selectperson/351/200/211/344/272/272/347/273/204/344/273/266.md +0 -595
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/070-swipe/350/275/256/346/222/255.md +0 -262
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/071-/345/233/275/351/231/205/345/214/226.md +0 -51
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/072-easycalendar/346/227/245/345/216/206.md +0 -132
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/073-qrcode/344/272/214/347/273/264/347/240/201.md +0 -1538
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/074-imagescale/345/233/276/347/211/207/350/243/201/345/211/252.md +0 -261
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/075-dragsort/346/213/226/346/213/275/346/216/222/345/272/217.md +0 -161
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/076-chart/345/233/276/350/241/250.md +0 -381
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/077-rtc/351/237/263/350/247/206/351/242/221.md +0 -531
- package/dist/data/m8mpdoc-develop/009-UI/347/273/204/344/273/266/078-table/350/241/250/346/240/274.md +0 -849
- package/dist/data/m8mpdoc-develop/012-Mock/347/232/204/344/275/277/347/224/250/Mock/347/232/204/344/275/277/347/224/250.md +0 -116
- package/dist/data/standards/css-style.md +0 -531
- package/dist/data/standards/js-style.md +0 -394
- package/dist/data/standards/project-structure.md +0 -325
- package/dist/data/standards/vue-style.md +0 -644
- package/dist/tools/search.js +0 -1
- package/dist/tools/standards.js +0 -1
package/dist/index.js
CHANGED
|
@@ -1 +1,700 @@
|
|
|
1
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';var index_js=require('@modelcontextprotocol/sdk/server/index.js'),stdio_js=require('@modelcontextprotocol/sdk/server/stdio.js'),types_js=require('@modelcontextprotocol/sdk/types.js'),f=require('fs'),S=require('path'),_=require('minisearch');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var f__namespace=/*#__PURE__*/_interopNamespace(f);var S__namespace=/*#__PURE__*/_interopNamespace(S);var ___default=/*#__PURE__*/_interopDefault(_);var x=class{parseMarkdown(t,e){let r=this.detectCategory(e),n=this.extractTitle(t),o=this.extractKeywords(t,n,e),i=this.extractSummary(t),a={id:this.generateId(e),title:n,category:r,filePath:e,keywords:o,summary:i,content:t};switch(r){case "ejs-api":a.apis=this.extractApiInfo(t),a.module=this.extractModuleName(e,t);break;case "ui-component":a.component=this.extractComponentInfo(t);break;case "util-tool":a.methods=this.extractMethodInfo(t),a.utilCategory=this.extractUtilCategory(e,t);break;case "standard":a.rules=this.extractStandardRules(t),a.standardType=this.extractStandardType(e);break}return a}detectCategory(t){let e=t.replace(/\\/g,"/").toLowerCase();return e.includes("ejs-doc")?"ejs-api":e.includes("009-ui\u7EC4\u4EF6")||e.includes("ui\u7EC4\u4EF6")?"ui-component":e.includes("006-util")||e.includes("util\u5DE5\u5177\u96C6")||e.includes("005-\u6838\u5FC3\u901A\u7528util")||e.includes("\u6838\u5FC3\u901A\u7528")?"util-tool":e.includes("\u5178\u578B\u6848\u4F8B")||e.includes("003-\u5178\u578B\u6848\u4F8B")?"typical-case":e.includes("standards")||e.includes("\u89C4\u8303")?"standard":"util-tool"}extractModuleName(t,e){let r=e.match(/^#\s+ejs\.(\w+)/m);if(r)return r[1];let n=t.match(/api_(\w+)/);return n?n[1]:"unknown"}extractUtilCategory(t,e){let r=t.match(/\d+-(\w+)\.md$/i);if(r)return r[1];let n=e.match(/^#\s+(?:Util\.)?(\w+)/m);return n?n[1].toLowerCase():"general"}extractStandardType(t){let e=t.toLowerCase();return e.includes("css")?"css":e.includes("js")||e.includes("javascript")?"javascript":e.includes("vue")?"vue":e.includes("project")||e.includes("structure")?"project-structure":"general"}extractTitle(t){let e=t.match(/^#\s+(.+)$/m);if(e)return e[1].trim();let r=t.match(/^##\s+(.+)$/m);return r?r[1].trim():"\u672A\u547D\u540D\u6587\u6863"}extractKeywords(t,e,r){let n=new Set;n.add(e),r.split(/[/\\]/).filter(Boolean).forEach(m=>{let d=m.replace(/\.md$/i,"").replace(/^\d+-/,"");d.length>1&&n.add(d);});let i=t.match(/`([a-zA-Z_][\w.]*)`/g);i&&i.slice(0,20).forEach(m=>{let d=m.replace(/`/g,"");d.length>2&&d.length<50&&n.add(d);});let c=t.match(/ejs\.[a-zA-Z]+\.[a-zA-Z]+/g);c&&c.forEach(m=>n.add(m));let a=t.match(/em-[a-zA-Z-]+/g);a&&a.forEach(m=>n.add(m));let p=t.match(/Util\.[a-zA-Z]+/g);p&&p.forEach(m=>n.add(m));let y=e.match(/[\u4e00-\u9fa5]+/g);return y&&y.forEach(m=>{m.length>=2&&n.add(m);}),Array.from(n)}extractSummary(t){let e=t.replace(/^#+\s+.+$/gm,"");e=e.replace(/```[\s\S]*?```/g,""),e=e.replace(/\|[\s\S]*?\|/g,""),e=e.replace(/!\[.*?\]\(.*?\)/g,""),e=e.replace(/\[.*?\]\(.*?\)/g,""),e=e.replace(/<[^>]+>/g,""),e=e.replace(/:::\s*\w+[\s\S]*?:::\s*\w*/g,"");let n=e.split(`
|
|
3
|
+
`).filter(o=>o.trim().length>0).slice(0,3).join(" ").trim();return n.length>200?n.substring(0,200)+"...":n}generateId(t){return t.replace(/\\/g,"/").replace(/\.md$/i,"").replace(/[^a-zA-Z0-9\u4e00-\u9fa5]/g,"-").replace(/-+/g,"-").toLowerCase()}extractApiInfo(t){let e=[],r=t.split(/^##\s+/m).slice(1);for(let n of r){let i=n.split(`
|
|
4
|
+
`)[0]?.trim();if(!i||i.startsWith("#"))continue;let c={name:i,description:this.extractApiDescription(n),parameters:this.extractParameters(n),returns:this.extractReturns(n),platformSupport:this.extractPlatformSupport(n),examples:this.extractCodeExamples(n)};e.push(c);}return e}extractApiDescription(t){let e=t.split(`
|
|
5
|
+
`).slice(1),r=[];for(let n of e){if(n.startsWith("#")||n.startsWith("|")||n.startsWith("```"))break;n.trim()&&r.push(n.trim());}return r.join(" ")}extractParameters(t){let e=[],r=t.match(/\*\*参数说明\*\*[\s\S]*?\|[\s\S]*?(?=\n\n|\*\*|$)/);if(!r)return e;let o=r[0].split(`
|
|
6
|
+
`).filter(i=>i.includes("|"));for(let i=2;i<o.length;i++){let c=o[i].split("|").map(a=>a.trim()).filter(Boolean);c.length>=3&&e.push({name:c[0].replace(/`/g,""),type:c[1],description:c[2],required:!c[2]?.includes("\u53EF\u9009")});}return e}extractReturns(t){let e=t.match(/\*\*返回说明\*\*[\s\S]*?\|[\s\S]*?(?=\n\n|\*\*|$)/);if(!e)return;let n=e[0].split(`
|
|
7
|
+
`).filter(o=>o.includes("|"));if(n.length>=3){let o=n[2].split("|").map(i=>i.trim()).filter(Boolean);if(o.length>=3)return {type:o[1],description:o[2]}}}extractPlatformSupport(t){let e={},r=t.match(/\*\*平台差异\*\*[\s\S]*?\|[\s\S]*?(?=\n\n|\*\*|$)/);if(!r)return e;let n=r[0];return e.ejsH5=n.includes("\u652F\u6301")&&n.includes("ejs"),e.h5=n.includes("H5")&&!n.includes("\u4E0D\u652F\u6301"),e.wechat=n.includes("\u5FAE\u4FE1")&&!n.includes("\u4E0D\u652F\u6301"),e.alipay=n.includes("\u652F\u4ED8\u5B9D")&&!n.includes("\u4E0D\u652F\u6301"),e.dingtalk=n.includes("\u9489\u9489")&&!n.includes("\u4E0D\u652F\u6301"),e}extractCodeExamples(t){let e=[],r=/```(?:js|javascript|html|vue|scss|css)?\n([\s\S]*?)```/g,n;for(;(n=r.exec(t))!==null;)n[1].trim()&&e.push(n[1].trim());return e}extractComponentInfo(t){let e=this.extractComponentName(t),r=this.extractComponentDescription(t),n=this.extractProps(t),o=this.extractEvents(t),i=this.extractCodeExamples(t);return {name:e,description:r,props:n,events:o,examples:i}}extractComponentName(t){let e=t.match(/^##?\s+(.+?)(?:\s+按钮|\s+组件|\s+输入框)?$/m);if(e){let n=e[1].trim(),o=n.match(/em-[a-zA-Z-]+/);return o?o[0]:n}let r=t.match(/<(em-[a-zA-Z-]+)/);return r?r[1]:"\u672A\u77E5\u7EC4\u4EF6"}extractComponentDescription(t){let e=t.match(/###\s*介绍[\s\S]*?(?=###|$)/);return e?e[0].replace(/###\s*介绍/,"").replace(/```[\s\S]*?```/g,"").trim().split(`
|
|
8
|
+
`).filter(n=>n.trim()).slice(0,2).join(" "):this.extractSummary(t)}extractProps(t){let e=[],r=t.match(/####?\s*Props[\s\S]*?\|[\s\S]*?(?=####|$)/i);if(!r)return e;let o=r[0].split(`
|
|
9
|
+
`).filter(i=>i.includes("|"));for(let i=2;i<o.length;i++){let c=o[i].split("|").map(a=>a.trim()).filter(Boolean);c.length>=3&&e.push({name:c[0].replace(/`/g,""),type:c.length>2?c[2]:"any",description:c.length>1?c[1]:"",defaultValue:c.length>3?c[3]:void 0});}return e}extractEvents(t){let e=[],r=t.match(/####?\s*Events[\s\S]*?\|[\s\S]*?(?=####|$)/i);if(!r)return e;let o=r[0].split(`
|
|
10
|
+
`).filter(i=>i.includes("|"));for(let i=2;i<o.length;i++){let c=o[i].split("|").map(a=>a.trim()).filter(Boolean);c.length>=2&&e.push({name:c[0].replace(/`/g,""),description:c[1],callbackParams:c.length>2?c[2]:void 0});}return e}extractMethodInfo(t){let e=[],r=t.split(/^##\s+/m).slice(1);for(let n of r){let i=n.split(`
|
|
11
|
+
`)[0]?.trim();if(!i||i.startsWith("#"))continue;let c={name:i,description:this.extractApiDescription(n),parameters:this.extractParameters(n),returns:this.extractReturns(n),examples:this.extractCodeExamples(n),platformSupport:this.extractPlatformSupport(n)};e.push(c);}return e}extractStandardRules(t){let e=[],r=t.split(/^##\s+/m).slice(1);for(let n of r){let o=n.split(`
|
|
12
|
+
`),i=o[0]?.trim();if(!i||i.startsWith("#"))continue;let c=[];for(let d=1;d<o.length;d++){let R=o[d];if(R.startsWith("#")||R.startsWith("```"))break;R.trim()&&c.push(R.trim());}let a=n.match(/✅\s*正确[\s\S]*?```[\w]*\n([\s\S]*?)```/),p=a?a[1].trim():void 0,y=n.match(/❌\s*错误[\s\S]*?```[\w]*\n([\s\S]*?)```/),m=y?y[1].trim():void 0;e.push({name:i,description:c.join(" "),goodExample:p,badExample:m});}return e}};function E(s){let t=[],e=s.match(/[a-zA-Z_][\w]*/g)||[];t.push(...e.map(o=>o.toLowerCase()));let r=s.match(/[\u4e00-\u9fa5]+/g)||[];for(let o of r){o.length>=2&&t.push(o);for(let i=0;i<o.length-1;i++)t.push(o.substring(i,i+2));for(let i of o)t.push(i);}let n=s.match(/\d+/g)||[];return t.push(...n),t.filter(o=>o.length>0)}var I=class{documents=new Map;parser;searchIndex;initialized=false;basePath;constructor(t){this.parser=new x,this.basePath=t||process.cwd(),this.searchIndex=new ___default.default({fields:["title","keywords","content"],storeFields:["id","title","category","filePath"],tokenize:E,searchOptions:{boost:{title:3,keywords:2,content:1},fuzzy:.2,prefix:true}});}async initialize(){if(this.initialized)return;let t=[{path:"ejs-doc",category:"ejs-api"},{path:"m8mpdoc-develop/009-UI\u7EC4\u4EF6",category:"ui-component"},{path:"m8mpdoc-develop/006-Util\u5DE5\u5177\u96C6",category:"util-tool"},{path:"m8mpdoc-develop/005-\u6838\u5FC3\u901A\u7528Util",category:"util-tool"},{path:"m8mpdoc-develop/003-\u5178\u578B\u6848\u4F8B",category:"typical-case"},{path:"standards",category:"standard"}];for(let e of t){let r=S__namespace.join(this.basePath,e.path);await this.scanDirectory(r);}this.initialized=true,console.error(`DocumentIndexer \u521D\u59CB\u5316\u5B8C\u6210\uFF0C\u5171\u7D22\u5F15 ${this.documents.size} \u4E2A\u6587\u6863`);}async scanDirectory(t){try{if(!f__namespace.existsSync(t)){console.error(`\u76EE\u5F55\u4E0D\u5B58\u5728: ${t}`);return}let e=f__namespace.readdirSync(t,{withFileTypes:!0});for(let r of e){let n=S__namespace.join(t,r.name);if(r.isDirectory()){if(r.name.toLowerCase()==="images")continue;await this.scanDirectory(n);}else r.isFile()&&r.name.endsWith(".md")&&await this.loadDocument(n);}}catch(e){console.error(`\u626B\u63CF\u76EE\u5F55\u5931\u8D25: ${t}`,e);}}async loadDocument(t){try{let e=f__namespace.readFileSync(t,"utf-8"),r=S__namespace.relative(this.basePath,t),n=this.parser.parseMarkdown(e,r);this.addDocument(n);}catch(e){console.error(`\u52A0\u8F7D\u6587\u6863\u5931\u8D25: ${t}`,e);}}search(t,e){if(!t||t.trim().length===0)return [];let r=e?.limit||10,n=e?.fuzzyThreshold??.2,o=this.searchIndex.search(t,{fuzzy:n,prefix:true,boost:{title:3,keywords:2,content:1}});return e?.category&&(o=o.filter(i=>i.category===e.category)),o.slice(0,r).map(i=>{let c=this.documents.get(i.id);return {id:i.id,title:i.title||c?.title||"\u672A\u77E5\u6807\u9898",category:i.category||c?.category||"util-tool",score:i.score,excerpt:this.generateExcerpt(c,t),filePath:i.filePath||c?.filePath||""}})}generateExcerpt(t,e){if(!t)return "";let r=t.content,n=E(e),o=r.split(/\n\n+/);for(let i of o){let c=i.toLowerCase();for(let a of n)if(c.includes(a.toLowerCase())){let p=i.replace(/```[\s\S]*?```/g,"").replace(/\|[\s\S]*?\|/g,"").replace(/#+\s*/g,"").replace(/\s+/g," ").trim();if(p.length>0)return p.length>200?p.substring(0,200)+"...":p}}return t.summary}getDocument(t){return this.documents.get(t)||null}getDocumentsByCategory(t){let e=[];for(let r of this.documents.values())r.category===t&&e.push(r);return e}addDocument(t){this.documents.set(t.id,t);let e={id:t.id,title:t.title,category:t.category,keywords:t.keywords.join(" "),content:t.summary+" "+this.extractSearchableContent(t),filePath:t.filePath};this.searchIndex.has(t.id)&&this.searchIndex.discard(t.id),this.searchIndex.add(e);}extractSearchableContent(t){let e=[];if(t.apis)for(let r of t.apis)e.push(r.name),e.push(r.description);if(t.component){e.push(t.component.name),e.push(t.component.description);for(let r of t.component.props)e.push(r.name);for(let r of t.component.events)e.push(r.name);}if(t.methods)for(let r of t.methods)e.push(r.name),e.push(r.description);if(t.rules)for(let r of t.rules)e.push(r.name),e.push(r.description);return t.module&&(e.push(t.module),e.push(`ejs.${t.module}`)),t.utilCategory&&(e.push(t.utilCategory),e.push(`Util.${t.utilCategory}`)),e.filter(Boolean).join(" ")}getAllDocuments(){return Array.from(this.documents.values())}getParser(){return this.parser}getDocumentCount(){return this.documents.size}isInitialized(){return this.initialized}getEjsApiByModule(t){for(let e of this.documents.values())if(e.category==="ejs-api"&&e.module===t)return e;return null}getComponentByName(t){let e=t.toLowerCase().replace(/^em-/,"");for(let r of this.documents.values())if(r.category==="ui-component"&&(r.component?.name.toLowerCase().includes(e)||r.title.toLowerCase().includes(e)||r.keywords.some(n=>n.toLowerCase().includes(e))))return r;return null}getUtilByCategory(t){let e=t.toLowerCase();for(let r of this.documents.values())if(r.category==="util-tool"&&(r.utilCategory?.toLowerCase()===e||r.title.toLowerCase().includes(e)))return r;return null}getStandardByType(t){let e=t.toLowerCase();for(let r of this.documents.values())if(r.category==="standard"&&(r.standardType?.toLowerCase()===e||r.filePath.toLowerCase().includes(e)))return r;return null}};function w(s,t){let e=new Date,r=`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return `/**
|
|
13
|
+
* @file ${s}.vue
|
|
14
|
+
* @description ${t}
|
|
15
|
+
* @author Developer
|
|
16
|
+
* @date ${r}
|
|
17
|
+
* @version 1.0.0
|
|
18
|
+
*/`}function A(s){let{name:t,description:e,components:r=[],props:n=[]}=s,o=w(t,e),i=n.length>0?`const props = defineProps<{
|
|
19
|
+
${n.map(a=>` ${a.name}${a.required?"":"?"}: ${a.type};`).join(`
|
|
20
|
+
`)}
|
|
21
|
+
}>();`:"",c=r.length>0?`// \u5BFC\u5165 M8 UI \u7EC4\u4EF6
|
|
22
|
+
// import { ${r.join(", ")} } from '@epoint/m8-ui';`:"";return `${o}
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<div class="${t.toLowerCase()}">
|
|
26
|
+
<!-- ${e} -->
|
|
27
|
+
<slot></slot>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script setup lang="ts">
|
|
32
|
+
/**
|
|
33
|
+
* ${e}
|
|
34
|
+
*/
|
|
35
|
+
${c}
|
|
36
|
+
|
|
37
|
+
${i}
|
|
38
|
+
|
|
39
|
+
// \u7EC4\u4EF6\u903B\u8F91
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
<style lang="scss" scoped>
|
|
43
|
+
@import './${t.toLowerCase()}.scss';
|
|
44
|
+
</style>
|
|
45
|
+
`}function N(s){let{name:t,description:e,components:r=[],props:n=[]}=s,o=w(t,e),i=n.length>0?`props: {
|
|
46
|
+
${n.map(a=>` ${a.name}: {
|
|
47
|
+
type: ${a.type==="string"?"String":a.type==="number"?"Number":a.type==="boolean"?"Boolean":"Object"},
|
|
48
|
+
${a.required?"required: true,":`default: ${a.defaultValue||"null"},`}
|
|
49
|
+
},`).join(`
|
|
50
|
+
`)}
|
|
51
|
+
},`:"",c=r.length>0?`components: {
|
|
52
|
+
// ${r.join(", ")}
|
|
53
|
+
},`:"";return `${o}
|
|
54
|
+
|
|
55
|
+
<template>
|
|
56
|
+
<div class="${t.toLowerCase()}">
|
|
57
|
+
<!-- ${e} -->
|
|
58
|
+
<slot></slot>
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
61
|
+
|
|
62
|
+
<script>
|
|
63
|
+
/**
|
|
64
|
+
* ${e}
|
|
65
|
+
*/
|
|
66
|
+
export default {
|
|
67
|
+
name: '${t}',
|
|
68
|
+
${c}
|
|
69
|
+
${i}
|
|
70
|
+
data() {
|
|
71
|
+
return {
|
|
72
|
+
// \u7EC4\u4EF6\u6570\u636E
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
methods: {
|
|
76
|
+
// \u7EC4\u4EF6\u65B9\u6CD5
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
</script>
|
|
80
|
+
|
|
81
|
+
<style lang="scss" scoped>
|
|
82
|
+
@import './${t.toLowerCase()}.scss';
|
|
83
|
+
</style>
|
|
84
|
+
`}var v=class{generate(t){return t.vueVersion===3?A(t):N(t)}};var C=class{generate(t){let{description:e,includeAjax:r=false}=t;return r?this.generateAjaxCode(e):this.generateBasicCode(e)}generateBasicCode(t){return `/**
|
|
85
|
+
* ${t}
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* \u4E3B\u51FD\u6570
|
|
90
|
+
* @returns {Promise<void>}
|
|
91
|
+
*/
|
|
92
|
+
async function main() {
|
|
93
|
+
try {
|
|
94
|
+
// TODO: \u5B9E\u73B0\u4E1A\u52A1\u903B\u8F91
|
|
95
|
+
console.log('\u6267\u884C\u5B8C\u6210');
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.error('\u6267\u884C\u5931\u8D25:', error);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// \u6267\u884C
|
|
102
|
+
main();
|
|
103
|
+
`}generateAjaxCode(t){return `/**
|
|
104
|
+
* ${t}
|
|
105
|
+
*/
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* API \u8BF7\u6C42\u57FA\u7840\u914D\u7F6E
|
|
109
|
+
*/
|
|
110
|
+
const API_CONFIG = {
|
|
111
|
+
// \u4F7F\u7528 Config.serverUrl \u4F5C\u4E3A\u57FA\u7840 URL
|
|
112
|
+
baseUrl: Config.serverUrl,
|
|
113
|
+
timeout: 30000,
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* \u53D1\u9001 GET \u8BF7\u6C42
|
|
118
|
+
* @param {string} url - \u8BF7\u6C42\u5730\u5740
|
|
119
|
+
* @param {Object} params - \u8BF7\u6C42\u53C2\u6570
|
|
120
|
+
* @returns {Promise<Object>} \u54CD\u5E94\u6570\u636E
|
|
121
|
+
*/
|
|
122
|
+
async function getData(url, params = {}) {
|
|
123
|
+
try {
|
|
124
|
+
const response = await Util.ajax({
|
|
125
|
+
url: API_CONFIG.baseUrl + url,
|
|
126
|
+
type: 'GET',
|
|
127
|
+
data: params,
|
|
128
|
+
timeout: API_CONFIG.timeout,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
return response;
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error('GET \u8BF7\u6C42\u5931\u8D25:', error);
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* \u53D1\u9001 POST \u8BF7\u6C42
|
|
140
|
+
* @param {string} url - \u8BF7\u6C42\u5730\u5740
|
|
141
|
+
* @param {Object} data - \u8BF7\u6C42\u6570\u636E
|
|
142
|
+
* @returns {Promise<Object>} \u54CD\u5E94\u6570\u636E
|
|
143
|
+
*/
|
|
144
|
+
async function postData(url, data = {}) {
|
|
145
|
+
try {
|
|
146
|
+
const response = await Util.ajax({
|
|
147
|
+
url: API_CONFIG.baseUrl + url,
|
|
148
|
+
type: 'POST',
|
|
149
|
+
data: JSON.stringify(data),
|
|
150
|
+
contentType: 'application/json',
|
|
151
|
+
timeout: API_CONFIG.timeout,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
return response;
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.error('POST \u8BF7\u6C42\u5931\u8D25:', error);
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* \u4E3B\u51FD\u6570
|
|
163
|
+
* @returns {Promise<void>}
|
|
164
|
+
*/
|
|
165
|
+
async function main() {
|
|
166
|
+
try {
|
|
167
|
+
// \u793A\u4F8B\uFF1A\u83B7\u53D6\u6570\u636E
|
|
168
|
+
const result = await getData('/api/example');
|
|
169
|
+
console.log('\u83B7\u53D6\u6570\u636E\u6210\u529F:', result);
|
|
170
|
+
} catch (error) {
|
|
171
|
+
console.error('\u6267\u884C\u5931\u8D25:', error);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// \u6267\u884C
|
|
176
|
+
main();
|
|
177
|
+
`}};var P=class{generate(t){let{className:e,description:r,useVariables:n=true}=t,o=this.normalizeClassName(e);return `/**
|
|
178
|
+
* ${r}
|
|
179
|
+
* @file ${o}.scss
|
|
180
|
+
*/
|
|
181
|
+
|
|
182
|
+
// \u5F15\u5165\u53D8\u91CF\u6587\u4EF6
|
|
183
|
+
@import '@/styles/variables';
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* ${r}
|
|
187
|
+
*/
|
|
188
|
+
.${o} {
|
|
189
|
+
${n?this.generateWithVariables():this.generateBasic()}
|
|
190
|
+
}
|
|
191
|
+
`}normalizeClassName(t){return t.replace(/([A-Z])/g,"_$1").replace(/[-\s]+/g,"_").replace(/^_/,"").toLowerCase()}generateWithVariables(){return `// \u5BB9\u5668\u6837\u5F0F
|
|
192
|
+
display: flex;
|
|
193
|
+
flex-direction: column;
|
|
194
|
+
padding: $spacing-md;
|
|
195
|
+
background-color: $color-bg-primary;
|
|
196
|
+
|
|
197
|
+
// \u6807\u9898\u6837\u5F0F
|
|
198
|
+
&__title {
|
|
199
|
+
font-size: $font-size-lg;
|
|
200
|
+
color: $color-text-primary;
|
|
201
|
+
margin-bottom: $spacing-sm;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// \u5185\u5BB9\u6837\u5F0F
|
|
205
|
+
&__content {
|
|
206
|
+
font-size: $font-size-base;
|
|
207
|
+
color: $color-text-secondary;
|
|
208
|
+
line-height: $line-height-base;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// \u64CD\u4F5C\u533A\u57DF
|
|
212
|
+
&__actions {
|
|
213
|
+
display: flex;
|
|
214
|
+
gap: $spacing-sm;
|
|
215
|
+
margin-top: $spacing-md;
|
|
216
|
+
}`}generateBasic(){return `// \u5BB9\u5668\u6837\u5F0F
|
|
217
|
+
display: flex;
|
|
218
|
+
flex-direction: column;
|
|
219
|
+
padding: 16px;
|
|
220
|
+
|
|
221
|
+
// \u6807\u9898\u6837\u5F0F
|
|
222
|
+
&__title {
|
|
223
|
+
font-size: 18px;
|
|
224
|
+
margin-bottom: 8px;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// \u5185\u5BB9\u6837\u5F0F
|
|
228
|
+
&__content {
|
|
229
|
+
font-size: 14px;
|
|
230
|
+
line-height: 1.5;
|
|
231
|
+
}`}};function g(s){return {content:[{type:"text",text:JSON.stringify(s,null,2)}],isError:false}}function l(s,t,e){return {content:[{type:"text",text:JSON.stringify({code:s,message:t,suggestion:e},null,2)}],isError:true}}function b(s){return [{name:"search_docs",description:"\u641C\u7D22 M8 \u6846\u67B6\u6587\u6863\uFF0C\u652F\u6301\u5173\u952E\u8BCD\u641C\u7D22\u548C\u5206\u7C7B\u8FC7\u6EE4\u3002\u53EF\u641C\u7D22 EJS API\u3001UI \u7EC4\u4EF6\u3001Util \u5DE5\u5177\u3001\u7F16\u7801\u89C4\u8303\u7B49\u6587\u6863\u3002",inputSchema:{type:"object",properties:{query:{type:"string",description:"\u641C\u7D22\u5173\u952E\u8BCD"},category:{type:"string",enum:["ejs-api","ui-component","util-tool","typical-case","standard"],description:"\u6587\u6863\u5206\u7C7B\u8FC7\u6EE4\uFF08\u53EF\u9009\uFF09"},limit:{type:"number",description:"\u6700\u5927\u8FD4\u56DE\u6570\u91CF\uFF0C\u9ED8\u8BA4 10"}},required:["query"]}},{name:"get_component_info",description:"\u83B7\u53D6 M8 UI \u7EC4\u4EF6\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC Props\u3001Events\u3001\u4F7F\u7528\u793A\u4F8B\u7B49\u3002",inputSchema:{type:"object",properties:{componentName:{type:"string",description:"\u7EC4\u4EF6\u540D\u79F0\uFF0C\u5982 em-button, em-field, button, field"}},required:["componentName"]}},{name:"get_api_info",description:"\u83B7\u53D6 EJS \u539F\u751F API \u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u53C2\u6570\u3001\u8FD4\u56DE\u503C\u3001\u5E73\u53F0\u652F\u6301\u3001\u4F7F\u7528\u793A\u4F8B\u7B49\u3002",inputSchema:{type:"object",properties:{module:{type:"string",description:"API \u6A21\u5757\u540D\u79F0\uFF0C\u5982 ui, page, storage, device"},method:{type:"string",description:"API \u65B9\u6CD5\u540D\u79F0\uFF08\u53EF\u9009\uFF09\uFF0C\u5982 toast, alert, open"}},required:["module"]}},{name:"get_util_info",description:"\u83B7\u53D6 M8 Util \u5DE5\u5177\u65B9\u6CD5\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u53C2\u6570\u3001\u8FD4\u56DE\u503C\u3001\u4F7F\u7528\u793A\u4F8B\u7B49\u3002",inputSchema:{type:"object",properties:{category:{type:"string",description:"Util \u5206\u7C7B\uFF0C\u5982 string, date, base64, ajax"},method:{type:"string",description:"\u65B9\u6CD5\u540D\u79F0\uFF08\u53EF\u9009\uFF09"}},required:["category"]}},{name:"get_coding_standard",description:"\u83B7\u53D6\u7F16\u7801\u89C4\u8303\uFF0C\u5305\u62EC CSS\u3001JavaScript\u3001Vue\u3001\u9879\u76EE\u7ED3\u6784\u7B49\u89C4\u8303\u3002",inputSchema:{type:"object",properties:{type:{type:"string",enum:["css","javascript","vue","project-structure","all"],description:"\u89C4\u8303\u7C7B\u578B"},keyword:{type:"string",description:"\u5177\u4F53\u89C4\u5219\u5173\u952E\u8BCD\uFF08\u53EF\u9009\uFF09"}},required:["type"]}},{name:"generate_code",description:"\u6839\u636E\u9700\u6C42\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u4EE3\u7801\uFF0C\u652F\u6301 Vue \u7EC4\u4EF6\u3001JavaScript\u3001SCSS \u7B49\u3002",inputSchema:{type:"object",properties:{type:{type:"string",enum:["vue-component","javascript","scss","api-call"],description:"\u4EE3\u7801\u7C7B\u578B"},requirement:{type:"string",description:"\u9700\u6C42\u63CF\u8FF0"},vueVersion:{type:"number",enum:[2,3],description:"Vue \u7248\u672C\uFF08\u4EC5 vue-component \u7C7B\u578B\u9700\u8981\uFF09"},components:{type:"array",items:{type:"string"},description:"\u4F7F\u7528\u7684\u7EC4\u4EF6\u5217\u8868"}},required:["type","requirement"]}},{name:"recommend_solution",description:"\u6839\u636E\u9700\u6C42\u667A\u80FD\u63A8\u8350\u5408\u9002\u7684\u7EC4\u4EF6\u3001API \u6216\u5DE5\u5177\u65B9\u6CD5\uFF0C\u4F18\u5148\u63A8\u8350 EJS \u539F\u751F API\u3002",inputSchema:{type:"object",properties:{requirement:{type:"string",description:"\u9700\u6C42\u63CF\u8FF0"},type:{type:"string",enum:["ui","data","native","general"],description:"\u9700\u6C42\u7C7B\u578B\uFF08\u53EF\u9009\uFF09"}},required:["requirement"]}}]}async function $(s,t,e){try{switch(s){case "search_docs":return j(t,e);case "get_component_info":return T(t,e);case "get_api_info":return O(t,e);case "get_util_info":return U(t,e);case "get_coding_standard":return L(t,e);case "generate_code":return q(t);case "recommend_solution":return V(t,e);default:return l("INVALID_PARAMETER",`\u672A\u77E5\u5DE5\u5177: ${s}`)}}catch(r){let n=r instanceof Error?r.message:"\u672A\u77E5\u9519\u8BEF";return l("PARSE_ERROR",n)}}function j(s,t){if(!s.query||s.query.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: query");let e=t.search(s.query,{category:s.category,limit:s.limit||10});if(e.length===0){let n=t.getAllDocuments().slice(0,5).map(o=>o.title);return g({results:[],message:"\u672A\u627E\u5230\u5339\u914D\u7684\u6587\u6863",suggestions:n})}return g({results:e.map(r=>({id:r.id,title:r.title,category:r.category,score:r.score,excerpt:r.excerpt})),total:e.length})}function T(s,t){if(!s.componentName||s.componentName.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: componentName");let e=t.getComponentByName(s.componentName);if(!e){let n=t.search(s.componentName,{category:"ui-component",limit:5}).map(o=>o.title);return l("COMPONENT_NOT_FOUND",`\u672A\u627E\u5230\u7EC4\u4EF6: ${s.componentName}`,n.length>0?`\u60A8\u662F\u5426\u5728\u627E: ${n.join(", ")}`:void 0)}return g({name:e.component?.name||e.title,description:e.component?.description||e.summary,props:e.component?.props||[],events:e.component?.events||[],examples:e.component?.examples||[],filePath:e.filePath})}function O(s,t){if(!s.module||s.module.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: module");let e=t.getEjsApiByModule(s.module);if(!e){let o=t.search(s.module,{category:"ejs-api",limit:5}).map(i=>i.title);return l("API_NOT_FOUND",`\u672A\u627E\u5230 API \u6A21\u5757: ${s.module}`,o.length>0?`\u60A8\u662F\u5426\u5728\u627E: ${o.join(", ")}`:void 0)}let r=e.apis||[];return s.method&&(r=r.filter(n=>n.name.toLowerCase().includes(s.method.toLowerCase()))),g({module:e.module,title:e.title,description:e.summary,apis:r.map(n=>({name:n.name,description:n.description,parameters:n.parameters,returns:n.returns,platformSupport:n.platformSupport,examples:n.examples})),filePath:e.filePath})}function U(s,t){if(!s.category||s.category.trim().length===0)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: category");let e=t.getUtilByCategory(s.category);if(!e){let o=t.search(s.category,{category:"util-tool",limit:5}).map(i=>i.title);return l("DOCUMENT_NOT_FOUND",`\u672A\u627E\u5230 Util \u5206\u7C7B: ${s.category}`,o.length>0?`\u60A8\u662F\u5426\u5728\u627E: ${o.join(", ")}`:void 0)}let r=e.methods||[];return s.method&&(r=r.filter(n=>n.name.toLowerCase().includes(s.method.toLowerCase()))),g({category:e.utilCategory,title:e.title,description:e.summary,methods:r.map(n=>({name:n.name,description:n.description,parameters:n.parameters,returns:n.returns,examples:n.examples})),filePath:e.filePath})}function L(s,t){if(!s.type)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: type");if(s.type==="all"){let n=t.getDocumentsByCategory("standard");return g({standards:n.map(o=>({type:o.standardType,title:o.title,summary:o.summary,rules:o.rules?.slice(0,5)||[],filePath:o.filePath}))})}let e=t.getStandardByType(s.type);if(!e)return l("DOCUMENT_NOT_FOUND",`\u672A\u627E\u5230\u89C4\u8303\u7C7B\u578B: ${s.type}`,"\u53EF\u7528\u7C7B\u578B: css, javascript, vue, project-structure");let r=e.rules||[];if(s.keyword){let n=s.keyword.toLowerCase();r=r.filter(o=>o.name.toLowerCase().includes(n)||o.description.toLowerCase().includes(n));}return g({type:e.standardType,title:e.title,description:e.summary,rules:r.map(n=>({name:n.name,description:n.description,goodExample:n.goodExample,badExample:n.badExample})),filePath:e.filePath})}function q(s){if(!s.type)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: type");if(!s.requirement)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: requirement");try{let t="",e="";switch(s.type){case "vue-component":{let r=new v,n=G(s.requirement);t=r.generate({name:n,description:s.requirement,vueVersion:s.vueVersion||3,components:s.components,props:[]}),e="vue";break}case "javascript":case "api-call":{t=new C().generate({description:s.requirement,includeAjax:s.type==="api-call",useAsync:!0}),e="javascript";break}case "scss":{let r=new P,n=z(s.requirement);t=r.generate({className:n,description:s.requirement,useVariables:!0}),e="scss";break}default:return l("INVALID_PARAMETER",`\u4E0D\u652F\u6301\u7684\u4EE3\u7801\u7C7B\u578B: ${s.type}`)}return g({type:e,code:t,standards:k(s.type)})}catch(t){let e=t instanceof Error?t.message:"\u4EE3\u7801\u751F\u6210\u5931\u8D25";return l("GENERATION_ERROR",e)}}function G(s){let t=s.match(/(?:组件|component)[::]\s*(\w+)/i);return t?t[1]:"MyComponent"}function z(s){let t=s.match(/(?:类名|class)[::]\s*([\w-]+)/i);return t?t[1]:"my-component"}function k(s){switch(s){case "vue-component":return ["\u4F7F\u7528 PascalCase \u547D\u540D\u7EC4\u4EF6\u6587\u4EF6","\u7EC4\u4EF6\u5FC5\u987B\u5305\u542B\u6587\u4EF6\u5934\u6CE8\u91CA","\u6837\u5F0F\u4F7F\u7528\u5916\u90E8 SCSS \u6587\u4EF6","\u4F7F\u7528 scoped \u6837\u5F0F"];case "javascript":case "api-call":return ["\u4F7F\u7528 camelCase \u547D\u540D\u53D8\u91CF\u548C\u51FD\u6570","\u4F7F\u7528 UPPER_SNAKE_CASE \u547D\u540D\u5E38\u91CF","\u4F7F\u7528 async/await \u5904\u7406\u5F02\u6B65","\u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42","\u6DFB\u52A0\u4E2D\u6587\u6CE8\u91CA\u8BF4\u660E"];case "scss":return ["\u4F7F\u7528 SASS \u53D8\u91CF\u66FF\u4EE3\u786C\u7F16\u7801\u989C\u8272","\u7C7B\u540D\u4F7F\u7528\u5C0F\u5199\u4E0B\u5212\u7EBF\u683C\u5F0F","\u9009\u62E9\u5668\u5D4C\u5957\u4E0D\u8D85\u8FC7 3 \u5C42"];default:return []}}function V(s,t){if(!s.requirement)return l("MISSING_REQUIRED_FIELD","\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: requirement");let e=[],r=s.requirement.toLowerCase(),o=["\u539F\u751F","\u5BB9\u5668","native","\u8BBE\u5907","\u76F8\u673A","\u5B9A\u4F4D","\u5B58\u50A8","\u6587\u4EF6"].some(a=>r.includes(a));(o||s.type==="native")&&t.search(s.requirement,{category:"ejs-api",limit:3}).forEach(p=>{e.push({type:"ejs-api",name:p.title,description:p.excerpt,reason:"\u539F\u751F API\uFF0C\u6027\u80FD\u66F4\u597D\uFF0C\u529F\u80FD\u66F4\u5B8C\u6574",priority:o?1:2});}),(s.type==="ui"||!s.type)&&t.search(s.requirement,{category:"ui-component",limit:3}).forEach(p=>{e.push({type:"ui-component",name:p.title,description:p.excerpt,reason:"M8 UI \u7EC4\u4EF6\uFF0C\u5F00\u7BB1\u5373\u7528",priority:o?3:1});}),(s.type==="data"||!s.type)&&t.search(s.requirement,{category:"util-tool",limit:3}).forEach(p=>{e.push({type:"util-tool",name:p.title,description:p.excerpt,reason:"Util \u5DE5\u5177\u65B9\u6CD5\uFF0C\u7B80\u5316\u5F00\u53D1",priority:2});}),e.sort((a,p)=>a.priority-p.priority);let c=t.getDocumentsByCategory("standard").slice(0,2).map(a=>a.title);return g({recommendations:e.slice(0,5).map(a=>({type:a.type,name:a.name,description:a.description,reason:a.reason})),relatedStandards:c,tip:o?"\u68C0\u6D4B\u5230\u539F\u751F\u76F8\u5173\u9700\u6C42\uFF0C\u4F18\u5148\u63A8\u8350 EJS API":"\u6839\u636E\u9700\u6C42\u63A8\u8350\u4EE5\u4E0B\u65B9\u6848"})}var h={form:["\u8868\u5355","form","\u8F93\u5165","input","\u63D0\u4EA4","submit","\u9A8C\u8BC1","validate","\u5B57\u6BB5","field"],list:["\u5217\u8868","list","\u5237\u65B0","refresh","\u52A0\u8F7D\u66F4\u591A","loadmore","\u5206\u9875","pagination"],api:["\u63A5\u53E3","api","\u8BF7\u6C42","request","\u6570\u636E","data","\u83B7\u53D6","fetch","\u63D0\u4EA4"],native:["\u539F\u751F","native","\u5BB9\u5668","\u8BBE\u5907","device","\u76F8\u673A","camera","\u5B9A\u4F4D","location","\u5B58\u50A8","storage"],upload:["\u4E0A\u4F20","upload","\u6587\u4EF6","file","\u56FE\u7247","image","\u9644\u4EF6","attachment"],dateTime:["\u65E5\u671F","date","\u65F6\u95F4","time","\u9009\u62E9","pick","\u65E5\u5386","calendar"]},M=class{prompts=new Map;constructor(){this.registerDefaultPrompts();}getPromptList(){return Array.from(this.prompts.values())}getPrompt(t,e){let r=this.prompts.get(t);if(!r)return this.createErrorMessage(`\u672A\u77E5\u7684\u63D0\u793A\u8BCD: ${t}\u3002\u53EF\u7528\u7684\u63D0\u793A\u8BCD: ${Array.from(this.prompts.keys()).join(", ")}`);let n=r.arguments.filter(o=>o.required&&!e[o.name]).map(o=>o.name);return n.length>0?this.createErrorMessage(`\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570: ${n.join(", ")}`):this.buildPromptMessages(t,e)}registerPrompt(t){this.prompts.set(t.name,t);}analyzeRequirement(t){let e=t.toLowerCase();return {hasForm:h.form.some(r=>e.includes(r.toLowerCase())),hasList:h.list.some(r=>e.includes(r.toLowerCase())),hasApi:h.api.some(r=>e.includes(r.toLowerCase())),hasNative:h.native.some(r=>e.includes(r.toLowerCase())),hasUpload:h.upload.some(r=>e.includes(r.toLowerCase())),hasDateTime:h.dateTime.some(r=>e.includes(r.toLowerCase()))}}registerDefaultPrompts(){this.registerPrompt({name:"generate_page",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u9875\u9762\u4EE3\u7801\uFF0C\u81EA\u52A8\u5E94\u7528\u7F16\u7801\u89C4\u8303\u3002\u53EA\u9700\u8F93\u5165\u9875\u9762\u9700\u6C42\u5373\u53EF\u3002",arguments:[{name:"requirement",description:"\u9875\u9762\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"generate_component",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684 Vue \u7EC4\u4EF6\u4EE3\u7801\u3002",arguments:[{name:"requirement",description:"\u7EC4\u4EF6\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"generate_form",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u8868\u5355\u9875\u9762\uFF0C\u5305\u542B\u8868\u5355\u9A8C\u8BC1\u548C\u63D0\u4EA4\u903B\u8F91\u3002",arguments:[{name:"requirement",description:"\u8868\u5355\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"generate_list",description:"\u751F\u6210\u7B26\u5408 M8 \u6846\u67B6\u89C4\u8303\u7684\u5217\u8868\u9875\u9762\uFF0C\u5305\u542B\u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A\u3002",arguments:[{name:"requirement",description:"\u5217\u8868\u9700\u6C42\u63CF\u8FF0",required:true},{name:"vueVersion",description:"Vue \u7248\u672C\uFF1A2 \u6216 3\uFF0C\u9ED8\u8BA4\u4E3A 3",required:false}]}),this.registerPrompt({name:"review_code",description:"\u6839\u636E M8 \u6846\u67B6\u7F16\u7801\u89C4\u8303\u5BA1\u67E5\u4EE3\u7801\u3002",arguments:[{name:"code",description:"\u9700\u8981\u5BA1\u67E5\u7684\u4EE3\u7801",required:true},{name:"type",description:"\u4EE3\u7801\u7C7B\u578B\uFF1Avue\u3001javascript\u3001scss",required:false}]});}buildPromptMessages(t,e){let r=this.parseVueVersion(e.vueVersion),n=e.requirement||e.code||"",o=this.analyzeRequirement(n);switch(t){case "generate_page":return this.buildGeneratePageMessages(e.requirement,r,o);case "generate_component":return this.buildGenerateComponentMessages(e.requirement,r,o);case "generate_form":return this.buildGenerateFormMessages(e.requirement,r,o);case "generate_list":return this.buildGenerateListMessages(e.requirement,r,o);case "review_code":return this.buildReviewCodeMessages(e.code,e.type);default:return this.createErrorMessage(`\u672A\u5B9E\u73B0\u7684\u63D0\u793A\u8BCD: ${t}`)}}parseVueVersion(t){return t==="2"?2:3}createErrorMessage(t){return [{role:"user",content:{type:"text",text:t}}]}getCodingStandards(t){return `## \u7F16\u7801\u89C4\u8303
|
|
232
|
+
|
|
233
|
+
### Vue \u7EC4\u4EF6\u89C4\u8303
|
|
234
|
+
- \u6587\u4EF6\u5934\u6CE8\u91CA\u5FC5\u987B\u5305\u542B\uFF1A@\u4F5C\u8005\u3001@\u521B\u5EFA\u65F6\u95F4\u3001@\u7248\u672C\u3001@\u63CF\u8FF0
|
|
235
|
+
- \u6837\u5F0F\u5FC5\u987B\u5265\u79BB\u5230\u5916\u90E8 .scss \u6587\u4EF6\uFF0C\u901A\u8FC7 @import \u5F15\u5165
|
|
236
|
+
- <style> \u5FC5\u987B\u4F7F\u7528 scoped
|
|
237
|
+
- \u91CD\u6784\u9875\u9762\u7981\u6B62\u6DFB\u52A0 em-header \u5BFC\u822A\u680F
|
|
238
|
+
|
|
239
|
+
### JavaScript \u89C4\u8303
|
|
240
|
+
- \u53D8\u91CF/\u51FD\u6570\u4F7F\u7528 camelCase \u547D\u540D
|
|
241
|
+
- \u5E38\u91CF\u4F7F\u7528 UPPER_SNAKE_CASE \u547D\u540D
|
|
242
|
+
- \u5FC5\u987B\u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42\uFF0C\u7981\u6B62 fetch/axios
|
|
243
|
+
- \u4F7F\u7528 Config.serverUrl \u62FC\u63A5 API \u5730\u5740
|
|
244
|
+
- Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import
|
|
245
|
+
- \u4F7F\u7528 async/await \u5904\u7406\u5F02\u6B65
|
|
246
|
+
${t===3?"- \u4F7F\u7528 onLoad((options) => {}) \u83B7\u53D6\u9875\u9762\u53C2\u6570":"- \u4F7F\u7528 Util.getExtraDataByKey() \u83B7\u53D6\u9875\u9762\u53C2\u6570"}
|
|
247
|
+
|
|
248
|
+
### SCSS \u89C4\u8303
|
|
249
|
+
- \u4F7F\u7528 SASS \u53D8\u91CF\u7BA1\u7406\u989C\u8272\uFF0C\u7981\u6B62\u786C\u7F16\u7801
|
|
250
|
+
- \u7C7B\u540D\u4F7F\u7528\u5C0F\u5199\u82F1\u6587 + \u4E0B\u5212\u7EBF
|
|
251
|
+
- \u9009\u62E9\u5668\u5D4C\u5957\u4E0D\u8D85\u8FC7 3 \u5C42
|
|
252
|
+
- position \u5B9A\u4F4D\u5FC5\u987B\u52A0 z-index
|
|
253
|
+
${t===3?"- \u6837\u5F0F\u7A7F\u900F\u4F7F\u7528 :deep()":"- \u6837\u5F0F\u7A7F\u900F\u4F7F\u7528 ::v-deep"}`}getVersionDifferenceTable(){return `## M8.3 (Vue2) vs M8.4 (Vue3) \u7248\u672C\u5DEE\u5F02
|
|
254
|
+
|
|
255
|
+
| \u7279\u6027 | M8.3 (Vue2) | M8.4 (Vue3) |
|
|
256
|
+
|------|-------------|-------------|
|
|
257
|
+
| \u7EC4\u4EF6\u8BED\u6CD5 | Options API | Composition API + script setup |
|
|
258
|
+
| \u72B6\u6001\u7BA1\u7406 | Vuex | Pinia |
|
|
259
|
+
| \u9875\u9762\u53C2\u6570 | Util.getExtraDataByKey() | onLoad((options) => {}) |
|
|
260
|
+
| \u6837\u5F0F\u7A7F\u900F | ::v-deep | :deep() |
|
|
261
|
+
| \u54CD\u5E94\u5F0F | data() return | ref() / reactive() |
|
|
262
|
+
| \u751F\u547D\u5468\u671F | created/mounted | onMounted/onUnmounted |`}getApiSelectionGuide(){return `## EJS API vs M8 \u7EC4\u4EF6\u9009\u62E9\u6307\u5357
|
|
263
|
+
|
|
264
|
+
| \u529F\u80FD | \u4F18\u5148\u4F7F\u7528 | \u8BF4\u660E |
|
|
265
|
+
|------|----------|------|
|
|
266
|
+
| Toast \u63D0\u793A | ejs.ui.toast() | \u539F\u751F API |
|
|
267
|
+
| \u786E\u8BA4\u5F39\u7A97 | ejs.ui.confirm() | \u539F\u751F API |
|
|
268
|
+
| \u65E5\u671F\u9009\u62E9 | ejs.ui.pickDate() | \u539F\u751F API |
|
|
269
|
+
| Loading | ejs.ui.showWaiting() | \u539F\u751F API |
|
|
270
|
+
| \u9875\u9762\u8DF3\u8F6C | ejs.page.open() | \u539F\u751F API |
|
|
271
|
+
| \u6309\u94AE | em-button | M8 \u7EC4\u4EF6 |
|
|
272
|
+
| \u8F93\u5165\u6846 | em-field | M8 \u7EC4\u4EF6 |
|
|
273
|
+
| \u5217\u8868\u9879 | em-cell | M8 \u7EC4\u4EF6 |
|
|
274
|
+
| \u4E0B\u62C9\u5237\u65B0 | em-minirefresh | M8 \u7EC4\u4EF6 |
|
|
275
|
+
|
|
276
|
+
**\u539F\u5219\uFF1A\u4EA4\u4E92\u7C7B\u4F18\u5148 EJS API\uFF0CUI \u5C55\u793A\u7C7B\u4F7F\u7528 M8 \u7EC4\u4EF6**`}getVueTemplate(t){return t===3?`\`\`\`vue
|
|
277
|
+
<!--
|
|
278
|
+
* @\u4F5C\u8005: [\u4F5C\u8005\u540D]
|
|
279
|
+
* @\u521B\u5EFA\u65F6\u95F4: YYYY-MM-DD HH:mm:ss
|
|
280
|
+
* @\u7248\u672C: [1.0]
|
|
281
|
+
* @\u63CF\u8FF0: [\u7EC4\u4EF6\u529F\u80FD\u63CF\u8FF0]
|
|
282
|
+
-->
|
|
283
|
+
<template>
|
|
284
|
+
<div class="page_container">
|
|
285
|
+
<!-- \u9875\u9762\u5185\u5BB9 -->
|
|
286
|
+
</div>
|
|
287
|
+
</template>
|
|
288
|
+
|
|
289
|
+
<script setup>
|
|
290
|
+
import { ref, onMounted } from 'vue';
|
|
291
|
+
|
|
292
|
+
const loading = ref(false);
|
|
293
|
+
const dataList = ref([]);
|
|
294
|
+
|
|
295
|
+
onMounted(() => {
|
|
296
|
+
loadData();
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
async function loadData() {
|
|
300
|
+
loading.value = true;
|
|
301
|
+
try {
|
|
302
|
+
const result = await Util.ajax({
|
|
303
|
+
url: Config.serverUrl + '/api/list',
|
|
304
|
+
type: 'POST',
|
|
305
|
+
data: { params: JSON.stringify({}) }
|
|
306
|
+
});
|
|
307
|
+
if (result.status?.code === 1) {
|
|
308
|
+
dataList.value = result.data || [];
|
|
309
|
+
}
|
|
310
|
+
} finally {
|
|
311
|
+
loading.value = false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
</script>
|
|
315
|
+
|
|
316
|
+
<style lang="scss" scoped>
|
|
317
|
+
@import "./css/page-name.scss";
|
|
318
|
+
</style>
|
|
319
|
+
\`\`\``:`\`\`\`vue
|
|
320
|
+
<!--
|
|
321
|
+
* @\u4F5C\u8005: [\u4F5C\u8005\u540D]
|
|
322
|
+
* @\u521B\u5EFA\u65F6\u95F4: YYYY-MM-DD HH:mm:ss
|
|
323
|
+
* @\u7248\u672C: [1.0]
|
|
324
|
+
* @\u63CF\u8FF0: [\u7EC4\u4EF6\u529F\u80FD\u63CF\u8FF0]
|
|
325
|
+
-->
|
|
326
|
+
<template>
|
|
327
|
+
<div class="page_container">
|
|
328
|
+
<!-- \u9875\u9762\u5185\u5BB9 -->
|
|
329
|
+
</div>
|
|
330
|
+
</template>
|
|
331
|
+
|
|
332
|
+
<script>
|
|
333
|
+
export default {
|
|
334
|
+
name: 'PageName',
|
|
335
|
+
data() {
|
|
336
|
+
return {
|
|
337
|
+
loading: false,
|
|
338
|
+
dataList: []
|
|
339
|
+
};
|
|
340
|
+
},
|
|
341
|
+
created() {
|
|
342
|
+
this.loadData();
|
|
343
|
+
},
|
|
344
|
+
methods: {
|
|
345
|
+
async loadData() {
|
|
346
|
+
this.loading = true;
|
|
347
|
+
try {
|
|
348
|
+
const result = await Util.ajax({
|
|
349
|
+
url: Config.serverUrl + '/api/list',
|
|
350
|
+
type: 'POST',
|
|
351
|
+
data: { params: JSON.stringify({}) }
|
|
352
|
+
});
|
|
353
|
+
if (result.status?.code === 1) {
|
|
354
|
+
this.dataList = result.data || [];
|
|
355
|
+
}
|
|
356
|
+
} finally {
|
|
357
|
+
this.loading = false;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
</script>
|
|
363
|
+
|
|
364
|
+
<style lang="scss" scoped>
|
|
365
|
+
@import "./css/page-name.scss";
|
|
366
|
+
</style>
|
|
367
|
+
\`\`\``}generateContextContent(t){let e=[];return t.hasForm&&e.push(`### \u8868\u5355\u76F8\u5173
|
|
368
|
+
- \u4F7F\u7528 em-field \u7EC4\u4EF6\u6784\u5EFA\u8868\u5355
|
|
369
|
+
- \u8868\u5355\u9A8C\u8BC1\u4F7F\u7528 rules \u5C5E\u6027
|
|
370
|
+
- \u63D0\u4EA4\u524D\u8C03\u7528 validate() \u65B9\u6CD5\u9A8C\u8BC1`),t.hasList&&e.push(`### \u5217\u8868\u76F8\u5173
|
|
371
|
+
- \u4F7F\u7528 em-minirefresh \u5B9E\u73B0\u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A
|
|
372
|
+
- \u5206\u9875\u53C2\u6570\uFF1ApageNo, pageSize
|
|
373
|
+
- \u5237\u65B0\u56DE\u8C03\uFF1A@refresh, \u52A0\u8F7D\u66F4\u591A\u56DE\u8C03\uFF1A@loadmore`),t.hasApi&&e.push(`### API \u8BF7\u6C42
|
|
374
|
+
- \u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42
|
|
375
|
+
- URL \u4F7F\u7528 Config.serverUrl \u62FC\u63A5
|
|
376
|
+
- \u54CD\u5E94\u5224\u65AD\uFF1Aresult.status?.code === 1`),t.hasNative&&e.push(`### \u539F\u751F\u529F\u80FD
|
|
377
|
+
- \u4F18\u5148\u4F7F\u7528 EJS API
|
|
378
|
+
- Toast: ejs.ui.toast()
|
|
379
|
+
- \u786E\u8BA4\u6846: ejs.ui.confirm()
|
|
380
|
+
- \u65E5\u671F\u9009\u62E9: ejs.ui.pickDate()`),e.length>0?`
|
|
381
|
+
## \u4E0A\u4E0B\u6587\u76F8\u5173\u5185\u5BB9
|
|
382
|
+
${e.join(`
|
|
383
|
+
|
|
384
|
+
`)}`:""}buildGeneratePageMessages(t,e,r){let n=`# M8 \u6846\u67B6\u4EE3\u7801\u751F\u6210\u52A9\u624B
|
|
385
|
+
|
|
386
|
+
## \u5F53\u524D\u9879\u76EE\u7248\u672C
|
|
387
|
+
- \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
|
|
388
|
+
- Vue \u7248\u672C: Vue${e}
|
|
389
|
+
${e===3?"- \u7EC4\u4EF6\u8BED\u6CD5: Composition API + script setup":"- \u7EC4\u4EF6\u8BED\u6CD5: Options API"}
|
|
390
|
+
|
|
391
|
+
${this.getCodingStandards(e)}
|
|
392
|
+
|
|
393
|
+
${this.getVersionDifferenceTable()}
|
|
394
|
+
|
|
395
|
+
${this.getApiSelectionGuide()}
|
|
396
|
+
|
|
397
|
+
## \u4EE3\u7801\u6A21\u677F
|
|
398
|
+
${this.getVueTemplate(e)}
|
|
399
|
+
${this.generateContextContent(r)}
|
|
400
|
+
|
|
401
|
+
## \u91CD\u8981\u63D0\u9192
|
|
402
|
+
- Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import
|
|
403
|
+
- \u6837\u5F0F\u5FC5\u987B\u5265\u79BB\u5230\u5916\u90E8 SCSS \u6587\u4EF6`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u9875\u9762\u4EE3\u7801\uFF1A
|
|
404
|
+
|
|
405
|
+
**\u9700\u6C42\u63CF\u8FF0**\uFF1A${t}
|
|
406
|
+
**\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
|
|
407
|
+
|
|
408
|
+
\u8BF7\u751F\u6210\uFF1A
|
|
409
|
+
1. \u5B8C\u6574\u7684 .vue \u6587\u4EF6\u4EE3\u7801
|
|
410
|
+
2. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:n}}]}buildGenerateComponentMessages(t,e,r){let n=`# M8 \u6846\u67B6\u7EC4\u4EF6\u751F\u6210\u52A9\u624B
|
|
411
|
+
|
|
412
|
+
## \u5F53\u524D\u9879\u76EE\u7248\u672C
|
|
413
|
+
- \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
|
|
414
|
+
- Vue \u7248\u672C: Vue${e}
|
|
415
|
+
${e===3?"- \u7EC4\u4EF6\u8BED\u6CD5: Composition API + script setup":"- \u7EC4\u4EF6\u8BED\u6CD5: Options API"}
|
|
416
|
+
|
|
417
|
+
${this.getCodingStandards(e)}
|
|
418
|
+
|
|
419
|
+
${this.getVersionDifferenceTable()}
|
|
420
|
+
|
|
421
|
+
${this.getApiSelectionGuide()}
|
|
422
|
+
|
|
423
|
+
## \u4EE3\u7801\u6A21\u677F
|
|
424
|
+
${this.getVueTemplate(e)}
|
|
425
|
+
${this.generateContextContent(r)}
|
|
426
|
+
|
|
427
|
+
## \u91CD\u8981\u63D0\u9192
|
|
428
|
+
- Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import
|
|
429
|
+
- \u7EC4\u4EF6\u9700\u8981\u5B9A\u4E49 Props \u548C Events`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u7EC4\u4EF6\u4EE3\u7801\uFF1A
|
|
430
|
+
|
|
431
|
+
**\u7EC4\u4EF6\u9700\u6C42**\uFF1A${t}
|
|
432
|
+
**\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
|
|
433
|
+
|
|
434
|
+
\u8BF7\u751F\u6210\uFF1A
|
|
435
|
+
1. \u5B8C\u6574\u7684 .vue \u7EC4\u4EF6\u6587\u4EF6
|
|
436
|
+
2. Props \u548C Events \u5B9A\u4E49
|
|
437
|
+
3. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:n}}]}buildGenerateFormMessages(t,e,r){let n=e===3?`\`\`\`vue
|
|
438
|
+
<template>
|
|
439
|
+
<div class="form_container">
|
|
440
|
+
<em-form ref="formRef" :model="formData" :rules="rules">
|
|
441
|
+
<em-field v-model="formData.name" label="\u59D3\u540D" placeholder="\u8BF7\u8F93\u5165\u59D3\u540D" required />
|
|
442
|
+
<em-field v-model="formData.phone" label="\u624B\u673A\u53F7" placeholder="\u8BF7\u8F93\u5165\u624B\u673A\u53F7" type="tel" />
|
|
443
|
+
</em-form>
|
|
444
|
+
<em-button type="primary" @click="handleSubmit">\u63D0\u4EA4</em-button>
|
|
445
|
+
</div>
|
|
446
|
+
</template>
|
|
447
|
+
|
|
448
|
+
<script setup>
|
|
449
|
+
import { ref } from 'vue';
|
|
450
|
+
|
|
451
|
+
const formRef = ref(null);
|
|
452
|
+
const formData = ref({ name: '', phone: '' });
|
|
453
|
+
const rules = {
|
|
454
|
+
name: [{ required: true, message: '\u8BF7\u8F93\u5165\u59D3\u540D' }],
|
|
455
|
+
phone: [{ pattern: /^1[3-9]\\d{9}$/, message: '\u624B\u673A\u53F7\u683C\u5F0F\u4E0D\u6B63\u786E' }]
|
|
456
|
+
};
|
|
457
|
+
|
|
458
|
+
async function handleSubmit() {
|
|
459
|
+
const valid = await formRef.value?.validate();
|
|
460
|
+
if (!valid) return;
|
|
461
|
+
// \u8868\u5355\u9A8C\u8BC1\u901A\u8FC7\uFF0C\u63D0\u4EA4\u6570\u636E
|
|
462
|
+
const result = await Util.ajax({
|
|
463
|
+
url: Config.serverUrl + '/api/submit',
|
|
464
|
+
type: 'POST',
|
|
465
|
+
data: { params: JSON.stringify(formData.value) }
|
|
466
|
+
});
|
|
467
|
+
if (result.status?.code === 1) {
|
|
468
|
+
ejs.ui.toast({ message: '\u63D0\u4EA4\u6210\u529F' });
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
</script>
|
|
472
|
+
\`\`\``:`\`\`\`vue
|
|
473
|
+
<template>
|
|
474
|
+
<div class="form_container">
|
|
475
|
+
<em-form ref="formRef" :model="formData" :rules="rules">
|
|
476
|
+
<em-field v-model="formData.name" label="\u59D3\u540D" placeholder="\u8BF7\u8F93\u5165\u59D3\u540D" required />
|
|
477
|
+
<em-field v-model="formData.phone" label="\u624B\u673A\u53F7" placeholder="\u8BF7\u8F93\u5165\u624B\u673A\u53F7" type="tel" />
|
|
478
|
+
</em-form>
|
|
479
|
+
<em-button type="primary" @click="handleSubmit">\u63D0\u4EA4</em-button>
|
|
480
|
+
</div>
|
|
481
|
+
</template>
|
|
482
|
+
|
|
483
|
+
<script>
|
|
484
|
+
export default {
|
|
485
|
+
data() {
|
|
486
|
+
return {
|
|
487
|
+
formData: { name: '', phone: '' },
|
|
488
|
+
rules: {
|
|
489
|
+
name: [{ required: true, message: '\u8BF7\u8F93\u5165\u59D3\u540D' }],
|
|
490
|
+
phone: [{ pattern: /^1[3-9]\\d{9}$/, message: '\u624B\u673A\u53F7\u683C\u5F0F\u4E0D\u6B63\u786E' }]
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
},
|
|
494
|
+
methods: {
|
|
495
|
+
async handleSubmit() {
|
|
496
|
+
const valid = await this.$refs.formRef?.validate();
|
|
497
|
+
if (!valid) return;
|
|
498
|
+
const result = await Util.ajax({
|
|
499
|
+
url: Config.serverUrl + '/api/submit',
|
|
500
|
+
type: 'POST',
|
|
501
|
+
data: { params: JSON.stringify(this.formData) }
|
|
502
|
+
});
|
|
503
|
+
if (result.status?.code === 1) {
|
|
504
|
+
ejs.ui.toast({ message: '\u63D0\u4EA4\u6210\u529F' });
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
</script>
|
|
510
|
+
\`\`\``,o=`# M8 \u6846\u67B6\u8868\u5355\u751F\u6210\u52A9\u624B
|
|
511
|
+
|
|
512
|
+
## \u5F53\u524D\u9879\u76EE\u7248\u672C
|
|
513
|
+
- \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
|
|
514
|
+
- Vue \u7248\u672C: Vue${e}
|
|
515
|
+
|
|
516
|
+
${this.getCodingStandards(e)}
|
|
517
|
+
|
|
518
|
+
${this.getApiSelectionGuide()}
|
|
519
|
+
|
|
520
|
+
## \u8868\u5355\u6A21\u677F
|
|
521
|
+
${n}
|
|
522
|
+
|
|
523
|
+
## \u8868\u5355\u9A8C\u8BC1\u89C4\u5219
|
|
524
|
+
- required: \u5FC5\u586B\u9A8C\u8BC1
|
|
525
|
+
- pattern: \u6B63\u5219\u9A8C\u8BC1
|
|
526
|
+
- validator: \u81EA\u5B9A\u4E49\u9A8C\u8BC1\u51FD\u6570
|
|
527
|
+
|
|
528
|
+
## \u91CD\u8981\u63D0\u9192
|
|
529
|
+
- \u4F7F\u7528 em-field \u7EC4\u4EF6\u6784\u5EFA\u8868\u5355
|
|
530
|
+
- \u8868\u5355\u9A8C\u8BC1\u4F7F\u7528 rules \u5C5E\u6027
|
|
531
|
+
- Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u8868\u5355\u9875\u9762\uFF1A
|
|
532
|
+
|
|
533
|
+
**\u8868\u5355\u9700\u6C42**\uFF1A${t}
|
|
534
|
+
**\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
|
|
535
|
+
|
|
536
|
+
\u8BF7\u751F\u6210\uFF1A
|
|
537
|
+
1. \u5B8C\u6574\u7684\u8868\u5355\u9875\u9762 .vue \u6587\u4EF6\uFF08\u4F7F\u7528 em-field\uFF09
|
|
538
|
+
2. \u8868\u5355\u9A8C\u8BC1\u903B\u8F91
|
|
539
|
+
3. \u8868\u5355\u63D0\u4EA4\u903B\u8F91
|
|
540
|
+
4. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:o}}]}buildGenerateListMessages(t,e,r){let n=e===3?`\`\`\`vue
|
|
541
|
+
<template>
|
|
542
|
+
<div class="list_container">
|
|
543
|
+
<em-minirefresh @refresh="onRefresh" @loadmore="onLoadmore">
|
|
544
|
+
<div class="list_item" v-for="item in dataList" :key="item.id">
|
|
545
|
+
<em-cell :title="item.title" :label="item.desc" is-link @click="goDetail(item)" />
|
|
546
|
+
</div>
|
|
547
|
+
</em-minirefresh>
|
|
548
|
+
</div>
|
|
549
|
+
</template>
|
|
550
|
+
|
|
551
|
+
<script setup>
|
|
552
|
+
import { ref } from 'vue';
|
|
553
|
+
|
|
554
|
+
const dataList = ref([]);
|
|
555
|
+
const pageNo = ref(1);
|
|
556
|
+
const pageSize = 10;
|
|
557
|
+
|
|
558
|
+
async function loadData(isRefresh = false) {
|
|
559
|
+
if (isRefresh) pageNo.value = 1;
|
|
560
|
+
const result = await Util.ajax({
|
|
561
|
+
url: Config.serverUrl + '/api/list',
|
|
562
|
+
type: 'POST',
|
|
563
|
+
data: { params: JSON.stringify({ pageNo: pageNo.value, pageSize }) }
|
|
564
|
+
});
|
|
565
|
+
if (result.status?.code === 1) {
|
|
566
|
+
const list = result.data?.list || [];
|
|
567
|
+
dataList.value = isRefresh ? list : [...dataList.value, ...list];
|
|
568
|
+
pageNo.value++;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
function onRefresh(done) {
|
|
573
|
+
loadData(true).finally(() => done());
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
function onLoadmore(done) {
|
|
577
|
+
loadData(false).finally(() => done());
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
function goDetail(item) {
|
|
581
|
+
ejs.page.open({ pageUrl: 'detail.html', data: { id: item.id } });
|
|
582
|
+
}
|
|
583
|
+
</script>
|
|
584
|
+
\`\`\``:`\`\`\`vue
|
|
585
|
+
<template>
|
|
586
|
+
<div class="list_container">
|
|
587
|
+
<em-minirefresh @refresh="onRefresh" @loadmore="onLoadmore">
|
|
588
|
+
<div class="list_item" v-for="item in dataList" :key="item.id">
|
|
589
|
+
<em-cell :title="item.title" :label="item.desc" is-link @click="goDetail(item)" />
|
|
590
|
+
</div>
|
|
591
|
+
</em-minirefresh>
|
|
592
|
+
</div>
|
|
593
|
+
</template>
|
|
594
|
+
|
|
595
|
+
<script>
|
|
596
|
+
export default {
|
|
597
|
+
data() {
|
|
598
|
+
return {
|
|
599
|
+
dataList: [],
|
|
600
|
+
pageNo: 1,
|
|
601
|
+
pageSize: 10
|
|
602
|
+
};
|
|
603
|
+
},
|
|
604
|
+
created() {
|
|
605
|
+
this.loadData(true);
|
|
606
|
+
},
|
|
607
|
+
methods: {
|
|
608
|
+
async loadData(isRefresh = false) {
|
|
609
|
+
if (isRefresh) this.pageNo = 1;
|
|
610
|
+
const result = await Util.ajax({
|
|
611
|
+
url: Config.serverUrl + '/api/list',
|
|
612
|
+
type: 'POST',
|
|
613
|
+
data: { params: JSON.stringify({ pageNo: this.pageNo, pageSize: this.pageSize }) }
|
|
614
|
+
});
|
|
615
|
+
if (result.status?.code === 1) {
|
|
616
|
+
const list = result.data?.list || [];
|
|
617
|
+
this.dataList = isRefresh ? list : [...this.dataList, ...list];
|
|
618
|
+
this.pageNo++;
|
|
619
|
+
}
|
|
620
|
+
},
|
|
621
|
+
onRefresh(done) {
|
|
622
|
+
this.loadData(true).finally(() => done());
|
|
623
|
+
},
|
|
624
|
+
onLoadmore(done) {
|
|
625
|
+
this.loadData(false).finally(() => done());
|
|
626
|
+
},
|
|
627
|
+
goDetail(item) {
|
|
628
|
+
ejs.page.open({ pageUrl: 'detail.html', data: { id: item.id } });
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
</script>
|
|
633
|
+
\`\`\``,o=`# M8 \u6846\u67B6\u5217\u8868\u751F\u6210\u52A9\u624B
|
|
634
|
+
|
|
635
|
+
## \u5F53\u524D\u9879\u76EE\u7248\u672C
|
|
636
|
+
- \u6846\u67B6\u7248\u672C: M8.${e===3?"4":"3"}
|
|
637
|
+
- Vue \u7248\u672C: Vue${e}
|
|
638
|
+
|
|
639
|
+
${this.getCodingStandards(e)}
|
|
640
|
+
|
|
641
|
+
${this.getApiSelectionGuide()}
|
|
642
|
+
|
|
643
|
+
## \u5217\u8868\u6A21\u677F\uFF08\u4F7F\u7528 em-minirefresh \u4E0B\u62C9\u5237\u65B0\uFF09
|
|
644
|
+
${n}
|
|
645
|
+
|
|
646
|
+
## \u5217\u8868\u529F\u80FD\u8BF4\u660E
|
|
647
|
+
- em-minirefresh: \u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A\u7EC4\u4EF6
|
|
648
|
+
- @refresh: \u4E0B\u62C9\u5237\u65B0\u56DE\u8C03
|
|
649
|
+
- @loadmore: \u52A0\u8F7D\u66F4\u591A\u56DE\u8C03
|
|
650
|
+
- \u5206\u9875\u53C2\u6570: pageNo, pageSize
|
|
651
|
+
|
|
652
|
+
## \u91CD\u8981\u63D0\u9192
|
|
653
|
+
- \u4F7F\u7528 em-minirefresh \u5B9E\u73B0\u4E0B\u62C9\u5237\u65B0
|
|
654
|
+
- Util \u548C Config \u662F\u5168\u5C40\u53D8\u91CF\uFF0C\u7981\u6B62 import`;return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E\u4EE5\u4E0B\u9700\u6C42\u751F\u6210 M8 \u6846\u67B6\u5217\u8868\u9875\u9762\uFF1A
|
|
655
|
+
|
|
656
|
+
**\u5217\u8868\u9700\u6C42**\uFF1A${t}
|
|
657
|
+
**\u9879\u76EE\u7248\u672C**\uFF1AM8.${e===3?"4":"3"} (Vue${e})
|
|
658
|
+
|
|
659
|
+
\u8BF7\u751F\u6210\uFF1A
|
|
660
|
+
1. \u5B8C\u6574\u7684\u5217\u8868\u9875\u9762 .vue \u6587\u4EF6\uFF08\u4F7F\u7528 em-minirefresh\uFF09
|
|
661
|
+
2. \u4E0B\u62C9\u5237\u65B0\u548C\u52A0\u8F7D\u66F4\u591A\u529F\u80FD
|
|
662
|
+
3. \u5BF9\u5E94\u7684 .scss \u6837\u5F0F\u6587\u4EF6`}},{role:"assistant",content:{type:"text",text:o}}]}buildReviewCodeMessages(t,e){return [{role:"user",content:{type:"text",text:`\u8BF7\u6839\u636E M8 \u6846\u67B6\u7F16\u7801\u89C4\u8303\u5BA1\u67E5\u4EE5\u4E0B\u4EE3\u7801\uFF1A
|
|
663
|
+
|
|
664
|
+
**\u4EE3\u7801\u7C7B\u578B**\uFF1A${e||"\u81EA\u52A8\u68C0\u6D4B"}
|
|
665
|
+
|
|
666
|
+
\`\`\`
|
|
667
|
+
${t}
|
|
668
|
+
\`\`\`
|
|
669
|
+
|
|
670
|
+
\u8BF7\u6307\u51FA\uFF1A
|
|
671
|
+
1. \u4E0D\u7B26\u5408\u89C4\u8303\u7684\u5730\u65B9
|
|
672
|
+
2. \u5177\u4F53\u7684\u4FEE\u6539\u5EFA\u8BAE
|
|
673
|
+
3. \u4FEE\u6539\u540E\u7684\u4EE3\u7801\u793A\u4F8B`}},{role:"assistant",content:{type:"text",text:`# M8 \u6846\u67B6\u4EE3\u7801\u5BA1\u67E5\u52A9\u624B
|
|
674
|
+
|
|
675
|
+
## \u5BA1\u67E5\u89C4\u8303
|
|
676
|
+
|
|
677
|
+
### Vue \u7EC4\u4EF6\u5BA1\u67E5\u8981\u70B9
|
|
678
|
+
- \u6587\u4EF6\u5934\u6CE8\u91CA\u662F\u5426\u5B8C\u6574\uFF08@\u4F5C\u8005\u3001@\u521B\u5EFA\u65F6\u95F4\u3001@\u7248\u672C\u3001@\u63CF\u8FF0\uFF09
|
|
679
|
+
- \u6837\u5F0F\u662F\u5426\u5265\u79BB\u5230\u5916\u90E8 SCSS \u6587\u4EF6
|
|
680
|
+
- style \u6807\u7B7E\u662F\u5426\u4F7F\u7528 scoped
|
|
681
|
+
- \u662F\u5426\u6709\u4E0D\u5FC5\u8981\u7684 em-header \u5BFC\u822A\u680F
|
|
682
|
+
- \u6837\u5F0F\u5206\u79BB\u662F\u5426\u6B63\u786E
|
|
683
|
+
|
|
684
|
+
### JavaScript \u5BA1\u67E5\u8981\u70B9
|
|
685
|
+
- \u547D\u540D\u89C4\u8303\uFF1A\u53D8\u91CF/\u51FD\u6570 camelCase\uFF0C\u5E38\u91CF UPPER_SNAKE_CASE
|
|
686
|
+
- \u662F\u5426\u4F7F\u7528 Util.ajax \u53D1\u9001\u8BF7\u6C42\uFF08\u7981\u6B62 fetch/axios\uFF09
|
|
687
|
+
- \u662F\u5426\u6B63\u786E\u4F7F\u7528 async/await
|
|
688
|
+
- Util \u548C Config \u662F\u5426\u88AB\u9519\u8BEF import
|
|
689
|
+
- \u65E5\u5FD7\u662F\u5426\u5305\u542B\u63CF\u8FF0\u4FE1\u606F
|
|
690
|
+
|
|
691
|
+
### SCSS \u5BA1\u67E5\u8981\u70B9
|
|
692
|
+
- \u662F\u5426\u4F7F\u7528 SASS \u53D8\u91CF\u7BA1\u7406\u989C\u8272
|
|
693
|
+
- \u7C7B\u540D\u662F\u5426\u4F7F\u7528\u5C0F\u5199\u82F1\u6587 + \u4E0B\u5212\u7EBF
|
|
694
|
+
- \u9009\u62E9\u5668\u5D4C\u5957\u662F\u5426\u8D85\u8FC7 3 \u5C42
|
|
695
|
+
- position \u5B9A\u4F4D\u662F\u5426\u6709 z-index
|
|
696
|
+
|
|
697
|
+
## \u5BA1\u67E5\u8F93\u51FA\u683C\u5F0F
|
|
698
|
+
1. \u95EE\u9898\u5217\u8868\uFF08\u6309\u4E25\u91CD\u7A0B\u5EA6\u6392\u5E8F\uFF09
|
|
699
|
+
2. \u5177\u4F53\u4FEE\u6539\u5EFA\u8BAE
|
|
700
|
+
3. \u4FEE\u6539\u540E\u7684\u4EE3\u7801\u793A\u4F8B`}}]}};var D=class{server;indexer;promptManager;tools=[];isRunning=false;constructor(){this.server=new index_js.Server({name:"m8-mcp-server",version:"1.0.0"},{capabilities:{tools:{},prompts:{}}}),this.indexer=new I,this.promptManager=new M;}async start(){if(this.isRunning)return;await this.indexer.initialize(),this.tools=b(this.indexer),this.setupHandlers();let t=new stdio_js.StdioServerTransport;await this.server.connect(t),this.isRunning=true,console.error("M8 MCP Server \u5DF2\u542F\u52A8");}async stop(){this.isRunning&&(await this.server.close(),this.isRunning=false,console.error("M8 MCP Server \u5DF2\u505C\u6B62"));}setupHandlers(){this.server.setRequestHandler(types_js.ListToolsRequestSchema,async()=>({tools:this.tools.map(t=>({name:t.name,description:t.description,inputSchema:t.inputSchema}))})),this.server.setRequestHandler(types_js.CallToolRequestSchema,async t=>{let{name:e,arguments:r}=t.params,n=await $(e,r,this.indexer);return {content:n.content,isError:n.isError}}),this.server.setRequestHandler(types_js.ListPromptsRequestSchema,async()=>({prompts:this.promptManager.getPromptList()})),this.server.setRequestHandler(types_js.GetPromptRequestSchema,async t=>{let{name:e,arguments:r}=t.params;return {messages:this.promptManager.getPrompt(e,r||{})}});}};var K=(p=>(p.INVALID_PARAMETER="INVALID_PARAMETER",p.MISSING_REQUIRED_FIELD="MISSING_REQUIRED_FIELD",p.INVALID_CATEGORY="INVALID_CATEGORY",p.DOCUMENT_NOT_FOUND="DOCUMENT_NOT_FOUND",p.COMPONENT_NOT_FOUND="COMPONENT_NOT_FOUND",p.API_NOT_FOUND="API_NOT_FOUND",p.INDEX_ERROR="INDEX_ERROR",p.PARSE_ERROR="PARSE_ERROR",p.GENERATION_ERROR="GENERATION_ERROR",p))(K||{});async function Q(){let s=new D;process.on("SIGINT",async()=>{await s.stop(),process.exit(0);}),process.on("SIGTERM",async()=>{await s.stop(),process.exit(0);});try{await s.start();}catch(t){console.error("MCP Server \u542F\u52A8\u5931\u8D25:",t),process.exit(1);}}Q();exports.ErrorCode=K;exports.M8McpServer=D;
|