任务详情权限管理
This commit is contained in:
parent
173604b845
commit
5986ac4075
|
|
@ -103,7 +103,7 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="delay-btn-wrapper">
|
||||
<view class="delay-btn-wrapper" v-if="showDelayBtn">
|
||||
<uv-button type="error" size="small" @click="applyDelay">申请延期</uv-button>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -178,7 +178,7 @@
|
|||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="delay-btn-wrapper" v-if="record.showDelayBtn">
|
||||
<view class="delay-btn-wrapper" v-if="record.showDelayBtn && showDelayBtn">
|
||||
<uv-button type="error" size="small" @click="applyDelay">申请延期</uv-button>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -186,29 +186,117 @@
|
|||
</scroll-view>
|
||||
|
||||
<!-- 底部操作按钮 -->
|
||||
<view class="action-buttons">
|
||||
<view class="btn-wrapper">
|
||||
<view class="action-buttons" v-if="showSubmitBtn || showCompleteBtn || showCancelBtn">
|
||||
<view class="btn-wrapper" v-if="showCompleteBtn">
|
||||
<uv-button type="primary" size="normal" @click="completeTask">完成任务</uv-button>
|
||||
</view>
|
||||
<view class="btn-wrapper">
|
||||
<view class="btn-wrapper" v-if="showSubmitBtn">
|
||||
<uv-button type="primary" size="normal" @click="submitTask">提交任务</uv-button>
|
||||
</view>
|
||||
|
||||
<view class="btn-wrapper" v-if="showCancelBtn">
|
||||
<uv-button type="error" size="normal" @click="cancelTask">取消任务</uv-button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, } from 'vue';
|
||||
import { ref, onMounted, computed } from 'vue';
|
||||
import { onLoad,onShow } from '@dcloudio/uni-app';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { getStatusFromTagText, getTaskStatusType, getTaskStatusStyle } from '@/utils/taskConfig.js';
|
||||
import { useTaskStore } from '@/store/task';
|
||||
import { useUserStore } from '@/store/user';
|
||||
import { getTaskDetail } from '@/api';
|
||||
|
||||
// 当前激活的标签
|
||||
const activeTab = ref('info');
|
||||
const showMenuIndex = ref(-1);
|
||||
|
||||
// 用户权限相关
|
||||
const userStore = useUserStore();
|
||||
const { userInfo } = storeToRefs(userStore);
|
||||
|
||||
// 判断是否是管理员(总管理员)
|
||||
const isAdmin = computed(() => {
|
||||
if (!userInfo.value || !Array.isArray(userInfo.value.roles)) return false;
|
||||
|
||||
|
||||
let is = userInfo.value.roles.some((role) => ['admin', 'sys_admin'].includes(role));
|
||||
console.log('isAdmin',is)
|
||||
return is
|
||||
|
||||
});
|
||||
|
||||
// 判断是否有指定权限
|
||||
const hasPermission = (permission) => {
|
||||
// 如果用户是admin,给予所有权限
|
||||
if (isAdmin.value) return true;
|
||||
if (!userInfo.value || !userInfo.value.permissions) return false;
|
||||
|
||||
// 处理对象格式的权限数据(键为数字索引,值为权限字符串)
|
||||
const permissions = userInfo.value.permissions;
|
||||
// 如果是数组,直接使用includes
|
||||
if (Array.isArray(permissions)) {
|
||||
return permissions.includes(permission);
|
||||
}
|
||||
// 如果是对象,使用Object.values()获取所有权限值
|
||||
if (typeof permissions === 'object') {
|
||||
return Object.values(permissions).includes(permission);
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
// 判断任务是否为待完成状态
|
||||
const isTaskPending = computed(() => {
|
||||
// 优先从原始数据判断任务状态
|
||||
if (task.value.rawData) {
|
||||
const status = task.value.rawData.status;
|
||||
// 如果任务已完成(状态为4),则不是待完成
|
||||
if (status === 4 || status === '4' || String(status) === '4') {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (task.value.statusTags?.some(tag =>
|
||||
['待完成', '即将逾期', '已逾期', '逾期'].includes(tag)
|
||||
)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 如果状态标签中包含"已完成",则不是待完成
|
||||
if (task.value.statusTags && task.value.statusTags.includes('已完成')) {
|
||||
return false;
|
||||
}
|
||||
// 默认返回 false(安全起见)
|
||||
return false;
|
||||
});
|
||||
|
||||
// 判断是否显示提交任务按钮:有权限 && 任务状态为待完成,或者管理员
|
||||
const showSubmitBtn = computed(() => {
|
||||
|
||||
console.log('showSubmitBtn',(hasPermission('bst:task:submit') && isTaskPending.value) || isAdmin.value)
|
||||
console.log('hasPermission(\'bst:task:submit\') ',hasPermission('bst:task:submit') )
|
||||
console.log('isTaskPending.value',isTaskPending.value)
|
||||
return (hasPermission('bst:task:submit') && isTaskPending.value) ;
|
||||
});
|
||||
|
||||
// 判断是否显示完成任务按钮:有权限 && 任务状态为待完成,或者管理员
|
||||
const showCompleteBtn = computed(() => {
|
||||
return (hasPermission('bst:task:pass') && isTaskPending.value) ;
|
||||
});
|
||||
|
||||
// 判断是否显示取消任务按钮:有权限 && 任务状态为待完成 && 是管理员
|
||||
const showCancelBtn = computed(() => {
|
||||
return hasPermission('bst:task:cancel') && isTaskPending.value && isAdmin.value;
|
||||
});
|
||||
|
||||
// 判断是否显示申请延期按钮:任务状态为待完成
|
||||
const showDelayBtn = computed(() => {
|
||||
return isTaskPending.value;
|
||||
});
|
||||
|
||||
// 格式化时间为中文格式:年月日星期几时分秒
|
||||
const formatTimeToChinese = (date) => {
|
||||
if (!date) return '';
|
||||
|
|
@ -759,6 +847,24 @@ const applyDelay = () => {
|
|||
});
|
||||
};
|
||||
|
||||
// 取消任务
|
||||
const cancelTask = () => {
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定要取消任务吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
console.log("取消任务", task.value.id);
|
||||
uni.showToast({
|
||||
title: '任务已取消',
|
||||
icon: 'success'
|
||||
});
|
||||
// 可以在这里添加取消任务的API调用
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 加载任务数据
|
||||
const loadTaskData = async (taskId) => {
|
||||
if (!taskId) {
|
||||
|
|
@ -835,6 +941,7 @@ onLoad((options) => {
|
|||
task.value.id = taskId;
|
||||
// 优先从 API 加载数据
|
||||
loadTaskData(taskId);
|
||||
console.log('<UNK>:',userInfo.value.permissions );
|
||||
}
|
||||
else {
|
||||
// // 如果没有 taskId,尝试从 Pinia store 获取任务详情数据(兼容旧逻辑)
|
||||
|
|
|
|||
5544
sys_menu.json
Normal file
5544
sys_menu.json
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -11,7 +11,7 @@ export const Request = () => {
|
|||
uni.$uv.http.setConfig((config) => {
|
||||
/* config 为默认全局配置*/
|
||||
config.baseURL = 'http://192.168.1.4:4001'; /* 根域名 */
|
||||
// config.baseURL = 'https://pm.ccttiot.com/prod-api'; /* 根域名 */
|
||||
config.baseURL = 'https://pm.ccttiot.com/prod-api'; /* 根域名 */
|
||||
return config
|
||||
})
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user