任务详情权限管理

This commit is contained in:
WindowBird 2025-11-22 17:34:38 +08:00
parent 173604b845
commit 5986ac4075
3 changed files with 5659 additions and 8 deletions

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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
})