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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ msg.title }}
+
+
+
+
+ {{ msg.state === 0 ? '未读' : '已读' }}
+
+ {{ msg.projectName ? truncateText(msg.projectName, 15) : '无项目' }}
+
+ {{ formatTime(msg.createTime) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+ 贸易类型:
+ {{ getTradeTypeName(item.tradeType) }}
+
+
+
+ 合同金额:
+ {{ item.originalFunds || item.detailIncome }}
+
+
+
+ 人民币金额:
+ ¥{{ item.totalIncomeCny }}
+
+
+
+ 启动时间:
+ {{ item.beginTime }}
+
+
+
+
+
+
+
+
+
+
+
+
\ 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