| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527 |
- import config from '@/config'
- import { getToken } from '@/utils/auth'
- import { listCheckApprovalCcDetails, listCheckPendingTasks } from "@/api/myToDoList/myToDoList.js"
- import { listData } from "@/api/system/dict/data.js"
- /**
- * 显示消息提示框
- * @param content 提示的标题
- */
- export function toast(content) {
- uni.showToast({
- icon: 'none',
- title: content
- })
- }
- /**
- * 显示模态弹窗
- * @param content 提示的标题
- */
- export function showConfirm(content) {
- return new Promise((resolve, reject) => {
- uni.showModal({
- title: '提示',
- content: content,
- cancelText: '取消',
- confirmText: '确定',
- success: function (res) {
- resolve(res)
- }
- })
- })
- }
- /**
- * 参数处理
- * @param params 参数
- */
- export function tansParams(params) {
- let result = ''
- for (const propName of Object.keys(params)) {
- const value = params[propName]
- var part = encodeURIComponent(propName) + "="
- if (value !== null && value !== "" && typeof (value) !== "undefined") {
- if (typeof value === 'object') {
- for (const key of Object.keys(value)) {
- if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
- let params = propName + '[' + key + ']'
- var subPart = encodeURIComponent(params) + "="
- result += subPart + encodeURIComponent(value[key]) + "&"
- }
- }
- } else {
- result += part + encodeURIComponent(value) + "&"
- }
- }
- }
- return result
- }
- export function getDate(date, AddDayCount = 0) {
- if (!date) {
- date = new Date()
- }
- if (typeof date !== 'object') {
- date = date.replace(/-/g, '/')
- }
- const dd = new Date(date)
- dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
- const y = dd.getFullYear()
- const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
- const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
- return {
- fullDate: y + '-' + m + '-' + d,
- year: y,
- month: m,
- date: d,
- day: dd.getDay()
- }
- }
- export function serializeData(obj) {
- let str = '?'
- Object.keys(obj).forEach(function (key) {
- str += key + "=" + obj[key] + '&'
- });
- let reg = /&$/gi;
- str = str.replace(reg, ""); //清除最后一个&符号
- return str
- }
- export function buildTeamOptions(tree = [], includeFullData = false) {
- const result = [];
- function dfs(node, path = []) {
- const currentPath = [...path, node.label];
- // 如果是 TEAMS 叶子节点
- if (node.deptType === 'TEAMS') {
- if (includeFullData) {
- // 包含完整节点数据
- result.push({
- ...node,
- text: currentPath.join(' / '),
- value: node.id,
- path: currentPath,
- children: null
- });
- } else {
- // 只包含text和value
- result.push({
- text: currentPath.join(' / '),
- value: node.id
- });
- }
- }
- // 继续递归子节点
- if (node.children && Array.isArray(node.children)) {
- node.children.forEach(child => dfs(child, currentPath));
- }
- }
- tree.forEach(root => dfs(root));
- return result;
- }
- /**
- * 找出deptType为DEPARTMENT的节点
- * @param {Array} tree - 树形结构数据
- * @param {boolean} includeFullData - 是否包含节点的完整数据,默认false
- * @returns {Array} 包含所有DEPARTMENT节点的数组
- */
- export function buildDepartmentOptions(tree = [], includeFullData = false) {
- const result = [];
- function dfs(node, path = []) {
- const currentPath = [...path, node.label];
- // 如果是 DEPARTMENT 节点
- if (node.deptType === 'DEPARTMENT') {
- if (includeFullData) {
- // 包含完整节点数据
- result.push({
- ...node,
- text: currentPath.join(' / '),
- value: node.id,
- path: currentPath,
- children: null
- });
- } else {
- // 只包含text和value
- result.push({
- text: currentPath.join(' / '),
- value: node.id
- });
- }
- }
- // 继续递归子节点
- if (node.children && Array.isArray(node.children)) {
- node.children.forEach(child => dfs(child, currentPath));
- }
- }
- tree.forEach(root => dfs(root));
- return result;
- }
- /**
- * 找出deptType为BRIGADE的节点
- * @param {Array} tree - 树形结构数据
- * @param {boolean} includeFullData - 是否包含节点的完整数据,默认false
- * @returns {Array} 包含所有BRIGADE节点的数组
- */
- export function buildBrigadeOptions(tree = [], includeFullData = false) {
- const result = [];
- function dfs(node, path = []) {
- const currentPath = [...path, node.label];
- // 如果是 DEPARTMENT 节点
- if (node.deptType === 'BRIGADE') {
- if (includeFullData) {
- // 包含完整节点数据
- result.push({
- ...node,
- text: currentPath.join(' / '),
- value: node.id,
- path: currentPath,
- children: null
- });
- } else {
- // 只包含text和value
- result.push({
- text: currentPath.join(' / '),
- value: node.id
- });
- }
- }
- // 继续递归子节点
- if (node.children && Array.isArray(node.children)) {
- node.children.forEach(child => dfs(child, currentPath));
- }
- }
- tree.forEach(root => dfs(root));
- return result;
- }
- /**
- * 找出deptType为BRIGADE的节点
- * @param {Array} tree - 树形结构数据
- * @param {boolean} includeFullData - 是否包含节点的完整数据,默认false
- * @returns {Array} 包含所有BRIGADE节点的数组
- */
- export function buildManagerOptions(tree = [], includeFullData = false) {
- const result = [];
- function dfs(node, path = []) {
- const currentPath = [...path, node.label];
- // 如果是 DEPARTMENT 节点
- if (node.deptType === 'MANAGER') {
- if (includeFullData) {
- // 包含完整节点数据
- result.push({
- ...node,
- text: currentPath.join(' / '),
- value: node.id,
- path: currentPath,
- children: null
- });
- } else {
- // 只包含text和value
- result.push({
- text: currentPath.join(' / '),
- value: node.id
- });
- }
- }
- // 继续递归子节点
- if (node.children && Array.isArray(node.children)) {
- node.children.forEach(child => dfs(child, currentPath));
- }
- }
- tree.forEach(root => dfs(root));
- return result;
- }
- //将数组格式的按照航站楼分成对象格式
- export function getHandleAreaData(data, notkezhang) {
- let louObj = {};
- let areaArr = [];
- data.forEach(element => {
- let name = `${element.terminlName}-${element.terminlCode}`
- if (!louObj[name]) {
- louObj[name] = [];
- }
- louObj[name].push({
- ...element,
- label: notkezhang ? element.channelName : element.regionalName,
- code: notkezhang ? element.channelCode : element.regionalCode,
- });
- });
- Object.keys(louObj).forEach(key => {
- areaArr.push({
- label: key.split('-')[0],
- code: key.split('-')[1],
- children: louObj[key]
- });
- });
- return areaArr;
- }
- // 封装上传
- export function uploadFile(event) {
- return new Promise((resolve, reject) => {
- uni.uploadFile({
- url: `${config.baseUrl}/common/upload`,
- filePath: event.tempFilePaths[0],
- name: 'file',
- header: { Authorization: 'Bearer ' + getToken() },
- success: (res) => resolve(JSON.parse(res.data)),
- fail: reject
- });
- });
- }
- // 为消息tab显示红点
- export async function showMessageTabRedDot() {
- try {
- const query = {
- pageNum: 1,
- pageSize: 9999
- };
- let total = 0
- let response = await listCheckPendingTasks(query);
- total += response.total;
- let response1 = await listCheckApprovalCcDetails(query);
- total += response1.rows.filter(item => item.isRead == '0').length;
- if (total > 0) {
- // 消息tab在tabBar列表中的索引是1(从0开始)
- uni.showTabBarRedDot({
- index: 1,
- success: () => {
- // console.log('消息tab红点显示成功')
- },
- fail: (err) => {
- // console.log('消息tab红点显示失败:', err)
- // 如果使用自定义tabBar时原生API失败,可以在这里添加自定义处理逻辑
- }
- })
- } else {
- // 当total等于0时,取消消息tab上的红点显示
- uni.hideTabBarRedDot({
- index: 1,
- success: () => {
- console.log('消息tab红点隐藏成功')
- },
- fail: (err) => {
- console.log('消息tab红点隐藏失败:', err)
- }
- })
- }
- } catch (error) {
- }
- }
- /**
- * 文字截断函数,超过指定长度显示省略号
- * @param {string} text - 需要截断的文本
- * @param {number} maxLength - 最大长度,默认10
- * @param {string} suffix - 后缀,默认'...'
- * @returns {string} 截断后的文本
- */
- export function truncateText(text, maxLength = 10, suffix = '...') {
- if (!text || typeof text !== 'string') {
- return '';
- }
- // 如果文本长度小于等于最大长度,直接返回原文本
- if (text.length <= maxLength) {
- return text;
- }
- // 截取文本并添加后缀
- return text.substring(0, maxLength) + suffix;
- }
- /**
- * 智能文字截断函数,考虑中英文混合情况
- * @param {string} text - 需要截断的文本
- * @param {number} maxLength - 最大长度(按字符数计算),默认10
- * @param {string} suffix - 后缀,默认'...'
- * @returns {string} 截断后的文本
- */
- export function smartTruncateText(text, maxLength = 10, suffix = '...') {
- if (!text || typeof text !== 'string') {
- return '';
- }
- // 计算字符数(中文字符算1个,英文字符算0.5个)
- let charCount = 0;
- let result = '';
- for (let i = 0; i < text.length; i++) {
- const char = text[i];
- // 中文字符范围
- if (char.charCodeAt(0) > 127) {
- charCount += 1;
- } else {
- charCount += 0.5;
- }
- // 如果超过最大长度,添加后缀并返回
- if (charCount > maxLength) {
- return result + suffix;
- }
- result += char;
- }
- // 如果文本长度小于等于最大长度,直接返回原文本
- return text;
- }
- /**
- * 按单词截断文本(适用于英文文本)
- * @param {string} text - 需要截断的文本
- * @param {number} maxWords - 最大单词数,默认5
- * @param {string} suffix - 后缀,默认'...'
- * @returns {string} 截断后的文本
- */
- export function truncateByWords(text, maxWords = 5, suffix = '...') {
- if (!text || typeof text !== 'string') {
- return '';
- }
- const words = text.trim().split(/\s+/);
- if (words.length <= maxWords) {
- return text;
- }
- return words.slice(0, maxWords).join(' ') + suffix;
- }
- /**
- * 根据字典值获取对应的字典文字
- * @param {string} dictType - 字典类型
- * @param {string|number} dictValue - 字典值
- * @param {string} defaultValue - 默认返回值,当找不到对应字典文字时返回
- * @returns {Promise<string>} 字典文字
- */
- export async function getDictLabelByValue(dictType, dictValue, defaultValue = '') {
- if (!dictType || dictValue === undefined || dictValue === null) {
- return defaultValue;
- }
- try {
- // 调用listData接口获取字典数据
- const response = await listData({
- dictType: dictType,
- dictValue: dictValue.toString()
- });
- // 如果接口返回成功且有数据
- if (response.code === 200 && response.rows && response.rows.length > 0) {
- return response.rows.find(item => item.dictValue === dictValue.toString())?.dictLabel || defaultValue;
- }
- return defaultValue;
- } catch (error) {
- console.error('获取字典文字失败:', error);
- return defaultValue;
- }
- }
- /**
- * 检查角色是否有访问特定路径的权限
- * @param {string} role - 角色名称
- * @param {string} path - 访问路径
- * @returns {boolean} 是否有权限
- */
- export function checkRolePermission(role, path) {
- // 角色权限配置对象
- const rolePermissions = {
- //安检员
- SecurityCheck: [
- '/pages/attendance/index',
- `/pages/seizedReported/index?params=${encodeURIComponent(JSON.stringify({ type: 'add' }))}`,
- '/pages/daily-exam/task-list/index',
- '/pages/eikonStatistics/index',
- '/pages/seizureRecord/index',
- '/pages/seizeStatistics/index',
- '/pages/voiceSubmissionDraft/index'
- ],
- //班组长
- banzuzhang: [
- '/pages/attendance/index',
- `/pages/seizedReported/index?params=${encodeURIComponent(JSON.stringify({ type: 'add' }))}`,
- '/pages/daily-exam/task-list/index',
- '/pages/inspectionChecklist/index',
- '/pages/eikonStatistics/index',
- '/pages/seizureRecord/index',
- '/pages/seizeStatistics/index',
- '/pages/inspectionStatistics/index',
- '/pages/questionStatistics/index',
- '/pages/voiceSubmissionDraft/index'
- ],
- //站长
- kezhang: [
- '/pages/attendance/index',
- '/pages/attendanceStatistics/index',
- '/pages/inspectionChecklist/index',
- '/pages/questionStatistics/index',
- '/pages/inspectionStatistics/index',
- '/pages/seizureRecord/index',
- '/pages/seizeStatistics/index',
- '/pages/eikonStatistics/index',
- '/pages/workProfile/index',
- '/pages/voiceSubmissionDraft/index'
- ],
- //站长
- test: [
- '/pages/attendanceStatistics/index',
- '/pages/inspectionChecklist/index',
- '/pages/questionStatistics/index',
- '/pages/inspectionStatistics/index',
- '/pages/seizureRecord/index',
- '/pages/seizeStatistics/index',
- '/pages/eikonStatistics/index',
- '/pages/workProfile/index',
- '/pages/voiceSubmissionDraft/index'
- ],
- zhijianke: [
- '/pages/attendanceStatistics/index',
- '/pages/inspectionChecklist/index',
- '/pages/questionStatistics/index',
- '/pages/inspectionStatistics/index',
- '/pages/seizureRecord/index',
- '/pages/seizeStatistics/index',
- '/pages/eikonStatistics/index',
- '/pages/workProfile/index',
- '/pages/voiceSubmissionDraft/index'
- ],
- };
- // 检查角色是否存在配置
- if (!rolePermissions[role]) {
- console.warn(`未找到角色 ${role} 的权限配置`);
- return false;
- }
- // 检查路径是否在角色的权限列表中
- return rolePermissions[role].includes(path);
- }
|