Run any Skill in Manus
with one click
with one click
Run any Skill in Manus with one click
Get Started$pwd:
$ git log --oneline --stat
stars:320
forks:57
updated:January 23, 2026 at 09:50
SKILL.md
wot-ui uni-app 组件库开发指南。当用户询问 wot-ui 组件使用、配置、示例或 API 时使用此技能。
清理 wot-starter 模板,移除示例页面、文档和 monorepo 配置,创建一个最简基础模板。
快速创建 Alova 请求模块和 Mock 数据
全局反馈组件(Toast/Message/Loading)使用指南
基于项目规范快速生成 uni-app 页面
快速创建 Vue 3 组合式函数
| name | pinia-store-generator |
| description | 创建符合项目规范的 Pinia Store |
快速创建符合 wot-starter 项目规范的 Pinia Store。
src/store/
├── persist.ts # 持久化配置
├── themeStore.ts # 主题 store 示例
├── manualThemeStore.ts # 手动主题 store 示例
└── {moduleName}Store.ts # 新建的 store
// src/store/{moduleName}Store.ts
import type { {ModuleName}State } from '@/types/{moduleName}'
import { defineStore } from 'pinia'
/**
* {moduleName} 状态管理
* 描述这个 store 的用途
*/
export const use{ModuleName}Store = defineStore('{moduleName}', {
state: (): {ModuleName}State => ({
// 状态定义
data: null,
loading: false,
error: null,
}),
getters: {
// 计算属性
isLoaded: (state) => state.data !== null,
hasError: (state) => state.error !== null,
},
actions: {
// 同步 action
setData(data: any) {
this.data = data
},
// 异步 action
async fetchData() {
this.loading = true
this.error = null
try {
const { data } = await useRequest(Apis.xxx.getData())
this.data = data.value
} catch (err) {
this.error = err as Error
} finally {
this.loading = false
}
},
// 重置状态
reset() {
this.$reset()
},
},
})
// src/store/{moduleName}Store.ts
import { defineStore } from 'pinia'
import { createPersistedState } from '@/store/persist'
export const use{ModuleName}Store = defineStore('{moduleName}', {
state: () => ({
token: '',
userInfo: null,
}),
actions: {
setToken(token: string) {
this.token = token
},
},
// 启用持久化
persist: createPersistedState({
key: '{moduleName}-storage',
paths: ['token', 'userInfo'], // 只持久化指定字段
}),
})
// src/types/{moduleName}.ts
export interface {ModuleName}State {
data: {DataType} | null
loading: boolean
error: Error | null
}
export interface {DataType} {
id: string
name: string
// ...其他字段
}
<script setup lang="ts">
const {moduleName}Store = use{ModuleName}Store()
// 访问状态
const data = computed(() => {moduleName}Store.data)
const loading = computed(() => {moduleName}Store.loading)
// 调用 action
onMounted(() => {
{moduleName}Store.fetchData()
})
</script>
// src/composables/use{ModuleName}.ts
export function use{ModuleName}() {
const store = use{ModuleName}Store()
// 封装逻辑
const doSomething = async () => {
await store.fetchData()
}
return {
data: computed(() => store.data),
loading: computed(() => store.loading),
doSomething,
}
}
// src/store/persist.ts
export function createPersistedState(options: {
key: string
paths?: string[]
}) {
return {
key: options.key,
paths: options.paths,
storage: {
getItem: (key: string) => uni.getStorageSync(key),
setItem: (key: string, value: string) => uni.setStorageSync(key, value),
removeItem: (key: string) => uni.removeStorageSync(key),
},
}
}
{moduleName}Store.ts 格式use{ModuleName}Store 命名