Commit 4ef34e45 authored by 李苏's avatar 李苏 💬

1.erpapp的样式变更

首页样式调整
登录样式调整
个人调整
表单调整
流程调整
其他样式调整
parent a7a0833f
{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
"version": "0.0",
"configurations": [{
"app-plus" :
{
"launchtype" : "local"
},
"default" :
{
"launchtype" : "local"
},
"h5" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]
}
......@@ -6,7 +6,6 @@
onLaunch: function() {
uni.getSystemInfo({
success: function(e) {
// #ifdef APP-PLUS
// 检测升级
appUpdate()
......@@ -155,6 +154,36 @@
@import "plugin/colorui/main.css";
@import "plugin/colorui/icon.css";
@import "plugin/colorui/animation.css";
.lccontent {
padding: 60rpx;
padding-left:20%;
.row {
padding: 24rpx 0;
}
}
.bg-blue{
background-color: #0081FF!important;
color: #FFFFFF!important;
}
.newts{
text-align: center;font-size: 16px!important;
}
.newcont{
text-align: center;font-size: 15px!important;
}
.wid100{
width: 100%!important;
}
.tkqx{
width: 50%;background-color: #FFFFFF!important;color: #666;font-size: 16px!important;font-weight: 800;
}
.tkqd{
width: 50%;background-color: #FFFFFF!important;color: #0081FF;font-size: 16px!important;font-weight: 800;
}
.cuIcon-close{
display: none;
}
.nav-list {
display: flex;
flex-wrap: wrap;
......
File added
File added
File added
File added
File added
......@@ -9,20 +9,16 @@ const router = new Router({
encodeURI:true,
routes: [...modules]//路由表
});
console.log(router)
const whiteList = ['/pages/login/login']
//全局路由前置守卫
router.beforeEach((to, from, next) => {
console.log("to")
console.log(to)
console.log("from")
console.log(from)
console.log("next")
console.log(next)
let token=uni.getStorageSync("ACCESS_TOKEN");
console.log(token)
if(token){
next()
}else if(to.name=="fwqsz"){
next()
}else{
if (whiteList.indexOf(to.path) !== -1) {
next()
......
......@@ -6,6 +6,13 @@ const routes = [
title: '登录',
},
},
{
path: "/pages/login/fwqsz",
name: 'fwqsz',
meta: {
title: '服务器设置',
},
},
{
//注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦
path: '/pages/index/index',
......@@ -30,6 +37,13 @@ const routes = [
title: '个人中心',
},
},
{
path: '/pages/user/setting',
name: 'setting',
meta: {
title: '用户设置',
},
},
{
path: '/pages/user/userdetail',
name: 'userdetail',
......
let BASE_URL = ''
let fwq=""
let dkh=""
// 修改
try {
fwq = uni.getStorageSync('fwq');
dkh = uni.getStorageSync('dkh');
console.log(fwq)
console.log(dkh)
} catch (e) {
// error
}
let newUrl = 'http://'+fwq+'/'+dkh
let newUrl = 'http://'+fwq
console.log(BASE_URL)
if (process.env.NODE_ENV == 'development') {
BASE_URL = newUrl
......
......@@ -180,29 +180,29 @@ export const us = {
system:[
{
title:"采购计划审批",
icon:icon_prefix+"kaoqing.png",
icon:icon_prefix+"ztnew.png",
description:"采购计划审批",
useCount:1000,
page:'cgjh'
},
{
title:"领料单审批",
icon:icon_prefix+"qiandao.png",
description:"签到",
icon:icon_prefix+"renwu.png",
description:"领料单审批",
useCount:1000,
page:'lldsp'
},
{
title:"采购订单审批",
icon:icon_prefix+"qingjia2.png",
description:"请假",
icon:icon_prefix+"hetong.png",
description:"采购订单审批",
useCount:1000,
page:'cgddsp'
},
{
title:"销售订单审批",
icon:icon_prefix+"waichu.png",
description:"外出",
icon:icon_prefix+"liucheng.png",
description:"销售订单审批",
useCount:1000,
page:'xsddsp'
},
......
<template>
<view class="sidebar">
<view class="sidebar_tab">
<view class="sidebar_ico">
</view>
<view class="sidebar_title">
{{title}}
</view>
</view>
<slot></slot>
</view>
</template>
<script>
export default {
name: 'm-sidebar',
props:{
title: String,
},
data() {
return{}
}
}
</script>
<style lang="scss" scoped>
.sidebar_tab{
display: flex;
align-items: center;
.sidebar_ico{
border-width: 0px;
width: 2px;
height: 18px;
background: inherit;
background-color: rgba(19, 98, 253, 1);
border: none;
border-radius: 2px;
box-shadow: none;
}
.sidebar_title{
margin-left: 20rpx;
font-weight: bold;
font-size: 32rpx;
}
}
</style>
<template>
<view class="steps">
<view class="date">
<view class="">
<text>{{item[date] | formatTime('yyyy-MM-dd')}}</text>
<slot name='dateTop'></slot>
</view>
<!-- <view class="">
<text>{{item[date] | formatTime('hh:mm:ss')}}</text>
<slot name='dateBot'></slot>
</view> -->
</view>
<view class="tail" :class="{'active-tail':activity === index}"></view>
<view class="node" :class="{'active-node':activity === index}"></view>
<view class="wrapper">
<view class="">
<text>{{item[wrapperStatus]}}</text>
<slot name='status'></slot>
</view>
<view class="wrapperTitle">
<text>{{wrapperTitle}}</text>
<slot name='content'></slot>
</view>
</view>
</view>
</template>
<script>
/*
activity: 当前进度条状态
wrapperStatus:流程状态对应字段
wrapperTitle:详情对应字段
index:进度条
date:时间
*/
export default {
name: 'm-steps',
data() {
return {
}
},
filters: {
filterzt:function(a){
const ztList = {"P": "计划", "F":"确认","C":"完成","I":"开始","S":"审批"};
return ztList[a]
},
jqfilters:function(a){
const ztList = {"BJ": "病假", "SJ":"事假","JB":"加班","TS":"调休","QT":"其他"};
return ztList[a]
},
ztTrans: function(a) {
const ztList = {0: "创建", 1:"提交",2:"退回",3:"撤回",4:"转交",5:"调度",8:"待处理"};
return ztList[a]
},
formatTime: function(time) {
if(time!=null&&time!="")
{
var date = new Date(time);
return date.Format("MM-dd hh:mm")
}else{
return "";
}
},
formatDate:function(time){
if(time!=null&&time!="")
{
var date = new Date(time);
return date.Format("yyyy-MM-dd")
}else{
return "";
}
}
},
props: {
item: {
type: Object,
},
activity: {
type: Number,
default: 0
},
wrapperStatus: {
type: String,
default: 'status'
},
wrapperTitle: {
type: String,
default: 'content'
},
date: {
type: String,
default: 'date'
},
index: {
type: Number,
default: 0
}
}
}
</script>
<style lang="scss" scoped>
.steps {
position: relative;
padding-bottom: 40rpx;
&:last-child {
.tail {
display: none;
}
}
.date {
position: absolute;
top: -6rpx;
color: #AAAAAA;
text-align: center;
font-size: 30rpx;
}
.active-tail {
border-left: 2px solid rgb(11, 189, 135) !important
}
.active-node {
background-color: rgb(11, 189, 135) !important;
}
.tail {
position: absolute;
left: 200rpx;
height: 100%;
border-left: 4rpx solid rgb(11, 189, 135)
}
.node {
left: 190rpx;
width: 24rpx;
height: 24rpx;
position: absolute;
background-color: rgb(11, 189, 135);
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
}
.wrapper {
position: relative;
padding-left: 240rpx;
top: -6rpx;
.wrapperTitle{
color: #AAAAAA;
}
}
}
</style>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title class="title">[文件管理器]</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<style type="text/css">
.content {background: transparent;}
.fixed {position: fixed;bottom: 0;left: 0;right: 0;width: 100%;}
.content .mask {top: 0;background: rgba(0,0,0,.4);z-index: 90;}
.content .file-content {z-index: 91;height: 60px;background: #fff;text-align: center;}
.btn {position: relative;}
.btn .file {position: absolute;z-index: 93;left: 0;right: 0;top: 0;bottom: 0;height: 60px;width: 100%;opacity: 0;}
.btn-bg {margin-top: 10px;background: #0066CC;color: #fff;width: 80%;height: 40px;border: 0;border-radius: 5px;}
.tis {top: 0;z-index: 95;display: none;justify-content: center;align-items: center;}
.tis .tis-content {background: #fff;width: 60%;border-radius: 10px;padding: 20px 0;}
.tis .tis-content img {width: 50px;height: 50px;}
.tis-progress {margin: 10px 0;color: #999;}
.cancel-btn {margin-top: 30px;height: 30px;line-height: 1;padding: 0 2em;background: #e3e3e3;color: #898989;border: 0;border-radius: 5px;}
</style>
</head>
<body>
<div class="content">
<div class="fixed mask"></div>
<div align="center" class="fixed tis">
<div class="tis-content">
<div class="logo"></div>
<div class="tis-progress">
努力上传中..
</div>
<div class="cancel">
<button type="button" class="cancel-btn">取消上传</button>
</div>
</div>
</div>
<div class="fixed file-content">
<div class="btn">
<button type="button" class="btn-bg">打开文件管理器</button>
<input class="file" type="file" />
</div>
</div>
</div>
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
<script src="js/h5-uploader.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
let mask = document.querySelector(".mask");
let fileDom = document.querySelector(".file");
let tis = document.querySelector(".tis");
let logoDom = document.querySelector(".logo");
let progress = document.querySelector(".tis-progress");
let cancel = document.querySelector(".cancel-btn");
let createUpload = (file,{ url, key='file', header = {},data = {},addName,addSize}) => {
console.log(`
上传地址:${url}\n
上传附件:${file.name} 附件大小:${file.size}\n
请求头:${JSON.stringify(header)}\n
业务参数:${JSON.stringify(data)}
`);
if (!url) {return;}
tis.style.display = 'flex';
let formData = new FormData();
for (let keys in data) {formData.append(keys, data[keys]);}
if (addName) {formData.append(addName, file.name);console.log('补充参数:',JSON.stringify({addName:file.name}));}
if (addSize) {formData.append(addSize, file.size);console.log('补充参数:',JSON.stringify({addSize:file.size}));}
formData.append(key, file);
let xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
for (let keys in header) {
xhr.setRequestHeader(keys, header[keys]);
}
xhr.upload.addEventListener("progress", function(event) {
if(event.lengthComputable){
let percent = Math.ceil(event.loaded * 100 / event.total) + "%";
progress.innerText = `努力上传中..${percent}`;
}
}, false);
xhr.ontimeout = function(){
// xhr请求超时事件处理
progress.innerText = '请求超时';
setTimeout(()=>{
tis.style.display = 'none';
plus.webview.currentWebview().close();
},1000);
};
xhr.onreadystatechange = (ev) => {
if(xhr.readyState == 4) {
console.log('status:'+xhr.status);
if (xhr.status == 200) {
progress.innerText = '上传成功';
console.log('服务端返回数据:'+xhr.responseText);
location.href = `callback?fileName=${escape(file.name)}&size=${file.size}&str=${escape(xhr.responseText)}`;
}
else {
progress.innerText = '上传失败了';
if (xhr.status == 0) {
console.log('请检查请求头Content-Type与服务端是否匹配,并确认服务端已正确开启跨域');
}
}
setTimeout(()=>{
tis.style.display = 'none';
plus.webview.currentWebview().close();
},1000);
}
};
xhr.send(formData);
cancel.addEventListener("click", ()=>{
xhr.abort();
plus.webview.currentWebview().close();
});
}
mask.addEventListener("click", () => {
plus.webview.currentWebview().close();
});
document.addEventListener('UniAppJSBridgeReady', () => {
let {url,key,header,formData,logo,maxSize,addName,addSize} = plus.webview.currentWebview();
if (logo) {
let img = document.createElement('img');
img.src = logo;
logoDom.appendChild(img);
}
fileDom.value = '';
fileDom.addEventListener('change', (event) => {
let file = fileDom.files[0];
// 默认限制文件小于10M,可自行修改
if(file.size > (1024*1024 * Math.abs(maxSize))) {
plus.nativeUI.toast(`单个文件请勿超过${maxSize}M,请重新上传`);
return;
}
createUpload(file,{ url, key,header,addName,addSize,formData});
}, false);
});
\ No newline at end of file
{
"name" : "格物OA",
"name" : "格物ERP",
"appid" : "__UNI__1E6036D",
"description" : "",
"versionName" : "1.0.0",
......@@ -8,8 +8,7 @@
"app-plus" : {
/* 5+App特有相关 */
"modules" : {
"Maps" : {},
"Push" : {}
"Maps" : {}
},
/* 模块配置 */
"distribute" : {
......
......@@ -13,6 +13,10 @@
"path": "pages/basics/layout",
"style": {}
},
{
"path": "pages/index/index",
"style": {}
},
{
"path": "pages/basics/background",
"style": {}
......@@ -256,6 +260,14 @@
{
"path": "pages/xsddsp/allcklc",
"style": {}
},
{
"path": "pages/login/fwqsz",
"style": {}
},
{
"path": "pages/user/setting",
"style": {}
}
],
"globalStyle": {
......
......@@ -77,7 +77,7 @@
<view>备注:<text>{{item.bz||"未备注"}}</text></view>
</view>
<view class="flex justify-between" style="padding-top: 10px;margin-bottom: 0px;">
<view >状态:
<view style="font-weight: 600;">状态:
<text style="color:#FBBD08;">
{{item.zt|filterzt}}
</text>
......@@ -97,19 +97,15 @@
<!-- 转交确认模态框 -->
<view class="cu-modal" :class="modalName=='zj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否转交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrzj">确定</button>
<view class="action wid100">
<button class="tkqx cu-btn " @tap="hideModal">取消</button>
<button class="tkqd cu-btn " @tap="qrzj">确定</button>
</view>
</view>
</view>
......@@ -117,19 +113,16 @@
<!-- 退回确认模态框 -->
<view class="cu-modal" :class="modalName=='th'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否退回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrth">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrth">确定</button>
</view>
</view>
</view>
......@@ -137,19 +130,16 @@
<!-- 撤回确认模态框 -->
<view class="cu-modal" :class="modalName=='ch'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否撤回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrch">确定</button>
<view class="cu-bar bg-white" >
<view class="action flex justify-around wid100" >
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrch">确定</button>
</view>
</view>
</view>
......@@ -157,19 +147,16 @@
<!-- 提交确认模态框 -->
<view class="cu-modal" :class="modalName=='tj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">
提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否提交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrtj">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrtj">确定</button>
</view>
</view>
</view>
......@@ -215,7 +202,7 @@
</view>
<!-- 事务处理 -->
<!-- 转交模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='zjmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='zjmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......@@ -269,7 +256,7 @@
</view>
</view>
<!-- 提交模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='tjmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='tjmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......@@ -323,7 +310,7 @@
</view>
</view>
<!-- 撤回模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='chmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='chmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......@@ -377,7 +364,7 @@
</view>
</view>
<!-- 撤回模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='thmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='thmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......
......@@ -42,7 +42,7 @@
<view>生成方式:<text>{{transScfs(item.djly)}}</text></view>
</view>
<view class="flex justify-between" style="padding-top: 10px;margin-bottom: 0px;">
<view >状态:
<view style="font-weight: 600;" >状态:
<text style="color:#FBBD08;">
{{item.zt|filterzt}}
</text>
......@@ -62,19 +62,15 @@
<!-- 转交确认模态框 -->
<view class="cu-modal" :class="modalName=='zj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否转交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrzj">确定</button>
<view class="action wid100">
<button class="tkqx cu-btn " @tap="hideModal">取消</button>
<button class="tkqd cu-btn " @tap="qrzj">确定</button>
</view>
</view>
</view>
......@@ -82,19 +78,16 @@
<!-- 退回确认模态框 -->
<view class="cu-modal" :class="modalName=='th'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否退回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrth">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrth">确定</button>
</view>
</view>
</view>
......@@ -102,19 +95,16 @@
<!-- 撤回确认模态框 -->
<view class="cu-modal" :class="modalName=='ch'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否撤回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrch">确定</button>
<view class="cu-bar bg-white" >
<view class="action flex justify-around wid100" >
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrch">确定</button>
</view>
</view>
</view>
......@@ -122,19 +112,16 @@
<!-- 提交确认模态框 -->
<view class="cu-modal" :class="modalName=='tj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">
提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否提交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrtj">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrtj">确定</button>
</view>
</view>
</view>
......@@ -180,7 +167,7 @@
</view>
<!-- 事务处理 -->
<!-- 转交模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='zjmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='zjmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......@@ -234,7 +221,7 @@
</view>
</view>
<!-- 提交模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='tjmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='tjmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......@@ -288,7 +275,7 @@
</view>
</view>
<!-- 撤回模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='chmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='chmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......@@ -342,7 +329,7 @@
</view>
</view>
<!-- 撤回模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='thmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='thmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body" >
......
......@@ -92,17 +92,14 @@
</view>
<view class="cu-form-group padding-bottom ">
<view >
<view class="cu-timeline " v-for="(item,index) in lc" :key="index">
<view class="cu-time" style="width: 80px;">{{item.nodeName}}</view>
<view class="cu-item text-gray">
<view class="bg-blue content" v-if="item.nodeName!='结束'" >
<text></text> {{item.actionTime|formatTime(item.actionTime)}}{{item.actionUserName}}{{item.action|ztTrans(item.action)}}
<view class="lccontent">
<mSidebar title="进度详情">
<view class="row">
<m-steps :wrapperTitle='(item.actionUserName+getAction(item.action))||""' v-for="(item, index) in lc" :item='item' :key="index" :index='index' :activity= 'activity' date='actionTime' >
<text slot="status">{{item.nodeName}}</text>
</m-steps>
</view>
<view class="bg-blue content" v-if="item.nodeName=='结束'">
<text></text> {{'结束'}}
</view>
</view>
</mSidebar>
</view>
</view>
</view>
......@@ -188,6 +185,10 @@
},
},
methods: {
getAction: function(a) {
const ztList = {0: "创建", 1:"提交",2:"退回",3:"撤回",4:"转交",5:"调度",8:"待处理"};
return ztList[a]
},
// 流程
apigetlc(){
let url="wf/query/wflog/"+this.cgjh.wfinstid
......
......@@ -46,7 +46,7 @@
<view>需求日期:<text>{{item.xqrq|formatDate}}</text></view>
</view>
<view class="flex justify-between" style="padding-top: 10px;margin-bottom: 0px;">
<view >状态:
<view style="font-weight: 600;">状态:
<text style="color:#FBBD08;">
{{item.zt|filterzt}}
</text>
......@@ -66,19 +66,15 @@
<!-- 转交确认模态框 -->
<view class="cu-modal" :class="modalName=='zj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否转交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrzj">确定</button>
<view class="action wid100">
<button class="tkqx cu-btn " @tap="hideModal">取消</button>
<button class="tkqd cu-btn " @tap="qrzj">确定</button>
</view>
</view>
</view>
......@@ -86,19 +82,16 @@
<!-- 退回确认模态框 -->
<view class="cu-modal" :class="modalName=='th'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否退回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrth">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrth">确定</button>
</view>
</view>
</view>
......@@ -106,19 +99,16 @@
<!-- 撤回确认模态框 -->
<view class="cu-modal" :class="modalName=='ch'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否撤回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrch">确定</button>
<view class="cu-bar bg-white" >
<view class="action flex justify-around wid100" >
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrch">确定</button>
</view>
</view>
</view>
......@@ -126,19 +116,16 @@
<!-- 提交确认模态框 -->
<view class="cu-modal" :class="modalName=='tj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">
提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否提交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrtj">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrtj">确定</button>
</view>
</view>
</view>
......
......@@ -89,7 +89,7 @@
</view>
<view class="cu-form-group padding-bottom ">
<view >
<view class="cu-timeline " v-for="(item,index) in lc" :key="index">
<!-- <view class="cu-timeline " v-for="(item,index) in lc" :key="index">
<view class="cu-time" style="width: 80px;">{{item.nodeName}}</view>
<view class="cu-item text-gray">
<view class="bg-blue content" v-if="item.nodeName!='结束'">
......@@ -99,6 +99,15 @@
<text></text> {{'结束'}}
</view>
</view>
</view> -->
<view class="lccontent">
<mSidebar title="进度详情">
<view class="row">
<m-steps :wrapperTitle='(item.actionUserName+getAction(item.action))||""' v-for="(item, index) in lc" :item='item' :key="index" :index='index' :activity= 'activity' date='actionTime' >
<text slot="status">{{item.nodeName}}</text>
</m-steps>
</view>
</mSidebar>
</view>
</view>
</view>
......@@ -184,6 +193,10 @@
},
},
methods: {
getAction: function(a) {
const ztList = {0: "创建", 1:"提交",2:"退回",3:"撤回",4:"转交",5:"调度",8:"待处理"};
return ztList[a]
},
// 流程
apigetlc(){
let url="wf/query/wflog/"+this.cgjh.wfinstid
......
<template>
<view class="bg-white">
<cu-custom bgColor="bg-white" isBack="true">
<slot slot="backText">返回</slot>
</cu-custom>
<view>
<view class="cu-form-group " >
<view class="title">当前地址:</view>
<input disabled="" placeholder="" name="input" >
{{fwq||'未设置'}}
</input>
</view>
<view class="cu-form-group " v-for="(item,index) in fwqlist" :key="index">
<view class="title">地址{{index+1}}:</view>
<input placeholder="" v-model="item.fwq" name="input" >
<view class="flex" style="width: 90px;justify-content: space-around;">
<view style="color: red;" @tap="delfwq(item,index)">删除</view>
<!-- <view style="color: #007AFF;">编辑</view> -->
<view style="color:#39B54A;" @tap="select(item)">选择</view>
</view>
</input>
</view>
<view class="padding">
<button class="cu-btn block line-orange lg margin " @tap="adddz()">
<text class="cuIcon-add"></text> 新增地址</button>
</view>
</view>
</view>
</template>
<script>
import http from '@/common/service/service.js';
export default {
data:function(){
return{
fwq:"",
fwqlist:[],
infor:{userName:"",password:""}
}
},
methods:{
delfwq(item,index){
this.fwqlist.splice(index,1);
},
adddz(){
this.fwqlist.push({fwq:""})
},
select(item){
let newfwqlist=[]
this.fwqlist.forEach(e=>{
if(e.fwq!=""){
newfwqlist.push(e)
}
})
uni.setStorage({
key: 'fwqlist',
data: newfwqlist,
success: function () {
}
});
uni.setStorage({
key: 'fwq',
data: item.fwq,
success: function () {
}
});
if(item.fwq){
http.config.baseUrl='http://'+item.fwq
this.$Router.push({
path: '/pages/login/login', query:{
infor:this.infor
},
})
}else{
this.$tip.toast('请填入地址!')
}
}
},
onLoad(d) {
let infor=JSON.parse(d.query).infor
this.infor=infor
let that =this
// 获取本地服务器列表
uni.getStorage({
key:'fwqlist',
success:function(e){
that.fwqlist=e.data
},
fail() {
console.log("获取失败,请手动输入")
}
})
uni.getStorage({
key:'fwq',
success:function(e){
console.log("获取服务器")
console.log(e)
that.fwq=e.data
},
fail() {
console.log("获取失败,请手动输入")
}
})
}
}
</script>
<style>
</style>
......@@ -3,7 +3,7 @@
<scroll-view scroll-y class="page">
<view class="text-center" :style="[{animation: 'show ' + 0.4+ 's 1'}]">
<image src="http://119.3.92.249:18080/dmg/images/logo.ico" mode='aspectFit' class="zai-logo "></image>
<view class="zai-title text-shadow" style="color: #FFFFFF;">GAVEL ERP </view>
<view class="zai-title text-shadow" style="margin-top: -20px;color: #FFFFFF;font-size:25px;">格物软件</view>
</view>
<view class="box padding-lr-xl login-paddingtop" :style="[{animation: 'show ' + 0.6+ 's 1'}]">
<block v-if="loginWay==1">
......@@ -18,16 +18,19 @@
<text :class="[showPassword ? 'cuIcon-attention' : 'cuIcon-attentionforbid']" @click="changePassword"></text>
</view>
</view>
<view @click="gofwqsz" class="padding text-right" style="color: #EEEEEE;">
服务器设置
</view>
<!-- 端口号 dkh该为项目后缀 -->
<view class="cu-form-group margin-top shadow-warp" :class="[shape=='round'?'round':'']">
<!-- <view class="cu-form-group margin-top shadow-warp" :class="[shape=='round'?'round':'']">
<view class="title"><text class="cuIcon-settings margin-right-xs"></text>服务器:</view>
<input placeholder="请输入服务器地址及端口号" name="input" v-model="fwq" ></input>
</view>
<view class="cu-form-group margin-top shadow-warp" :class="[shape=='round'?'round':'']">
<view class="title"><text class="cuIcon-settings margin-right-xs"></text>服务名:</view>
<input placeholder="请输入服务名" name="input" v-model="dkh"></input>
</view>
<view class="padding text-center margin-top">
</view> -->
<view class="padding text-center ">
<button style="width: 100%;" class="cu-btn bg-blue lg margin-right shadow" :loading="loading" :class="[shape=='round'?'round':'']"
@tap="onLogin"><text space="emsp">{{loading ? "登录中...":" 登录 "}}</text>
</button>
......@@ -112,7 +115,13 @@
}
};
},
onLoad:function(){
onLoad:function(da){
if(da&&da.query){
let infor=JSON.parse(da.query).infor
this.userName=infor.userName
this.password=infor.password
}
var that=this
uni.getStorage({
key:'userName',
......@@ -132,24 +141,24 @@
console.log("获取失败,请手动输入")
}
})
uni.getStorage({
key:'fwq',
success:function(e){
that.fwq=e.data
},
fail() {
console.log("获取失败,请手动输入")
}
})
uni.getStorage({
key:'dkh',
success:function(e){
that.dkh=e.data
},
fail() {
console.log("获取失败,请手动输入")
}
})
// uni.getStorage({
// key:'fwq',
// success:function(e){
// that.fwq=e.data
// },
// fail() {
// console.log("获取失败,请手动输入")
// }
// })
// uni.getStorage({
// key:'dkh',
// success:function(e){
// that.dkh=e.data
// },
// fail() {
// console.log("获取失败,请手动输入")
// }
// })
// #ifdef APP-PLUS
var that=this
plus.runtime.getProperty( plus.runtime.appid, function ( wgtinfo ) {
......@@ -177,9 +186,24 @@
},
methods: {
...mapActions([ "mLogin","PhoneLogin","ThirdLogin" ]),
gofwqsz(){
this.$Router.push({
path: '/pages/login/fwqsz', query:{
infor:{
userName:this.userName,
password:this.password
}
},
})
},
onLogin: function (){
http.config.baseUrl='http://'+this.fwq+'/'+this.dkh
// http.config.baseUrl='http://'+this.fwq+'/'+this.dkh
let _this=this;
if(http.config.baseUrl=="http://"){
this.$tip.toast('请先设置服务器');
return;
}
if(!this.userName || this.userName.length==0){
this.$tip.toast('请填写用户名');
return;
......@@ -239,20 +263,6 @@
console.log("用户名获取成功")
}
});
uni.setStorage({
key: 'fwq',
data: _this.fwq,
success: function () {
console.log("服务器获取成功")
}
});
uni.setStorage({
key: 'dkh',
data: _this.dkh,
success: function () {
console.log("端口号获取成功")
}
});
//ACCESS_TOKEN
this.$tip.success('登录成功!')
this.$Router.replaceAll({name:'index'})
......
<template>
<view>
<view style="height: 100vh;background-color:#FFFFFF">
<scroll-view scroll-y class="page">
<!-- 头部logo-->
<view class="UCenter-bg">
<image :src="personalList.avatar" class="png round animation-slide-right margin-bottom-sm" mode="scaleToFill" :style="[{animationDelay: '0.1s'}]"></image>
<image src="https://static.jeecg.com/upload/test/wave_1595818053612.gif" mode="scaleToFill" class="gif-wave"></image>
<view class="userinforbg" style="height: 150px;background-color: white;">
<view class="flex" style="padding-top: 50px;padding-left: 50px;">
<image style="border-radius: 50%;height: 70px;width: 70px;" src="../../static/tx.jpg"></image>
<view style="height: 70px;line-height: 70px;padding-left: 20px;font-size: 18px!important;font-weight: 550;">
{{userName}}
</view>
<view class="padding flex text-center text-grey bg-white shadow-warp">
<view class="flex flex-sub flex-direction solid-right animation-slide-top" :style="[{animationDelay: '0.2s'}]">
<view class="text-xl text-orange">{{personalList.username}}</view>
<view class="margin-top-sm"><text class="cuIcon-people"></text> 用户</view>
</view>
<view class="flex flex-sub flex-direction animation-slide-top" :style="[{animationDelay: '0.2s'}]">
<view class="text-xl text-green">{{personalList.post?personalList.post:'员工'}}</view>
<view class="margin-top-sm"><text class="cuIcon-news"></text> 职务</view>
</view>
</view>
<!-- 列表list-->
<view class="cu-list menu card-menu margin-top-xl margin-bottom-xl shadow-lg radius">
<!-- <view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.1s'}]">
<view class=" flex bg-white cu-list menu card-menu margin-top-xl margin-bottom-xl shadow-lg radius">
<view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.1s'}]">
<view class="content" >
<text class="cuIcon-favorfill text-yellow"></text>
<text class="text-grey">收藏</text>
</view>
</view>
<view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.2s'}]">
<!-- <view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.2s'}]">
<view class="content">
<text class="cuIcon-redpacket_fill text-red"></text>
<text class="text-grey">红包</text>
......@@ -42,21 +34,31 @@
<text class="cuIcon-location text-cyan"></text>
<text class="text-grey">定位</text>
</view>
</navigator>
<navigator class="cu-item arrow animation-slide-bottom" url="/pages/user/userdetail" :style="[{animationDelay: '0.6s'}]">
</navigator> -->
<navigator class="cu-item arrow animation-slide-bottom" url="/pages/user/setting" :style="[{animationDelay: '0.6s'}]" >
<view class="content">
<text class="cuIcon-settingsfill text-cyan"></text>
<text class="text-grey">设置</text>
</view>
</navigator> -->
</navigator>
<navigator style="" class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.7s'}]" url="/pages/login/login" hover-class="none">
<view class="content" @click="clearToken()">
<text class="cuIcon-exit text-cyan"></text>
<text class="text-grey">退出</text>
</view>
</navigator>
</view>
<!-- 列表list-->
<!-- <view class="cu-list menu card-menu margin-top-xl margin-bottom-xl shadow-lg radius">
<navigator class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.7s'}]" url="/pages/login/login" hover-class="none">
<view class="content" @click="clearToken()">
<text class="cuIcon-exit text-cyan"></text>
<text class="text-grey">退出</text>
</view>
</navigator>
</view>
</view> -->
<view class="cu-tabbar-height"></view>
</scroll-view>
</view>
......@@ -86,12 +88,27 @@
cur: {
immediate: true,
handler() {
let that=this
uni.getStorage({
key:'userName',
success:function(e){
that.userName=e.data
},
fail() {
console.log("获取失败,请手动输入")
}
})
console.log('watch',this.cur)
this.userId=this.$store.getters.userid;
this.load()
},
},
},
data:function(){
return{
userName:"",
}
},
methods: {
clearToken(){
uni.removeStorage({key:"ACCESS_TOKEN"})
......@@ -172,7 +189,9 @@
font-weight: 300;
text-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
}
.userinforbg{
background:linear-gradient(to top,pink,#4a86e8);
}
.UCenter-bg text {
opacity: 0.8;
}
......
<template>
<view class="bg-white" style="height: 100vh;">
<cu-custom bgColor="bg-white" isBack="true">
<slot slot="backText">返回</slot>
</cu-custom>
<view>
<view class=" flex bg-white cu-list menu card-menu margin-top-xl margin-bottom-xl shadow-lg radius">
<view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.1s'}]">
<view class="content flex justify-between" @tap="clearCache" >
<view>
<text class="cuIcon-calendar text-yellow"></text>
<text class="text-grey">清除缓存</text>
</view>
<view>
<text class="text-grey">{{fileSizeString}}</text>
</view>
</view>
</view>
<view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.1s'}]">
<view class="content flex justify-between" >
<view>
<text class="cuIcon-expressman text-yellow"></text>
<text class="text-grey">关于我们</text>
</view>
<view>
<text class="text-grey"></text>
</view>
</view>
</view>
<view class="cu-item arrow animation-slide-bottom" :style="[{animationDelay: '0.1s'}]" >
<view class="content flex justify-between" >
<view>
<text class="cuIcon-vip text-yellow"></text>
<text class="text-grey">当前版本</text>
</view>
<view>
<text class="text-grey">v1.0.0</text>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import http from '@/common/service/service.js';
export default {
data:function(){
return{
fileSizeString:"0kb"
}
},
watch: {
cur: {
immediate: true,
handler() {
this.formatSize()
},
},
},
methods:{
// 清除缓存
clearCache() {
let that = this;
let os = plus.os.name;
if (os == 'Android') {
let main = plus.android.runtimeMainActivity();
let sdRoot = main.getCacheDir();
let files = plus.android.invoke(sdRoot, "listFiles");
let len = files.length;
for (let i = 0; i < len; i++) {
let filePath = '' + files[i]; // 没有找到合适的方法获取路径,这样写可以转成文件路径
plus.io.resolveLocalFileSystemURL(filePath, function(entry) {
if (entry.isDirectory) {
entry.removeRecursively(function(entry) { //递归删除其下的所有文件及子目录
uni.showToast({
title: '缓存清理完成',
duration: 2000
});
that.formatSize(); // 重新计算缓存
}, function(e) {
console.log(e.message)
});
} else {
entry.remove();
}
}, function(e) {
console.log('文件路径读取失败')
});
}
} else { // ios
plus.cache.clear(function() {
uni.showToast({
title: '缓存清理完成',
duration: 2000
});
that.formatSize();
});
}},
// 计算缓存
formatSize() {
let that = this;
plus.cache.calculate(function(size) {
let sizeCache = parseInt(size);
if (sizeCache == 0) {
that.fileSizeString = "0B";
} else if (sizeCache < 1024) {
that.fileSizeString = sizeCache + "B";
} else if (sizeCache < 1048576) {
that.fileSizeString = (sizeCache / 1024).toFixed(2) + "KB";
} else if (sizeCache < 1073741824) {
that.fileSizeString = (sizeCache / 1048576).toFixed(2) + "MB";
} else {
that.fileSizeString = (sizeCache / 1073741824).toFixed(2) + "GB";
}
});
}
},
onLoad(d) {
}
}
</script>
<style>
</style>
......@@ -8,7 +8,7 @@
<view class="cu-form-group" style="border-top: 0.5px solid #EEEEEE;">
<view class="title">流程</view>
</view>
<view class="cu-form-group padding-bottom ">
<!-- <view class="cu-form-group padding-bottom ">
<view >
<view class="cu-timeline " v-for="(item,index) in lc" :key="index">
<view class="cu-time" style="width: 80px;">{{item.nodeName}}</view>
......@@ -22,8 +22,17 @@
</view>
</view>
</view>
</view> -->
</view>
</view>
<view class="lccontent">
<mSidebar title="进度详情">
<view class="row">
<m-steps :wrapperTitle='(item.actionUserName+getAction(item.action))||""' v-for="(item, index) in lc" :item='item' :key="index" :index='index' :activity= 'activity' date='actionTime' >
<text slot="status">{{item.nodeName}}</text>
</m-steps>
</view>
</mSidebar>
</view>
</view>
......@@ -81,6 +90,15 @@
},
data() {
return {
activity: 0,
wrapRecordList: [
{updateTime: '11-19 17:04:36',progressStatus: '4', content: '已到达目的地,本次服务结束!'},
{updateTime: '11-19 17:04:36',progressStatus: '3',content: '终于到家啦,回去睡觉!'},
{updateTime: '11-19 17:04:36',progressStatus: '2',content: '还有一半路程马上结束啦,换人来开!'},
{updateTime: '11-19 17:04:36',progressStatus: '1',content: '准备出发啦!一路顺风!'},
{updateTime: '11-19 17:04:36',progressStatus: '0',content: '开始啦'},
],
progressStatus: ['开始','准备出发','到达服务区', '到达目的地', '已送达'], // 0 开始, 1 准备出发 2 到达中转站 3 送往目的地 4 已送达
lc:[],
wllist:[],
value:['key1','key2'],
......@@ -105,6 +123,10 @@
},
},
methods: {
getAction: function(a) {
const ztList = {0: "创建", 1:"提交",2:"退回",3:"撤回",4:"转交",5:"调度",8:"待处理"};
return ztList[a]
},
// 流程
apigetlc(){
let url="wf/query/wflog/"+this.cgjh.wfinstid
......@@ -312,4 +334,5 @@
margin: 60px auto;
}
</style>
......@@ -61,12 +61,12 @@
</view>
<view class="">
<view>
订单日期:{{item.ywrq|formatDate}}
订单日期{{item.ywrq|formatDate}}
</view>
<view>备注:<text>{{item.bz||"未设定"}}</text></view>
</view>
<view class="flex justify-between" style="padding-top: 10px;margin-bottom: 0px;">
<view>状态:
<view style="font-weight: 600;">状态:
<text style="color:#FBBD08;">
{{item.zt|filterzt}}
</text>
......@@ -86,19 +86,15 @@
<!-- 转交确认模态框 -->
<view class="cu-modal" :class="modalName=='zj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否转交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrzj">确定</button>
<view class="action wid100">
<button class="tkqx cu-btn " @tap="hideModal">取消</button>
<button class="tkqd cu-btn " @tap="qrzj">确定</button>
</view>
</view>
</view>
......@@ -106,19 +102,16 @@
<!-- 退回确认模态框 -->
<view class="cu-modal" :class="modalName=='th'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否退回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrth">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrth">确定</button>
</view>
</view>
</view>
......@@ -126,19 +119,16 @@
<!-- 撤回确认模态框 -->
<view class="cu-modal" :class="modalName=='ch'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
<view class="cu-bar bg-white justify-center newts" style="" >
提示
</view>
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否撤回选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrch">确定</button>
<view class="cu-bar bg-white" >
<view class="action flex justify-around wid100" >
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrch">确定</button>
</view>
</view>
</view>
......@@ -146,19 +136,16 @@
<!-- 提交确认模态框 -->
<view class="cu-modal" :class="modalName=='tj'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">提示</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
<view class="cu-bar bg-white justify-center newts">
提示
</view>
<view class="padding-xl bg-white">
<view class="padding-xl bg-white newcont">
是否提交选中单号请求?
</view>
<view class="cu-bar bg-white justify-end">
<view class="action">
<button class="cu-btn line-green text-green" @tap="hideModal">取消</button>
<button class="cu-btn bg-green margin-left" @tap="qrtj">确定</button>
<view class="action wid100">
<button class="cu-btn tkqx" @tap="hideModal">取消</button>
<button class="cu-btn tkqd" @tap="qrtj">确定</button>
</view>
</view>
</view>
......@@ -206,7 +193,7 @@
</view>
<!-- 事务处理 -->
<!-- 转交模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='zjmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='zjmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body">
......@@ -260,7 +247,7 @@
</view>
</view>
<!-- 提交模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='tjmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='tjmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body">
......@@ -314,7 +301,7 @@
</view>
</view>
<!-- 撤回模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='chmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='chmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body">
......@@ -368,7 +355,7 @@
</view>
</view>
<!-- 撤回模态框 -->
<view class="cu-modal drawer-modal justify-end" :class="modalName=='thmodal'?'show':''" @tap="hideModal">
<view class="cu-modal bottom-modal justify-end" :class="modalName=='thmodal'?'show':''" @tap="hideModal">
<view class="cu-dialog basis-lg" style="overflow: auto;" @tap.stop=""
:style="[{top:CustomBar+'px',height:'calc(100vh - ' + CustomBar + 'px)'}]">
<view class="example-body">
......
<template>
<div class="content">
<div @click="onClose" class="fixed mask"></div>
<div v-if="showTip" align="center" class="fixed tis">
<div class="tis-content">
<div>
<img :src="logo" >
</div>
<div class="tis-progress">
努力上传中
<text v-if="progress<100">..{{progress}}%</text>
</div>
<div class="cancel">
<button @click="onAbort" type="button" class="cancel-btn">取消上传</button>
</div>
</div>
</div>
<div class="fixed file-content">
<view ref="input" class="btn">
<button type="button" class="btn-bg">打开文件管理器</button>
</view>
</div>
</div>
</template>
<script>
export default {
props: {
logo: {
type: String,
default: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fbpic.588ku.com%2Felement_origin_min_pic%2F00%2F00%2F07%2F155788a6d8a5c42.jpg&refer=http%3A%2F%2Fbpic.588ku.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1619847627&t=2da40b583002205c204d980b54b35040'
},
progress: {
type: [Number,String],
default: 0
},
showTip: {
type: Boolean,
default: false
}
},
data() {
return {
hFile: '',
}
},
mounted() {
this.hFile = document.createElement('input')
this.hFile.type = 'file';
this.hFile.value = '';
this.hFile.style.position = 'absolute';
this.hFile.style.zIndex = 93;
this.hFile.style.left = 0;
this.hFile.style.right = 0;
this.hFile.style.top = 0;
this.hFile.style.bottom = 0;
this.hFile.style.height = '60px';
this.hFile.style.width = '100%';
this.hFile.style.opacity = 0;
this.$refs.input.$el.appendChild(this.hFile);
},
methods: {
onAbort() {
this.$emit('abort',{});
},
onClose() {
this.$emit('close',{});
}
}
}
</script>
<style scoped>
.content {background: transparent;}
.fixed {position: fixed;bottom: 0;left: 0;right: 0;width: 100%;}
.content .mask {top: 0;background: rgba(0,0,0,.4);z-index: 90;}
.content .file-content {z-index: 91;height: 60px;background: #fff;text-align: center;}
.btn {position: relative;}
.btn .file {position: absolute;z-index: 93;left: 0;right: 0;top: 0;bottom: 0;height: 60px;width: 100%;opacity: 0;}
.btn-bg {margin-top: 10px;background: #0066CC;color: #fff;width: 80%;height: 40px;line-height: 40px;border: 0;border-radius: 5px;}
.tis {top: 0;z-index: 95;display: flex;justify-content: center;align-items: center;}
.tis .tis-content {background: #fff;width: 60%;border-radius: 10px;padding: 20px 0;}
.tis .tis-content img {width: 50px;height: 50px;}
.tis-progress {margin: 10px 0;color: #999;}
.cancel-btn {margin-top: 30px;height: 30px;width: 60%;line-height: 30px;font-size: 14px;padding: 0 2em;background: #e3e3e3;color: #898989;border: 0!important;border-radius: 5px;}
.cancel-btn:after {height: 0!important;border: 0!important;}
</style>
This diff is collapsed.
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title class="title">[文件管理器]</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<style type="text/css">
.content {background: transparent;}
.fixed {position: fixed;bottom: 0;left: 0;right: 0;width: 100%;}
.content .mask {top: 0;background: rgba(0,0,0,.4);z-index: 90;}
.content .file-content {z-index: 91;height: 60px;background: #fff;text-align: center;}
.btn {position: relative;}
.btn .file {position: absolute;z-index: 93;left: 0;right: 0;top: 0;bottom: 0;height: 60px;width: 100%;opacity: 0;}
.btn-bg {margin-top: 10px;background: #0066CC;color: #fff;width: 80%;height: 40px;border: 0;border-radius: 5px;}
.tis {top: 0;z-index: 95;display: none;justify-content: center;align-items: center;}
.tis .tis-content {background: #fff;width: 60%;border-radius: 10px;padding: 20px 0;}
.tis .tis-content img {width: 50px;height: 50px;}
.tis-progress {margin: 10px 0;color: #999;}
.cancel-btn {margin-top: 30px;height: 30px;line-height: 1;padding: 0 2em;background: #e3e3e3;color: #898989;border: 0;border-radius: 5px;}
</style>
</head>
<body>
<div class="content">
<div class="fixed mask"></div>
<div align="center" class="fixed tis">
<div class="tis-content">
<div class="logo"></div>
<div class="tis-progress">
努力上传中..
</div>
<div class="cancel">
<button type="button" class="cancel-btn">取消上传</button>
</div>
</div>
</div>
<div class="fixed file-content">
<div class="btn">
<button type="button" class="btn-bg">打开文件管理器</button>
<input class="file" type="file" />
</div>
</div>
</div>
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
<script src="js/h5-uploader.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
let mask = document.querySelector(".mask");
let fileDom = document.querySelector(".file");
let tis = document.querySelector(".tis");
let logoDom = document.querySelector(".logo");
let progress = document.querySelector(".tis-progress");
let cancel = document.querySelector(".cancel-btn");
let createUpload = (file,{ url, key='file', header = {},data = {},addName,addSize}) => {
console.log(`
上传地址:${url}\n
上传附件:${file.name} 附件大小:${file.size}\n
请求头:${JSON.stringify(header)}\n
业务参数:${JSON.stringify(data)}
`);
if (!url) {return;}
tis.style.display = 'flex';
let formData = new FormData();
for (let keys in data) {formData.append(keys, data[keys]);}
if (addName) {formData.append(addName, file.name);console.log('补充参数:',JSON.stringify({addName:file.name}));}
if (addSize) {formData.append(addSize, file.size);console.log('补充参数:',JSON.stringify({addSize:file.size}));}
formData.append(key, file);
let xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
for (let keys in header) {
xhr.setRequestHeader(keys, header[keys]);
}
xhr.upload.addEventListener("progress", function(event) {
if(event.lengthComputable){
let percent = Math.ceil(event.loaded * 100 / event.total) + "%";
progress.innerText = `努力上传中..${percent}`;
}
}, false);
xhr.ontimeout = function(){
// xhr请求超时事件处理
progress.innerText = '请求超时';
setTimeout(()=>{
tis.style.display = 'none';
plus.webview.currentWebview().close();
},1000);
};
xhr.onreadystatechange = (ev) => {
if(xhr.readyState == 4) {
console.log('status:'+xhr.status);
if (xhr.status == 200) {
progress.innerText = '上传成功';
console.log('服务端返回数据:'+xhr.responseText);
location.href = `callback?fileName=${escape(file.name)}&size=${file.size}&str=${escape(xhr.responseText)}`;
}
else {
progress.innerText = '上传失败了';
if (xhr.status == 0) {
console.log('请检查请求头Content-Type与服务端是否匹配,并确认服务端已正确开启跨域');
}
}
setTimeout(()=>{
tis.style.display = 'none';
plus.webview.currentWebview().close();
},1000);
}
};
xhr.send(formData);
cancel.addEventListener("click", ()=>{
xhr.abort();
plus.webview.currentWebview().close();
});
}
mask.addEventListener("click", () => {
plus.webview.currentWebview().close();
});
document.addEventListener('UniAppJSBridgeReady', () => {
let {url,key,header,formData,logo,maxSize,addName,addSize} = plus.webview.currentWebview();
if (logo) {
let img = document.createElement('img');
img.src = logo;
logoDom.appendChild(img);
}
fileDom.value = '';
fileDom.addEventListener('change', (event) => {
let file = fileDom.files[0];
// 默认限制文件小于10M,可自行修改
if(file.size > (1024*1024 * Math.abs(maxSize))) {
plus.nativeUI.toast(`单个文件请勿超过${maxSize}M,请重新上传`);
return;
}
createUpload(file,{ url, key,header,addName,addSize,formData});
}, false);
});
\ No newline at end of file
{
"id": "l-file",
"displayName": "附件选择上传下载APP-H5-小程序",
"version": "1.2.6",
"description": "附件选择上传下载APP-H5-小程序",
"keywords": [
"附件",
"上传",
"下载",
"预览"
],
"repository": "",
"engines": {
"HBuilderX": "^3.1.1"
},
"dcloudext": {
"category": [
"前端组件",
"通用组件"
],
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "插件不采集任何数据",
"permissions": "无"
},
"npmurl": ""
},
"uni_modules": {
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "u"
}
}
}
}
}
\ No newline at end of file
<template>
<view class="uni-collapse-item">
<!-- onClick(!isOpen) -->
<view @click="onClick(!isOpen)" class="uni-collapse-item__title"
:class="{'is-open':isOpen &&titleBorder === 'auto' ,'uni-collapse-item-border':titleBorder !== 'none'}">
<view class="uni-collapse-item__title-wrap">
<slot name="title">
<view class="uni-collapse-item__title-box" :class="{'is-disabled':disabled}">
<image v-if="thumb" :src="thumb" class="uni-collapse-item__title-img" />
<text class="uni-collapse-item__title-text">{{ title }}</text>
</view>
</slot>
</view>
<view
v-if="showArrow"
:class="{ 'uni-collapse-item__title-arrow-active': isOpen, 'uni-collapse-item--animation': showAnimation === true }"
class="uni-collapse-item__title-arrow">
<uni-icons :color="disabled?'#ddd':'#bbb'" size="14" type="arrowdown" />
</view>
</view>
<view class="uni-collapse-item__wrap" :class="{'is--transition':showAnimation}"
:style="{height: (isOpen?height:0) +'px'}">
<view :id="elId" ref="collapse--hook" class="uni-collapse-item__wrap-content"
:class="{open:isheight,'uni-collapse-item--border':border&&isOpen}">
<slot></slot>
</view>
</view>
</view>
</template>
<script>
// #ifdef APP-NVUE
const dom = weex.requireModule('dom')
// #endif
/**
* CollapseItem 折叠面板子组件
* @description 折叠面板子组件
* @property {String} title 标题文字
* @property {String} thumb 标题左侧缩略图
* @property {String} name 唯一标志符
* @property {Boolean} open = [true|false] 是否展开组件
* @property {Boolean} titleBorder = [true|false] 是否显示标题分隔线
* @property {Boolean} border = [true|false] 是否显示分隔线
* @property {Boolean} disabled = [true|false] 是否展开面板
* @property {Boolean} showAnimation = [true|false] 开启动画
* @property {Boolean} showArrow = [true|false] 是否显示右侧箭头
*/
export default {
name: 'uniCollapseItem',
props: {
// 列表标题
title: {
type: String,
default: ''
},
name: {
type: [Number, String],
default: ''
},
// 是否禁用
disabled: {
type: Boolean,
default: false
},
// #ifdef APP-PLUS
// 是否显示动画,app 端默认不开启动画,卡顿严重
showAnimation: {
type: Boolean,
default: false
},
// #endif
// #ifndef APP-PLUS
// 是否显示动画
showAnimation: {
type: Boolean,
default: true
},
// #endif
// 是否展开
open: {
type: Boolean,
default: false
},
// 缩略图
thumb: {
type: String,
default: ''
},
// 标题分隔线显示类型
titleBorder: {
type: String,
default: 'auto'
},
border: {
type: Boolean,
default: true
},
showArrow:{
type: Boolean,
default: true
}
},
data() {
// TODO 随机生生元素ID,解决百度小程序获取同一个元素位置信息的bug
const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
return {
isOpen: false,
isheight: null,
height: 0,
elId,
nameSync: 0
}
},
watch: {
open(val) {
this.isOpen = val
this.onClick(val,'init')
}
},
updated(e) {
this.$nextTick(()=> {
this.init(true)
})
},
created(){
this.collapse = this.getCollapse()
this.oldHeight = 0
},
// #ifndef VUE3
// TODO vue2
destroyed() {
if (this.__isUnmounted) return
this.uninstall()
},
// #endif
// #ifdef VUE3
// TODO vue3
unmounted() {
this.__isUnmounted = true
this.uninstall()
},
// #endif
mounted() {
if (!this.collapse) return
if (this.name !== '') {
this.nameSync = this.name
} else {
this.nameSync = this.collapse.childrens.length + ''
}
if (this.collapse.names.indexOf(this.nameSync) === -1) {
this.collapse.names.push(this.nameSync)
} else {
console.warn(`name 值 ${this.nameSync} 重复`);
}
if (this.collapse.childrens.indexOf(this) === -1) {
this.collapse.childrens.push(this)
}
this.init()
},
methods: {
init(type) {
// #ifndef APP-NVUE
this.getCollapseHeight(type)
// #endif
// #ifdef APP-NVUE
this.getNvueHwight(type)
// #endif
},
uninstall() {
if (this.collapse) {
this.collapse.childrens.forEach((item, index) => {
if (item === this) {
this.collapse.childrens.splice(index, 1)
}
})
this.collapse.names.forEach((item, index) => {
if (item === this.nameSync) {
this.collapse.names.splice(index, 1)
}
})
}
},
onClick(isOpen,type) {
if (this.disabled) return
this.isOpen = isOpen
if (this.isOpen && this.collapse) {
this.collapse.setAccordion(this)
}
// if(type !== 'init'){
// this.collapse.onChange(isOpen,this)
// }
},
getCollapseHeight(type, index = 0) {
const views = uni.createSelectorQuery().in(this)
views
.select(`#${this.elId}`)
.fields({
size: true
}, data => {
// TODO 百度中可能获取不到节点信息 ,需要循环获取
if (index >= 10) return
if (!data) {
index++
this.getCollapseHeight(false, index)
return
}
// #ifdef APP-NVUE
this.height = data.height + 1
// #endif
// #ifndef APP-NVUE
this.height = data.height
// #endif
this.isheight = true
if (type) return
this.onClick(this.open,'init')
})
.exec()
},
getNvueHwight(type) {
const result = dom.getComponentRect(this.$refs['collapse--hook'], option => {
if (option && option.result && option.size) {
// #ifdef APP-NVUE
this.height = option.size.height + 1
// #endif
// #ifndef APP-NVUE
this.height = option.size.height
// #endif
this.isheight = true
if (type) return
this.onClick(this.open,'init')
}
})
},
/**
* 获取父元素实例
*/
getCollapse(name = 'uniCollapse') {
let parent = this.$parent;
let parentName = parent.$options.name;
while (parentName !== name) {
parent = parent.$parent;
if (!parent) return false;
parentName = parent.$options.name;
}
return parent;
}
}
}
</script>
<style lang="scss" scoped>
.uni-collapse-item {
/* #ifndef APP-NVUE */
box-sizing: border-box;
/* #endif */
&__title {
/* #ifndef APP-NVUE */
display: flex;
width: 100%;
box-sizing: border-box;
/* #endif */
flex-direction: row;
align-items: center;
transition: border-bottom-color .3s;
// transition-property: border-bottom-color;
// transition-duration: 5s;
&-wrap {
width: 100%;
flex: 1;
}
&-box {
padding: 0 15px;
/* #ifndef APP-NVUE */
display: flex;
width: 100%;
box-sizing: border-box;
/* #endif */
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 48px;
line-height: 48px;
background-color: #fff;
color: #303133;
font-size: 13px;
font-weight: 500;
/* #ifdef H5 */
cursor: pointer;
outline: none;
/* #endif */
&.is-disabled {
.uni-collapse-item__title-text {
color: $uni-text-color-disable;
}
}
}
&.uni-collapse-item-border {
border-bottom: 1px solid #ebeef5;
}
&.is-open {
border-bottom-color: transparent;
}
&-img {
height: $uni-img-size-base;
width: $uni-img-size-base;
margin-right: 10px;
}
&-text {
flex: 1;
font-size: $uni-font-size-base;
/* #ifndef APP-NVUE */
white-space: nowrap;
color: inherit;
/* #endif */
/* #ifdef APP-NVUE */
lines: 1;
/* #endif */
overflow: hidden;
text-overflow: ellipsis;
}
&-arrow {
/* #ifndef APP-NVUE */
display: flex;
box-sizing: border-box;
/* #endif */
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
margin-right: 10px;
transform: rotate(0deg);
&-active {
transform: rotate(180deg);
}
}
}
&__wrap {
/* #ifndef APP-NVUE */
will-change: height;
box-sizing: border-box;
/* #endif */
background-color: #fff;
overflow: hidden;
position: relative;
height: 0;
&.is--transition {
// transition: all 0.3s;
transition-property: height, border-bottom-width;
transition-duration: 0.3s;
/* #ifndef APP-NVUE */
will-change: height;
/* #endif */
}
&-content {
position: absolute;
font-size: 13px;
color: #303133;
// transition: height 0.3s;
border-bottom-color: transparent;
border-bottom-style: solid;
border-bottom-width: 0;
&.uni-collapse-item--border {
border-bottom-width: 1px;
border-bottom-color: red;
border-bottom-color: #ebeef5;
}
&.open {
position: relative;
}
}
}
&--animation {
transition-property: transform;
transition-duration: 0.3s;
transition-timing-function: ease;
}
}
</style>
<template>
<view class="uni-collapse">
<slot />
</view>
</template>
<script>
/**
* Collapse 折叠面板
* @description 展示可以折叠 / 展开的内容区域
* @tutorial https://ext.dcloud.net.cn/plugin?id=23
* @property {String|Array} value 当前激活面板改变时触发(如果是手风琴模式,参数类型为string,否则为array)
* @property {Boolean} accordion = [true|false] 是否开启手风琴效果是否开启手风琴效果
* @event {Function} change 切换面板时触发,如果是手风琴模式,返回类型为string,否则为array
*/
export default {
name: 'uniCollapse',
emits:['change','activeItem','input','update:modelValue'],
props: {
value: {
type: [String, Array],
default: ''
},
modelValue: {
type: [String, Array],
default: ''
},
accordion: {
// 是否开启手风琴效果
type: [Boolean, String],
default: false
},
},
data() {
return {}
},
computed: {
// TODO 兼容 vue2 和 vue3
dataValue() {
let value = (typeof this.value === 'string' && this.value === '') ||
(Array.isArray(this.value) && this.value.length === 0)
let modelValue = (typeof this.modelValue === 'string' && this.modelValue === '') ||
(Array.isArray(this.modelValue) && this.modelValue.length === 0)
if (value) {
return this.modelValue
}
if (modelValue) {
return this.value
}
return this.value
}
},
watch: {
dataValue(val) {
this.setOpen(val)
}
},
created() {
this.childrens = []
this.names = []
},
mounted() {
this.setOpen(this.dataValue)
},
methods: {
setOpen(val) {
let str = typeof val === 'string'
let arr = Array.isArray(val)
this.childrens.forEach((vm, index) => {
if (str) {
if (val === vm.nameSync) {
if (!this.accordion) {
console.warn('accordion 属性为 false ,v-model 类型应该为 array')
return
}
vm.isOpen = true
}
}
if (arr) {
val.forEach(v => {
if (v === vm.nameSync) {
if (this.accordion) {
console.warn('accordion 属性为 true ,v-model 类型应该为 string')
return
}
vm.isOpen = true
}
})
}
})
this.emit(val)
},
setAccordion(self) {
if (!this.accordion) return
this.childrens.forEach((vm, index) => {
if (self !== vm) {
vm.isOpen = false
}
})
},
resize() {
this.childrens.forEach((vm, index) => {
// #ifndef APP-NVUE
vm.getCollapseHeight()
// #endif
// #ifdef APP-NVUE
vm.getNvueHwight()
// #endif
})
},
onChange(isOpen, self) {
let activeItem = []
if (this.accordion) {
activeItem = isOpen ? self.nameSync : ''
} else {
this.childrens.forEach((vm, index) => {
if (vm.isOpen) {
activeItem.push(vm.nameSync)
}
})
}
this.$emit('change', activeItem)
this.emit(activeItem)
},
emit(val){
this.$emit('input', val)
this.$emit('update:modelValue', val)
}
}
}
</script>
<style lang="scss" scoped>
.uni-collapse {
/* #ifndef APP-NVUE */
width: 100%;
display: flex;
/* #endif */
/* #ifdef APP-NVUE */
flex: 1;
/* #endif */
flex-direction: column;
background-color: $uni-bg-color;
}
</style>
'use strict';
const ERR_MSG_OK = 'chooseAndUploadFile:ok';
const ERR_MSG_FAIL = 'chooseAndUploadFile:fail';
function chooseImage(opts) {
const {
count,
sizeType = ['original', 'compressed'],
sourceType = ['album', 'camera'],
extension
} = opts
return new Promise((resolve, reject) => {
uni.chooseImage({
count,
sizeType,
sourceType,
extension,
success(res) {
resolve(normalizeChooseAndUploadFileRes(res, 'image'));
},
fail(res) {
reject({
errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL),
});
},
});
});
}
function chooseVideo(opts) {
const {
camera,
compressed,
maxDuration,
sourceType = ['album', 'camera'],
extension
} = opts;
return new Promise((resolve, reject) => {
uni.chooseVideo({
camera,
compressed,
maxDuration,
sourceType,
extension,
success(res) {
const {
tempFilePath,
duration,
size,
height,
width
} = res;
resolve(normalizeChooseAndUploadFileRes({
errMsg: 'chooseVideo:ok',
tempFilePaths: [tempFilePath],
tempFiles: [
{
name: (res.tempFile && res.tempFile.name) || '',
path: tempFilePath,
size,
type: (res.tempFile && res.tempFile.type) || '',
width,
height,
duration,
fileType: 'video',
cloudPath: '',
}, ],
}, 'video'));
},
fail(res) {
reject({
errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL),
});
},
});
});
}
function chooseAll(opts) {
const {
count,
extension
} = opts;
return new Promise((resolve, reject) => {
let chooseFile = uni.chooseFile;
if (typeof wx !== 'undefined' &&
typeof wx.chooseMessageFile === 'function') {
chooseFile = wx.chooseMessageFile;
}
if (typeof chooseFile !== 'function') {
return reject({
errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。',
});
}
chooseFile({
type: 'all',
count,
extension,
success(res) {
resolve(normalizeChooseAndUploadFileRes(res));
},
fail(res) {
reject({
errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL),
});
},
});
});
}
function normalizeChooseAndUploadFileRes(res, fileType) {
res.tempFiles.forEach((item, index) => {
if (!item.name) {
item.name = item.path.substring(item.path.lastIndexOf('/') + 1);
}
if (fileType) {
item.fileType = fileType;
}
item.cloudPath =
Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.'));
});
if (!res.tempFilePaths) {
res.tempFilePaths = res.tempFiles.map((file) => file.path);
}
return res;
}
function uploadCloudFiles(files, max = 5, onUploadProgress) {
files = JSON.parse(JSON.stringify(files))
const len = files.length
let count = 0
let self = this
return new Promise(resolve => {
while (count < max) {
next()
}
function next() {
let cur = count++
if (cur >= len) {
!files.find(item => !item.url && !item.errMsg) && resolve(files)
return
}
const fileItem = files[cur]
const index = self.files.findIndex(v => v.uuid === fileItem.uuid)
fileItem.url = ''
delete fileItem.errMsg
uniCloud
.uploadFile({
filePath: fileItem.path,
cloudPath: fileItem.cloudPath,
fileType: fileItem.fileType,
onUploadProgress: res => {
res.index = index
onUploadProgress && onUploadProgress(res)
}
})
.then(res => {
fileItem.url = res.fileID
fileItem.index = index
if (cur < len) {
next()
}
})
.catch(res => {
fileItem.errMsg = res.errMsg || res.message
fileItem.index = index
if (cur < len) {
next()
}
})
}
})
}
function uploadFiles(choosePromise, {
onChooseFile,
onUploadProgress
}) {
return choosePromise
.then((res) => {
if (onChooseFile) {
const customChooseRes = onChooseFile(res);
if (typeof customChooseRes !== 'undefined') {
return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ?
res : chooseRes);
}
}
return res;
})
.then((res) => {
if (res === false) {
return {
errMsg: ERR_MSG_OK,
tempFilePaths: [],
tempFiles: [],
};
}
return res
})
}
function chooseAndUploadFile(opts = {
type: 'all'
}) {
if (opts.type === 'image') {
return uploadFiles(chooseImage(opts), opts);
}
else if (opts.type === 'video') {
return uploadFiles(chooseVideo(opts), opts);
}
return uploadFiles(chooseAll(opts), opts);
}
export {
chooseAndUploadFile,
uploadCloudFiles
};
<template>
<view class="uni-file-picker__files">
<view v-if="!readonly" class="files-button" @click="choose">
<slot></slot>
</view>
<!-- :class="{'is-text-box':showType === 'list'}" -->
<view v-if="list.length > 0" class="uni-file-picker__lists is-text-box" :style="borderStyle">
<!-- ,'is-list-card':showType === 'list-card' -->
<view class="uni-file-picker__lists-box" v-for="(item ,index) in list" :key="index" :class="{
'files-border':index !== 0 && styles.dividline}"
:style="index !== 0 && styles.dividline &&borderLineStyle">
<view class="uni-file-picker__item">
<!-- :class="{'is-text-image':showType === 'list'}" -->
<!-- <view class="files__image is-text-image">
<image class="header-image" :src="item.logo" mode="aspectFit"></image>
</view> -->
<view class="files__name">{{item.name}}</view>
<view v-if="delIcon&&!readonly" class="icon-del-box icon-files" @click="delFile(index)">
<view class="icon-del icon-files"></view>
<view class="icon-del rotate"></view>
</view>
</view>
<view v-if="(item.progress && item.progress !== 100) ||item.progress===0 " class="file-picker__progress">
<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4"
:backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
</view>
<view v-if="item.status === 'error'" class="file-picker__mask" @click.stop="uploadFiles(item,index)">
点击重试
</view>
</view>
</view>
</view>
</template>
<script>
export default {
name: "uploadFile",
emits:['uploadFiles','choose','delFile'],
props: {
filesList: {
type: Array,
default () {
return []
}
},
delIcon: {
type: Boolean,
default: true
},
limit: {
type: [Number, String],
default: 9
},
showType: {
type: String,
default: ''
},
listStyles: {
type: Object,
default () {
return {
// 是否显示边框
border: true,
// 是否显示分隔线
dividline: true,
// 线条样式
borderStyle: {}
}
}
},
readonly:{
type:Boolean,
default:false
}
},
computed: {
list() {
let files = []
this.filesList.forEach(v => {
files.push(v)
})
return files
},
styles() {
let styles = {
border: true,
dividline: true,
'border-style': {}
}
return Object.assign(styles, this.listStyles)
},
borderStyle() {
let {
borderStyle,
border
} = this.styles
let obj = {}
if (!border) {
obj.border = 'none'
} else {
let width = (borderStyle && borderStyle.width) || 1
width = this.value2px(width)
let radius = (borderStyle && borderStyle.radius) || 5
radius = this.value2px(radius)
obj = {
'border-width': width,
'border-style': (borderStyle && borderStyle.style) || 'solid',
'border-color': (borderStyle && borderStyle.color) || '#eee',
'border-radius': radius
}
}
let classles = ''
for (let i in obj) {
classles += `${i}:${obj[i]};`
}
return classles
},
borderLineStyle() {
let obj = {}
let {
borderStyle
} = this.styles
if (borderStyle && borderStyle.color) {
obj['border-color'] = borderStyle.color
}
if (borderStyle && borderStyle.width) {
let width = borderStyle && borderStyle.width || 1
let style = borderStyle && borderStyle.style || 0
if (typeof width === 'number') {
width += 'px'
} else {
width = width.indexOf('px') ? width : width + 'px'
}
obj['border-width'] = width
if (typeof style === 'number') {
style += 'px'
} else {
style = style.indexOf('px') ? style : style + 'px'
}
obj['border-top-style'] = style
}
let classles = ''
for (let i in obj) {
classles += `${i}:${obj[i]};`
}
return classles
}
},
methods: {
uploadFiles(item, index) {
this.$emit("uploadFiles", {
item,
index
})
},
choose() {
this.$emit("choose")
},
delFile(index) {
this.$emit('delFile', index)
},
value2px(value) {
if (typeof value === 'number') {
value += 'px'
} else {
value = value.indexOf('px') !== -1 ? value : value + 'px'
}
return value
}
}
}
</script>
<style lang="scss">
.uni-file-picker__files {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
justify-content: flex-start;
}
.files-button {
// border: 1px red solid;
}
.uni-file-picker__lists {
position: relative;
margin-top: 5px;
overflow: hidden;
}
.file-picker__mask {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
justify-content: center;
align-items: center;
position: absolute;
right: 0;
top: 0;
bottom: 0;
left: 0;
color: #fff;
font-size: 14px;
background-color: rgba(0, 0, 0, 0.4);
}
.uni-file-picker__lists-box {
position: relative;
}
.uni-file-picker__item {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
align-items: center;
padding: 8px 10px;
padding-right: 5px;
padding-left: 10px;
}
.files-border {
border-top: 1px #eee solid;
}
.files__name {
flex: 1;
font-size: 14px;
color: #666;
margin-right: 25px;
/* #ifndef APP-NVUE */
word-break: break-all;
word-wrap: break-word;
/* #endif */
}
.icon-files {
/* #ifndef APP-NVUE */
position: static;
background-color: initial;
/* #endif */
}
// .icon-files .icon-del {
// background-color: #333;
// width: 12px;
// height: 1px;
// }
.is-list-card {
border: 1px #eee solid;
margin-bottom: 5px;
border-radius: 5px;
box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.1);
padding: 5px;
}
.files__image {
width: 40px;
height: 40px;
margin-right: 10px;
}
.header-image {
width: 100%;
height: 100%;
}
.is-text-box {
border: 1px #eee solid;
border-radius: 5px;
}
.is-text-image {
width: 25px;
height: 25px;
margin-left: 5px;
}
.rotate {
position: absolute;
transform: rotate(90deg);
}
.icon-del-box {
/* #ifndef APP-NVUE */
display: flex;
margin: auto 0;
/* #endif */
align-items: center;
justify-content: center;
position: absolute;
top: 0px;
bottom: 0;
right: 5px;
height: 26px;
width: 26px;
// border-radius: 50%;
// background-color: rgba(0, 0, 0, 0.5);
z-index: 2;
transform: rotate(-45deg);
}
.icon-del {
width: 15px;
height: 1px;
background-color: #333;
// border-radius: 1px;
}
/* #ifdef H5 */
@media all and (min-width: 768px) {
.uni-file-picker__files {
max-width: 375px;
}
}
/* #endif */
</style>
<template>
<view class="uni-file-picker__container">
<view class="file-picker__box" v-for="(item,index) in filesList" :key="index" :style="boxStyle">
<view class="file-picker__box-content" :style="borderStyle">
<image class="file-image" :src="item.url" mode="aspectFill" @click.stop="prviewImage(item,index)"></image>
<view v-if="delIcon && !readonly" class="icon-del-box" @click.stop="delFile(index)">
<view class="icon-del"></view>
<view class="icon-del rotate"></view>
</view>
<view v-if="(item.progress && item.progress !== 100) ||item.progress===0 " class="file-picker__progress">
<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4"
:backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
</view>
<view v-if="item.errMsg" class="file-picker__mask" @click.stop="uploadFiles(item,index)">
点击重试
</view>
</view>
</view>
<view v-if="filesList.length < limit && !readonly" class="file-picker__box" :style="boxStyle">
<view class="file-picker__box-content is-add" :style="borderStyle" @click="choose">
<slot>
<view class="icon-add"></view>
<view class="icon-add rotate"></view>
</slot>
</view>
</view>
</view>
</template>
<script>
export default {
name: "uploadImage",
emits:['uploadFiles','choose','delFile'],
props: {
filesList: {
type: Array,
default () {
return []
}
},
disabled:{
type: Boolean,
default: false
},
disablePreview: {
type: Boolean,
default: false
},
limit: {
type: [Number, String],
default: 9
},
imageStyles: {
type: Object,
default () {
return {
width: 'auto',
height: 'auto',
border: {}
}
}
},
delIcon: {
type: Boolean,
default: true
},
readonly:{
type:Boolean,
default:false
}
},
computed: {
styles() {
let styles = {
width: 'auto',
height: 'auto',
border: {}
}
return Object.assign(styles, this.imageStyles)
},
boxStyle() {
const {
width = 'auto',
height = 'auto'
} = this.styles
let obj = {}
if (height === 'auto') {
if (width !== 'auto') {
obj.height = this.value2px(width)
obj['padding-top'] = 0
} else {
obj.height = 0
}
} else {
obj.height = this.value2px(height)
obj['padding-top'] = 0
}
if (width === 'auto') {
if (height !== 'auto') {
obj.width = this.value2px(height)
} else {
obj.width = '33.3%'
}
} else {
obj.width = this.value2px(width)
}
let classles = ''
for(let i in obj){
classles+= `${i}:${obj[i]};`
}
return classles
},
borderStyle() {
let {
border
} = this.styles
let obj = {}
if (typeof border === 'boolean') {
obj.border = border ? '1px #eee solid' : 'none'
} else {
let width = (border && border.width) || 1
width = this.value2px(width)
let radius = (border && border.radius) || 5
radius = this.value2px(radius)
obj = {
'border-width': width,
'border-style': (border && border.style) || 'solid',
'border-color': (border && border.color) || '#eee',
'border-radius': radius
}
}
let classles = ''
for(let i in obj){
classles+= `${i}:${obj[i]};`
}
return classles
}
},
methods: {
uploadFiles(item, index) {
this.$emit("uploadFiles", item)
},
choose() {
this.$emit("choose")
},
delFile(index) {
this.$emit('delFile', index)
},
prviewImage(img, index) {
let urls = []
if(Number(this.limit) === 1&&this.disablePreview&&!this.disabled){
this.$emit("choose")
}
if(this.disablePreview) return
this.filesList.forEach(i => {
urls.push(i.url)
})
uni.previewImage({
urls: urls,
current: index
});
},
value2px(value) {
if (typeof value === 'number') {
value += 'px'
} else {
if (value.indexOf('%') === -1) {
value = value.indexOf('px') !== -1 ? value : value + 'px'
}
}
return value
}
}
}
</script>
<style lang="scss">
.uni-file-picker__container {
/* #ifndef APP-NVUE */
display: flex;
box-sizing: border-box;
/* #endif */
flex-wrap: wrap;
margin: -5px;
}
.file-picker__box {
position: relative;
// flex: 0 0 33.3%;
width: 33.3%;
height: 0;
padding-top: 33.33%;
/* #ifndef APP-NVUE */
box-sizing: border-box;
/* #endif */
}
.file-picker__box-content {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: 5px;
border: 1px #eee solid;
border-radius: 8px;
overflow: hidden;
}
.file-picker__progress {
position: absolute;
bottom: 0;
left: 0;
right: 0;
/* border: 1px red solid; */
z-index: 2;
}
.file-picker__progress-item {
width: 100%;
}
.file-picker__mask {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
justify-content: center;
align-items: center;
position: absolute;
right: 0;
top: 0;
bottom: 0;
left: 0;
color: #fff;
font-size: 12px;
background-color: rgba(0, 0, 0, 0.4);
}
.file-image {
width: 100%;
height: 100%;
}
.is-add {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
align-items: center;
justify-content: center;
}
.icon-add {
width: 50px;
height: 5px;
background-color: #f1f1f1;
border-radius: 2px;
}
.rotate {
position: absolute;
transform: rotate(90deg);
}
.icon-del-box {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
align-items: center;
justify-content: center;
position: absolute;
top: 5px;
right: 5px;
height: 26px;
width: 26px;
border-radius: 50%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 2;
transform: rotate(-45deg);
}
.icon-del {
width: 15px;
height: 2px;
background-color: #fff;
border-radius: 2px;
}
</style>
/**
* 获取文件名和后缀
* @param {String} name
*/
export const get_file_ext = (name) => {
const last_len = name.lastIndexOf('.')
const len = name.length
return {
name: name.substring(0, last_len),
ext: name.substring(last_len + 1, len)
}
}
/**
* 获取扩展名
* @param {Array} fileExtname
*/
export const get_extname = (fileExtname) => {
if (!Array.isArray(fileExtname)) {
let extname = fileExtname.replace(/(\[|\])/g, '')
return extname.split(',')
} else {
return fileExtname
}
return []
}
/**
* 获取文件和检测是否可选
*/
export const get_files_and_is_max = (res, _extname) => {
let filePaths = []
let files = []
if(!_extname || _extname.length === 0){
return {
filePaths,
files
}
}
res.tempFiles.forEach(v => {
let fileFullName = get_file_ext(v.name)
const extname = fileFullName.ext.toLowerCase()
if (_extname.indexOf(extname) !== -1) {
files.push(v)
filePaths.push(v.path)
}
})
if (files.length !== res.tempFiles.length) {
uni.showToast({
title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`,
icon: 'none',
duration: 5000
})
}
return {
filePaths,
files
}
}
/**
* 获取图片信息
* @param {Object} filepath
*/
export const get_file_info = (filepath) => {
return new Promise((resolve, reject) => {
uni.getImageInfo({
src: filepath,
success(res) {
resolve(res)
},
fail(err) {
reject(err)
}
})
})
}
/**
* 获取封装数据
*/
export const get_file_data = async (files, type = 'image') => {
// 最终需要上传数据库的数据
let fileFullName = get_file_ext(files.name)
const extname = fileFullName.ext.toLowerCase()
let filedata = {
name: files.name,
uuid: files.uuid,
extname: extname || '',
cloudPath: files.cloudPath,
fileType: files.fileType,
url: files.path || files.path,
size: files.size, //单位是字节
image: {},
path: files.path,
video: {}
}
if (type === 'image') {
const imageinfo = await get_file_info(files.path)
delete filedata.video
filedata.image.width = imageinfo.width
filedata.image.height = imageinfo.height
filedata.image.location = imageinfo.path
} else {
delete filedata.image
}
return filedata
}
export default {
"pulldown": "\ue588",
"refreshempty": "\ue461",
"back": "\ue471",
"forward": "\ue470",
"more": "\ue507",
"more-filled": "\ue537",
"scan": "\ue612",
"qq": "\ue264",
"weibo": "\ue260",
"weixin": "\ue261",
"pengyouquan": "\ue262",
"loop": "\ue565",
"refresh": "\ue407",
"refresh-filled": "\ue437",
"arrowthindown": "\ue585",
"arrowthinleft": "\ue586",
"arrowthinright": "\ue587",
"arrowthinup": "\ue584",
"undo-filled": "\ue7d6",
"undo": "\ue406",
"redo": "\ue405",
"redo-filled": "\ue7d9",
"bars": "\ue563",
"chatboxes": "\ue203",
"camera": "\ue301",
"chatboxes-filled": "\ue233",
"camera-filled": "\ue7ef",
"cart-filled": "\ue7f4",
"cart": "\ue7f5",
"checkbox-filled": "\ue442",
"checkbox": "\ue7fa",
"arrowleft": "\ue582",
"arrowdown": "\ue581",
"arrowright": "\ue583",
"smallcircle-filled": "\ue801",
"arrowup": "\ue580",
"circle": "\ue411",
"eye-filled": "\ue568",
"eye-slash-filled": "\ue822",
"eye-slash": "\ue823",
"eye": "\ue824",
"flag-filled": "\ue825",
"flag": "\ue508",
"gear-filled": "\ue532",
"reload": "\ue462",
"gear": "\ue502",
"hand-thumbsdown-filled": "\ue83b",
"hand-thumbsdown": "\ue83c",
"hand-thumbsup-filled": "\ue83d",
"heart-filled": "\ue83e",
"hand-thumbsup": "\ue83f",
"heart": "\ue840",
"home": "\ue500",
"info": "\ue504",
"home-filled": "\ue530",
"info-filled": "\ue534",
"circle-filled": "\ue441",
"chat-filled": "\ue847",
"chat": "\ue263",
"mail-open-filled": "\ue84d",
"email-filled": "\ue231",
"mail-open": "\ue84e",
"email": "\ue201",
"checkmarkempty": "\ue472",
"list": "\ue562",
"locked-filled": "\ue856",
"locked": "\ue506",
"map-filled": "\ue85c",
"map-pin": "\ue85e",
"map-pin-ellipse": "\ue864",
"map": "\ue364",
"minus-filled": "\ue440",
"mic-filled": "\ue332",
"minus": "\ue410",
"micoff": "\ue360",
"mic": "\ue302",
"clear": "\ue434",
"smallcircle": "\ue868",
"close": "\ue404",
"closeempty": "\ue460",
"paperclip": "\ue567",
"paperplane": "\ue503",
"paperplane-filled": "\ue86e",
"person-filled": "\ue131",
"contact-filled": "\ue130",
"person": "\ue101",
"contact": "\ue100",
"images-filled": "\ue87a",
"phone": "\ue200",
"images": "\ue87b",
"image": "\ue363",
"image-filled": "\ue877",
"location-filled": "\ue333",
"location": "\ue303",
"plus-filled": "\ue439",
"plus": "\ue409",
"plusempty": "\ue468",
"help-filled": "\ue535",
"help": "\ue505",
"navigate-filled": "\ue884",
"navigate": "\ue501",
"mic-slash-filled": "\ue892",
"search": "\ue466",
"settings": "\ue560",
"sound": "\ue590",
"sound-filled": "\ue8a1",
"spinner-cycle": "\ue465",
"download-filled": "\ue8a4",
"personadd-filled": "\ue132",
"videocam-filled": "\ue8af",
"personadd": "\ue102",
"upload": "\ue402",
"upload-filled": "\ue8b1",
"starhalf": "\ue463",
"star-filled": "\ue438",
"star": "\ue408",
"trash": "\ue401",
"phone-filled": "\ue230",
"compose": "\ue400",
"videocam": "\ue300",
"trash-filled": "\ue8dc",
"download": "\ue403",
"chatbubble-filled": "\ue232",
"chatbubble": "\ue202",
"cloud-download": "\ue8e4",
"cloud-upload-filled": "\ue8e5",
"cloud-upload": "\ue8e6",
"cloud-download-filled": "\ue8e9",
"headphones":"\ue8bf",
"shop":"\ue609"
}
This diff is collapsed.
{
"uni-search-bar.cancel": "cancel",
"uni-search-bar.placeholder": "Search enter content"
}
\ No newline at end of file
import en from './en.json'
import zhHans from './zh-Hans.json'
import zhHant from './zh-Hant.json'
export default {
en,
'zh-Hans': zhHans,
'zh-Hant': zhHant
}
{
"uni-search-bar.cancel": "cancel",
"uni-search-bar.placeholder": "请输入搜索内容"
}
{
"uni-search-bar.cancel": "cancel",
"uni-search-bar.placeholder": "請輸入搜索內容"
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment