feat: 完善员工门户功能及ERP集成

主要修改:
- 完善员工门户CRM模块(经销商、线索管理)
- 添加ERP客户选择器集成
- 优化登录认证和租户选择
- 添加超时配置、企业微信集成等文档
- 更新docker-compose配置
- 将.pid临时文件加入gitignore

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
大壮
2026-05-22 09:46:54 +00:00
parent 5cb9e367df
commit 226f119607
65 changed files with 2988 additions and 831 deletions

View File

@@ -18,8 +18,8 @@
**关键代码**:
```typescript
import { useUserStore } from '@/stores';
import { computed } from 'vue';
import { useUserStore } from '@/stores';
const userStore = useUserStore();
@@ -49,8 +49,8 @@ const companyName = computed(() => {
**关键代码**:
```typescript
import { useRoute } from 'vue-router';
import { computed } from 'vue';
import { useRoute } from 'vue-router';
const route = useRoute();
@@ -97,7 +97,7 @@ const tenantNameMap: Record<string, string> = {
'000002': '汇亚公司',
'000003': '恒福公司',
'000004': '玛缇公司',
'000005': '新公司名称', // 添加新公司
'000005': '新公司名称', // 添加新公司
};
```
@@ -109,7 +109,7 @@ const tenantNameMap: Record<string, string> = {
```typescript
export interface LoginUser {
// ... 现有字段
companyName?: string; // 新增公司名称字段
companyName?: string; // 新增公司名称字段
}
```
@@ -166,4 +166,4 @@ const companyName = computed(() => {
1. **统一管理映射关系**:将 `tenantNameMap` 提取到统一的配置文件
2. **支持多语言**:添加国际化支持,显示不同语言的公司名称
3. **动态获取**从后端API动态获取公司名称避免硬编码
4. **Logo定制**不同公司使用不同的Logo图标
4. **Logo定制**不同公司使用不同的Logo图标

View File

@@ -97,28 +97,28 @@ src/
### 获取用户信息
```typescript
GET /system/user/profile
Response: UserProfile
GET / system / user / profile;
Response: UserProfile;
```
### 更新用户信息
```typescript
PUT /system/user/profile
PUT / system / user / profile;
Request: {
userId: number
nickName: string
email: string
phonenumber: string
sex: string
userId: number;
nickName: string;
email: string;
phonenumber: string;
sex: string;
}
```
### 修改密码
```typescript
PUT /system/user/profile/updatePwd
PUT / system / user / profile / updatePwd;
Request: {
oldPassword: string
newPassword: string
oldPassword: string;
newPassword: string;
}
```
@@ -195,4 +195,4 @@ Request: FormData (avatarfile: File)
### 兼容性测试
- Chrome、Firefox、Safari 浏览器测试
- 响应式布局测试(桌面端、平板、移动端)
- 响应式布局测试(桌面端、平板、移动端)

View File

@@ -123,14 +123,14 @@ export function useTabbar() {
}, { immediate: true });
return {
currentActive, // 当前激活的标签页
currentTabs, // 标签页列表
handleClick, // 点击标签页
handleClose, // 关闭标签页
handleUnpin, // 固定/取消固定
closeOtherTabs, // 关闭其他标签页
closeAllTabs, // 关闭所有标签页
closeRightTabs, // 关闭右侧标签页
currentActive, // 当前激活的标签页
currentTabs, // 标签页列表
handleClick, // 点击标签页
handleClose, // 关闭标签页
handleUnpin, // 固定/取消固定
closeOtherTabs, // 关闭其他标签页
closeAllTabs, // 关闭所有标签页
closeRightTabs, // 关闭右侧标签页
};
}
```
@@ -149,25 +149,26 @@ const tabs = computed(() => tabbarStore.tabs);
const isFullscreen = ref(false);
// 点击标签页
const handleTabClick = (tab: TabItem) => {
function handleTabClick(tab: TabItem) {
tabbarStore.setActiveTab(tab.path);
router.push(tab.path);
};
}
// 关闭标签页
const handleTabClose = (path: string) => {
function handleTabClose(path: string) {
tabbarStore.closeTab(path);
};
}
// 切换全屏
const toggleFullscreen = () => {
function toggleFullscreen() {
isFullscreen.value = !isFullscreen.value;
if (isFullscreen.value) {
document.documentElement.requestFullscreen();
} else {
}
else {
document.exitFullscreen();
}
};
}
</script>
```
@@ -175,8 +176,8 @@ const toggleFullscreen = () => {
```vue
<script setup lang="ts">
import TabsView from '@/layouts/components/TabsView/index.vue';
import { useTabbar } from '@/hooks/useTabbar';
import TabsView from '@/layouts/components/TabsView/index.vue';
const { handleClose, handleUnpin } = useTabbar();
</script>
@@ -355,4 +356,4 @@ const { handleClose, handleUnpin } = useTabbar();
- Chrome、Firefox、Safari 浏览器测试
- 响应式布局测试(桌面端、平板)
- 标签页滚动测试(超过 10 个标签页)
- 固定标签页与普通标签页混排测试
- 固定标签页与普通标签页混排测试