8 changed files with 0 additions and 4289 deletions
|
Before Width: | Height: | Size: 6.7 KiB |
@ -1,44 +0,0 @@ |
|||||
<template> |
|
||||
<div class="footer_nav"> |
|
||||
<van-tabbar class="footer-bar" v-model="data.footerActive" :route="true" safe-area-inset-bottom> |
|
||||
<van-tabbar-item name="Home" replace icon="wap-home" to="/enterprise/enterpriseHome">{{ |
|
||||
$t("common.lang_home") |
|
||||
}}</van-tabbar-item> |
|
||||
</van-tabbar> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script setup name="footerNav"> |
|
||||
let data = reactive({ |
|
||||
footerActive: "Home", |
|
||||
}); |
|
||||
</script> |
|
||||
<style lang="less" scoped> |
|
||||
.footer_body { |
|
||||
height: 1.5rem; |
|
||||
} |
|
||||
|
|
||||
.footer_nav { |
|
||||
height: 1.5rem; |
|
||||
background-color: #fff; |
|
||||
box-shadow: 0 0 0.15rem #d7d7d7; |
|
||||
|
|
||||
.footer-bar { |
|
||||
position: absolute; |
|
||||
bottom: 0.2rem; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.van-hairline--top-bottom:after, |
|
||||
.van-hairline-unset--top-bottom:after { |
|
||||
border: 0; |
|
||||
} |
|
||||
|
|
||||
:deep(.van-tabbar-item) { |
|
||||
color: #bbb; |
|
||||
} |
|
||||
|
|
||||
:deep(.van-tabbar-item--active) { |
|
||||
color: #1989fa; |
|
||||
} |
|
||||
</style> |
|
||||
File diff suppressed because it is too large
@ -1,97 +0,0 @@ |
|||||
/** |
|
||||
* 字典工具 —— 通用字典加载、缓存、翻译 |
|
||||
* 使用方式: |
|
||||
* import { loadDict, getDictText, getDictColumns } from '@/util/dictUtil'; |
|
||||
* loadDict('caseType'); // 加载字典(自动缓存)
|
|
||||
* getDictText('caseType', 0); // 翻译 value → text
|
|
||||
* getDictColumns('caseType'); // 获取 [{text, value}] 用于 van-picker
|
|
||||
*/ |
|
||||
import { queryDict } from '@/api/enterprise'; |
|
||||
|
|
||||
// 内存缓存 { dictType → [{text, value}] }
|
|
||||
const dictStore = {}; |
|
||||
|
|
||||
// sessionStorage key 生成
|
|
||||
const cacheKey = (dictType) => `DICT_CACHE::${dictType}`; |
|
||||
|
|
||||
/** |
|
||||
* 解析接口响应,兼容多种结构 |
|
||||
*/ |
|
||||
const parseRows = (res) => { |
|
||||
if (Array.isArray(res)) return res; |
|
||||
if (res && Array.isArray(res.rows)) return res.rows; |
|
||||
if (res && Array.isArray(res.data)) return res.data; |
|
||||
if (res && res.data && Array.isArray(res.data.rows)) return res.data.rows; |
|
||||
return []; |
|
||||
}; |
|
||||
|
|
||||
/** |
|
||||
* 标准化为 [{text, value}] |
|
||||
*/ |
|
||||
const normalizeColumns = (rows) => { |
|
||||
return rows.map(item => ({ |
|
||||
text: item.dictLabel || item.label || item.name || '', |
|
||||
value: item.dictValue || item.value || item.code || '' |
|
||||
})).filter(c => c.text); |
|
||||
}; |
|
||||
|
|
||||
/** |
|
||||
* 加载指定字典类型(含 sessionStorage 缓存) |
|
||||
* @param {string} dictType 字典类型 |
|
||||
* @param {Function} [onSuccess] 可选回调,接收 columns [{text, value}] |
|
||||
* @param {Function} [onError] 可选失败回调 |
|
||||
*/ |
|
||||
export const loadDict = (dictType, onSuccess, onError) => { |
|
||||
// 内存命中直接返回
|
|
||||
if (dictStore[dictType] && dictStore[dictType].length > 0) { |
|
||||
onSuccess && onSuccess(dictStore[dictType]); |
|
||||
return; |
|
||||
} |
|
||||
// sessionStorage 命中
|
|
||||
const cached = sessionStorage.getItem(cacheKey(dictType)); |
|
||||
if (cached) { |
|
||||
try { |
|
||||
const columns = JSON.parse(cached); |
|
||||
if (Array.isArray(columns) && columns.length > 0) { |
|
||||
dictStore[dictType] = columns; |
|
||||
onSuccess && onSuccess(columns); |
|
||||
return; |
|
||||
} |
|
||||
} catch (e) { /* 解析失败继续走接口 */ } |
|
||||
} |
|
||||
// 请求接口
|
|
||||
queryDict({ dictType }, (res) => { |
|
||||
const columns = normalizeColumns(parseRows(res)); |
|
||||
dictStore[dictType] = columns; |
|
||||
if (columns.length > 0) { |
|
||||
sessionStorage.setItem(cacheKey(dictType), JSON.stringify(columns)); |
|
||||
} |
|
||||
onSuccess && onSuccess(columns); |
|
||||
}, (err) => { |
|
||||
onError && onError(err); |
|
||||
}); |
|
||||
}; |
|
||||
|
|
||||
/** |
|
||||
* 获取字典翻译文本 |
|
||||
* @param {string} dictType 字典类型 |
|
||||
* @param {*} val 字典值 |
|
||||
* @param {string} [fallback='-'] 未匹配时的降级显示 |
|
||||
* @returns {string} |
|
||||
*/ |
|
||||
export const getDictText = (dictType, val, fallback) => { |
|
||||
if (val === undefined || val === null || val === '') return fallback !== undefined ? fallback : '-'; |
|
||||
const columns = dictStore[dictType] || []; |
|
||||
const key = String(val); |
|
||||
const found = columns.find(c => String(c.value) === key); |
|
||||
return found ? found.text : (fallback !== undefined ? fallback : val); |
|
||||
}; |
|
||||
|
|
||||
/** |
|
||||
* 获取字典列表(用于 van-picker :columns) |
|
||||
* @param {string} dictType |
|
||||
* @returns {Array} [{text, value}] |
|
||||
*/ |
|
||||
export const getDictColumns = (dictType) => { |
|
||||
return dictStore[dictType] || []; |
|
||||
}; |
|
||||
@ -1,59 +0,0 @@ |
|||||
import {_form, _post} from '../http/index' |
|
||||
import { baseUrl } from "../config/env"; |
|
||||
import axios from 'axios'; |
|
||||
const http = axios.create({ |
|
||||
traditional: true, |
|
||||
contentType : "application/json", |
|
||||
timeout: 1000 * 500000, // 1 秒
|
|
||||
}); |
|
||||
const uploadFile = (files,callback) => { |
|
||||
files.status = "uploading"; |
|
||||
files.message = "上传中..."; |
|
||||
// 需要使用 FormData 进行文件上传
|
|
||||
let form = new FormData(); |
|
||||
form.append("file", files.file); |
|
||||
axios({ |
|
||||
method: "post", |
|
||||
url: baseUrl+ "/app-enf/common/file/upload", |
|
||||
data: form, |
|
||||
headers: { |
|
||||
'Content-Type': 'multipart/form-data' |
|
||||
} |
|
||||
}) |
|
||||
.then((res) => { |
|
||||
files.status = "done"; |
|
||||
files.message = "上传成功"; |
|
||||
callback && callback(res); |
|
||||
}) |
|
||||
.catch((err) => { |
|
||||
files.status = "failed"; |
|
||||
files.message = "上传失败"; |
|
||||
console.log(err); |
|
||||
}); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
const nameCorrect=(name)=>{ |
|
||||
//筛选出两个字人名
|
|
||||
let name1=[{}]; |
|
||||
name1=String(name).split(" "); |
|
||||
// console.log(name1);
|
|
||||
if(name1[0].length==2){ |
|
||||
if(name1.length>1){ |
|
||||
return (String(name1[0]).substr(0,1)+"\u3000"+String(name1[0]).substr(1)+" "+name1[1]); |
|
||||
}else{ |
|
||||
return (String(name1[0]).substr(0,1)+"\u3000"+String(name1[0]).substr(1)); |
|
||||
} |
|
||||
}else{ |
|
||||
return name; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 手机号加密
|
|
||||
const encryptPhone=(num)=>{ |
|
||||
if(!/^\d{11}$/.test(num))return num; |
|
||||
const al= num.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"); |
|
||||
return al; |
|
||||
} |
|
||||
|
|
||||
export{uploadFile,nameCorrect,encryptPhone}; |
|
||||
@ -1,19 +0,0 @@ |
|||||
const access_key = '6374106c5eb449a4ad6c2430f30796e6'; |
|
||||
const access_secret = '434fec85aa5846e88bbeb8fac6cf6d7f'; |
|
||||
// generateRandomNumber()
|
|
||||
const nonce = "887954"; |
|
||||
const timestamp = `${Date.now()}`; |
|
||||
|
|
||||
const str = [access_secret, nonce, timestamp] |
|
||||
.sort() |
|
||||
.reduce((str, item) => str += item, ''); |
|
||||
|
|
||||
// 最终还需要转成全小写
|
|
||||
const signature = sha1(str).toString().toLowerCase(); |
|
||||
var siqObject = { |
|
||||
access_key: access_key, |
|
||||
nonce: nonce, |
|
||||
timestamp: timestamp, |
|
||||
signature: signature, |
|
||||
}; |
|
||||
|
|
||||
@ -1,11 +0,0 @@ |
|||||
const getYear = () =>{ |
|
||||
var date = new Date(); |
|
||||
return date.getFullYear(); |
|
||||
} |
|
||||
const getMouth = () =>{ |
|
||||
var date = new Date(); |
|
||||
var month = date.getMonth(); |
|
||||
return month + 1; |
|
||||
} |
|
||||
|
|
||||
export { getYear, getMouth}; |
|
||||
Loading…
Reference in new issue