mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-24 07:49:47 +08:00
Compare commits
6 Commits
34ab7d5da2
...
dev
Author | SHA1 | Date | |
---|---|---|---|
2c248d82f2 | |||
28101cb2f1 | |||
4e27f3b5a5 | |||
e623b560e4 | |||
8aeb73627a | |||
3f148a4e62 |
@ -16,7 +16,7 @@
|
|||||||
},
|
},
|
||||||
"playwright": {
|
"playwright": {
|
||||||
"command": "npx",
|
"command": "npx",
|
||||||
"args": ["@playwright/mcp@0.0.29"]
|
"args": ["@playwright/mcp@latest"]
|
||||||
},
|
},
|
||||||
"mcp-server-time": {
|
"mcp-server-time": {
|
||||||
"command": "uvx",
|
"command": "uvx",
|
||||||
@ -26,14 +26,21 @@
|
|||||||
"command": "npx",
|
"command": "npx",
|
||||||
"args": ["-y", "mcp-shrimp-task-manager"],
|
"args": ["-y", "mcp-shrimp-task-manager"],
|
||||||
"env": {
|
"env": {
|
||||||
"DATA_DIR": "D:/workspace/mcp-shrimp-task-manager/data",
|
"DATA_DIR": "D:/workspace/tools/mcp-shrimp-task-manager/data",
|
||||||
"TEMPLATES_USE": "en",
|
"TEMPLATES_USE": "en",
|
||||||
"ENABLE_GUI": "false"
|
"ENABLE_GUI": "true"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mcp-deepwiki": {
|
"mcp-deepwiki": {
|
||||||
"command": "npx",
|
"command": "npx",
|
||||||
"args": ["-y", "mcp-deepwiki@latest"]
|
"args": ["-y", "mcp-deepwiki@latest"]
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"command": "npx",
|
||||||
|
"args": ["-y", "@modelcontextprotocol/server-memory"],
|
||||||
|
"env": {
|
||||||
|
"MEMORY_FILE_PATH": "D:/workspace/tools/server-memory/memory.json"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
---
|
---
|
||||||
description:
|
|
||||||
globs:
|
|
||||||
alwaysApply: false
|
alwaysApply: false
|
||||||
---
|
---
|
||||||
|
|
||||||
**# RIPER-5 + 多维度思维 + 代理执行协议 (v4.9.1 - MCP工具驱动版)**
|
**# RIPER-5 + 多维度思维 + 代理执行协议 (v4.9.1 - MCP工具驱动版)**
|
||||||
|
|
||||||
**元指令:** 此协议旨在最大化你的战略规划与执行效率。你的核心任务是**指挥和利用MCP工具集**来驱动项目进展。严格遵守核心原则,利用 `mcp-shrimp-task-manager` 进行项目规划与追踪,使用 `deepwiki-mcp` 进行深度研究。主动管理 `/project_document` 作为知识库。**每轮主要响应后,调用 `mcp.feedback_enhanced` 进行交互或通知。**
|
**元指令:** 此协议旨在最大化你的战略规划与执行效率。你的核心任务是**指挥和利用MCP工具集**来驱动项目进展。严格遵守核心原则,利用 `mcp-shrimp-task-manager` 进行项目规划与追踪,使用 `deepwiki-mcp` 进行深度研究。主动管理 `/project_document` 作为知识库。**每轮主要响应后,调用 `mcp.feedback_enhanced` 进行交互或通知。**
|
||||||
@ -167,5 +164,4 @@ alwaysApply: false
|
|||||||
|
|
||||||
* **极致效率:** AI应最大限度地减少手动干预,让MCP工具处理所有可以自动化的工作。
|
* **极致效率:** AI应最大限度地减少手动干预,让MCP工具处理所有可以自动化的工作。
|
||||||
* **战略聚焦:** 将AI的“思考”集中在无法被工具替代的领域:战略决策、创新构想、复杂问题诊断 (`mcp.sequential_thinking`) 和最终质量把关。
|
* **战略聚焦:** 将AI的“思考”集中在无法被工具替代的领域:战略决策、创新构想、复杂问题诊断 (`mcp.sequential_thinking`) 和最终质量把关。
|
||||||
|
|
||||||
* **无缝集成:** 期望AI能流畅地在不同MCP工具之间传递信息,形成一个高度整合的自动化工作流。
|
* **无缝集成:** 期望AI能流畅地在不同MCP工具之间传递信息,形成一个高度整合的自动化工作流。
|
||||||
|
@ -220,7 +220,7 @@ const events = computed(() => {
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.tox.tox-silver-sink.tox-tinymce-aux {
|
.tox.tox-silver-sink.tox-tinymce-aux {
|
||||||
/** 该样式默认为1300的zIndex */
|
/** 该样式默认为1300的zIndex */
|
||||||
z-index: 2025;
|
z-index: 2025 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-tinymce {
|
.app-tinymce {
|
||||||
|
681
pnpm-lock.yaml
generated
681
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@ -43,3 +43,10 @@ export function fetchGetPostSelect(deptId?: CommonType.IdType, postIds?: CommonT
|
|||||||
params: { postIds, deptId }
|
params: { postIds, deptId }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
/** 获取部门选择框列表 */
|
||||||
|
export function fetchGetPostDeptSelect() {
|
||||||
|
return request<Api.Common.CommonTreeRecord>({
|
||||||
|
url: '/system/post/deptTree',
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { watch } from 'vue';
|
import { watch } from 'vue';
|
||||||
import { useEventSource } from '@vueuse/core';
|
import { useEventSource } from '@vueuse/core';
|
||||||
import useNoticeStore from '@/store/modules/notice';
|
import useNoticeStore from '@/store/modules/notice';
|
||||||
|
import { $t } from '@/locales';
|
||||||
import { localStg } from './storage';
|
import { localStg } from './storage';
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
@ -34,9 +35,14 @@ export const initSSE = (url: any) => {
|
|||||||
read: false,
|
read: false,
|
||||||
time: new Date().toLocaleString()
|
time: new Date().toLocaleString()
|
||||||
});
|
});
|
||||||
|
let content = data.value;
|
||||||
|
const noticeType = content.match(/\[dict\.(.*?)\]/)?.[1];
|
||||||
|
if (noticeType) {
|
||||||
|
content = content.replace(`dict.${noticeType}`, $t(`dict.${noticeType}` as App.I18n.I18nKey));
|
||||||
|
}
|
||||||
window.$notification?.create({
|
window.$notification?.create({
|
||||||
title: '消息',
|
title: '消息',
|
||||||
content: data.value,
|
content,
|
||||||
type: 'success',
|
type: 'success',
|
||||||
duration: 3000
|
duration: 3000
|
||||||
});
|
});
|
||||||
|
@ -39,8 +39,7 @@ const activeModule = computed(() => moduleMap[props.module || 'pwd-login']);
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- Copyright By https://github.com/Daymychen/art-design-pro/blob/main/src/components/core/views/login/LoginLeftView.vue -->
|
<div class="scroll box-border size-full flex">
|
||||||
<div class="box-border size-full flex">
|
|
||||||
<div class="relative box-border hidden h-full w-65vw overflow-hidden bg-primary-50 xl:block dark:bg-primary-900">
|
<div class="relative box-border hidden h-full w-65vw overflow-hidden bg-primary-50 xl:block dark:bg-primary-900">
|
||||||
<div class="relative z-100 flex items-center pl-30px pt-30px">
|
<div class="relative z-100 flex items-center pl-30px pt-30px">
|
||||||
<SystemLogo class="text-32px text-primary" />
|
<SystemLogo class="text-32px text-primary" />
|
||||||
@ -55,13 +54,13 @@ const activeModule = computed(() => moduleMap[props.module || 'pwd-login']);
|
|||||||
</div>
|
</div>
|
||||||
<WaveBg />
|
<WaveBg />
|
||||||
</div>
|
</div>
|
||||||
<header class="relative h-full flex-1 xl:m-auto sm:!w-full">
|
<div class="relative h-full flex-1 xl:m-auto sm:!w-full">
|
||||||
<div class="relative z-100 block flex items-center pl-30px pt-30px xl:hidden">
|
<header class="flex-y-center justify-between px-30px pt-30px xl:justify-end">
|
||||||
|
<div class="relative z-100 block flex items-center xl:hidden">
|
||||||
<SystemLogo class="text-32px text-primary" />
|
<SystemLogo class="text-32px text-primary" />
|
||||||
<h3 class="ml-10px text-20px font-400">{{ $t('system.title') }}</h3>
|
<h3 class="ml-10px text-20px font-400">{{ $t('system.title') }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="position-fixed right-30px top-24px z-100 flex items-center justify-end">
|
<div class="flex items-center justify-end">
|
||||||
<div class="ml-15px inline-block flex cursor-pointer select-none p-5px">
|
|
||||||
<ThemeSchemaSwitch
|
<ThemeSchemaSwitch
|
||||||
:theme-schema="themeStore.themeScheme"
|
:theme-schema="themeStore.themeScheme"
|
||||||
:show-tooltip="false"
|
:show-tooltip="false"
|
||||||
@ -77,14 +76,32 @@ const activeModule = computed(() => moduleMap[props.module || 'pwd-login']);
|
|||||||
@change-lang="appStore.changeLocale"
|
@change-lang="appStore.changeLocale"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</header>
|
||||||
<main class="absolute inset-0 m-auto h-630px max-w-450px w-full overflow-hidden rounded-5px bg-cover px-24px">
|
<main
|
||||||
|
class="m-auto mt-10% h-630px max-w-450px w-full rounded-5px bg-cover px-24px xl:absolute xl:inset-0 lg:mt-15% xl:mt-auto"
|
||||||
|
>
|
||||||
<Transition :name="themeStore.page.animateMode" mode="out-in" appear>
|
<Transition :name="themeStore.page.animateMode" mode="out-in" appear>
|
||||||
<component :is="activeModule.component" />
|
<component :is="activeModule.component" />
|
||||||
</Transition>
|
</Transition>
|
||||||
</main>
|
</main>
|
||||||
</header>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped>
|
||||||
|
.scroll {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll {
|
||||||
|
-ms-overflow-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll {
|
||||||
|
scrollbar-width: none;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@ -2,8 +2,7 @@
|
|||||||
import { computed, ref } from 'vue';
|
import { computed, ref } from 'vue';
|
||||||
import { NButton, NDivider } from 'naive-ui';
|
import { NButton, NDivider } from 'naive-ui';
|
||||||
import { useLoading } from '@sa/hooks';
|
import { useLoading } from '@sa/hooks';
|
||||||
import { fetchBatchDeletePost, fetchGetPostList } from '@/service/api/system/post';
|
import { fetchBatchDeletePost, fetchGetPostDeptSelect, fetchGetPostList } from '@/service/api/system/post';
|
||||||
import { fetchGetDeptTree } from '@/service/api/system';
|
|
||||||
import { useAppStore } from '@/store/modules/app';
|
import { useAppStore } from '@/store/modules/app';
|
||||||
import { useAuth } from '@/hooks/business/auth';
|
import { useAuth } from '@/hooks/business/auth';
|
||||||
import { useDownload } from '@/hooks/business/download';
|
import { useDownload } from '@/hooks/business/download';
|
||||||
@ -191,16 +190,17 @@ const { loading: treeLoading, startLoading: startTreeLoading, endLoading: endTre
|
|||||||
const deptPattern = ref<string>();
|
const deptPattern = ref<string>();
|
||||||
const deptData = ref<Api.Common.CommonTreeRecord>([]);
|
const deptData = ref<Api.Common.CommonTreeRecord>([]);
|
||||||
const selectedKeys = ref<string[]>([]);
|
const selectedKeys = ref<string[]>([]);
|
||||||
async function getTreeData() {
|
|
||||||
|
async function getDeptOptions() {
|
||||||
|
// 加载
|
||||||
startTreeLoading();
|
startTreeLoading();
|
||||||
const { data: tree, error } = await fetchGetDeptTree();
|
const { data: tree, error } = await fetchGetPostDeptSelect();
|
||||||
if (!error) {
|
if (!error) {
|
||||||
deptData.value = tree;
|
deptData.value = tree;
|
||||||
}
|
}
|
||||||
endTreeLoading();
|
endTreeLoading();
|
||||||
}
|
}
|
||||||
|
getDeptOptions();
|
||||||
getTreeData();
|
|
||||||
|
|
||||||
function handleClickTree(keys: string[]) {
|
function handleClickTree(keys: string[]) {
|
||||||
searchParams.belongDeptId = keys.length ? keys[0] : null;
|
searchParams.belongDeptId = keys.length ? keys[0] : null;
|
||||||
@ -210,7 +210,7 @@ function handleClickTree(keys: string[]) {
|
|||||||
|
|
||||||
function handleResetTreeData() {
|
function handleResetTreeData() {
|
||||||
deptPattern.value = undefined;
|
deptPattern.value = undefined;
|
||||||
getTreeData();
|
getDeptOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleResetSearch() {
|
function handleResetSearch() {
|
||||||
|
Reference in New Issue
Block a user