From 787ad93deea5b3fee1dd4b8f2457da10e7005916 Mon Sep 17 00:00:00 2001
From: Zones <765289303@qq.com>
Date: Wed, 10 Jun 2026 14:17:54 +0800
Subject: [PATCH] =?UTF-8?q?=E7=84=8A=E6=8E=A5=E9=A6=96=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
api/auth.js | 10 +-
api/base.js | 11 +
api/hj.js | 9 +
assets/css/page.scss | 208 +++++++++++++++-
assets/icon/nbd-icon.css | 26 +-
components/nbd-select-project.vue | 79 +++++-
components/nbd-select.vue | 325 +++++++++++++++++++++++++
pages.json | 39 +++
pages/index/index.vue | 155 ++++++++++--
pages/mine/index.vue | 277 +++++++++++++++++++++
pipe/diankou/list.vue | 371 +++++++++++++++++++++++++++++
static/tabs/about-active.png | Bin 0 -> 3649 bytes
static/tabs/about.png | Bin 0 -> 1237 bytes
static/tabs/application-active.png | Bin 0 -> 4079 bytes
static/tabs/application.png | Bin 0 -> 1331 bytes
static/tabs/home-active.png | Bin 0 -> 1041 bytes
static/tabs/home.png | Bin 0 -> 1167 bytes
static/tabs/mine-active.png | Bin 0 -> 1260 bytes
static/tabs/mine.png | Bin 0 -> 1418 bytes
store/index.js | 2 +
store/modules/large.js | 25 ++
store/modules/menu.js | 102 ++++++++
store/modules/user.js | 32 ++-
utils/constant.js | 49 ++++
24 files changed, 1682 insertions(+), 38 deletions(-)
create mode 100644 api/base.js
create mode 100644 api/hj.js
create mode 100644 components/nbd-select.vue
create mode 100644 pages/mine/index.vue
create mode 100644 pipe/diankou/list.vue
create mode 100644 static/tabs/about-active.png
create mode 100644 static/tabs/about.png
create mode 100644 static/tabs/application-active.png
create mode 100644 static/tabs/application.png
create mode 100644 static/tabs/home-active.png
create mode 100644 static/tabs/home.png
create mode 100644 static/tabs/mine-active.png
create mode 100644 static/tabs/mine.png
create mode 100644 store/modules/large.js
create mode 100644 store/modules/menu.js
create mode 100644 utils/constant.js
diff --git a/api/auth.js b/api/auth.js
index e3c852f..6192427 100644
--- a/api/auth.js
+++ b/api/auth.js
@@ -3,5 +3,13 @@ import {
post
} from '@/utils/request.js'
+/**
+ * 登录接口
+ */
+export const reqLogin = (data) => post('user/postLoginOn', data)
-export const reqLogin = (data) => post('user/postLoginOn', data)
\ No newline at end of file
+/**
+ * 请求控制权限
+ */
+
+export const reqMenuPowerList = (userId,projectId)=>get(`User/getMenuPowerList?userId=${userId}&projectId=${projectId}`)
\ No newline at end of file
diff --git a/api/base.js b/api/base.js
new file mode 100644
index 0000000..d05d4e8
--- /dev/null
+++ b/api/base.js
@@ -0,0 +1,11 @@
+import {
+ get,
+ post
+} from '@/utils/request.js'
+
+// BaseInfo/getProjectWorkArea?projectId=0792b983-4de2-44d5-adba-361b7fc99a97&
+
+/**
+ * 请求单位工程
+ */
+export const reqProjectWorkArea = (projectId)=>get(`BaseInfo/getProjectWorkArea?projectId=${projectId}`)
\ No newline at end of file
diff --git a/api/hj.js b/api/hj.js
new file mode 100644
index 0000000..d2f9bc3
--- /dev/null
+++ b/api/hj.js
@@ -0,0 +1,9 @@
+import {
+ get,
+ post
+} from '@/utils/request.js'
+
+/**
+ * 获取焊接首页数据
+ */
+export const reqHJIndexData = (projectId)=>get(`HJGLIndex/GetJGLIndexItem?projectId=${projectId}`)
\ No newline at end of file
diff --git a/assets/css/page.scss b/assets/css/page.scss
index 843b307..e2ea56b 100644
--- a/assets/css/page.scss
+++ b/assets/css/page.scss
@@ -26,6 +26,8 @@
// 首页
.home {
+ padding-top: 80px;
+ padding-bottom: 60rpx;
.u-border-bottom:after {
border: none;
}
@@ -40,7 +42,9 @@
}
&-icons {
- height: 160rpx;
+ position: fixed;
+ top: 95px;
+ height: 80px;
width: 100%;
background-color: $u-type-primary;
display: flex;
@@ -145,4 +149,206 @@
}
}
}
+
+ // 快捷应用 & 业务查询公共样式
+ .section-card {
+ margin: 20rpx;
+ background: #fff;
+ border-radius: 16rpx;
+ box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
+ padding: 24rpx;
+
+ .section-title {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 24rpx;
+ font-size: 28rpx;
+ font-weight: 600;
+ color: #333;
+
+ .title-left {
+ display: flex;
+ align-items: center;
+ }
+
+ .title-line {
+ display: inline-block;
+ width: 8rpx;
+ height: 28rpx;
+ background: $u-type-primary;
+ border-radius: 4rpx;
+ margin-right: 16rpx;
+ }
+
+ .edit-btn {
+ padding: 8rpx;
+ opacity: 0.8;
+ &:active {
+ opacity: 1;
+ }
+ }
+ }
+
+ .section-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 24rpx 16rpx;
+ overflow-x: hidden;
+ }
+
+ .grid-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 16rpx 8rpx;
+ border-radius: 12rpx;
+ transition: background 0.2s;
+ min-width: 0;
+
+ &:active {
+ background: #f5f6f8;
+ }
+
+ .icon-box {
+ width: 100rpx;
+ height: 100rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ }
+
+ .item-label {
+ margin-top: 12rpx;
+ font-size: 22rpx;
+ color: #666;
+ text-align: center;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
+ }
+ }
+ }
+
+ // 编辑快捷应用弹窗样式
+ .edit-quick {
+ padding: 32rpx 32rpx 0 32rpx;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ box-sizing: border-box;
+
+ .edit-title {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 28rpx;
+ font-weight: 600;
+ color: #333;
+ padding-bottom: 24rpx;
+ border-bottom: 1rpx solid #f0f0f0;
+
+ .edit-tip {
+ font-size: 24rpx;
+ color: #999;
+ font-weight: 400;
+ }
+ }
+
+ .edit-grid {
+ width: 100%;
+ overflow-y: scroll;
+ display: grid;
+ grid-template-columns: repeat(4, calc(25% - 20rpx));
+ gap: 20rpx;
+ padding: 24rpx 0;
+ min-height: 0;
+ box-sizing: border-box;
+ }
+
+ .edit-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ height: 160rpx;
+ background: #f8f9fa;
+ border-radius: 16rpx;
+ position: relative;
+ transition: all 0.25s;
+ box-sizing: border-box;
+
+ &.active {
+ background: rgba($color: #4a7df5, $alpha: 0.08);
+ border: 2rpx solid $u-type-primary;
+ }
+
+ .icon-box {
+ width: 96rpx;
+ height: 96rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ .edit-label {
+ margin-top: 14rpx;
+ font-size: 22rpx;
+ color: #666;
+ text-align: center;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ width: 100%;
+ }
+
+ .selected-mark {
+ position: absolute;
+ top: 6rpx;
+ right: 6rpx;
+ width: 40rpx;
+ height: 40rpx;
+ border-radius: 50%;
+ background: $u-type-primary;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-shadow: 0 4rpx 12rpx rgba($color: $u-type-primary, $alpha: 0.3);
+ }
+ }
+
+ .edit-btns {
+ display: flex;
+ gap: 24rpx;
+ padding-top: 20rpx;
+ padding-bottom: 10rpx;
+ position: absolute;
+ bottom: 10px;left:0;right:0;
+ .u-size-medium {
+ width: 40%;
+ }
+ .btn-cancel,
+ .btn-confirm {
+ height: 88rpx;
+ font-size: 30rpx;
+ border: none;
+ &::after {
+ border: none;
+ }
+
+ }
+
+ .btn-cancel {
+ background: #f5f6f8;
+ color: #666;
+ }
+
+ .btn-confirm {
+ box-shadow: 0 4rpx 16rpx rgba($color: $u-type-primary, $alpha: 0.25);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/assets/icon/nbd-icon.css b/assets/icon/nbd-icon.css
index 681d5ae..703c758 100644
--- a/assets/icon/nbd-icon.css
+++ b/assets/icon/nbd-icon.css
@@ -1,8 +1,8 @@
@font-face {
font-family: "nbd-icon"; /* Project id 5193086 */
- src: url('//at.alicdn.com/t/c/font_5193086_zgg3m1cv22e.woff2?t=1781003671405') format('woff2'),
- url('//at.alicdn.com/t/c/font_5193086_zgg3m1cv22e.woff?t=1781003671405') format('woff'),
- url('//at.alicdn.com/t/c/font_5193086_zgg3m1cv22e.ttf?t=1781003671405') format('truetype');
+ src: url('//at.alicdn.com/t/c/font_5193086_dyc00qt3bz.woff2?t=1781056075220') format('woff2'),
+ url('//at.alicdn.com/t/c/font_5193086_dyc00qt3bz.woff?t=1781056075220') format('woff'),
+ url('//at.alicdn.com/t/c/font_5193086_dyc00qt3bz.ttf?t=1781056075220') format('truetype');
}
.nbd-icon {
@@ -13,6 +13,26 @@
-moz-osx-font-smoothing: grayscale;
}
+.nbd-icon-a-facheguanli:before {
+ content: "\e683";
+}
+
+.nbd-icon-yuzhijian:before {
+ content: "\e647";
+}
+
+.nbd-icon-baozhuangguanli:before {
+ content: "\e60e";
+}
+
+.nbd-icon-diankouguanli:before {
+ content: "\e60f";
+}
+
+.nbd-icon-shiyabao:before {
+ content: "\e657";
+}
+
.nbd-icon-daiban:before {
content: "\e612";
}
diff --git a/components/nbd-select-project.vue b/components/nbd-select-project.vue
index 62e7048..7308452 100644
--- a/components/nbd-select-project.vue
+++ b/components/nbd-select-project.vue
@@ -12,9 +12,13 @@
- {{item[props.labelKey]}}
+
+ {{ item[props.labelKey] }}
+ 暂无匹配项目
@@ -24,7 +28,8 @@
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/components/nbd-select.vue b/components/nbd-select.vue
new file mode 100644
index 0000000..f014e7c
--- /dev/null
+++ b/components/nbd-select.vue
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item[labelKey] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages.json b/pages.json
index e1fa50f..c3d5b98 100644
--- a/pages.json
+++ b/pages.json
@@ -20,8 +20,47 @@
"navigationBarTitleText": "首页",
"navigationStyle": "custom"
}
+ },
+ {
+ "path": "pages/mine/index",
+ "style": {
+ "navigationBarTitleText": "我的"
+ }
}
],
+ "subPackages": [
+ {
+ "root": "pipe",
+ "pages": [
+ {
+ "path": "diankou/list",
+ "style": {
+ "navigationBarTitleText": "点口管理"
+ }
+ }
+ ]
+ }
+ ],
+ "tabBar": {
+ "color": "#cbcbcb",
+ "backgroundColor": "#2979ff",
+ "selectedColor": "#ffffff",
+ "borderStyle": "black",
+ "list": [{
+ "text": "首页",
+ "pagePath": "pages/index/index",
+ "iconPath": "/static/tabs/home.png",
+ "selectedIconPath": "/static/tabs/home-active.png"
+ },
+ {
+ "text": "个人中心",
+ "pagePath": "pages/mine/index",
+ "iconPath": "static/tabs/mine.png",
+ "selectedIconPath": "static/tabs/mine-active.png"
+ }
+ ],
+ "position": "bottom"
+ },
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "施工管理",
diff --git a/pages/index/index.vue b/pages/index/index.vue
index a9c98b6..f6b5d46 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -7,7 +7,7 @@
-
+
扫一扫
@@ -18,48 +18,112 @@
- 项目管道实时预制率
工厂焊接一次合格率
- 99.5%
+ {{hjIndexData?.GCFirstPassRate}}
现场焊接一次合格率
- 0%
+ {{hjIndexData?.XCFirstPassRate}}
工厂预制进度
- 49229.500/286639.000 DIN
+ {{hjIndexData?.GCProgress}}
现场焊接进度
- 5906.500/84951.000 DIN
+ {{hjIndexData?.XCProgress}}
工厂焊工功效
- 252 DIN/天
+ {{hjIndexData?.GCWelderEfficacy}}
现场焊接功效
- 95 DIN/天
+ {{hjIndexData?.XCWelderEfficacy}}
-
+
+
+
+
+
+ 快捷应用
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+ 业务查询
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ 选择快捷应用
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+ 取消
+ 确定
+
+
+
+ label-key="ProjectName" value-key="ProjectId" :search-key="projectNameKeyword"
+ @search-change="handleSearchChange" @confirm="handleConfirmProject" />
@@ -73,13 +137,18 @@
ref
} from 'vue'
import {
- useUserStore
+ useUserStore,
+ useMenuStore,
+ useLargeStore
} from '@/store';
+
import {
storeToRefs
} from 'pinia';
const userStore = useUserStore()
+ const menuStore = useMenuStore()
+ const largeStore = useLargeStore()
const {
setProjectList,
setCurrentProject
@@ -89,12 +158,52 @@
projectList,
currentProject
} = storeToRefs(userStore)
+ const {
+ quickApps,
+ queryApps,
+ editCache
+ } = storeToRefs(menuStore)
+ const {
+ hjIndexData
+ } = storeToRefs(largeStore)
+ const {
+ pastelColors
+ } = menuStore
const navbarBg = reactive({
backgroundColor: "var(--u-type-primary)"
})
+ const projectNameKeyword = ref('')
const showProject = ref(false)
-
- const currentProjectName = computed(()=>currentProject.value?.ProjectName||'')
+ const showEditQuick = ref(false)
+
+ const currentProjectName = computed(() => currentProject.value?.ProjectName || '')
+
+ const handleSkip= (item) => {
+ uni.navigateTo({
+ url: item.path
+ })
+ }
+
+ // 打开编辑弹窗
+ const openEditQuick = () => {
+ menuStore.openEdit()
+ showEditQuick.value = true
+ }
+
+ // 切换选择状态
+ const toggleSelect = (item) => {
+ menuStore.toggleSelect(item)
+ }
+
+ // 确认编辑
+ const handleConfirmEdit = () => {
+ menuStore.confirmEdit()
+ showEditQuick.value = false
+ uni.showToast({
+ title: '已更新快捷应用',
+ icon: 'success'
+ })
+ }
const handleShowProjectSelect = () => {
reqProjectByUserId(userInfo.value.PersonId).then(res => {
@@ -105,24 +214,30 @@
/**
* 项目列表点击确认
*/
- const handleConfirmProject = (item)=>{
+ const handleConfirmProject = (item) => {
setCurrentProject(item)
showProject.value = false
}
-
+ /**
+ * 项目按名称搜索
+ */
+ const handleSearchChange = (keyword) => {
+ projectNameKeyword.value = keyword
+ }
+
/**
* 扫一扫
*/
- const handleScan = ()=>{
+ const handleScan = () => {
uni.scanCode({
onlyFromCamera: true,
- success (res) {
+ success(res) {
console.log('条码类型:' + res.scanType);
console.log('条码内容:' + res.result);
},
fail(err) {
- console.log("扫码失败了====>",err)
+ console.log("扫码失败了====>", err)
}
});
}
-
+
\ No newline at end of file
diff --git a/pages/mine/index.vue b/pages/mine/index.vue
new file mode 100644
index 0000000..ee5832e
--- /dev/null
+++ b/pages/mine/index.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+ {{ userInfo?.PersonName || '未登录' }}
+ 账号:{{ userInfo?.Account || '-' }}
+ {{ userInfo?.CompanyName || '暂无公司信息' }}
+ {{ userInfo?.Telephone || '暂无手机号' }}
+
+
+
+ 立即登录
+
+
+
+
+
+
+
+ 当前项目
+
+
+ {{ currentProject.ProjectName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pipe/diankou/list.vue b/pipe/diankou/list.vue
new file mode 100644
index 0000000..d999a42
--- /dev/null
+++ b/pipe/diankou/list.vue
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.description || '' }}
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+ — 没有更多了 —
+
+
+
+
+
+
+
+
+
diff --git a/static/tabs/about-active.png b/static/tabs/about-active.png
new file mode 100644
index 0000000000000000000000000000000000000000..da56d0fc35771d2f94418f8d852bd239160ed736
GIT binary patch
literal 3649
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
IW$W<&0KZn=O#lD@
literal 0
HcmV?d00001
diff --git a/static/tabs/about.png b/static/tabs/about.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b9e1aad16c2ae61db358c88f193717163fe5268
GIT binary patch
literal 1237
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
literal 0
HcmV?d00001
diff --git a/static/tabs/application.png b/static/tabs/application.png
new file mode 100644
index 0000000000000000000000000000000000000000..06e3e3d18509aa12b114b13158faf0ae19a3a3c0
GIT binary patch
literal 1331
zcmV-31oS22{v8QDdknDU|hGix7Uy3
z_%Fs--*Yx9YFHG-C!f-sK(vt0jIo{2j{|@S030`IQY+{m#@J!#*?Qf%5aNQ`Ljvjb
zdM8m7A&6C;DP!zd2r;5I@9yq)H#Ro@T}DCXIRJ1er98FIt^rBY6t(nq6$HkfX`bf?
zlq)1ja>F?@@nR_chv>*Rx9X57vymzmji$ueQvD>vZstSih?gZL%JppFn@Q(7Ez&>IroXYDy0tX
z*m7M@qn3vb=IIrTv?j~4L*Kw)jk(#ZD2fxx&AlCBr_;evkbMd10)jLjM>gdJr4O-A
zr+CF2I%c|7N}ai~T;uRT_u2R_9OS=Q0KgOghDxbXQ(tWZLpR>s+{CjFU46V#3ghOo
pDNQ#5S=NDHYW*9Km(sjT?su{|kYI`w*9!mu002ovPDHLkV1hADWwQVP
literal 0
HcmV?d00001
diff --git a/static/tabs/home-active.png b/static/tabs/home-active.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2abb1700195b82d2122f59fbb26144de9026e48
GIT binary patch
literal 1041
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 {
+ const hjIndexData = ref(null)
+
+ /**
+ * 获取焊接首页数据
+ */
+ const fetchHJIndex = (projectId)=>{
+ reqHJIndexData(projectId).then(res=>{
+ hjIndexData.value = res.data
+ })
+ }
+ return {
+ hjIndexData,
+ fetchHJIndex
+ }
+})
diff --git a/store/modules/menu.js b/store/modules/menu.js
new file mode 100644
index 0000000..1391eb8
--- /dev/null
+++ b/store/modules/menu.js
@@ -0,0 +1,102 @@
+import {
+ defineStore
+} from 'pinia'
+import {
+ ref,
+ computed
+} from 'vue'
+import {pastelColors,defaultApps} from '@/utils/constant.js'
+import {reqMenuPowerList} from '@/api/auth.js'
+
+export const useMenuStore = defineStore('menu', () => {
+ // 应用列表(默认配置 + 持久化)
+ const appsList = ref([...defaultApps])
+ // 编辑时的临时缓存
+ const editCache = ref([])
+ // 菜单的权限列表(后端返回的有权限的菜单 code 数组)
+ const menuProwerList = ref([])
+
+ // 快捷应用列表(已选择的)
+ const quickApps = computed(() => appsList.value.filter(app => app.selected&&hasMenuPermission(app.menuId)))
+
+ // 业务查询列表(未选择的)
+ const queryApps = computed(() => appsList.value.filter(app => !app.selected&&hasMenuPermission(app.menuId)))
+
+ /**
+ * 打开编辑弹窗(备份当前状态)
+ */
+ const openEdit = () => {
+ editCache.value = appsList.value.filter(app => hasMenuPermission(app.menuId))
+ }
+
+ /**
+ * 切换应用选择状态
+ */
+ const toggleSelect = (item) => {
+ item.selected = !item.selected
+ }
+
+ /**
+ * 确认编辑(保存更改)
+ */
+ const confirmEdit = () => {
+ appsList.value = editCache.value.map(app => ({ ...app }))
+ }
+
+ /**
+ * 请求菜单权限列表
+ */
+ const fetchMenuPowerList = async (userId, projectId) => {
+ if (!userId || !projectId) return
+ try {
+ const res = await reqMenuPowerList(userId, projectId)
+ menuProwerList.value = res.data || []
+ } catch (err) {
+ console.error('获取菜单权限失败:', err)
+ menuProwerList.value = []
+ }
+ }
+
+ /**
+ * 判断菜单是否有权限打开
+ * @param {string} menuCode - 菜单编码/标识
+ * @returns {boolean} 是否有权限
+ */
+ const hasMenuPermission = (menuCode) => {
+ if (!menuCode) return true
+ return menuProwerList.value.includes(menuCode)
+ }
+
+ /**
+ * 根据权限过滤快捷应用
+ */
+ const quickAppsWithPermission = computed(() => {
+ if (menuProwerList.value.length === 0) return quickApps.value
+ return quickApps.value.filter(app => {
+ return hasMenuPermission(app.permissionCode)
+ })
+ })
+
+ return {
+ appsList,
+ editCache,
+ quickApps,
+ quickAppsWithPermission,
+ queryApps,
+ menuProwerList,
+ pastelColors,
+ openEdit,
+ toggleSelect,
+ confirmEdit,
+ fetchMenuPowerList,
+ hasMenuPermission
+ }
+}, {
+ persist: {
+ enabled: true,
+ strategies: [{
+ key: 'menu',
+ paths: [],
+ }]
+ },
+})
diff --git a/store/modules/user.js b/store/modules/user.js
index 2a29055..f6cb338 100644
--- a/store/modules/user.js
+++ b/store/modules/user.js
@@ -2,12 +2,13 @@ import {
defineStore
} from 'pinia'
import {
- ref
+ ref,
+ watch
} from 'vue'
import {
reqLogin
} from '@/api/auth.js'
-
+import { useMenuStore, useLargeStore } from '@/store'
export const useUserStore = defineStore('user', () => {
const token = ref("")
const userInfo = ref(null)
@@ -20,6 +21,20 @@ export const useUserStore = defineStore('user', () => {
const projectList = ref([])
const currentProject = ref(null)
+ // 监听 currentProject 变化,获取菜单权限
+ watch(() => currentProject.value?.ProjectId, (newId) => {
+ if (newId) {
+ // 项目变化 请求菜单权限
+ const menuStore = useMenuStore()
+ const userId = userInfo.value?.PersonId
+ menuStore.fetchMenuPowerList(userId, newId)
+ // 项目变化 请求焊接首页数据
+ const largeStore = useLargeStore()
+ largeStore.fetchHJIndex(newId)
+
+ }
+ }, { immediate: true })
+
/**
* 登出
@@ -27,11 +42,11 @@ export const useUserStore = defineStore('user', () => {
const logout = () => {
token.value = ""
userInfo.value = null
- loginForm.value = {
- account: '',
- password: '',
- Telephone: '',
- }
+ // loginForm.value = {
+ // account: '',
+ // password: '',
+ // Telephone: '',
+ // }
currentProject.value = null
}
@@ -79,7 +94,8 @@ export const useUserStore = defineStore('user', () => {
projectList,
currentProject,
setProjectList,
- setCurrentProject
+ setCurrentProject,
+ logout
}
}, {
persist: {
diff --git a/utils/constant.js b/utils/constant.js
new file mode 100644
index 0000000..f12539d
--- /dev/null
+++ b/utils/constant.js
@@ -0,0 +1,49 @@
+// 淡雅配色方案(马卡龙色系)
+export const pastelColors = [
+ '#7eb6ff', // 淡蓝
+ '#ffb787', // 淡橙
+ '#8fd6a8', // 淡绿
+ '#b99bf8', // 淡紫
+ '#ff8fa3', // 淡粉
+ '#80deea', // 青色
+ '#ffd56b', // 淡黄
+]
+
+// 默认应用配置
+export const defaultApps = [{
+ name: '点口管理',
+ icon: 'diankouguanli',
+ menuId: '3ACE25CE-C5CE-4CEC-AD27-0D5CF1DF2F01',
+ path: "/pipe/diankou/list",
+ prefix: 'nbd-icon',
+ selected: true
+ },
+ {
+ name: '试压管理',
+ icon: 'shiyabao',
+ menuId: '55976B16-2C33-406E-B514-2FE42D031071',
+ prefix: 'nbd-icon',
+ selected: true
+ },
+ {
+ name: '包装管理',
+ icon: 'baozhuangguanli',
+ menuId: "25DED954-10C9-47CC-99F2-C44FDE9E0A81",
+ prefix: 'nbd-icon',
+ selected: true
+ },
+ {
+ name: '发货管理',
+ icon: 'a-facheguanli',
+ menuId: "EEC0D060-C15E-4D25-B015-C2B91F735DAC",
+ prefix: 'nbd-icon',
+ selected: true
+ },
+ {
+ name: '预制组件管理',
+ icon: 'yuzhijian',
+ menuId: "8255554C-0A92-4C7B-BF19-779AF0220A8C",
+ prefix: 'nbd-icon',
+ selected: true
+ }
+]
\ No newline at end of file