任务详情权限管理
This commit is contained in:
parent
173604b845
commit
5986ac4075
|
|
@ -103,7 +103,7 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</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>
|
<uv-button type="error" size="small" @click="applyDelay">申请延期</uv-button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -178,7 +178,7 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</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>
|
<uv-button type="error" size="small" @click="applyDelay">申请延期</uv-button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
@ -186,29 +186,117 @@
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
<!-- 底部操作按钮 -->
|
<!-- 底部操作按钮 -->
|
||||||
<view class="action-buttons">
|
<view class="action-buttons" v-if="showSubmitBtn || showCompleteBtn || showCancelBtn">
|
||||||
<view class="btn-wrapper">
|
<view class="btn-wrapper" v-if="showCompleteBtn">
|
||||||
<uv-button type="primary" size="normal" @click="completeTask">完成任务</uv-button>
|
<uv-button type="primary" size="normal" @click="completeTask">完成任务</uv-button>
|
||||||
</view>
|
</view>
|
||||||
<view class="btn-wrapper">
|
<view class="btn-wrapper" v-if="showSubmitBtn">
|
||||||
<uv-button type="primary" size="normal" @click="submitTask">提交任务</uv-button>
|
<uv-button type="primary" size="normal" @click="submitTask">提交任务</uv-button>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="btn-wrapper" v-if="showCancelBtn">
|
||||||
|
<uv-button type="error" size="normal" @click="cancelTask">取消任务</uv-button>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted, } from 'vue';
|
import { ref, onMounted, computed } from 'vue';
|
||||||
import { onLoad,onShow } from '@dcloudio/uni-app';
|
import { onLoad,onShow } from '@dcloudio/uni-app';
|
||||||
|
import { storeToRefs } from 'pinia';
|
||||||
import { getStatusFromTagText, getTaskStatusType, getTaskStatusStyle } from '@/utils/taskConfig.js';
|
import { getStatusFromTagText, getTaskStatusType, getTaskStatusStyle } from '@/utils/taskConfig.js';
|
||||||
import { useTaskStore } from '@/store/task';
|
import { useTaskStore } from '@/store/task';
|
||||||
|
import { useUserStore } from '@/store/user';
|
||||||
import { getTaskDetail } from '@/api';
|
import { getTaskDetail } from '@/api';
|
||||||
|
|
||||||
// 当前激活的标签
|
// 当前激活的标签
|
||||||
const activeTab = ref('info');
|
const activeTab = ref('info');
|
||||||
const showMenuIndex = ref(-1);
|
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) => {
|
const formatTimeToChinese = (date) => {
|
||||||
if (!date) return '';
|
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) => {
|
const loadTaskData = async (taskId) => {
|
||||||
if (!taskId) {
|
if (!taskId) {
|
||||||
|
|
@ -835,6 +941,7 @@ onLoad((options) => {
|
||||||
task.value.id = taskId;
|
task.value.id = taskId;
|
||||||
// 优先从 API 加载数据
|
// 优先从 API 加载数据
|
||||||
loadTaskData(taskId);
|
loadTaskData(taskId);
|
||||||
|
console.log('<UNK>:',userInfo.value.permissions );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// // 如果没有 taskId,尝试从 Pinia store 获取任务详情数据(兼容旧逻辑)
|
// // 如果没有 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) => {
|
uni.$uv.http.setConfig((config) => {
|
||||||
/* config 为默认全局配置*/
|
/* config 为默认全局配置*/
|
||||||
config.baseURL = 'http://192.168.1.4:4001'; /* 根域名 */
|
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
|
return config
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user