diff --git a/api/oa/feedback.js b/api/oa/feedback.js new file mode 100644 index 0000000..417141f --- /dev/null +++ b/api/oa/feedback.js @@ -0,0 +1,61 @@ +import request from "@/util/oaRequest" + +// 查询问题反馈列表 +export function listFeedback(query) { + return request({ + url: '/oa/feedback/list', + method: 'get', + params: query + }) +} +// 查询问题反馈列表 +export function indexListFeedback(query) { + return request({ + url: '/oa/feedback/index-list', + method: 'get', + params: query + }) +} + +// 查询问题反馈详细 +export function getFeedback(feedbackId) { + return request({ + url: '/oa/feedback/' + feedbackId, + method: 'get' + }) +} + +// 新增问题反馈 +export function addFeedback(data) { + return request({ + url: '/oa/feedback', + method: 'post', + data: data + }) +} + +// 修改问题反馈 +export function updateFeedback(data) { + return request({ + url: '/oa/feedback', + method: 'put', + data: data + }) +} + +// 修改问题反馈 +export function toRead(data) { + return request({ + url: '/oa/feedback/toRead', + method: 'put', + data: data + }) +} + +// 删除问题反馈 +export function delFeedback(feedbackId) { + return request({ + url: '/oa/feedback/remove/' + feedbackId, + method: 'delete' + }) +} diff --git a/api/oa/finance/profit.js b/api/oa/finance/profit.js new file mode 100644 index 0000000..752ad3f --- /dev/null +++ b/api/oa/finance/profit.js @@ -0,0 +1,10 @@ +import request from "@/util/oaRequest" + +// 查询项目盈亏 +export const listProfit = (params) => { + return request({ + url: '/oa/project/projectProfit', + method: 'get', + params + }) +} diff --git a/components/Quill/Quill.vue b/components/Quill/Quill.vue index 22dc366..5952e08 100644 --- a/components/Quill/Quill.vue +++ b/components/Quill/Quill.vue @@ -131,8 +131,9 @@ export default { }, onInput(e) { // 触发v-model - this.$emit('input', e.detail.html); - this.$emit('update:value', e.detail.html); + console.log(e) + this.$emit('input', e.html); + this.$emit('update:value', e.html); }, onAt(e) { addAt({ username: e.name, userid: e.id }, () => { diff --git a/pages.json b/pages.json index eddc4fb..cbe800a 100644 --- a/pages.json +++ b/pages.json @@ -357,7 +357,39 @@ "navigationBarTitleText" : "线上营销", "navigationStyle": "default" } - } + }, + { + "path" : "pages/workbench/feedback/feedback", + "style" : + { + "navigationBarTitleText" : "问题反馈", + "navigationStyle": "default" + } + }, + { + "path" : "pages/workbench/feedback/detail", + "style" : + { + "navigationBarTitleText" : "反馈详情", + "navigationStyle": "default" + } + }, + { + "path" : "pages/workbench/feedback/create", + "style" : + { + "navigationBarTitleText" : "新建反馈", + "navigationStyle": "default" + } + }, + { + "path" : "pages/workbench/profit/profit", + "style" : + { + "navigationBarTitleText" : "项目盈亏", + "navigationStyle": "default" + } + } ], "tabBar": { "color": "#8E9AB0", diff --git a/pages/workbench/feedback/create.vue b/pages/workbench/feedback/create.vue new file mode 100644 index 0000000..fd3c3ff --- /dev/null +++ b/pages/workbench/feedback/create.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/pages/workbench/feedback/detail.vue b/pages/workbench/feedback/detail.vue new file mode 100644 index 0000000..39bdf1b --- /dev/null +++ b/pages/workbench/feedback/detail.vue @@ -0,0 +1,186 @@ + + + + + \ No newline at end of file diff --git a/pages/workbench/feedback/feedback.vue b/pages/workbench/feedback/feedback.vue new file mode 100644 index 0000000..0699e3e --- /dev/null +++ b/pages/workbench/feedback/feedback.vue @@ -0,0 +1,375 @@ + + + + + \ No newline at end of file diff --git a/pages/workbench/index/index.vue b/pages/workbench/index/index.vue index 36eebb1..63b2d6f 100644 --- a/pages/workbench/index/index.vue +++ b/pages/workbench/index/index.vue @@ -5,18 +5,27 @@ 工作台 - - - - {{ item.text }} + + + + + + {{ category || '其他' }} + + + + + + + {{ item.text }} + - @@ -30,67 +39,119 @@ export default { CustomNavBar, }, onShow() { - console.log('页面onLoad被调用'); - // 页面加载时调用getUserProfile + console.log('页面onShow被调用'); this.fetchUserProfile(); }, data() { return { + roleGroup: [], // 存储用户拥有的权限集合 + loading: true, entryList: [ { text: '每日报工', icon: '/static/images/baogong.png', url: '/pages/workbench/reportWork/reportWork', - }, - { - text: '施工进度', - icon: '/static/images/shigong.png', - url: '/pages/workbench/construction/construction', + category: "信息中心" + // 未设置access时默认允许所有用户访问 }, { text: '任务中心', icon: '/static/images/task.png', url: '/pages/workbench/task/task', + category: "信息中心" }, { text: '项目排产', icon: '/static/images/paichan.png', url: '/pages/workbench/reportSchedule/reportSchedule', + category: '车间管理' }, + { + text: '施工进度', + icon: '/static/images/shigong.png', + url: '/pages/workbench/construction/construction', + category: '车间管理' + }, { text: '快递信息', icon: '/static/images/express.svg', url: '/pages/workbench/express/express', + category: '车间管理' }, { text: '项目中心', icon: '/static/images/project.png', url: '/pages/workbench/project/project', + category: "信息中心" }, + { + text: '问题反馈', + icon: '/static/images/wenti.png', + url: '/pages/workbench/feedback/feedback', + category: "信息中心" + }, { text: '库存盘点', icon: '/static/images/stock.png', url: '/pages/workbench/wms/wms', + category: "库房管理" }, { - text: '线上营销', - icon: '/static/images/yingxiao.png', - url: '/pages/workbench/sales/sales', + text: '项目盈亏', + icon: '/static/images/yingkui.png', + url: '/pages/workbench/profit/profit', + category: '财务中心', + access: ['vice', 'baomi', 'ceo'] // 需要特定权限才能访问 }, + { + text: '线上营销', + icon: '/static/images/yingxiao.png', + url: '/pages/workbench/sales/sales', + }, ], }; }, + computed: { + // 按category分组并过滤权限的计算属性 + groupedEntries() { + const groups = {}; + this.entryList.forEach(item => { + // 权限判断逻辑: + // 1. 如果item没有access属性,默认允许访问 + // 2. 如果有access属性,检查用户权限(roleGroup)是否包含其中任意一个 + const hasAccess = !item.access || item.access.some(access => this.roleGroup.includes(access)); + + // 没有权限则跳过当前项 + if (!hasAccess) return; + + // 按分类分组 + const category = item.category || '其他'; + if (!groups[category]) { + groups[category] = []; + } + groups[category].push(item); + }); + return groups; + } + }, methods: { - // 获取用户个人信息 async fetchUserProfile() { console.log('fetchUserProfile方法开始执行'); try { + // this.loading = true; + uni.showLoading() console.log('开始调用getUserProfile API'); const response = await getUserProfile(); console.log('用户个人信息:', response); - // 这里可以根据需要处理返回的用户信息 + // 从接口返回数据中提取用户权限(roleKey) + const roles = response.data.user?.roles?.map(item => item.roleKey) || []; + console.log('用户权限字段', roles); + this.roleGroup = roles; + uni.hideLoading() } catch (error) { console.error('获取用户个人信息失败:', error); + // 错误处理:可以设置默认权限或提示用户 + this.roleGroup = []; } }, handleEntryClick(item) { @@ -105,41 +166,68 @@ export default { + \ No newline at end of file diff --git a/pages/workbench/profit/profit.vue b/pages/workbench/profit/profit.vue new file mode 100644 index 0000000..78a7280 --- /dev/null +++ b/pages/workbench/profit/profit.vue @@ -0,0 +1,489 @@ + + + + + \ No newline at end of file diff --git a/static/images/wenti.png b/static/images/wenti.png new file mode 100644 index 0000000..4b0f3d3 Binary files /dev/null and b/static/images/wenti.png differ diff --git a/static/images/yingkui.png b/static/images/yingkui.png new file mode 100644 index 0000000..3b508e6 Binary files /dev/null and b/static/images/yingkui.png differ