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:
@@ -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图标
|
||||
|
||||
@@ -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 浏览器测试
|
||||
- 响应式布局测试(桌面端、平板、移动端)
|
||||
- 响应式布局测试(桌面端、平板、移动端)
|
||||
|
||||
@@ -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 个标签页)
|
||||
- 固定标签页与普通标签页混排测试
|
||||
- 固定标签页与普通标签页混排测试
|
||||
|
||||
Reference in New Issue
Block a user