wc24 f210ce4582 v0.2.0: 解耦 shrimp-server,内置 IShrimpType 契约副本
- 拷 shrimp-server/src/IShrimpType.ts 到 src/IShrimpType.ts,头改 @syncedFrom shrimp-server contract 1.0.0
- 全部内部 import 'shrimp-server/types' → 本地 './IShrimpType'(各文件按相对路径)
- src/index.ts 加上类型契约的 re-export(ShrimpCode/ShrimpError/枚举/全部 interface),消费侧从 'shrimp-admin' 一处拿到
- 删 dependencies.shrimp-server,前端 bundle 不再牵 mongoose/express

为什么不直接 import 'shrimp-server':
  shrimp-server v0.6.0 收单入口后,入口含 mongoose/express,前端会被 vite 牵进 bundle。
  契约副本 + 版本号对照是低频改动场景的更干净选择。
2026-05-23 22:29:42 +08:00

shrimp-admin

Shrimp 框架前端 —— 一种经典解决方案(不是框架本身),消费 shrimp-server 暴露的 ShrimpServer 路由契约 + ShrimpTable 数据形状契约,基于 Vue 3 + Element Plus 实现一套可直接用的后台壳。

如果你想换 UI 库或者换前端技术栈,直接照 shrimp-server 的约定再写一份就行,不依赖本包。

安装

# 推荐 HTTP
npm i git+http://git.zeromvc.com/wc24/shrimp-admin.git#v0.1.0

shrimp-admin 是源码 ship(.ts + .vue 直接发),由消费侧 Vite 编译。

使用

// main.ts
import { createApp } from 'vue'
import { createShrimpAdmin, App } from 'shrimp-admin'
import 'shrimp-admin/style'

const app = createApp(App)
app.use(createShrimpAdmin({
    config: {
        API_URL: '/admin-api',
        TIMEOUT: 10000,
    },
    moduleSources: import.meta.glob('./module/**/*.vue'),
    customFields: import.meta.glob('./module/fields/Field*.vue'),
}))
app.mount('#app')

消费的契约

参见 shrimp-server README ## 约定 章节。本包消费以下条件契约:

  • ShrimpTable: list 响应 {list,total,page,pageSize,totalPages} / 字段 type 枚举 / populate ${key}_label
  • ShrimpServer: HTTP 路由 / JWT Bearer / IUserAccessor 返回的 powers
  • 默认 Field.vue*: 字段 type 必须是内置枚举之一,或通过 customFields 注册

扩展点

  • customFields — 业务字段组件(Field<Name>.vue)
  • moduleSources — 业务模块组件(module/<key>.vue / module/<parent>/<sub>.vue)
  • vueAdmin.registerField(type, comp) / overrideField(moduleKey, fieldKey, comp) — 运行时也可
S
Description
No description provided
Readme
221 KiB
Languages
Vue 56%
TypeScript 30.3%
SCSS 12.3%
JavaScript 1.4%