日常维护;添加权限审批模块;商品审批业务更新优化
23
App.vue
@ -156,7 +156,7 @@
|
||||
}
|
||||
|
||||
/* #ifdef MP-WEIXIN */
|
||||
|
||||
/*
|
||||
checkbox .wx-checkbox-input {
|
||||
border-radius: 20%;
|
||||
border: 1rpx solid #91A6D7;
|
||||
@ -172,8 +172,25 @@
|
||||
|
||||
checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
|
||||
font-size: 30rpx;
|
||||
}
|
||||
|
||||
} */
|
||||
|
||||
checkbox .wx-checkbox-input {
|
||||
border-radius: 50% ;
|
||||
background-color: #D8DFEE ;
|
||||
width: 38rpx ;
|
||||
height: 38rpx ;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
checkbox .wx-checkbox-input.wx-checkbox-input-checked {
|
||||
background-color: #2E6CF6;
|
||||
border-color: #2E6CF6 ;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
|
||||
font-size: 30rpx;
|
||||
}
|
||||
/* #endif */
|
||||
button::after{
|
||||
border: none;
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<i class="ico ico-txt ico-big2" v-else-if="fileItem.type=='txt'"></i>
|
||||
<i class="ico ico-pdf ico-big2" v-else-if="fileItem.type=='pdf'"></i>
|
||||
<i class="ico ico-rarzip ico-big2" v-else-if="fileItem.type=='zip' || fileItem.type=='rar'"></i>
|
||||
<i class="ico ico-jpgpng ico-big2" v-else-if="fileItem.type=='png' || fileItem.type=='jpg' || fileItem.type=='jpge' "></i>
|
||||
<i class="ico ico-jpgpng ico-big2" v-else-if="fileItem.type=='png' || fileItem.type=='jpg' || fileItem.type=='jpeg' "></i>
|
||||
<i class="ico ico-ppt ico-big2" v-else-if="fileItem.type=='ppt' || fileItem.type=='ppts' || fileItem.type=='pptx' || fileItem.type=='dps'"></i>
|
||||
<i class="ico ico-more ico-big2" v-else></i>
|
||||
<view style="flex: 1;line-height: 1.2;padding-right: 20rpx;">
|
||||
@ -31,7 +31,7 @@
|
||||
download() {
|
||||
let _this = this
|
||||
this.active = true
|
||||
if(_this.fileItem.type=='png' || _this.fileItem.type=='jpg' || _this.fileItem.type=='jpge') {
|
||||
if(_this.fileItem.type=='png' || _this.fileItem.type=='jpg' || _this.fileItem.type=='jpeg') {
|
||||
uni.previewImage({urls:[_this.fileItem.path]})
|
||||
}else{
|
||||
uni.showLoading({
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<view @touchmove.prevent >
|
||||
<view class="uni-mask" v-show="show" :style="{top:offsetTop + 'px'}" @click="hide" @touchmove.prevent></view>
|
||||
<view :class="['uni-popup','uni-popup-'+type,round?'round':'' ]" v-show="show">
|
||||
<view class="header-top" v-show="msg!=''">{{msg}}</view>
|
||||
<view class="header-top" v-if="msg!=''">{{msg}}</view>
|
||||
<slot></slot>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -63,7 +63,8 @@
|
||||
"setting" : {
|
||||
"urlCheck" : true,
|
||||
"es6" : true,
|
||||
"minified" : true
|
||||
"minified" : true,
|
||||
"postcss" : true
|
||||
},
|
||||
"usingComponents" : true,
|
||||
"permission" : {
|
||||
@ -72,7 +73,7 @@
|
||||
}
|
||||
},
|
||||
"uniStatistics" : {
|
||||
"enable" : false
|
||||
"enable" : true
|
||||
}
|
||||
},
|
||||
"mp-alipay" : {
|
||||
|
||||
30
package-lock.json
generated
@ -1,30 +0,0 @@
|
||||
{
|
||||
"requires": true,
|
||||
"lockfileVersion": 1,
|
||||
"dependencies": {
|
||||
"deepmerge": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
|
||||
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
|
||||
},
|
||||
"ezuikit-js": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/ezuikit-js/-/ezuikit-js-0.2.4.tgz",
|
||||
"integrity": "sha512-ro/vEgUvIc+7qrGloxsdxLdgD7V9hCVAgxddy9pZzMxJKm+Gy6qNjwGVLt0TmZ8HhcVvVMZpRoxWE2538tinYA=="
|
||||
},
|
||||
"shvl": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/shvl/-/shvl-2.0.0.tgz",
|
||||
"integrity": "sha512-WbpzSvI5XgVGJ3A4ySGe8hBxj0JgJktfnoLhhJmvITDdK21WPVWwgG8GPlYEh4xqdti3Ff7PJ5G0QrRAjNS0Ig=="
|
||||
},
|
||||
"vuex-persistedstate": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-2.7.0.tgz",
|
||||
"integrity": "sha512-mpko65DUMBY4mF4sSGsgrqjE7fwO373LFZeuNrC55glRuBBAK4dkgzjr4j4Bij7WtMoKuo2t2w0NGenjauISaQ==",
|
||||
"requires": {
|
||||
"deepmerge": "^4.2.2",
|
||||
"shvl": "^2.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
5
package.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"vuex-persistedstate": "^4.1.0"
|
||||
}
|
||||
}
|
||||
703
pages.json
@ -6,470 +6,463 @@
|
||||
"navigationBarTitleText": "驿行畅旅",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},{
|
||||
"path" : "pages/userCenter/userCenter",
|
||||
"style" : {
|
||||
"navigationBarTitleText":"个人中心"
|
||||
}, {
|
||||
"path": "pages/userCenter/userCenter",
|
||||
"style": {
|
||||
"navigationBarTitleText": "个人中心"
|
||||
}
|
||||
},{
|
||||
"path" : "pages/register/register",
|
||||
"style" : {
|
||||
}, {
|
||||
"path": "pages/register/register",
|
||||
"style": {
|
||||
"navigationBarTitleText": "授权"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "pages/auditingPop/jointlySign",
|
||||
"style" : {
|
||||
"navigationBarTitleText":"会签"
|
||||
}
|
||||
},{
|
||||
"path" : "pages/auditingPop/transfer",
|
||||
"style" : {
|
||||
"navigationBarTitleText":"移交"
|
||||
}
|
||||
},{
|
||||
"path" : "pages/auditingPop/toExamine",
|
||||
"style" : {
|
||||
"navigationBarTitleText":"审核"
|
||||
}
|
||||
},{
|
||||
"path" : "pages/auditingPop/reject",
|
||||
"style" : {
|
||||
"navigationBarTitleText":"驳回"
|
||||
}
|
||||
}
|
||||
,{
|
||||
"path" : "pages/webview/webview",
|
||||
"style" : {
|
||||
},
|
||||
{
|
||||
"path": "pages/webview/webview",
|
||||
"style": {
|
||||
"navigationBarTitleText": "驿行畅旅"
|
||||
}
|
||||
},{
|
||||
"path" : "pages/severpartVideo/severpartVideo",
|
||||
"style" : {
|
||||
"navigationBarTitleText": "视频回放"
|
||||
}
|
||||
}
|
||||
// {
|
||||
// "path": "pages/severpartVideo/severpartVideo",
|
||||
// "style": {
|
||||
// "navigationBarTitleText": "视频回放"
|
||||
// }
|
||||
// }
|
||||
,{
|
||||
"path" : "pages/authorityApproval/index",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText": "权限审批",
|
||||
"enablePullDownRefresh": true
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
,{
|
||||
"path" : "pages/authorityApproval/detail",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText": "权限审批",
|
||||
"enablePullDownRefresh": false
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
],
|
||||
"subPackages":[
|
||||
{
|
||||
"subPackages": [{
|
||||
"root": "pages/additionalFeatures",
|
||||
"pages":[
|
||||
{
|
||||
"path" : "positionPunching",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "打卡"
|
||||
}
|
||||
"pages": [{
|
||||
"path": "positionPunching",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "打卡"
|
||||
}
|
||||
,{
|
||||
"path" : "takePhoto",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
|
||||
}, {
|
||||
"path": "takePhoto",
|
||||
"style": {
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages/auditingPop",
|
||||
"pages": [
|
||||
{
|
||||
"path": "jointlySign",
|
||||
"style": {
|
||||
"navigationBarTitleText": "会签"
|
||||
}
|
||||
}, {
|
||||
"path": "transfer",
|
||||
"style": {
|
||||
"navigationBarTitleText": "移交"
|
||||
}
|
||||
}, {
|
||||
"path": "toExamine",
|
||||
"style": {
|
||||
"navigationBarTitleText": "审核"
|
||||
}
|
||||
}, {
|
||||
"path": "reject",
|
||||
"style": {
|
||||
"navigationBarTitleText": "驳回"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/operatingStatements",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "index",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText": "经营报表",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarBackgroundColor":"#647BD1",
|
||||
"navigationBarTextStyle":"white"
|
||||
}
|
||||
|
||||
}
|
||||
,{
|
||||
"path" : "detail",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText": "经营报表",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarBackgroundColor":"#647BD1",
|
||||
"navigationBarTextStyle":"white"
|
||||
}
|
||||
|
||||
} ,{
|
||||
"path" : "operatingTrend",
|
||||
"style" :
|
||||
{
|
||||
"navigationBarTitleText": "经营趋势",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarBackgroundColor":"#647BD1",
|
||||
"navigationBarTextStyle":"white"
|
||||
}
|
||||
|
||||
}
|
||||
// ,{
|
||||
// "path" : "operatingScatter",
|
||||
// "style" :
|
||||
// {
|
||||
// "navigationBarTitleText": "经营趋势",
|
||||
// "enablePullDownRefresh": false,
|
||||
// "navigationBarBackgroundColor":"#647BD1",
|
||||
// "navigationBarTextStyle":"white"
|
||||
// }
|
||||
|
||||
// }
|
||||
]},
|
||||
"root": "pages/operatingStatements",
|
||||
"pages": [{
|
||||
"path": "index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "经营报表",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarBackgroundColor": "#647BD1",
|
||||
"navigationBarTextStyle": "white"
|
||||
}
|
||||
|
||||
}, {
|
||||
"path": "detail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "经营报表",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarBackgroundColor": "#647BD1",
|
||||
"navigationBarTextStyle": "white"
|
||||
}
|
||||
|
||||
}, {
|
||||
"path": "operatingTrend",
|
||||
"style": {
|
||||
"navigationBarTitleText": "经营趋势",
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarBackgroundColor": "#647BD1",
|
||||
"navigationBarTextStyle": "white"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/tender",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "tender",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "招标投标"
|
||||
"root": "pages/tender",
|
||||
"pages": [{
|
||||
"path": "tender",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "招标投标"
|
||||
}
|
||||
}, {
|
||||
"path": "tenderRecord",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "招标备案详情"
|
||||
}
|
||||
}, {
|
||||
"path": "tenderAlteration",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "招标变更详情"
|
||||
}
|
||||
}, {
|
||||
"path": "decisionRecord",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "决标备案详情"
|
||||
}
|
||||
}, {
|
||||
"path": "specialProjects",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "专项工程详情",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
}
|
||||
} ,{
|
||||
"path" : "tenderRecord",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "招标备案详情"
|
||||
}
|
||||
} ,{
|
||||
"path" : "tenderAlteration",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "招标变更详情"
|
||||
}
|
||||
} ,{
|
||||
"path" : "decisionRecord",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "决标备案详情"
|
||||
}
|
||||
},{
|
||||
"path" : "specialProjects",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "专项工程详情",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
}
|
||||
|
||||
]},
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/mbwa",
|
||||
"pages": [
|
||||
|
||||
{
|
||||
"path" : "mbwa",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "走动式管理"
|
||||
}
|
||||
},{
|
||||
"path" : "mbwaUnCheck",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "未检点位"
|
||||
}
|
||||
},{
|
||||
"path" : "mbwaDetail",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "走动式管理"
|
||||
}
|
||||
},{
|
||||
"path" : "mbwaUpload",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "上传走动式管理"
|
||||
}
|
||||
}
|
||||
]},
|
||||
{
|
||||
"root": "pages/serviceAreaReimbursement",
|
||||
"pages": [
|
||||
"root": "pages/mbwa",
|
||||
"pages": [
|
||||
|
||||
{
|
||||
"path" : "serviceAreaReimbursement",
|
||||
"style" : {
|
||||
"path": "mbwa",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "走动式管理"
|
||||
}
|
||||
}, {
|
||||
"path": "mbwaUnCheck",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "未检点位"
|
||||
}
|
||||
}, {
|
||||
"path": "mbwaDetail",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "走动式管理"
|
||||
}
|
||||
}, {
|
||||
"path": "mbwaUpload",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "上传走动式管理"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/serviceAreaReimbursement",
|
||||
"pages": [{
|
||||
"path": "serviceAreaReimbursement",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "服务区报销"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "detail",
|
||||
"style" : {
|
||||
"path": "detail",
|
||||
"style": {
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarTitleText": ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
]
|
||||
}, {
|
||||
"root": "pages/dataSummary",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "dataSummary",
|
||||
"style" : {
|
||||
}, {
|
||||
"root": "pages/dataSummary",
|
||||
"pages": [{
|
||||
"path": "dataSummary",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "日结校验"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "dayDetail",
|
||||
"style" : {
|
||||
"navigationBarBackgroundColor": "#EAEBEB",
|
||||
"navigationBarTitleText": "日结校验"
|
||||
"path": "dayDetail",
|
||||
"style": {
|
||||
"navigationBarBackgroundColor": "#EAEBEB",
|
||||
"navigationBarTitleText": "日结校验"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "detail",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "日结校验"
|
||||
"path": "detail",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "日结校验"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
},
|
||||
{
|
||||
"root": "pages/askForLeave",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "askForLeave",
|
||||
"style" : {
|
||||
"root": "pages/askForLeave",
|
||||
"pages": [{
|
||||
"path": "askForLeave",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "请假加班"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "detail",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "请假详情"
|
||||
"path": "detail",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "请假详情"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "newLeave",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "申请请假"
|
||||
"path": "newLeave",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "申请请假"
|
||||
}
|
||||
},{
|
||||
"path" : "newLeave2",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "申请请假"
|
||||
}, {
|
||||
"path": "newLeave2",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "申请请假"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/officialDocManagement",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "officialDocManagement",
|
||||
"style" : {
|
||||
"root": "pages/officialDocManagement",
|
||||
"pages": [{
|
||||
"path": "officialDocManagement",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "公文阅办"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "detail",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "公文阅办"
|
||||
"path": "detail",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "公文阅办"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "readerList",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "公文阅办"
|
||||
"path": "readerList",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "公文阅办"
|
||||
}
|
||||
},{
|
||||
"path" : "circulate",
|
||||
"style" : {
|
||||
|
||||
"navigationBarTitleText": "阅办记录"
|
||||
}, {
|
||||
"path": "circulate",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "阅办记录"
|
||||
}
|
||||
}
|
||||
]
|
||||
},{
|
||||
"root": "pages/businessApproval",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "businessApproval",
|
||||
"style" : {
|
||||
}, {
|
||||
"root": "pages/businessApproval",
|
||||
"pages": [{
|
||||
"path": "businessApproval",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "商品审批"
|
||||
}
|
||||
} ,{
|
||||
"path" : "productDetail",
|
||||
"style" : {
|
||||
}, {
|
||||
"path": "productDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "商品审批"
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages/everdayRenven",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "index",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": false,
|
||||
// "navigationStyle":"custom",
|
||||
// "navigationBarTextStyle":"white",
|
||||
// "navigationBarBackgroundColor":"#3b64a3",
|
||||
"navigationBarTitleText": "每日营收汇总"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "detail",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarTitleText": "每日营收"
|
||||
}
|
||||
},{
|
||||
"path" : "serviceIndex",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarTitleText": "服务区每日营收"
|
||||
}
|
||||
},{
|
||||
"path" : "serviceDetail",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarTitleText": "服务区每日营收"
|
||||
}
|
||||
}
|
||||
|
||||
,{
|
||||
"path" : "trydata",
|
||||
"style" :
|
||||
"root": "pages/everdayRenven",
|
||||
"pages": [{
|
||||
"path": "index",
|
||||
"style": {
|
||||
"enablePullDownRefresh": false,
|
||||
// "navigationStyle":"custom",
|
||||
// "navigationBarTextStyle":"white",
|
||||
// "navigationBarBackgroundColor":"#3b64a3",
|
||||
|
||||
"navigationBarTitleText": "每日营收汇总"
|
||||
}
|
||||
},
|
||||
{
|
||||
"navigationBarTitleText": "",
|
||||
"enablePullDownRefresh": false
|
||||
"path": "detail",
|
||||
"style": {
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarTitleText": "每日营收"
|
||||
}
|
||||
}, {
|
||||
"path": "serviceIndex",
|
||||
"style": {
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarTitleText": "服务区每日营收"
|
||||
}
|
||||
}, {
|
||||
"path": "serviceDetail",
|
||||
"style": {
|
||||
"enablePullDownRefresh": false,
|
||||
"navigationBarTitleText": "服务区每日营收"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "AnhuiIndex",
|
||||
"style": {
|
||||
"navigationBarTitleText": "每日营收汇总",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
}, {
|
||||
"path": "AnhuiServerpart",
|
||||
"style": {
|
||||
"navigationBarTitleText": "服务区每日营收",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
]
|
||||
},{
|
||||
"root": "pages/suggestion",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "suggestion",
|
||||
"style" : {
|
||||
]
|
||||
}, {
|
||||
"root": "pages/suggestion",
|
||||
"pages": [{
|
||||
"path": "suggestion",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "投诉建议"
|
||||
}
|
||||
},{
|
||||
"path" : "suggestionDetail",
|
||||
"style" : {
|
||||
}, {
|
||||
"path": "suggestionDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "投诉建议"
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages/contract",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "contract",
|
||||
"style" : {
|
||||
"root": "pages/contract",
|
||||
"pages": [{
|
||||
"path": "contract",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "合同审批"
|
||||
}
|
||||
},{
|
||||
"path" : "detail",
|
||||
"style" : {
|
||||
|
||||
}, {
|
||||
"path": "detail",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "合同审批"
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages/cashAudit",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "list",
|
||||
"style" : {
|
||||
"root": "pages/cashAudit",
|
||||
"pages": [{
|
||||
"path": "list",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "收银稽核"
|
||||
}
|
||||
},{
|
||||
"path" : "detail",
|
||||
"style" : {
|
||||
|
||||
}, {
|
||||
"path": "detail",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "收银稽核详情"
|
||||
}
|
||||
},{
|
||||
"path" : "check",
|
||||
"style" : {
|
||||
|
||||
}, {
|
||||
"path": "check",
|
||||
"style": {
|
||||
|
||||
"navigationBarTitleText": "收银稽核反馈"
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"root": "pages/investment",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "investment",
|
||||
"style" : {
|
||||
"root": "pages/investment",
|
||||
"pages": [{
|
||||
"path": "investment",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "招商审批"
|
||||
}
|
||||
},{
|
||||
"path" : "investmentDetail",
|
||||
"style" : {
|
||||
}, {
|
||||
"path": "investmentDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "招商审批"
|
||||
}
|
||||
}
|
||||
]
|
||||
},{
|
||||
"root": "pages/publicity",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "publicity",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "阳光公示"
|
||||
}]
|
||||
}, {
|
||||
"root": "pages/publicity",
|
||||
"pages": [{
|
||||
"path": "publicity",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "阳光公示"
|
||||
}
|
||||
}, {
|
||||
"path": "publicityDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "阳光公示"
|
||||
}
|
||||
}
|
||||
},{
|
||||
"path" : "publicityDetail",
|
||||
"style" : {
|
||||
"navigationBarTitleText": "阳光公示"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"root": "pages/expenseApproval",
|
||||
"pages": [
|
||||
{
|
||||
"path" : "expenseApproval",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "财务审批"
|
||||
"root": "pages/expenseApproval",
|
||||
"pages": [{
|
||||
"path": "expenseApproval",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "财务审批"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "expenseDetail",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "财务审批"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path" : "expenseDetail",
|
||||
"style" : {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "财务审批"
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
|
||||
"globalStyle": {
|
||||
"navigationBarTextStyle": "black",
|
||||
"navigationBarTitleText": "uni-app",
|
||||
|
||||
75
pages/authorityApproval/components/SelectShopList.vue
Normal file
@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<view class="content" v-if="data">
|
||||
<checkbox-group class="card" @change="changeState">
|
||||
<view class="row" v-for="item in data" :key="item.value">
|
||||
<view>
|
||||
{{item.label}}
|
||||
</view>
|
||||
<checkbox :value="item.value" :checked="item.checked" color="#2E6CF6"/>
|
||||
</view>
|
||||
</checkbox-group>
|
||||
<!-- <view class="confirm-btn" @click="changeValues">确认</view> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props:['data'],
|
||||
data() {
|
||||
return {
|
||||
selectShops: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeState(value) {
|
||||
this.$emit('changeValues',value.detail.value)
|
||||
// this.selectShops =value.detail.value
|
||||
},
|
||||
// changeValues(){
|
||||
// this.$emit('changeValues',this.selectShops)
|
||||
// }
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="stylus">
|
||||
.content {
|
||||
// background-color: #F4F4F7;
|
||||
padding 0 24rpx
|
||||
position relative
|
||||
// height calc(100vh- var(--status-bar-height) - 88px )
|
||||
}
|
||||
.content checkbox-group{
|
||||
box-sizing border-box !important
|
||||
width auto !important
|
||||
}
|
||||
.card {
|
||||
background-color #FFFFFF
|
||||
border-radius: 12rpx;
|
||||
padding 24rpx 24rpx
|
||||
max-height 900rpx
|
||||
overflow auto
|
||||
}
|
||||
.row {
|
||||
display flex;
|
||||
align-items center
|
||||
border-bottom 1px solid #F0F0F0
|
||||
line-height 2
|
||||
padding 24rpx 0
|
||||
justify-content space-between
|
||||
}
|
||||
.row:last-child {
|
||||
border none
|
||||
}
|
||||
.confirm-btn {
|
||||
margin: 40rpx auto;
|
||||
width: 510rpx;
|
||||
height: 96rpx;
|
||||
background: #618ade;
|
||||
border-radius: 48rpx;
|
||||
line-height 96rpx
|
||||
color #FFFFFF
|
||||
text-align center
|
||||
}
|
||||
|
||||
</style>
|
||||
79
pages/authorityApproval/components/baseDetail.vue
Normal file
@ -0,0 +1,79 @@
|
||||
<template>
|
||||
<view class="main-card" v-if="baseData">
|
||||
<div class="base-body">
|
||||
<p>
|
||||
<i class="ico ico-user"></i>
|
||||
<span class="item-title">申请人:</span>
|
||||
<span>{{baseData.STAFF_NAME}}</span>
|
||||
</p>
|
||||
<p>
|
||||
<i class="ico ico-lxfs"></i>
|
||||
<span class="item-title">手机号:</span>
|
||||
<span>{{baseData.USER_MOBILEPHONE}}</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="detail-other " >
|
||||
<p class="item-title">
|
||||
<i class="ico ico-qtyq"></i>
|
||||
<span>申请说明:</span>
|
||||
</p>
|
||||
<div class="detail-cont">{{baseData.PERMISSIONAPPLY_REASON}}</div>
|
||||
</div>
|
||||
|
||||
<!-- <view class="row">
|
||||
<view class="title">
|
||||
<view class="tag" style="background-color: #647BD1;">服务区</view>
|
||||
</view>
|
||||
<view class="desc">
|
||||
<view>{{data.SERVERPART_NAME ||'-'}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="title">
|
||||
<view class="tag" style="background-color: #647BD1;">门店</view>
|
||||
</view>
|
||||
<view class="desc">
|
||||
<view>{{data.APPLYSHOP_NAME||'-'}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="title">
|
||||
申请说明
|
||||
</view>
|
||||
<view class="desc">
|
||||
<view>{{data.PERMISSIONAPPLY_REASON||'-'}}</view>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: ['baseData'],
|
||||
data (){
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@import url("/common/css/tenderingDetail.css");
|
||||
.main-card {
|
||||
padding: 0;
|
||||
}
|
||||
.base-body {
|
||||
padding: 24rpx;
|
||||
border-bottom: 1px dashed #F1F1F1;
|
||||
}
|
||||
.detail-other {
|
||||
padding: 24rpx;
|
||||
}
|
||||
.detail-cont {
|
||||
min-height: 50rpx;
|
||||
line-height: 2;
|
||||
}
|
||||
|
||||
</style>
|
||||
89
pages/authorityApproval/components/businessUnit.vue
Normal file
@ -0,0 +1,89 @@
|
||||
<template>
|
||||
<div class="card" :class="item.SORTNUM == 0 ? 'conten-border' : ''" @tap='goDetail' v-if="item">
|
||||
<div class="uni-flex jc-between" >
|
||||
<p class="contentName">
|
||||
{{item.name}}
|
||||
<!-- <span v-if="item.HIGHWAYPROINST_NEXTID=='3000'" style="color:#D73535;">【退】</span>
|
||||
<span v-else-if="item.HIGHWAYPROINST_NEXTID=='4000'" style="color:#D73535;">【移】</span> -->
|
||||
</p>
|
||||
<text class="typeText" :class="{'typeText-color': item.state===3000 ,'success-text': item.state===9000}">{{proStatus[item.state]}}</text>
|
||||
</div>
|
||||
<div class="content-index">{{i+1}}</div>
|
||||
<view style="line-height: 1;">
|
||||
<text class="content-type-text">{{item.serverpart}}</text>
|
||||
</view>
|
||||
<view class="content-box-cashpay">
|
||||
<text >{{item.title}}</text>
|
||||
|
||||
</view>
|
||||
<view class="bb1"></view>
|
||||
<!-- <view class="uni-flex align-center jc-between" v-if="item.ACTINST_NAME">
|
||||
|
||||
<view class="uni-flex jc-top" >
|
||||
<i class="B-icon A-icon"></i>
|
||||
<text class="content-span">{{item.ACTINST_NAME}}</text>
|
||||
</view>
|
||||
<text class="content-span" v-if="!item.STAFF_NAME">{{item.HIGHWAYPROINST_CREATEDATE}}</text>
|
||||
</view> -->
|
||||
<view class="uni-flex jc-between" v-if="item.username">
|
||||
<view class="uni-flex align-top" >
|
||||
<text class="G-icon A-icon" ></text>
|
||||
<text class="content-span staff-text">申请人:{{item.username}}</text>
|
||||
</view>
|
||||
<text class="content-span lh15">{{item.date}}</text>
|
||||
</view>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
item: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
i: {
|
||||
type: Number,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
proStatus: {
|
||||
1000: '待受理',
|
||||
2000: '待办理',
|
||||
3000: '已否决',
|
||||
// 4000: '已移交',
|
||||
9000: '已通过'
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
},
|
||||
methods: {
|
||||
goDetail () {
|
||||
this.$emit('goDetail', this.item)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@import url('../../../common/css/listUnit.css');
|
||||
.content-box-cashpay {
|
||||
margin-top: 40rpx;
|
||||
font-size: 24rpx;
|
||||
text-align: center;
|
||||
padding-bottom: 16rpx;
|
||||
}
|
||||
.content-box-cashpay text {
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.success-text {
|
||||
color:#52c41a;
|
||||
}
|
||||
|
||||
</style>
|
||||
419
pages/authorityApproval/components/shopApproval.vue
Normal file
@ -0,0 +1,419 @@
|
||||
<template>
|
||||
<view v-if="data" >
|
||||
<view v-show="!showPopupBottom">
|
||||
<view class="content-title">商户新增门店申请</view>
|
||||
<p class="box-top">
|
||||
<view class="item-title">日期:<text style="color:#333;font-size:24rpx;">{{data.OPERATE_DATE}}</text></view>
|
||||
<text style="color:#F27B4C;font-size:24rpx;">{{stateEmun[data.PERMISSIONAPPLY_STATE]}}</text>
|
||||
</p>
|
||||
<BaseDetail :baseData="data"/>
|
||||
<view class="card">
|
||||
<view class="title-row">
|
||||
<view class="title">
|
||||
<view>申请门店权限</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<!-- 服务区 -->
|
||||
<image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAiCAYAAAA3WXuFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTkxNUE3MkRDNURDMTFFQzlBOEFDQUQwNEEzNEE3MjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTkxNUE3MkNDNURDMTFFQzlBOEFDQUQwNEEzNEE3MjAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzFBRTY4QkE4ODM0MTFFOTgyRTJFNzExNDAyMDkyOEMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzFBRTY4QkI4ODM0MTFFOTgyRTJFNzExNDAyMDkyOEMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7WAcXUAAACkklEQVR42uyWW4iNURTHz2Eil2JM0aSJJJcHJZfCg1Au8TAPyiUaYiLKTELJXWYoeXCJIgkZyYNBichlHlCEEg+SmkzMuKQRcYQ5frv+R8v2nXO+5pyjKd+qX2fv/e3v2/+z99prrXgymYx1JOsU62AWCYoERYIKbUWpRuXJ5mwByT1/Aw/hLNQdrSj9wXvu2VA4DK2wAx6EWHssbIXtfOd+ajCeCowhBPl2B2bAJ5gENzX+CsZAS4Z3l8AGuK3+NUSd+mOHjJ2A4wHjPWAwrIQhMAFqocqb1x/qJfKb96wL7IVFcAC6wU+YBWkFNaL2Vrq/xk46sfckahlshqfQBGWaNg6OaGFro2GF2jPhEiyEKe12asR+5Oegul3lC++gHL6YqRWwxnu9l2mPgPVwkW8+z/WWvTDtPvp9pH9rbbf8LGZ2xdpLqMnHtS8z7fem7Xxno/f9MzAMZsMqjV+B6e7Y2Z3mnAThQz2NIyfkT9Z2wWnvmC7AcPXrtFNXA5w+0Kl7s+jAgPG+cspqxZ2YfOlzQLxaqvkJHZm7ABN1hNs0J3NgNFYtspmLIZvSPHNCpkKxRFSq/wS+5jN1JBQQl8Nkzj+RYW5n+c8cc6yrYXGo1GFsn4KXb+5Kf3DpIqR450vTTLB1F6FUKeYZ3A0rqJVFG3PMkfNgndr74ZCC5w1F63rFr6Z/ke1HwjHjZ2vVbnCJVO1+cB66F1pQiRZyOeqt/Oe7eV6rXXI2ygnnRscLJahIZckAaIP58Nqb4xLpApUxzuYq6xdE0B6TJLeYnfCtRaLa1K9hl8rzLWi8iV2XYWeW+ddVyP3O2UG3rCFVfrRD0GPVUMUqvsIUe07QIFUJ5/6qGKMiPxIUCfpfBP0SYADhDaNPYUPNhAAAAABJRU5ErkJggg==" mode="aspectFit" style="height: 36rpx;width:64rpx"></image>
|
||||
|
||||
<view class="desc">
|
||||
{{data.SERVERPART_NAME ||'-'}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<!-- 门店 -->
|
||||
<image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAiCAYAAAA3WXuFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ4IDc5LjE2NDAzNiwgMjAxOS8wOC8xMy0wMTowNjo1NyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODk2MDIzMEJDNURDMTFFQzlBQjFGOUU3Qzg3QjAwQjUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODk2MDIzMEFDNURDMTFFQzlBQjFGOUU3Qzg3QjAwQjUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzFBRTY4QkE4ODM0MTFFOTgyRTJFNzExNDAyMDkyOEMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzFBRTY4QkI4ODM0MTFFOTgyRTJFNzExNDAyMDkyOEMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7qjobvAAAD/klEQVR42uxYXYhVVRRea59z7rm3rqPTHUoFE0nRMMp5aCJ0EitJUhPsDxkHKYgeAhMEKcyXqEgKisinRDBGbBApGEXFGsoZ8KEgHxPJBxEx5RpCc5o75+y1+vaod+69Z+6M84vQbGbftX/WPuvba639nX2GVZXupWLoHiszgEYr/p3Ga0eIjrxKtOFQkVTcCHJLgZeVlJkMxhJi8iWhAY2x0qOBrMnn+83H0HkdiiEUT4kNd3AmuWolpsAzZPEM/OKZQtai7QkZhVmXu+6hmBW0j7cXqgGNozyYL5mTwNgMMLdGAMz4pRYl73n0Lk5nyBZk2D8D2Zye0kUsSQ8aS6cL0JIgCEczON8n/gVy+VQDepx8cwYBWngXug+ppZ8hV0wVoKd9I87A3Jrx7xOmFkmkGWnaURO+JiPSjUbLZANaq0ZOQzZW26NP8bsZ9VfUc6jtALW7BlQjCbm1rZMFaLNR6WLi+4dw4E90Vy5beN+dMM+dYJ8dQ1Dfn4VPROVdqEnFMxqgdwLyuYkCehMU1EkMjikXtsz8di7X9Bk6HuqHqFdQr6PudVQS2b6vVPgtp1tehQ2BurrQXDdeQDvBYPsruQr8FZPYtn9u2m/QzfxbKn6H0T1I8nkw2QSru/KPFI9iLuslcgD9tsE1QyVnlH+A3DhWQB/BC59zmfEGSyRGNnGQ7UQ7H5WKxyBfGWbtS3kvfxJyVtwfdTLpy7hR9A85mEPE+2idtSlADsDXCNPu6tylm3jIOl98lwdN+QbTDcW1dX3LvFpC/hGtB0oxdQnxeryA+oamKYD3D6PZNhIgb31H8VtYf6dG55on3hq81xwZPqwy4OSTox4FpZYgzDlynC8s3SyCDfDf1e9RcxDyjWEBRf3F/dj11pqtXkpIn0nY/o7Oo/BSLwwtGwN3PRZmTC/kYjKZs2LMs26DFahxKAbztD0FCG6sAUPnWUutnprzaD+F+R4EdMHY3zS6CPFxXn1CbHyOE1qNFLhc6RRD/GUKEGJ8tiJnfrNh2Go5ewndF5j1J8jCBG4Gc0mtY/lVFJg/bBI7krxQtscape5DwmYDK28xlAyYKOlUlYjY3wL1g+CQoI6h1q6thd7KgY0dxVUQPelEpzk+mVPudBnfP2HjeKUX+O9h87MRubKH+M4l/8VDN9DBRcxdw6KEbM7fbth8MRJXAQwPNw5Qdb8cHC/BI9s0Tg4DEOntVDrW3lifh/S+DAHM3qm44rojj3vjPi/I3C0xTsc1G6EY9A2PbN1UvQ+np3ANqDIgbxwfjLcTuHZs5djDKOmvjnGWHgD4n3wocrqWpjBzbqQtpogxtWoPSOoDKDdM6vki+ousbK8Ldea/HzOAJlj+E2AAkKJgt+Zq9g4AAAAASUVORK5CYII=" mode="aspectFit" style="height: 36rpx;width:64rpx;"></image>
|
||||
|
||||
<view class="desc">
|
||||
{{data.APPLYSHOP_NAME||'-'}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card">
|
||||
<view class="title-row">
|
||||
<view class="title">
|
||||
<view>商户资料详情</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="title">
|
||||
身份证号
|
||||
</view>
|
||||
<view class="desc">
|
||||
{{data.USER_IDCARD||'-'}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="title">
|
||||
身份证照
|
||||
</view>
|
||||
<view class="desc">
|
||||
<image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAABSCAMAAADEi7K1AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAHCUExURUdwTFKb5IW8/4W8/1ag4lWe21WZ3YS8/1eg5Feh5IW8/4O6/4W6/4W8/4S8/////4W8/4S8/4W8/4W8/4O9/4S8/4W8/1Cf34W8/4e9/4W8/4S8/4W7/4W5/4W8/4S7/1Wf34W9/4W8/4W8/4e//4S9/4a7/4a7/5K2/4W8/4W8/4a8/4W4/6qq/4W8/02Z5oW8/1yl52Wp7FWi4IW8/////1Ke4LPV//D3/8Le/+nz/2ir7Vuk5rvZ/4zA/+Xx/4a9/4i+//7+//3+/4/C/6rQ/9Xo/93s/+rz/5LD//r8/5bF/4e9/+bx/+Du/+/2//X6/9Pn/5DC/57K/8jh//v9//n8/8zj/22u8Pz9//j7/3i098ni/5zJ/5/K/5rH/8nh/4u///b6/4G5/I3A/2qs7tDl/+v0/6HL/1uj5W+v8c7k/83k/8/k/6LM/+z1/6XN/+Hv/+31/9Tn/7DU/4q//12k52Cm6Xm1+LfY/8bf/5PE//L4/1Oe4HKx9LHU/9rr/5HD/6vR/2Kn6mut79bp/6fP/67S/9jp/3y2+a/T/8Ld/9/u/63S/4/B/8Pe/9/t/5nH/+jy//T5/7DT/9nq/6g8kSsAAAA0dFJOUwAc8ZjvFQ+g6N/eJUP5nAH3bsWfI1faEMJG1onbLME8GMT4RSQ6pnwH7MN2GQO2Cv22uCHmQd0iAAACIElEQVRYw+3Y+VPTQBQH8GBVqBZBBG/k8kRRxJeAgpC2FAoW0BZBvDhUQDkUlENBReS+Bf1/3TTSNpltunm7P3TGfn96M7vzmWQ2u9l5kqTF5TiZDawpv31LipfcC2ArNc7DcaRLB8AmpcSxjtqVCEW3sooAQVGtEkBRNOsYkqJYR7CU4jxlojLRlJJxyEgBnjJbPJTJ4qKMFh9lsBDUpEK3ENRPxWAVclBvDJRyMA1PTSt0C0HBW7qFoZ4pVAtDwROqhaLg3VeKhaNgdcps3cFSAK++LVTHpgJPmZOeopKG+rRRZZ33/Q/YqBE5cToGWSifzJK2AAO1yETJowxUCxv1nYG692+u9/nml674VKUN6jOp18RQblKrzUKoIKl7vUKohgCow2JeUG5rGJAFUdbhpVqHRFF1tfBIDOV/TT6PjyKo8XptWF3hp6qa9HH3HC81Gznt3I0IyhMtH3ZHZ0yM2aZamxr3y6cvYqfct0uRpVfX9Qdrfgk8FJFIlvpI+fgD8FC6BDBTJ3t9wEPtS2TBOpeBh2qptfp72qH89SCKspZsUZB01A6ZF7KmtENrnoHa1nZc+12L/NG25w8GamuP5WjvYboU/dpNCHnaVcZbX+h3pWV8wdS1NkX919QJTCuMnnOYBh09xzFtQ3rypTOCpLOSlJUjhspDNX5puRxu8BQIsG5e1ftOF09zQtlXyiJdOpfjfDHWuVZ6/UYY+Qv6cKIzp0aufwAAAABJRU5ErkJggg==" mode="aspectFit" style="height: 42rpx;width:37rpx;" @click="priviewImages(1)"></image>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="title">
|
||||
经营商户
|
||||
</view>
|
||||
<view class="desc">
|
||||
{{data.BUSINESSMAN_NAME||'-'}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="row" v-if="shopImges && shopImges.length>0">
|
||||
<view class="title">
|
||||
营业执照
|
||||
</view>
|
||||
<view class="desc">
|
||||
<image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEoAAABSCAMAAADEi7K1AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAHCUExURUdwTFKb5IW8/4W8/1ag4lWe21WZ3YS8/1eg5Feh5IW8/4O6/4W6/4W8/4S8/////4W8/4S8/4W8/4W8/4O9/4S8/4W8/1Cf34W8/4e9/4W8/4S8/4W7/4W5/4W8/4S7/1Wf34W9/4W8/4W8/4e//4S9/4a7/4a7/5K2/4W8/4W8/4a8/4W4/6qq/4W8/02Z5oW8/1yl52Wp7FWi4IW8/////1Ke4LPV//D3/8Le/+nz/2ir7Vuk5rvZ/4zA/+Xx/4a9/4i+//7+//3+/4/C/6rQ/9Xo/93s/+rz/5LD//r8/5bF/4e9/+bx/+Du/+/2//X6/9Pn/5DC/57K/8jh//v9//n8/8zj/22u8Pz9//j7/3i098ni/5zJ/5/K/5rH/8nh/4u///b6/4G5/I3A/2qs7tDl/+v0/6HL/1uj5W+v8c7k/83k/8/k/6LM/+z1/6XN/+Hv/+31/9Tn/7DU/4q//12k52Cm6Xm1+LfY/8bf/5PE//L4/1Oe4HKx9LHU/9rr/5HD/6vR/2Kn6mut79bp/6fP/67S/9jp/3y2+a/T/8Ld/9/u/63S/4/B/8Pe/9/t/5nH/+jy//T5/7DT/9nq/6g8kSsAAAA0dFJOUwAc8ZjvFQ+g6N/eJUP5nAH3bsWfI1faEMJG1onbLME8GMT4RSQ6pnwH7MN2GQO2Cv22uCHmQd0iAAACIElEQVRYw+3Y+VPTQBQH8GBVqBZBBG/k8kRRxJeAgpC2FAoW0BZBvDhUQDkUlENBReS+Bf1/3TTSNpltunm7P3TGfn96M7vzmWQ2u9l5kqTF5TiZDawpv31LipfcC2ArNc7DcaRLB8AmpcSxjtqVCEW3sooAQVGtEkBRNOsYkqJYR7CU4jxlojLRlJJxyEgBnjJbPJTJ4qKMFh9lsBDUpEK3ENRPxWAVclBvDJRyMA1PTSt0C0HBW7qFoZ4pVAtDwROqhaLg3VeKhaNgdcps3cFSAK++LVTHpgJPmZOeopKG+rRRZZ33/Q/YqBE5cToGWSifzJK2AAO1yETJowxUCxv1nYG692+u9/nml674VKUN6jOp18RQblKrzUKoIKl7vUKohgCow2JeUG5rGJAFUdbhpVqHRFF1tfBIDOV/TT6PjyKo8XptWF3hp6qa9HH3HC81Gznt3I0IyhMtH3ZHZ0yM2aZamxr3y6cvYqfct0uRpVfX9Qdrfgk8FJFIlvpI+fgD8FC6BDBTJ3t9wEPtS2TBOpeBh2qptfp72qH89SCKspZsUZB01A6ZF7KmtENrnoHa1nZc+12L/NG25w8GamuP5WjvYboU/dpNCHnaVcZbX+h3pWV8wdS1NkX919QJTCuMnnOYBh09xzFtQ3rypTOCpLOSlJUjhspDNX5puRxu8BQIsG5e1ftOF09zQtlXyiJdOpfjfDHWuVZ6/UYY+Qv6cKIzp0aufwAAAABJRU5ErkJggg==" mode="aspectFit" style="height: 42rpx;width:37rpx;" @click="priviewImages(2)"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card">
|
||||
<view class="row" style="padding-top: 0;">
|
||||
<view style="color: #2f93e7;">审批意见</view>
|
||||
</view>
|
||||
<view class="approved-reason">
|
||||
<view class="desc">
|
||||
<textarea
|
||||
:value="approvalReason"
|
||||
placeholder="请输入"
|
||||
placeholder-style="color:#969EA4;line-height:2;padding-top:10rpx;"
|
||||
auto-height
|
||||
@blur="changeReason"
|
||||
v-if="data.PERMISSIONAPPLY_STATE===2000"
|
||||
auto-focus
|
||||
></textarea>
|
||||
<template v-else>
|
||||
{{data.APPOVED_INFO||''}}
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
<view class="button-box" v-if="data.PERMISSIONAPPLY_STATE===2000">
|
||||
<span @tap="cancelApproval"><image src="@/static/images/bh-btn.png" mode="aspectFit"></image>否决</span>
|
||||
<span @click="showPopupBottom=true"><image src="@/static/images/sh-btn.png" mode="aspectFit"></image>授权门店</span>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view v-if="data.PERMISSIONAPPLY_STATE===9000">
|
||||
<view class="card">
|
||||
<view class="title-row">
|
||||
已授权门店
|
||||
</view>
|
||||
<view class="" v-if="approvalList && approvalList.length">
|
||||
<view class="row select-item" v-for="item in approvalList" :key="item.value">
|
||||
<view>{{item.label}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-show="showPopupBottom">
|
||||
<!-- <view class="" style="text-align: left;padding-left: 28rpx;line-height: 3.4;">
|
||||
请选择需要授权的门店
|
||||
</view> -->
|
||||
<view class="uni-flex jc-between" style="padding:24rpx 28rpx;line-height: 3.4;">
|
||||
<view class="title">门店授权</view>
|
||||
<view>
|
||||
<span v-if="selectShopids.length">
|
||||
已选
|
||||
<span style="color: #007AFF;">{{selectShopids.length}}</span>
|
||||
家门店
|
||||
</span>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<ShopList :data="shops" @changeValues="changeValues"/>
|
||||
<view class="button-box" >
|
||||
<span @click="showPopupBottom=false" ><image src="@/static/images/cy-btn.png" mode="aspectFit"></image> 返回</span>
|
||||
<span @click="savaShops"><image src="@/static/images/sh-btn.png" mode="aspectFit"></image>确认授权</span>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapState } from 'vuex'
|
||||
import ShopList from'./SelectShopList.vue'
|
||||
import UniPopup from '@/components/uni-popup.vue'
|
||||
import BaseDetail from './baseDetail.vue'
|
||||
export default {
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
|
||||
},
|
||||
businessId: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
approvalData:{ // 审核通过时,被授权的门店数据
|
||||
type: Object,
|
||||
required: false
|
||||
},
|
||||
imagsList:{ // 附件信息
|
||||
type: Array,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
components:{
|
||||
ShopList,
|
||||
UniPopup,
|
||||
BaseDetail
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
user: (state)=>{ return state.userData}
|
||||
}),
|
||||
approvalList () {
|
||||
|
||||
return this.approvalData && this.approvalData.NewList ? this.approvalData.NewList.map(n=>n.node) : []
|
||||
},
|
||||
personImges(){
|
||||
const imags = this.approvalData && this.approvalData.PictureList ? this.approvalData.PictureList.filter(m=>m.ImageType==3000||m.ImageType==4000) :[]
|
||||
return imags.map(n=>n.ImageUrl)
|
||||
},
|
||||
shopImges (){
|
||||
const imags = this.approvalData && this.approvalData.PictureList ? this.approvalData.PictureList.filter(m=>m.ImageType==1000) :[]
|
||||
return imags.map(n=>n.ImageUrl)
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showPopupBottom: false,
|
||||
shops:[],
|
||||
selectShopids:[],
|
||||
approvalReason: '',
|
||||
isloading:false,
|
||||
stateEmun: {2000:"办理中",3000:"未通过",9000:"已通过"}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeReason(event){
|
||||
this.approvalReason = event.detail.value
|
||||
},
|
||||
hidePopup(){
|
||||
this.showPopupBottom = false
|
||||
},
|
||||
priviewImages(type){ // 1 身份证正反面 2 营业执照
|
||||
uni.previewImage(type===1 ? {urls: this.personImges} : {urls: this.shopImges})
|
||||
},
|
||||
changeValues(values){
|
||||
let list = [] // this.selectShopids
|
||||
let _this =this
|
||||
if(values.length){
|
||||
_this.shops.forEach(n=>{
|
||||
const index = values.includes(n.value)
|
||||
if(index){
|
||||
list.push({
|
||||
PERMISSIONAPPLY_ID: this.data.PERMISSIONAPPLY_ID,
|
||||
SERVERPART_NAME: this.data.SERVERPART_NAME ,
|
||||
SERVERPART_ID: this.data.SERVERPART_ID,
|
||||
SERVERPARTSHOP_NAME: n.label,
|
||||
SERVERPARTSHOP_ID: n.value,
|
||||
PERMISSIONAPPLY_TYPE: 4000,
|
||||
PERMISSIONAPPLYDETAIL_TYPE:2000,
|
||||
OPERATE_DATE: new Date()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
this.selectShopids=list
|
||||
// this.hidePopup()
|
||||
},
|
||||
getShops(data) {
|
||||
let _this = this
|
||||
this.$request.$webGet('/EShangApiMain/BaseInfo/GetServerpartShopDDL',{
|
||||
ProvinceCode: data.OWNERUNIT_ID,
|
||||
ServerpartId: data.SERVERPART_ID
|
||||
}).then(res=>{
|
||||
if(res.Result_Code!==100) return
|
||||
_this.shops = res.Result_Data.List
|
||||
})
|
||||
},
|
||||
savaShops() {
|
||||
let _this = this
|
||||
if(!this.selectShopids.length){
|
||||
uni.showToast({ title: '请选择需要授权的门店' ,icon:'none'})
|
||||
return
|
||||
}
|
||||
if(_this.isloading) return
|
||||
uni.showLoading({
|
||||
title:'正在提交'
|
||||
})
|
||||
_this.isloading = true
|
||||
const permissionApplyModel = {
|
||||
...this.data,
|
||||
APPOVED_NAME: this.user.Membership_Name,
|
||||
APPOVED_INFO: this.approvalReason ||'通过',
|
||||
APPOVED_ID: this.user.UserId,
|
||||
PERMISSIONAPPLY_STATE: 9000,
|
||||
APPOVED_DATE: new Date()
|
||||
}
|
||||
this.$request.$webPost('/EShangApiMain/BusinessProcess/ApprovedMerchantApply',{
|
||||
PermissionApplyModel: permissionApplyModel,
|
||||
PermissionApplyDetailList: this.selectShopids
|
||||
}).then(res=>{
|
||||
uni.hideLoading()
|
||||
_this.isloading=false
|
||||
if(res.Result_Code!==100) {
|
||||
uni.showModal({
|
||||
title: '温馨提示',
|
||||
content: res.Result_Desc
|
||||
})
|
||||
return
|
||||
}
|
||||
uni.showModal({
|
||||
title: '温馨提示',
|
||||
content: res.Result_Desc,
|
||||
showCancel:false,
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
_this.$util.toNextRoute('reLaunch', "/pages/authorityApproval/index")
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
cancelApproval(){
|
||||
let _this = this
|
||||
if(!this.approvalReason){
|
||||
uni.showToast({ title: '请填写否决意见' ,icon:'none'})
|
||||
return
|
||||
}
|
||||
if(_this.isloading) return
|
||||
uni.showLoading({
|
||||
title:'正在提交'
|
||||
})
|
||||
_this.isloading=true
|
||||
const permissionApplyModel = {
|
||||
...this.data,
|
||||
APPOVED_NAME:this.user.Membership_Name,
|
||||
APPOVED_INFO: this.approvalReason,
|
||||
APPOVED_ID: this.user.UserId,
|
||||
PERMISSIONAPPLY_STATE: 3000,
|
||||
APPOVED_DATE:new Date()
|
||||
}
|
||||
this.$request.$webPost('/EShangApiMain/BusinessProcess/RejectPermissionApply',{
|
||||
PermissionApplyModel: permissionApplyModel
|
||||
}).then(res=>{
|
||||
uni.hideLoading()
|
||||
_this.isloading=false
|
||||
if(res.Result_Code!==100) {
|
||||
uni.showModal({
|
||||
title: '温馨提示',
|
||||
content: res.Result_Desc
|
||||
})
|
||||
return
|
||||
}
|
||||
uni.showModal({
|
||||
title: '温馨提示',
|
||||
content: res.Result_Desc,
|
||||
showCancel:false,
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
// _this.$emit('refresh')
|
||||
_this.$util.toNextRoute('reLaunch', "/pages/authorityApproval/index")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="stylus">
|
||||
@import url("/common/css/tenderingDetail.css");
|
||||
.card {
|
||||
background-color: #fff;
|
||||
border-radius: 12rpx;
|
||||
margin: 24rpx 24rpx 24rpx;
|
||||
padding: 24rpx;
|
||||
box-shadow: 0px 4px 12px 0px rgba(225,225,225,0.56);
|
||||
|
||||
.row,.title-row {
|
||||
display flex;
|
||||
align-items center
|
||||
line-height 2
|
||||
padding 24rpx 0
|
||||
.title {
|
||||
flex 5
|
||||
.tag {
|
||||
background-color #5BC898
|
||||
color #FFFFFF
|
||||
padding 0rpx 8rpx
|
||||
border-radius 6rpx
|
||||
font-size 24rpx
|
||||
display inline-block
|
||||
}
|
||||
font-size 26rpx
|
||||
}
|
||||
.desc {
|
||||
flex 19
|
||||
color #3C3C3C
|
||||
font-size 26rpx
|
||||
textarea {
|
||||
width auto
|
||||
height 50rpx
|
||||
padding-top 4rpx
|
||||
line-height 1.5
|
||||
}
|
||||
}
|
||||
&:last-child {
|
||||
border none
|
||||
padding-top: 0
|
||||
}
|
||||
|
||||
}
|
||||
.row +.row {
|
||||
padding-top: 0
|
||||
}
|
||||
.title-row {
|
||||
border-bottom 1px solid #F1F1F1
|
||||
padding-top 0
|
||||
}
|
||||
.approved-reason {
|
||||
padding: 16rpx 24rpx;
|
||||
background: #F8F9FB;
|
||||
border-radius: 4rpx;
|
||||
min-height: 97rpx;
|
||||
line-height: 2;
|
||||
}
|
||||
.uni-icon-arrowright {
|
||||
color: #969EA4;
|
||||
font-size: 24rpx;
|
||||
margin-left 16rpx;
|
||||
}
|
||||
.select-item {
|
||||
background: #f6f9fe;
|
||||
border none;
|
||||
border-radius: 12rpx;
|
||||
padding 24rpx
|
||||
margin-top 24rpx
|
||||
}
|
||||
}
|
||||
.back-btn {
|
||||
width: 241rpx;
|
||||
height: 94rpx;
|
||||
border: 1rpx solid #b3b3b3;
|
||||
border-radius: 48rpx;
|
||||
line-height 94rpx
|
||||
color #7D7D7D
|
||||
text-align center
|
||||
}
|
||||
.confirm-btn {
|
||||
margin: 40rpx 0;
|
||||
width: 394rpx;
|
||||
height: 94rpx;
|
||||
background: #618ade;
|
||||
border-radius: 48rpx;
|
||||
line-height 96rpx
|
||||
color #FFFFFF
|
||||
text-align center
|
||||
margin-left 24rpx
|
||||
}
|
||||
</style>
|
||||
64
pages/authorityApproval/detail.vue
Normal file
@ -0,0 +1,64 @@
|
||||
<template>
|
||||
<view>
|
||||
<view v-if="pageData.type=='4'">
|
||||
<ShopApproval :businessId="pageData.id" :data="approvalInfo" ref="shop" @refresh="reload" :approvalData="approvalData"></ShopApproval>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ShopApproval from './components/shopApproval.vue'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pageData:{
|
||||
type: null,
|
||||
id: null
|
||||
},
|
||||
approvalInfo: {},
|
||||
approvalData: {}// 审批后授权的列表
|
||||
}
|
||||
},
|
||||
components:{
|
||||
ShopApproval
|
||||
},
|
||||
methods: {
|
||||
getDetail (opt){
|
||||
let _this = this
|
||||
this.$request.$webGet('/EShangApiMain/Platform/GetPermissionApplyDetail?permissionApplyid='+opt.id).then(res=>{
|
||||
uni.hideLoading()
|
||||
if (res.Result_Code !== 100) {return }
|
||||
_this.approvalInfo = res.Result_Data
|
||||
if(_this.pageData.type==='4') {
|
||||
_this.$refs['shop'].getShops(res.Result_Data)
|
||||
_this.getDetailList({id:opt.id,type: res.Result_Data.PERMISSIONAPPLY_TYPE})
|
||||
}
|
||||
})
|
||||
},
|
||||
getDetailList(obj){
|
||||
let _this = this
|
||||
this.$request.$webGet('/EShangApiMain/BusinessProcess/GetPermissionApplyDetailList?permissionApplyid='+obj.id+'&PermissionApplyType='+obj.type).then(res=>{
|
||||
uni.hideLoading()
|
||||
if (res.Result_Code !== 100) {return }
|
||||
_this.approvalData = res.Result_Data
|
||||
|
||||
})
|
||||
},
|
||||
reload(){
|
||||
|
||||
this.getDetail(this.pageData)
|
||||
this.getDetailList(this.pageData)
|
||||
}
|
||||
},
|
||||
onLoad(option){
|
||||
uni.showLoading()
|
||||
this.pageData = option
|
||||
this.getDetail(option)
|
||||
this.$forceUpdate()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
107
pages/authorityApproval/index.vue
Normal file
@ -0,0 +1,107 @@
|
||||
<template>
|
||||
<view>
|
||||
<view v-if="pageData.list.length>0">
|
||||
<list-unit v-for="(item,index) in pageData.list" :key="index" :item="item" :i="index" @goDetail="goDetail"></list-unit>
|
||||
</view>
|
||||
<view v-else-if="!pageData.loading" style="height: 100%;">
|
||||
<noFound :nodata="pageData.list.length>0 ? false : true"/>
|
||||
</view>
|
||||
<view class="load-more" v-if="pageData.list.length>0">
|
||||
<text>{{!pageData.isEnd ? '正在加载,请稍后...':'——— 我是有底线的 ———'}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ListUnit from './components/businessUnit.vue'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
pageData: {
|
||||
pageIndex: 1,
|
||||
pageSize: 20,
|
||||
isEnd: false,
|
||||
loading: true,
|
||||
list: []
|
||||
}
|
||||
}
|
||||
},
|
||||
components:{
|
||||
ListUnit
|
||||
},
|
||||
methods: {
|
||||
goDetail(item){
|
||||
this.$util.toNextRoute('navigateTo', "/pages/authorityApproval/detail?id=" + item.id +'&type='+item.type)
|
||||
|
||||
},
|
||||
getData() {
|
||||
let _this = this
|
||||
this.$request.$webGet('/CommercialApi/BusinessProcess/GetBusinessProcessList', {
|
||||
OperationType: 4, // 只查询门店审批
|
||||
pageIndex: _this.pageData.pageIndex,
|
||||
pageSize: _this.pageData.pageSize,
|
||||
SortStr: 'BusinessProcess_StartDate desc'
|
||||
}).then(res => {
|
||||
|
||||
uni.hideLoading()
|
||||
if (res.Result_Code !== 100) {
|
||||
_this.pageData.loading=false
|
||||
return
|
||||
}
|
||||
const list = res.Result_Data.List.map(n => {
|
||||
return {
|
||||
id: n.BusinessProcess_ID,
|
||||
name: n.BusinessProcess_Name,
|
||||
serverpart: n.Serverpart_Name,
|
||||
username: n.Staff_Name,
|
||||
date: n.BusinessProcess_StartDate,
|
||||
state: n.BusinessProcess_State,
|
||||
title: n.BusinessProcess_Desc,
|
||||
type: n.Operation_Type
|
||||
|
||||
}
|
||||
})
|
||||
this.pageData.list = this.pageData.list.concat(list)
|
||||
|
||||
if(list.length<_this.pageData.pageSize){
|
||||
_this.pageData.isEnd = true
|
||||
}
|
||||
_this.pageData.loading=false
|
||||
})
|
||||
},
|
||||
loadMore() {
|
||||
if (!this.pageData.isEnd) {
|
||||
this.pageData.pageIndex += 1
|
||||
this.getData()
|
||||
}
|
||||
},
|
||||
},
|
||||
onPullDownRefresh() {
|
||||
this.pageData.pageIndex = 1
|
||||
this.pageData.isEnd = false
|
||||
uni.showLoading({
|
||||
title: '正在加载'
|
||||
})
|
||||
this.pageData.list=[]
|
||||
this.getData()
|
||||
setTimeout(function() {
|
||||
uni.stopPullDownRefresh()
|
||||
}, 1000)
|
||||
},
|
||||
onReachBottom() {
|
||||
this.loadMore()
|
||||
},
|
||||
onLoad() {
|
||||
uni.showLoading()
|
||||
this.pageData.isLoading = true
|
||||
|
||||
},
|
||||
onShow() {
|
||||
this.getData()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
@ -5,38 +5,46 @@
|
||||
<view class="main-card">
|
||||
<div class="card-title">
|
||||
<h4>{{baseData.SERVERPART_NAME}}</h4>
|
||||
<div class="card-status" :style="baseData.HIGHWAYPROINST_NEXTID!=9000 ?'color:#df7f42;':''">{{proStatus[baseData.HIGHWAYPROINST_NEXTID]}}</div>
|
||||
<div class="card-status" :style="baseData.HIGHWAYPROINST_NEXTID!=9000 ?'color:#df7f42;':''">
|
||||
{{proStatus[baseData.HIGHWAYPROINST_NEXTID]}}</div>
|
||||
</div>
|
||||
<div class="base-body" style="align-items: center;">
|
||||
<i class="ico ico-user"></i><span class="item-title">申请人:</span><text>{{baseData.STAFF_NAME}}</text>
|
||||
</div>
|
||||
<div class="base-body" style="align-items: center;">
|
||||
<i class="ico ico-sjx"></i><span class="item-title">创建日期: </span><text>{{baseData.HIGHWAYPROINST_CREATEDATE}}</text>
|
||||
<i class="ico ico-sjx"></i><span class="item-title">创建日期:
|
||||
</span><text>{{baseData.HIGHWAYPROINST_CREATEDATE}}</text>
|
||||
</div>
|
||||
<div class="base-body">
|
||||
<view class="uni-flex" style="align-items: center;">
|
||||
<i class="ico ico-bz"></i><span class="item-title">业务说明: </span>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
<text>{{baseData.PROINST_NAME}}</text>
|
||||
</div>
|
||||
</view>
|
||||
<div class="file-body" v-if="FileList.length>0">
|
||||
<div class="item-title">
|
||||
<!-- <i class="ico ico-fj"></i> -->
|
||||
附件文件
|
||||
<div class="file-body" v-if="baseData.FileList && baseData.FileList.length>0">
|
||||
<div class="uni-flex base-body" style="align-items: center;">
|
||||
<i class="ico ico-fj"></i>
|
||||
<span class="item-title">附件文件</span>
|
||||
</div>
|
||||
<div class="imgBox">
|
||||
<filesUnit v-for="(file,i) in baseData.FileList" :fileItem="file" :key="i"></filesUnit>
|
||||
</div>
|
||||
</div>
|
||||
<view class="button-box" v-if="baseData.USER_ID==users.UserId">
|
||||
<span @tap="showPop(4000)"><image src="/static/images/yj-btn.png" mode="aspectFit"></image> 移交 </span>
|
||||
<span @tap="showPop(2000)"><image src="/static/images/sh-btn.png" mode="aspectFit"></image> 审核 </span>
|
||||
<span @tap="showPop(3000)" v-if="baseData.CAN_REJECT===1"><image src="/static/images/bh-btn.png" mode="aspectFit"></image> 驳回</span>
|
||||
<span @tap="showPop(4000)">
|
||||
<image src="/static/images/yj-btn.png" mode="aspectFit"></image> 移交
|
||||
</span>
|
||||
<span @tap="showPop(2000)">
|
||||
<image src="/static/images/sh-btn.png" mode="aspectFit"></image> 审核
|
||||
</span>
|
||||
<span @tap="showPop(3000)" v-if="baseData.CAN_REJECT===1">
|
||||
<image src="/static/images/bh-btn.png" mode="aspectFit"></image> 驳回
|
||||
</span>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
<view class="base-info mt20" v-if="baseData.RejectApproved.length>0">
|
||||
<div class="uni-list-cell uni-collapse">
|
||||
@ -44,58 +52,69 @@
|
||||
<b>驳回意见</b>
|
||||
</div>
|
||||
<div class="process-box uni-collapse-content uni-active">
|
||||
<processUnit :item="baseData.RejectApproved[0]" :approveType="0"/>
|
||||
<processUnit :item="baseData.RejectApproved[0]" :approveType="0" />
|
||||
</div>
|
||||
</div>
|
||||
</view>
|
||||
<view class="base-info">
|
||||
<div class="uni-list-cell uni-collapse">
|
||||
<div class="cat-box uni-list-cell-navigate" :class="cardShow ? ' uni-navigate-bottom' : 'uni-navigate-right'" @tap="cardShow =!cardShow">
|
||||
<div class="cat-box uni-list-cell-navigate"
|
||||
:class="cardShow ? ' uni-navigate-bottom' : 'uni-navigate-right'" @tap="cardShow =!cardShow">
|
||||
<b>审批流程</b>
|
||||
</div>
|
||||
<div class="process-box uni-collapse-content" :class="cardShow ? 'uni-active' : ''" v-show="cardShow">
|
||||
<processUnit v-for="item in baseData.ApproveList" :item="item" :key="item.APPROVED_ID" :approveType="1"/>
|
||||
<processUnit v-for="item in baseData.ApproveList" :item="item" :key="item.APPROVED_ID"
|
||||
:approveType="1" />
|
||||
</div>
|
||||
</div>
|
||||
</view>
|
||||
<view class="page-title">{{baseData.ACCEPT_CODE == 100100 ? '商品新增' : '信息修改'}}详情</view>
|
||||
|
||||
|
||||
<div class="uni-list-cell uni-collapse base-info" v-for="(item,index) in cateArr" :key="index">
|
||||
<div class="cat-box uni-list-cell-navigate" :class="cardShowMap[item.id] ? ' uni-navigate-bottom' : 'uni-navigate-right'" @tap="isShowCate(item)">
|
||||
<div class="cat-box uni-list-cell-navigate"
|
||||
:class="cardShowMap[item.id] ? ' uni-navigate-bottom' : 'uni-navigate-right'" @tap="isShowCate(item)">
|
||||
<b>{{item.name}}</b>
|
||||
</div>
|
||||
<div class="uni-collapse-content" :class="cardShowMap[item.id]? 'uni-active' : ''" v-show="cardShowMap[item.id]">
|
||||
<div class="uni-collapse-content" :class="cardShowMap[item.id]? 'uni-active' : ''"
|
||||
v-show="cardShowMap[item.id]">
|
||||
<div class="main-card" v-for="(proUnit, cardIndex) in item.child" :key="cardIndex">
|
||||
<div class="card-top">
|
||||
<view class="uni-flex" style="justify-content: space-between;">
|
||||
<div class="pro-name-box">
|
||||
<p class="product-name">{{proUnit.COMMODITY_NAME}}</p>
|
||||
<!-- <p class="product-detail"><i class="ico ico-cate"></i>{{proUnit.COMMODITY_BARCODE}}</p> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="pro-orther-box ">
|
||||
<p class="product-detail lh28">
|
||||
<text class="unit-text-b1">售价</text> <b class="product-price">¥{{$util.fmoney(proUnit.COMMODITY_RETAILPRICE,2)}}</b>
|
||||
<text class="unit-text-b1">售价</text> <b
|
||||
class="product-price">¥{{$util.fmoney(proUnit.COMMODITY_RETAILPRICE,2)}}</b>
|
||||
</p>
|
||||
<!-- <p class="product-detail">{{proUnit.COMMODITY_RULE}} <text style="color: #CCCCCC;margin: 0 8upx;">|</text> {{proUnit.COMMODITY_UNIT}} <text style="color: #CCCCCC;margin: 0 8upx;">|</text> <text :class="proUnit.COMMODITY_STATE==1 ? 'product-status' : 'uni-text-gray'">{{proUnit.COMMODITY_STATE_NAME}}</text></p> -->
|
||||
</div>
|
||||
|
||||
|
||||
</view>
|
||||
<div class="uni-flex" style="justify-content: space-between;">
|
||||
|
||||
|
||||
|
||||
<p class="product-detail"><i class="ico ico-cate"></i>{{proUnit.COMMODITY_BARCODE}}</p>
|
||||
|
||||
|
||||
<div class="pro-orther-box">
|
||||
|
||||
<p class="product-detail">{{proUnit.COMMODITY_RULE}} <text style="color: #CCCCCC;margin: 0 8upx;">|</text> {{proUnit.COMMODITY_UNIT}} <text style="color: #CCCCCC;margin: 0 8upx;">|</text> <text :class="proUnit.COMMODITY_STATE==1 ? 'product-status' : 'uni-text-gray'">{{proUnit.COMMODITY_STATE_NAME}}</text></p>
|
||||
|
||||
<p class="product-detail">{{proUnit.COMMODITY_RULE}} <text
|
||||
style="color: #CCCCCC;margin: 0 8upx;">|</text> {{proUnit.COMMODITY_UNIT}} <text
|
||||
style="color: #CCCCCC;margin: 0 8upx;">|</text> <text
|
||||
:class="proUnit.COMMODITY_STATE==1 ? 'product-status' : 'uni-text-gray'">{{proUnit.COMMODITY_STATE_NAME}}</text>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul :class="(baseData.ACCEPT_CODE!=='100200' && baseData.ACCEPT_CODE!=='100201') ? 'card-detail': (getChange[proUnit.COMMODITY_ID] ? 'card-change-detail' : 'no-show')" >
|
||||
<template v-if="(baseData.ACCEPT_CODE!=='100200' && baseData.ACCEPT_CODE!=='100201')">
|
||||
<li style="flex:2;">进货价格:<text style="color:#333;">¥{{$util.fmoney(proUnit.COMMODITY_PURCHASEPRICE)}}</text></li>
|
||||
<li style="text-align: center;flex:1;">是否散装:<text style="color:#333;">{{proUnit.ISBULK_NAME}}</text></li>
|
||||
<li style="text-align: right;flex:1.5;">称重方式:<text style="color:#333;">{{proUnit.METERINGMETHOD_NAME}}</text></li>
|
||||
<ul :class="(baseData.ACCEPT_CODE==='100100') ? 'card-detail': (changeList[proUnit.COMMODITY_ID] ? 'card-change-detail' : 'no-show')">
|
||||
<template v-if="baseData.ACCEPT_CODE==='100100'">
|
||||
<li style="flex:2;">进货价格:<text
|
||||
style="color:#333;">{{proUnit.COMMODITY_PURCHASEPRICE ? '¥'+$util.fmoney(proUnit.COMMODITY_PURCHASEPRICE) : '-'}}</text></li>
|
||||
<li style="text-align: center;flex:1;">是否散装:<text
|
||||
style="color:#333;">{{proUnit.ISBULK_NAME}}</text></li>
|
||||
<li style="text-align: right;flex:1.5;">称重方式:<text
|
||||
style="color:#333;">{{proUnit.METERINGMETHOD_NAME}}</text></li>
|
||||
</template>
|
||||
<template v-else>
|
||||
<!-- 调整的商品参数 -->
|
||||
@ -104,16 +123,18 @@
|
||||
<template v-if="changeItem.isprice">
|
||||
<b class="product-price">¥{{changeItem.nowV}}</b>
|
||||
<span class="through-line text-b9">¥{{changeItem.org}}</span>
|
||||
<b class="uni-icon" :class="(changeItem.org < changeItem.nowV) ?'uni-icon-arrowthinup': ' uni-icon-arrowthindown'"></b>
|
||||
<b class="uni-icon"
|
||||
:class="(changeItem.org < changeItem.nowV) ?'uni-icon-arrowthinup': ' uni-icon-arrowthindown'"></b>
|
||||
</template>
|
||||
<template v-else>
|
||||
<text class="uni-text-gray">{{changeItem.nowV}}</text>
|
||||
<text class="through-line">{{changeItem.org}}</text>
|
||||
</template>
|
||||
|
||||
|
||||
</li>
|
||||
</template>
|
||||
<li v-if="baseData.HIGHWAYPROINST_NEXTID==='9000'">生效时间:<text class="uni-text-gray">{{proUnit.OPERATE_DATE}}</text></li>
|
||||
<li v-if="baseData.HIGHWAYPROINST_NEXTID==='9000'">生效时间:<text
|
||||
class="uni-text-gray">{{proUnit.OPERATE_DATE}}</text></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@ -134,26 +155,30 @@
|
||||
COMMODITY_PURCHASEPRICE: '进价',
|
||||
BUSINESSTYPE_NAME: '业态',
|
||||
COMMODITY_GRADE_NAME: '质量等级',
|
||||
ISBULK_NAME : '是否散装',
|
||||
ISBULK_NAME: '是否散装',
|
||||
METERINGMETHOD_NAME: '称重方式',
|
||||
}
|
||||
|
||||
import {mapGetters} from 'vuex'
|
||||
|
||||
import {
|
||||
mapGetters
|
||||
} from 'vuex'
|
||||
import processUnit from '@/components/auditingProcess/item.vue'
|
||||
import filesUnit from '@/components/filesComponent/fileUnit.vue'
|
||||
|
||||
|
||||
export default {
|
||||
|
||||
|
||||
components: {
|
||||
filesUnit,
|
||||
processUnit
|
||||
},
|
||||
computed: {
|
||||
...mapGetters({'users':'getUser'}),
|
||||
|
||||
...mapGetters({
|
||||
'users': 'getUser'
|
||||
}),
|
||||
|
||||
},
|
||||
data () {
|
||||
|
||||
data() {
|
||||
|
||||
return {
|
||||
baseData: {},
|
||||
pageData: [],
|
||||
@ -173,63 +198,68 @@
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
isShowCate(item){
|
||||
|
||||
isShowCate(item) {
|
||||
|
||||
this.cardShowMap[item.id] = !this.cardShowMap[item.id]
|
||||
},
|
||||
getYes(val) {
|
||||
return val===1 ? '是 ' : '否'
|
||||
return val === 1 ? '是 ' : '否'
|
||||
},
|
||||
|
||||
|
||||
showPop(type) {
|
||||
let _this = this
|
||||
let url = ''
|
||||
let url = ''
|
||||
switch (type) {
|
||||
case 4000:
|
||||
url= '/pages/auditingPop/transfer?businessType=2000&PROINST_ID='+_this.baseData.HIGHWAYPROINST_ID+'&NOWACTINST_ID='+_this.baseData.NOWACTINST_ID
|
||||
case 4000:
|
||||
url = '/pages/auditingPop/transfer?businessType=2000&PROINST_ID=' + _this.baseData
|
||||
.HIGHWAYPROINST_ID + '&NOWACTINST_ID=' + _this.baseData.NOWACTINST_ID
|
||||
break;
|
||||
case 2000:
|
||||
url= '/pages/auditingPop/toExamine?businessType=2000&PROINST_ID='+_this.baseData.HIGHWAYPROINST_ID+'&NOWACTINST_ID='+_this.baseData.NOWACTINST_ID+'&ApproName='+_this.baseData.ACTINST_NAME+'&NeedApproved=1'
|
||||
url = '/pages/auditingPop/toExamine?businessType=2000&PROINST_ID=' + _this.baseData
|
||||
.HIGHWAYPROINST_ID + '&NOWACTINST_ID=' + _this.baseData.NOWACTINST_ID + '&ApproName=' + _this
|
||||
.baseData.ACTINST_NAME + '&NeedApproved=1'
|
||||
break;
|
||||
case 3000:
|
||||
url= '/pages/auditingPop/reject?businessType=2000&PROINST_ID='+_this.baseData.HIGHWAYPROINST_ID+'&NOWACTINST_ID='+_this.baseData.NOWACTINST_ID
|
||||
url = '/pages/auditingPop/reject?businessType=2000&PROINST_ID=' + _this.baseData
|
||||
.HIGHWAYPROINST_ID + '&NOWACTINST_ID=' + _this.baseData.NOWACTINST_ID
|
||||
break;
|
||||
}
|
||||
this.$util.toNextRoute('navigateTo', url)
|
||||
},
|
||||
|
||||
getDetail (id) {
|
||||
|
||||
getDetail(id) {
|
||||
let _this = this
|
||||
_this.$request.$get("GetCommodityFlowDetail",{
|
||||
|
||||
_this.$request.$get("GetCommodityFlowDetail", {
|
||||
|
||||
HIGHWAYPROINST_ID: id
|
||||
}).then(rs => {
|
||||
// console.log(_this.loadingType)
|
||||
if(!rs.ResultCode ||rs.ResultCode!='100') {
|
||||
if (!rs.ResultCode || rs.ResultCode != '100') {
|
||||
_this.isShow = false
|
||||
|
||||
}else{
|
||||
|
||||
} else {
|
||||
_this.isShow = true
|
||||
}
|
||||
uni.hideLoading()
|
||||
let _data = rs.Data
|
||||
|
||||
let _data = rs.Data
|
||||
_this.baseData = _data
|
||||
if(_data.FileList){
|
||||
|
||||
if (_data.FileList) {
|
||||
|
||||
_data.FileList.map(v => {
|
||||
let name= v.ATTACHMENT_NAME.split('.')
|
||||
v.type = name[name.length-1]
|
||||
v.name = v.ATTACHMENT_NAME
|
||||
let name = v.ATTACHMENT_URL.split('.')
|
||||
|
||||
v.type = name[name.length - 1]
|
||||
v.name = v.ATTACHMENT_DESC
|
||||
v.path = v.ATTACHMENT_URL
|
||||
})
|
||||
}
|
||||
|
||||
_this.getChange()
|
||||
_this.$forceUpdate()
|
||||
|
||||
|
||||
})
|
||||
},
|
||||
getChange () { // 获取调整过的商品参数
|
||||
getChange() { // 获取调整过的商品参数
|
||||
let _this = this
|
||||
let itemName = Object.keys(json) // 数据名称
|
||||
let changeItem = {} //
|
||||
@ -238,24 +268,25 @@
|
||||
let cardShowMap = {}
|
||||
|
||||
_this.baseData.CommodityList.forEach(item => {
|
||||
|
||||
|
||||
if (!map[item.COMMODITY_TYPE]) {
|
||||
map[item.COMMODITY_TYPE] = []
|
||||
cardShowMap[item.COMMODITY_TYPE] = true
|
||||
cateArr.push({
|
||||
id: item.COMMODITY_TYPE,
|
||||
name:item.COMMODITYTYPE_NAME,
|
||||
name: item.COMMODITYTYPE_NAME,
|
||||
child: map[item.COMMODITY_TYPE]
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
map[item.COMMODITY_TYPE].push(item)
|
||||
itemName.forEach(el => {
|
||||
let fName ='F_'+ el
|
||||
|
||||
let fName = 'F_' + el
|
||||
|
||||
// item[el] 现参数值 item[fName] 原参数值
|
||||
if (item[fName] && item[el]!==item[fName]) {
|
||||
|
||||
if (item[fName] && item[el] !== item[fName]) {
|
||||
|
||||
if (!changeItem[item.COMMODITY_ID]) {
|
||||
changeItem[item.COMMODITY_ID] = []
|
||||
}
|
||||
@ -267,9 +298,9 @@
|
||||
nowV: nowValue,
|
||||
isprice: false
|
||||
}
|
||||
if (json[el].indexOf('价')>-1) {
|
||||
arr.org = _this.$util.fmoney(originValue,2)
|
||||
arr.nowV = _this.$util.fmoney(nowValue,2)
|
||||
if (json[el].indexOf('价') > -1) {
|
||||
arr.org = _this.$util.fmoney(originValue, 2)
|
||||
arr.nowV = _this.$util.fmoney(nowValue, 2)
|
||||
arr.isprice = true
|
||||
}
|
||||
changeItem[item.COMMODITY_ID].push(arr)
|
||||
@ -280,26 +311,26 @@
|
||||
// _this.commodityTree = map
|
||||
_this.cateArr = cateArr
|
||||
_this.cardShowMap = cardShowMap
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
onLoad(option) {
|
||||
let _this = this
|
||||
uni.showLoading({
|
||||
title:'正在加载'
|
||||
title: '正在加载'
|
||||
})
|
||||
this.getDetail(option.id)
|
||||
|
||||
uni.$on('2000', function (data){
|
||||
if(data) {
|
||||
|
||||
uni.$on('2000', function(data) {
|
||||
if (data) {
|
||||
uni.showLoading({
|
||||
title:'正在加载'
|
||||
title: '正在加载'
|
||||
})
|
||||
_this.pageData.pageIndex = 1
|
||||
_this.pageData.isEnd = false
|
||||
_this.getDetail(_this.baseData.HIGHWAYPROINST_ID)
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -308,10 +339,10 @@
|
||||
uni.$off('2000');
|
||||
},
|
||||
onShow() {
|
||||
|
||||
|
||||
},
|
||||
onHide() {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@ -320,37 +351,56 @@
|
||||
.mt20 {
|
||||
margin-top: 10upx;
|
||||
}
|
||||
|
||||
.uni-icon {
|
||||
font-size: 28upx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.uni-text-gray {
|
||||
font-size: 24upx;
|
||||
}
|
||||
|
||||
.uni-icon-arrowthindown {
|
||||
color: #50b045;
|
||||
}
|
||||
|
||||
.uni-icon-arrowthinup {
|
||||
color: #ff4952;
|
||||
}
|
||||
|
||||
.no-show {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pb20 {
|
||||
padding-bottom: 40upx;
|
||||
}
|
||||
|
||||
.pb8 {
|
||||
padding-bottom: 8upx;
|
||||
}
|
||||
|
||||
.lh28 {
|
||||
line-height: 54upx;
|
||||
}
|
||||
|
||||
.file-body {
|
||||
padding: 12rpx 26rpx;
|
||||
}
|
||||
|
||||
.imgBox {
|
||||
padding: 0 28rpx;
|
||||
}
|
||||
|
||||
.base-info {
|
||||
background-color: #fff;
|
||||
}
|
||||
.base-info + .base-info {
|
||||
|
||||
.base-info+.base-info {
|
||||
margin-top: 20upx;
|
||||
}
|
||||
}
|
||||
|
||||
.content-title {
|
||||
height: 115upx;
|
||||
line-height: 115upx;
|
||||
@ -359,31 +409,37 @@
|
||||
}
|
||||
|
||||
.main-card {
|
||||
border: 1upx solid #ddd;
|
||||
/* border: 1upx solid #ddd; */
|
||||
border-radius: 6upx;
|
||||
box-shadow: 0 2upx 6upx rgba(0, 0, 0, 0.1);
|
||||
box-shadow: 0 2upx 6upx rgba(0, 0, 0, 0.1);
|
||||
margin-left: 24upx;
|
||||
margin-right: 24upx;
|
||||
}
|
||||
.main-card +.main-card {
|
||||
|
||||
.main-card+.main-card {
|
||||
margin-top: 20upx;
|
||||
}
|
||||
|
||||
.uni-collapse-content .main-card:nth-last-child(1) {
|
||||
margin-bottom: 40upx;
|
||||
}
|
||||
|
||||
.card-title {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card-title h4 {
|
||||
padding: 20upx 0 15upx 20upx;
|
||||
}
|
||||
|
||||
.card-status {
|
||||
font-size: 22upx;
|
||||
color: #999;
|
||||
padding-right: 16upx;
|
||||
}
|
||||
|
||||
.base-body {
|
||||
font-size: 24upx;
|
||||
display: flex;
|
||||
@ -391,59 +447,69 @@
|
||||
padding: 15upx 20upx;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.item-title {
|
||||
color: #777;
|
||||
width: 120upx;
|
||||
text-align: justify;
|
||||
/* text-align: justify; */
|
||||
height: 40upx;
|
||||
font-size: 24upx;
|
||||
/* white-space: nowrap; */
|
||||
}
|
||||
|
||||
.item-title:after{
|
||||
display: inline-block ;
|
||||
content: '';
|
||||
padding-left: 100%;
|
||||
|
||||
.item-title:after {
|
||||
display: inline-block;
|
||||
content: '';
|
||||
padding-left: 100%;
|
||||
}
|
||||
.base-body + .base-body {
|
||||
|
||||
.base-body+.base-body {
|
||||
border-top: 1upx dashed #eee;
|
||||
}
|
||||
|
||||
.page-title {
|
||||
padding: 15upx 0 15upx 30upx;
|
||||
font-size: 26upx;
|
||||
color: #949494;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
.cat-card {
|
||||
padding: 30upx 0;
|
||||
}
|
||||
|
||||
.cat-box {
|
||||
justify-content: space-between;
|
||||
display: flex;
|
||||
margin-left: 30upx;
|
||||
margin-right: 30upx;
|
||||
}
|
||||
|
||||
.cat-title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.card-top {
|
||||
|
||||
padding: 16upx 24upx;
|
||||
}
|
||||
|
||||
.card-top .product-name {
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
max-width: 400upx;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
max-width: 400upx;
|
||||
font-size: 30upx;
|
||||
padding-bottom: 8upx;
|
||||
}
|
||||
|
||||
.card-top .pro-name-box {
|
||||
flex: 2;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.product-detail {
|
||||
color: #696969;
|
||||
font-size: 24upx;
|
||||
@ -451,26 +517,32 @@
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card-top .pro-orther-box {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.card-top .pro-orther-box .product-detail {
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.product-price {
|
||||
color: #ee8437;
|
||||
margin-left: 10upx;
|
||||
}
|
||||
|
||||
.product-status {
|
||||
color: #6dbf9c;
|
||||
font-size: 24upx;
|
||||
}
|
||||
|
||||
.card-detail {
|
||||
border-top: 1upx dashed #eee;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding: 0 24upx 24upx 24upx;
|
||||
}
|
||||
|
||||
.card-detail li {
|
||||
padding-top: 20upx;
|
||||
line-height: 30upx;
|
||||
@ -478,6 +550,7 @@
|
||||
font-size: 24upx;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.card-change-detail {
|
||||
border-top: 1upx dashed #eee;
|
||||
padding: 0 20upx 20upx 20upx;
|
||||
@ -485,6 +558,7 @@
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.card-change-detail li {
|
||||
padding-top: 20upx;
|
||||
line-height: 30upx;
|
||||
@ -493,14 +567,17 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card-change-detail .through-line {
|
||||
text-decoration: line-through;
|
||||
color: #cbcbcb;
|
||||
margin-left: 16upx;
|
||||
}
|
||||
|
||||
.text-b9 {
|
||||
color: #b9b9b9
|
||||
}
|
||||
|
||||
.process-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@ -508,37 +585,43 @@
|
||||
align-items: flex-start;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.uni-list-cell:after {
|
||||
height: 0;
|
||||
}
|
||||
.button-box {
|
||||
padding-top: 36upx;
|
||||
display: flex;
|
||||
/* padding-bottom: 40upx; */
|
||||
justify-content: space-around;
|
||||
padding-bottom: 6upx;
|
||||
}
|
||||
.button-box image {
|
||||
width: 100upx;
|
||||
height: 100upx;
|
||||
}
|
||||
.button-box span {
|
||||
font-size: 24upx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
text-align: center;
|
||||
}
|
||||
.button-box {
|
||||
padding-top: 36upx;
|
||||
display: flex;
|
||||
/* padding-bottom: 40upx; */
|
||||
justify-content: space-around;
|
||||
padding-bottom: 6upx;
|
||||
}
|
||||
|
||||
.ico-user:before{
|
||||
.button-box image {
|
||||
width: 100upx;
|
||||
height: 100upx;
|
||||
}
|
||||
|
||||
.button-box span {
|
||||
font-size: 24upx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.ico-user:before {
|
||||
background-image: url('../../static/images/tender/lxr.png');
|
||||
}
|
||||
.ico-sjx:before{
|
||||
|
||||
.ico-sjx:before {
|
||||
background-image: url('../../static/images/expense/sjx.png');
|
||||
}
|
||||
.ico-cate:before{
|
||||
|
||||
.ico-cate:before {
|
||||
width: 26upx;
|
||||
height: 25upx;
|
||||
background-image: url('../../static/images/txm_logo.png');
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@ -303,7 +303,7 @@
|
||||
<script>
|
||||
import uniPopup from '@/components/uni-popup.vue';
|
||||
import crashAuditItem from './components/crashAuditItem.vue';
|
||||
import uniLoadMore from '@/components/uni-load-more.vue';
|
||||
import uniLoadMore from './components/uni-load-more.vue';
|
||||
|
||||
import {mapState, mapGetters,mapMutations} from "vuex";
|
||||
export default {
|
||||
@ -725,20 +725,21 @@
|
||||
checkSubmit() {
|
||||
let _this = this
|
||||
let effectiveDetail = this.effectiveDetail
|
||||
let money1 = parseFloat(effectiveDetail.CASHPAY) == parseFloat(effectiveDetail.TOTALSELLAMOUNT) + parseFloat(_this.correctAmout) // 实收金额 = 销售+冲正
|
||||
let money2 = parseFloat(_this.correctAmout) == parseFloat(effectiveDetail.MOBILE_CORRECT) + parseFloat(effectiveDetail.CASH_CORRECT) // 冲正 = 移动冲正+现金冲正
|
||||
let money3 = parseFloat(effectiveDetail.MOBILE_CORRECT) == parseFloat(_this.mobliePayBalance) + parseFloat(_this.saleCorrect) // 移动冲正 = 移动支付差额+到账实差
|
||||
|
||||
if (money1 && money2) {
|
||||
|
||||
// let money1 = parseFloat(effectiveDetail.CASHPAY) === parseFloat(effectiveDetail.TOTALSELLAMOUNT+_this.correctAmout) // 实收金额 = 销售+冲正
|
||||
// let money2 = parseFloat(_this.correctAmout) == parseFloat(effectiveDetail.MOBILE_CORRECT+effectiveDetail.CASH_CORRECT) // 冲正 = 移动冲正+现金冲正
|
||||
// let money3 = parseFloat(effectiveDetail.MOBILE_CORRECT) == parseFloat(_this.mobliePayBalance + _this.saleCorrect) // 移动冲正 = 移动支付差额+到账实差
|
||||
|
||||
// if (money1 && money2) {
|
||||
|
||||
if (_this.isFACT_AMOUNT == 0 && !money3) {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '请输入正确的移动支付冲正金额。',
|
||||
duration: 1000
|
||||
});
|
||||
return false
|
||||
}
|
||||
// if (_this.isFACT_AMOUNT == 0 && !money3) {
|
||||
// uni.showToast({
|
||||
// icon: 'none',
|
||||
// title: '请输入正确的移动支付冲正金额。',
|
||||
// duration: 1000
|
||||
// });
|
||||
// return false
|
||||
// }
|
||||
if (_this.checkReason !== "") {
|
||||
uni.showLoading({
|
||||
title: '正在提交...',
|
||||
@ -807,13 +808,13 @@
|
||||
duration: 3000
|
||||
});
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: '请确认现金冲正金额填写正确',
|
||||
duration: 3000
|
||||
});
|
||||
}
|
||||
// } else {
|
||||
// uni.showToast({
|
||||
// icon: 'none',
|
||||
// title: '请确认现金冲正金额填写正确',
|
||||
// duration: 3000
|
||||
// });
|
||||
// }
|
||||
},
|
||||
// 提交 审核 或者主任确认
|
||||
examine() {
|
||||
|
||||
1295
pages/everdayRenven/AnhuiIndex.vue
Normal file
1209
pages/everdayRenven/AnhuiServerpart.vue
Normal file
496
pages/everdayRenven/components/CarAnalysis.vue
Normal file
@ -0,0 +1,496 @@
|
||||
<template>
|
||||
<view v-show="show">
|
||||
<div class="" v-show="!loading && pageEmpty">
|
||||
<noFound :nodata="true" :text="'抱歉,服务区采集样本数据过小,无法分析。'"/>
|
||||
</div>
|
||||
<div v-show="!loading && !pageEmpty">
|
||||
<div class="customer-content" >
|
||||
<div class="tab-btn" v-if="topData.length>1" @tap="tabChange(canvasTab==1?0:1,opt)">查看{{topData[canvasTab?0:1].Serverpart_Region}}区数据</div>
|
||||
<div class="customer-title">入区车流分析</div>
|
||||
<div class="uni-flex jc-between">
|
||||
<div style="flex:1;" class="tab-unit">
|
||||
<div class="tab-title">车流量</div>
|
||||
<div class="tab-number">{{topData[canvasTab].Vehicle_Count}}</div>
|
||||
<div class="tab-rate"><span class="tab-desc">日</span> <span :style="topData[canvasTab].Vehicle_GrowthRate>0? 'color: #2CC260;' : 'color: #F54850;'">{{topData[canvasTab].Vehicle_GrowthRate}}%</span></div>
|
||||
</div>
|
||||
<div style="flex:1;" class="tab-unit">
|
||||
<div class="tab-title">入区率</div>
|
||||
<div class="tab-number">{{topData[canvasTab].Entry_Rate}}%</div>
|
||||
<div class="tab-rate"><span class="tab-desc">日</span> <span :style="topData[canvasTab].Entry_GrowthRate>0? 'color: #2CC260;' : 'color: #F54850;'">{{topData[canvasTab].Entry_GrowthRate}}%</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- <canvas canvas-id="sexCate" id="sexCate" class="operation-cate-content"></canvas> -->
|
||||
<div class="customer-content">
|
||||
<div class="customer-title">各车停留时间</div>
|
||||
<div v-if="chartdata.stayChart[canvasTab] && chartdata.stayChart[canvasTab].data.length>0">
|
||||
<canvas canvas-id="carStay" id="carStay" class="operation-stock-content" ></canvas>
|
||||
</div>
|
||||
<noFound :nodata="true" :text="'抱歉,服务区采集样本数据过小,无法分析。'" v-else/>
|
||||
</div>
|
||||
<div class="customer-content">
|
||||
<div class="customer-title">车辆归属地</div>
|
||||
<div v-if="chartdata.countChart[canvasTab] || !lodingDetail">
|
||||
<view class="operation-stock-content">
|
||||
<qiun-data-charts
|
||||
type="radar"
|
||||
:chartData="radarData"
|
||||
:opts="radaropts"
|
||||
background="none"
|
||||
loadingType="2"
|
||||
/>
|
||||
</view>
|
||||
<view class="operation-stock-content">
|
||||
<qiun-data-charts
|
||||
type="funnel"
|
||||
:chartData="funnelData"
|
||||
background="none"
|
||||
:opts="funnelopts"
|
||||
loadingType="0"
|
||||
/>
|
||||
</view>
|
||||
</div>
|
||||
<noFound :nodata="true" :text="'抱歉,服务区采集样本数据过小,无法分析。'" v-else/>
|
||||
<!-- <div class="analysis-text" v-if="proportionList[canvasTab]">
|
||||
<span class="key-text">分析</span><span>{{proportionList[canvasTab][1]}}</span>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import uCharts from '@/components/u-charts/u-charts.js';
|
||||
// import uCharts from '@/uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js';
|
||||
let rincanvas = {}
|
||||
|
||||
export default {
|
||||
props: {
|
||||
pieId: String,
|
||||
barId: String,
|
||||
show: Boolean
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
funnelData:[],
|
||||
funnelopts: {
|
||||
|
||||
color: ['#6B96F8', '#F6B760','#677798','#6BDBAB'],
|
||||
extra: {
|
||||
funnel: {
|
||||
border: false,
|
||||
}
|
||||
},
|
||||
dataPointShape:true,
|
||||
tooltipShow:true,
|
||||
showBox:true,
|
||||
height: uni.upx2px(328),
|
||||
width: uni.upx2px(686),
|
||||
},
|
||||
radaropts: {
|
||||
color: ['#94b2f9'],
|
||||
legend: {show:false},
|
||||
tooltipShow: true,
|
||||
dataPointShape: true,
|
||||
dataLabel: true,
|
||||
showBox: true,
|
||||
extra:{
|
||||
radar:{
|
||||
border:true,
|
||||
max: 200
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
radarData:[],
|
||||
topData: [],
|
||||
canvasTab: 0,
|
||||
chartdata: {
|
||||
"stayChart": [],
|
||||
"countChart": []
|
||||
},
|
||||
opt: null,
|
||||
pageEmpty: false,
|
||||
loading: true,
|
||||
lodingDetail:true,
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
refreshData(data) {
|
||||
// 刷新数据
|
||||
rincanvas['carStay'].updateData({series:data.data,categories:data.categories});
|
||||
this.$forceUpdate()
|
||||
},
|
||||
tabChange(name,opt) {
|
||||
this.canvasTab= name
|
||||
|
||||
if (!this.chartdata.stayChart[name]) {
|
||||
this.lodingDetail=true
|
||||
this.getProportion(name, opt) // 获取 各车型停留时间
|
||||
this.getAnalysisDesc(name,opt)
|
||||
} else {
|
||||
if(this.chartdata.countChart[name]){
|
||||
// 车辆归属地
|
||||
const list = this.chartdata.countChart[name]
|
||||
this.funnelData= {series: [{data: list.OwnerProvinceList.map(n=> {return {...n,value:parseInt(n.value)}} ) }]}
|
||||
this.radarData= {
|
||||
categories: list.OwnerCity,
|
||||
series: [{
|
||||
name: '车辆数量',
|
||||
data: list.OwnerCityList.map(n=> parseInt(n.value)),
|
||||
},
|
||||
]}
|
||||
}
|
||||
if(this.chartdata.stayChart[name]){
|
||||
// 车辆停留时间
|
||||
const {data,categories} = this.chartdata.stayChart[name]
|
||||
this.showClounm({
|
||||
id: 'carStay',//+type,
|
||||
data: data,
|
||||
categories: categories
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
// 获取 各车型停留时间
|
||||
async getProportion(type, params) {
|
||||
let _this = this
|
||||
_this.opt = params
|
||||
const data = await this.$request.$webGet('CommercialApi/Revenue/GetBayonetSTAList', {
|
||||
Serverpart_Region: this.topData[type].Serverpart_Region,
|
||||
...params
|
||||
})
|
||||
if (data.Result_Code === 100 && data.Result_Data.List.length > 0) {
|
||||
const [list] = data.Result_Data.List
|
||||
|
||||
const showData = [{
|
||||
name:'车型',
|
||||
type: "column",
|
||||
index:0,
|
||||
data: list.VehicleCountList.map(n=>n.value)
|
||||
},
|
||||
{
|
||||
name:'停留时间(分钟)',
|
||||
type: "line",
|
||||
index:1,
|
||||
"style": "curve",
|
||||
dataPointShape: true,
|
||||
|
||||
data: list.StayTimesList.map(n=> parseInt(n.value)+''),
|
||||
}]
|
||||
_this.showClounm({
|
||||
id: 'carStay',//+type,
|
||||
data: showData,
|
||||
categories: list.Vehicle_Type
|
||||
})
|
||||
this.chartdata.stayChart[type] = { data:showData, categories: list.Vehicle_Type }
|
||||
this.$forceUpdate()
|
||||
|
||||
} else {
|
||||
this.chartdata.stayChart[type] = null
|
||||
}
|
||||
},
|
||||
async getAnalysisDesc(type, params) {
|
||||
let _this = this
|
||||
const data = await this.$request.$webGet('CommercialApi/Revenue/GetBayonetOAList', {
|
||||
Serverpart_Region: this.topData[type].Serverpart_Region,
|
||||
statisticsMonth: this.$util.cutDate(params.StatisticsDate,'YYYYMM'),
|
||||
...params
|
||||
})
|
||||
if(data.Result_Code === 100 && data.Result_Data.List.length > 0){
|
||||
const [list] = data.Result_Data.List
|
||||
this.chartdata.countChart[type] = list
|
||||
this.funnelData= {
|
||||
series: [{
|
||||
label: {
|
||||
show: true,
|
||||
position: 'inside'
|
||||
},
|
||||
data: list.OwnerProvinceList.map(n=> {return {...n, value:parseInt(n.value)}} )
|
||||
}],
|
||||
}
|
||||
|
||||
this.radaropts.extra.radar.max = 100 + list.OwnerCityList.reduce((a,b)=> parseInt(b.value) > parseInt(a.value)? parseInt(b.value): parseInt(a.value))
|
||||
this.radarData= {
|
||||
categories: list.OwnerCity,
|
||||
series: [{
|
||||
name: '车量',
|
||||
data: list.OwnerCityList.map(n=> parseInt(n.value)),
|
||||
},
|
||||
]}
|
||||
this.$forceUpdate()
|
||||
}else{
|
||||
this.chartdata.countChart[type] =null
|
||||
}
|
||||
this.lodingDetail=false
|
||||
},
|
||||
// 加载头部信息
|
||||
async getTopData(params) {
|
||||
const data = await this.$request.$webGet('CommercialApi/Revenue/GetBayonetEntryList', {
|
||||
...params
|
||||
})
|
||||
this.loading=false
|
||||
if(data.Result_Data.TotalCount==0){
|
||||
this.pageEmpty = true
|
||||
return
|
||||
}
|
||||
this.topData = data.Result_Data.List
|
||||
this.lodingDetail=true
|
||||
this.getProportion(this.canvasTab,params)
|
||||
this.getAnalysisDesc(this.canvasTab,params)
|
||||
},
|
||||
tapchart(e,id){
|
||||
rincanvas[id].showToolTip(e)
|
||||
},
|
||||
showPie(obj) {
|
||||
let data = {
|
||||
series: []
|
||||
}
|
||||
data.series.push({data:obj.data})
|
||||
|
||||
rincanvas[obj.id] = new uCharts({
|
||||
$this: this,
|
||||
canvasId: obj.id,
|
||||
colors: ['#6B96F8', '#F6B760','#677798','#6BDBAB'],
|
||||
type: 'funnel',
|
||||
fontSize: 12,
|
||||
|
||||
legend: {
|
||||
show: false,
|
||||
padding: 5,
|
||||
lineHeight: 11,
|
||||
margin: 0,
|
||||
},
|
||||
background: '#FFFFFF',
|
||||
pixelRatio: 1,
|
||||
categories: obj.categories,
|
||||
series: data.series,
|
||||
animation: false,
|
||||
width: uni.upx2px(666),
|
||||
height: uni.upx2px(480),
|
||||
dataLabel: false,
|
||||
extra: {
|
||||
funnel: {
|
||||
border: false,
|
||||
|
||||
}
|
||||
},
|
||||
});
|
||||
},
|
||||
showRadar:(id)=>{
|
||||
rincanvas[id] = new uCharts({
|
||||
$this: this,
|
||||
canvasId: id,
|
||||
type: 'radar',
|
||||
fontSize: 11,
|
||||
padding: [15,15,0,15],
|
||||
legend:{
|
||||
show:true,
|
||||
padding:5,
|
||||
lineHeight:11,
|
||||
margin:0,
|
||||
},
|
||||
background:'#FFFFFF',
|
||||
pixelRatio: 1 ,
|
||||
animation: true,
|
||||
dataLabel: true,
|
||||
categories: this.radarData.categories,
|
||||
series: this.radarData.series,
|
||||
width: uni.upx2px(666),
|
||||
height: uni.upx2px(480),
|
||||
extra: {
|
||||
radar: {
|
||||
max: 200,//雷达数值的最大值
|
||||
gridType:'radar'//radar或者circle可选,网格样式,默认radar
|
||||
}
|
||||
},
|
||||
})
|
||||
},
|
||||
showClounm(obj) {
|
||||
let data = {
|
||||
series: []
|
||||
}
|
||||
data.series = data.series.concat(obj.data)
|
||||
rincanvas[obj.id] = new uCharts({
|
||||
$this: this,
|
||||
canvasId: obj.id,
|
||||
type: 'mix',
|
||||
legend: {
|
||||
show: true,
|
||||
position:'top',
|
||||
float:'right',
|
||||
fontSize: 11,
|
||||
},
|
||||
colors: ['#667ED5','#FFAB35'],
|
||||
fontSize: 12,
|
||||
background: '#FFFFFF',
|
||||
padding: [10, 12, 12, 12],
|
||||
animation: true,
|
||||
categories: obj.categories,
|
||||
series: data.series,
|
||||
enableScroll: false, //开启图表拖拽功能
|
||||
xAxis: {
|
||||
disabled: false,
|
||||
disableGrid: true,
|
||||
axisLine: false,
|
||||
fontColor: '#777777',
|
||||
labelCount: 5,
|
||||
},
|
||||
yAxis: {
|
||||
data: [{
|
||||
position: "left",
|
||||
title:'车流量(辆)',
|
||||
disabled: false,
|
||||
axisLine: false,
|
||||
fontColor: '#777777',
|
||||
min: 0,
|
||||
format: (val) => {
|
||||
return parseInt(val)
|
||||
},
|
||||
},
|
||||
{
|
||||
title:'(分钟)',
|
||||
position: "right",
|
||||
disabled: false,
|
||||
axisLine: false,
|
||||
min: 0,
|
||||
fontColor: '#777777',
|
||||
format: (val) => {
|
||||
return parseInt(val)
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
gridType: 'dash',
|
||||
gridColor: '#eee',
|
||||
dashLength: 2,
|
||||
// splitNumber: 3,
|
||||
},
|
||||
dataLabel: false,
|
||||
width: uni.upx2px(686),
|
||||
height: uni.upx2px(420),
|
||||
showBox: true,
|
||||
extra: {
|
||||
column: {
|
||||
type: 'group',
|
||||
width: uni.upx2px(50),
|
||||
dataLabel: true,
|
||||
},
|
||||
line: {
|
||||
dataPointShapeType: 'hollow',
|
||||
dataPointShape: true,
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.customer-content {
|
||||
margin: 0 30rpx;
|
||||
border-radius: 8rpx;
|
||||
box-shadow: 0 2rpx 10rpx 0 rgba(230, 230, 230, 0.49);
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
margin-bottom: 48rpx;
|
||||
padding-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.customer-title {
|
||||
padding: 0 40rpx;
|
||||
line-height: 80rpx;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.operation-cate-content {
|
||||
height: 480rpx;
|
||||
width: 690rpx;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.charts-box{
|
||||
width: 100%;
|
||||
height: 330rpx;
|
||||
}
|
||||
.operation-stock-content {
|
||||
height: 440rpx;
|
||||
width: 690rpx;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.tab-btn {
|
||||
position: absolute;
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
width: 241rpx;
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
right: 0;
|
||||
top: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: url(../../../static/images/revenue/tab-bg.png) no-repeat right;
|
||||
background-size: contain;
|
||||
}
|
||||
.tab-btn::before {
|
||||
content: '';
|
||||
background: url(../../../static/images/revenue/next.png) no-repeat center;
|
||||
background-size: contain;
|
||||
width: 40rpx;
|
||||
height: 16rpx;
|
||||
}
|
||||
.analysis-text {
|
||||
color: #9498A4;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
font-size: 24rpx;
|
||||
margin: 0 30rpx 0 30rpx;
|
||||
}
|
||||
|
||||
.key-text {
|
||||
min-width: 50rpx;
|
||||
background: #EA7F56;
|
||||
font-size: 22rpx;
|
||||
text-align: center;
|
||||
color: #ffffff;
|
||||
background: #ea7f56;
|
||||
border-radius: 5rpx;
|
||||
margin-right: 16rpx;
|
||||
height: 30rpx;
|
||||
line-height: 30rpx;
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
.tab-unit {
|
||||
padding-left: 40rpx;
|
||||
position: relative;
|
||||
}
|
||||
.tab-unit +.tab-unit::before {
|
||||
content: '';
|
||||
height: 77rpx;
|
||||
width: 2rpx;
|
||||
background-color: #E6E6E6;
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 65rpx;
|
||||
left: -10rpx;
|
||||
|
||||
}
|
||||
.tab-title {
|
||||
margin-bottom: 20rpx;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.tab-number {
|
||||
font-size: 30rpx;
|
||||
}
|
||||
.tab-title,.tab-desc {
|
||||
color: #ADADAD;
|
||||
margin-right: 16rpx;
|
||||
}
|
||||
.tab-desc ,.tab-rate{
|
||||
font-size: 24rpx;
|
||||
}
|
||||
</style>
|
||||
145
pages/everdayRenven/components/RankContent.vue
Normal file
@ -0,0 +1,145 @@
|
||||
<template>
|
||||
<block>
|
||||
<div class="uni-inline-item ranking-tab-box">
|
||||
<div class="ranking-tab-unit" @tap="selectTab(1000)" :class="{'active':nowRank==1000}">商超
|
||||
</div>
|
||||
<div class="ranking-tab-unit" @tap="selectTab(2000)" :class="{'active':nowRank==2000}">餐饮
|
||||
</div>
|
||||
<div class="ranking-tab-unit" @tap="selectTab(3000)" :class="{'active':nowRank==3000}">小吃
|
||||
</div>
|
||||
</div>
|
||||
<div class="ranking-content" v-if="wechatPushSalesList">
|
||||
<div class="ranking-list" v-for="(item,index) in wechatPushSalesList[nowRank]" :key="index">
|
||||
<div class="rank-index">{{item.RANK_ID||item.Rank_ID}}</div>
|
||||
<div class="ranking-list-unit">
|
||||
<div>{{item.COMMODITY_NAME || item.Commodity_Name}}</div>
|
||||
<div class="ranking-unit-info">
|
||||
<text>销售金额 </text>
|
||||
<text>¥{{$util.fmoney(item.TOTALPRICE || item.TotalPrice)}}</text>
|
||||
<text>销售数量 </text>
|
||||
<text>{{item.SELLCOUNT || item.SellCount}}</text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</block>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: ['wechatPushSalesList'],
|
||||
data: () => {
|
||||
return {
|
||||
nowRank: 1000
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
selectTab(index){
|
||||
|
||||
this.nowRank=index
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/*排行*/
|
||||
.ranking-tab-box {
|
||||
margin: 20rpx 32rpx;
|
||||
border: 2rpx solid #565656;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
|
||||
}
|
||||
|
||||
.ranking-tab-box .ranking-tab-unit {
|
||||
color: #565656;
|
||||
flex: 1;
|
||||
height: 64rpx;
|
||||
line-height: 60rpx;
|
||||
}
|
||||
|
||||
.ranking-tab-box .ranking-tab-unit.active {
|
||||
background-color: #565656;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.ranking-tab-box .ranking-tab-unit+.ranking-tab-unit {
|
||||
border-left: 2rpx solid #565656;
|
||||
}
|
||||
|
||||
.ranking-content {
|
||||
/* display: none; */
|
||||
min-height: 160rpx;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-list {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: #000;
|
||||
padding: 24rpx 32rpx;
|
||||
}
|
||||
|
||||
.ranking-content .rank-index {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
text-align: center;
|
||||
line-height: 72rpx;
|
||||
font-size: 30rpx;
|
||||
font-weight: bolder;
|
||||
margin-right: 32rpx;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-list:nth-child(1) .rank-index {
|
||||
background: url('/static/images/revenue/top1.png') no-repeat center;
|
||||
background-size: contain;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-list:nth-child(2) .rank-index {
|
||||
background: url(/static/images/revenue/top2.png) no-repeat center;
|
||||
background-size: contain;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-list:nth-child(3) .rank-index {
|
||||
background: url(/static/images/revenue/top3.png) no-repeat center;
|
||||
background-size: contain;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-list-unit {
|
||||
font-size: 28rpx;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-unit-info {
|
||||
/* margin-top: 16rpx; */
|
||||
display: flex;
|
||||
align-items: center;
|
||||
/* font-size: .13rem; */
|
||||
}
|
||||
|
||||
.ranking-content .ranking-unit-info text {
|
||||
flex: 2;
|
||||
color: #929292;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-unit-info text:nth-child(2) {
|
||||
flex: 3;
|
||||
}
|
||||
|
||||
.ranking-content .ranking-unit-info text:nth-child(2n) {
|
||||
color: #000
|
||||
}
|
||||
|
||||
.ranking-ico {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
}
|
||||
</style>
|
||||
@ -32,6 +32,7 @@
|
||||
selectedMode: 'single',
|
||||
radius: [0, '32%'],
|
||||
center: ['50%','50%'],
|
||||
startAngle: 40,
|
||||
label: {
|
||||
// position: 'inner',
|
||||
formatter: '{b} \n {d}% ',
|
||||
@ -39,7 +40,7 @@
|
||||
color: '#D1D1D1',
|
||||
// show: false,
|
||||
},
|
||||
startAngle: 15,
|
||||
startAngle: 115,
|
||||
labelLine: {
|
||||
// show: false,
|
||||
length: 62,
|
||||
@ -66,42 +67,11 @@
|
||||
label: {
|
||||
show:false,
|
||||
},
|
||||
|
||||
color: this.data[1].length> 7 ? ['#FFC3CD','#F4A4B2','#FE6582','#FFE7C0','#FEDA9D','#FEC057','#F9C8A0','#FAB176','#ffa25b','#E1C9F7','#CDA6F1',
|
||||
'#E0E2F6','#C5CDF9','#9AA6EF','#D8ECEA','#8FE5B2','#70D599','#ADE5EE'] :
|
||||
['#f7f5f6', '#FFE7C0', '#ADE5EE','#C5CDF9','#e0e3f7', '#AFB7E6', '#F3B1C9' ],
|
||||
|
||||
// formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ','#6FEBC3', '#F4B27A',
|
||||
// backgroundColor: '#F6F8FC',
|
||||
// borderColor: '#8C8D8E',
|
||||
// borderWidth: 1,
|
||||
// borderRadius: 4,
|
||||
|
||||
// rich: {
|
||||
// a: {
|
||||
// color: '#6E7079',
|
||||
// lineHeight: 22,
|
||||
// align: 'center'
|
||||
// },
|
||||
// hr: {
|
||||
// borderColor: '#8C8D8E',
|
||||
// width: '100%',
|
||||
// borderWidth: 1,
|
||||
// height: 0
|
||||
// },
|
||||
// b: {
|
||||
// color: '#4C5058',
|
||||
// fontSize: 14,
|
||||
// fontWeight: 'bold',
|
||||
// lineHeight: 33
|
||||
// },
|
||||
// per: {
|
||||
// color: '#fff',
|
||||
// backgroundColor: '#4C5058',
|
||||
// padding: [3, 4],
|
||||
// borderRadius: 4
|
||||
// }
|
||||
// }
|
||||
// },
|
||||
['#70D599', '#FFE7C0', '#ADE5EE','#C5CDF9','#e0e3f7', '#AFB7E6', '#F3B1C9' ],
|
||||
|
||||
data: [
|
||||
...this.data[1]
|
||||
]
|
||||
|
||||
247
pages/everdayRenven/components/anhuiYestodayRevenueData.js
Normal file
@ -0,0 +1,247 @@
|
||||
import request from '@/util/index.js'
|
||||
const methods = {
|
||||
|
||||
async getData(obj,isServerPartDetail) { // 获取远程数据
|
||||
let _this = this
|
||||
/* ts 数据类型声明
|
||||
type serverpartRegion = {
|
||||
serverpartname:string,
|
||||
cashpay: string
|
||||
}
|
||||
tyepy reginListModel = {
|
||||
name:string,
|
||||
cashpay:number,
|
||||
child: serverpartRegion[]
|
||||
}
|
||||
*/
|
||||
// let regionList = [] // 营收上传列表 reginListModel[]
|
||||
this.groupType = obj.GroupType
|
||||
const requestParamas = {
|
||||
Statistics_Date: obj.time ,
|
||||
Statistics_Month: obj.month ,
|
||||
Province_Code: obj.ProvinceCode ,
|
||||
pushProvinceCode: obj.ProvinceCode ,
|
||||
Serverpart_ID: obj.GroupType == 1020 ? '' : obj.ServerpartIds,
|
||||
SPRegionType_ID: obj.GroupType == 1020 ? obj.ServerpartIds : ''
|
||||
// Revenue_Include: 1
|
||||
}
|
||||
this.provinceCode = obj.ProvinceCode
|
||||
// 营收数据
|
||||
const data = await request.$webGet('CommercialApi/Revenue/GetRevenuePushList', requestParamas)
|
||||
if (data.Result_Code != 100) return
|
||||
|
||||
// 在营门店数量统计
|
||||
const busniessCounts = await request.$webGet('CommercialApi/BaseInfo/GetShopCountList', requestParamas)
|
||||
if (busniessCounts.Result_Code != 100) return
|
||||
|
||||
// 业态关系
|
||||
const tradeData = await request.$webGet('CommercialApi/BaseInfo/GetBusinessTradeList', requestParamas)
|
||||
if(tradeData.Result_Code != 100) return
|
||||
|
||||
// 计划营收金额
|
||||
const budgetAmount= await request.$webGet('CommercialApi/Revenue/GetBudgetExpenseList', requestParamas)
|
||||
if(budgetAmount.Result_Code != 100) return
|
||||
|
||||
if(isServerPartDetail) { // 是服务区营收推送页面
|
||||
return _this.getSeverpartReginList(data.Result_Data.List, busniessCounts.Result_Data.List,tradeData.Result_Data.List,budgetAmount.Result_Data.List)
|
||||
}
|
||||
return _this.getReginList(data.Result_Data.List, busniessCounts.Result_Data.List,tradeData.Result_Data.List,budgetAmount.Result_Data.List) // [reginList, totalData, busniessTypePie, busniessTradePie]
|
||||
},
|
||||
getTotalShowData(newData, oldData,index) {
|
||||
// <TotalModel>
|
||||
/*
|
||||
type TotalModel = {
|
||||
ticketCount: number // 客单数量 ,
|
||||
totalCount: number// 总数量 ,
|
||||
totalOffAmount: number// 优惠金额 ,
|
||||
mobilePayment: number// 移动支付金额 ,
|
||||
cashPay: number// 实收金额 ,
|
||||
different_Price_Less: number// 短款金额 ,
|
||||
different_Price_More: number// 长款金额 ,
|
||||
}
|
||||
*/
|
||||
|
||||
if (index>0) {
|
||||
oldData.ticketCount += newData.TicketCount
|
||||
oldData.totalCount += newData.TotalCount
|
||||
oldData.totalOffAmount += newData.TotalOffAmount
|
||||
oldData.mobilePayment += newData.MobilePayment
|
||||
oldData.cashPay += newData.CashPay
|
||||
oldData.diffLessPrice += newData.Different_Price_Less
|
||||
oldData.diffMorePrice += newData.Different_Price_More
|
||||
if(newData.BusinessType==1000){ // 商超
|
||||
|
||||
oldData.scCount = oldData.scCount ? oldData.scCount + 1 : 1
|
||||
oldData.scCashPay = oldData.scCashPay ? oldData.scCashPay + newData.CashPay : newData.CashPay
|
||||
}
|
||||
if(newData.BusinessType==3000){ // 餐饮
|
||||
oldData.cyCount = oldData.cyCount ? oldData.cyCount + 1 : 1
|
||||
oldData.cyCashPay = oldData.cyCashPay ? oldData.cyCashPay + newData.CashPay : newData.CashPay
|
||||
}
|
||||
} else {
|
||||
oldData.ticketCount = newData.TicketCount
|
||||
oldData.totalCount = newData.TotalCount
|
||||
oldData.totalOffAmount = newData.TotalOffAmount
|
||||
oldData.mobilePayment = newData.MobilePayment
|
||||
oldData.cashPay = newData.CashPay
|
||||
oldData.diffLessPrice = newData.Different_Price_Less
|
||||
oldData.diffMorePrice = newData.Different_Price_More
|
||||
|
||||
if(newData.BusinessType==1000){ // 商超
|
||||
|
||||
oldData.scCount = 1
|
||||
oldData.scCashPay = newData.CashPay
|
||||
}
|
||||
if(newData.BusinessType==3000){ // 餐饮
|
||||
|
||||
oldData.cyCount = 1
|
||||
oldData.cyCashPay = newData.CashPay
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return {...oldData}
|
||||
},
|
||||
getBusniessPie(typeName, item, list) { // 经营模式数据
|
||||
|
||||
const oldData = list.find(m => m.name === item[typeName])
|
||||
if (oldData) {
|
||||
oldData.data = Number((oldData.data+ item.CashPay).toFixed(2))
|
||||
oldData.value = Number((oldData.value+ item.CashPay).toFixed(2))
|
||||
} else {
|
||||
list.push({
|
||||
name: item[typeName],
|
||||
data: item.CashPay,
|
||||
value: item.CashPay,
|
||||
})
|
||||
}
|
||||
|
||||
return [...list]
|
||||
},
|
||||
getSeverpartReginList(data, shopCountList,tradeList,budgetAmount){
|
||||
let _this = this
|
||||
let totalShow = {} // 总营收数据统计
|
||||
let list = [] // 上传营收列表数据
|
||||
let busniessTypePie = [] // 经营模式饼图统计数据
|
||||
let busniessTradePie = [] // 经营业态饼图统计数据
|
||||
let busniessTradeFathPie = [] // 区域经营饼图统计数据
|
||||
|
||||
data.map(async (n, index) => {
|
||||
n.show = false
|
||||
totalShow = _this.getTotalShowData(n, totalShow,index); // 总营收数据统计
|
||||
// 寻找门店父业态
|
||||
let trade = tradeList.find(t=>t.BUSINESSTRADE_NAME==n.BusinessTrade_Name)
|
||||
if(trade && trade.BUSINESSTRADE_PNAME && trade.BUSINESSTRADE_PNAME.indexOf('其他')==-1 ) {
|
||||
n.tradename = trade.BUSINESSTRADE_PNAME
|
||||
|
||||
}else{
|
||||
n.tradename = '其他'
|
||||
}
|
||||
|
||||
busniessTypePie = _this.getBusniessPie('Business_TypeName', n, busniessTypePie)
|
||||
busniessTradePie = _this.getBusniessPie('BusinessTrade_Name', n, busniessTradePie)
|
||||
busniessTradeFathPie = _this.getBusniessPie('tradename', n, busniessTradeFathPie)
|
||||
})
|
||||
totalShow.serverpartname = data[0].Serverpart_Name
|
||||
totalShow.uploadState = data.length+'/'+ (shopCountList.length ? shopCountList[0].SHOP_BUSINESSCOUNT: 0)
|
||||
totalShow.uploadCount = data.filter(n=>n.Revenue_Upload>0).length
|
||||
totalShow.totalUploadCount = shopCountList.length ? shopCountList[0].SHOP_BUSINESSCOUNT: 0
|
||||
totalShow.budgetAmount = 0
|
||||
|
||||
if(budgetAmount.length){
|
||||
totalShow.budgetAmount = budgetAmount[0].BUDGET_AMOUNT
|
||||
}
|
||||
return [ totalShow, busniessTypePie, busniessTradePie,busniessTradeFathPie ]
|
||||
},
|
||||
getReginList(data, shopCountList,tradeList,budgetAmount) {
|
||||
let _this = this
|
||||
let totalShow = {} // 总营收数据统计
|
||||
let list = [] // 上传营收列表数据
|
||||
let busniessTypePie = [] // 经营模式饼图统计数据
|
||||
let busniessTradePie = [] // 经营业态饼图统计数据
|
||||
let busniessAreaPie = [] // 区域经营饼图统计数据
|
||||
let totalUploadCount = 0
|
||||
data.map(async (n, index) => {
|
||||
n.show = false
|
||||
|
||||
// 寻找门店父业态
|
||||
let trade = tradeList.find(t=>t.BUSINESSTRADE_NAME==n.BusinessTrade_Name)
|
||||
if(trade && trade.BUSINESSTRADE_PNAME && trade.BUSINESSTRADE_PNAME.indexOf('其他')==-1 ) {
|
||||
n.tradename = trade.BUSINESSTRADE_PNAME
|
||||
|
||||
}else{
|
||||
n.tradename = _this.provinceCode==340000? '其他' : (n.BusinessTrade_Name || '其他')
|
||||
}
|
||||
// 上传营收情况
|
||||
let regin = list.find(m => m.name === n.SPRegionType_Name)
|
||||
let [reginShopCount, serverpartShopCount] = [0, 0]
|
||||
shopCountList.forEach(shop => {
|
||||
if (shop.SPREGIONTYPE_NAME == n.SPRegionType_Name) {
|
||||
reginShopCount += shop.SHOP_BUSINESSCOUNT
|
||||
}
|
||||
if (shop.SERVERPART_ID == n.Serverpart_ID) {
|
||||
serverpartShopCount = shop.SHOP_BUSINESSCOUNT
|
||||
}
|
||||
})
|
||||
|
||||
if (!regin) {
|
||||
totalUploadCount += reginShopCount
|
||||
list.push({
|
||||
name: n.SPRegionType_Name, // 区域名称
|
||||
cashpay: n.CashPay,
|
||||
uploadcount: n.Revenue_Upload>0 ? 1: 0, // 区域上传数量
|
||||
totalcount: reginShopCount,
|
||||
child: [{
|
||||
serverpart_Id: n.Serverpart_ID,
|
||||
serverpart_Name: n.Serverpart_Name,
|
||||
cashpay: n.CashPay,
|
||||
uploadcount: n.Revenue_Upload>0 ? 1: 0,
|
||||
totalcount: serverpartShopCount
|
||||
}]
|
||||
})
|
||||
} else {
|
||||
regin.cashpay += n.CashPay
|
||||
regin.uploadcount += n.Revenue_Upload>0 ? 1: 0
|
||||
let serverpart = regin.child.find(m => m.serverpart_Name === n.Serverpart_Name)
|
||||
if (serverpart) {
|
||||
serverpart.cashpay += n.CashPay
|
||||
serverpart.uploadcount += n.Revenue_Upload>0 ? 1: 0
|
||||
|
||||
} else {
|
||||
regin.child.push({
|
||||
serverpart_Id: n.Serverpart_ID,
|
||||
serverpart_Name: n.Serverpart_Name,
|
||||
cashpay: n.CashPay,
|
||||
uploadcount: n.Revenue_Upload>0 ? 1: 0,
|
||||
totalcount: serverpartShopCount
|
||||
})
|
||||
}
|
||||
|
||||
regin.child.sort((a, b) => b.cashpay - a.cashpay)
|
||||
}
|
||||
totalShow = _this.getTotalShowData(n, totalShow,index); // 总营收数据统计
|
||||
|
||||
busniessTypePie = _this.getBusniessPie('Business_TypeName', n, busniessTypePie)
|
||||
busniessTradePie = _this.getBusniessPie('tradename', n, busniessTradePie)
|
||||
if(this.groupType ==1000){
|
||||
|
||||
busniessAreaPie = _this.getBusniessPie('SPRegionType_Name', n, busniessAreaPie)
|
||||
}
|
||||
})
|
||||
list.sort((a, b) => b.cashpay - a.cashpay)
|
||||
|
||||
totalShow.uploadState = data.filter(n=>n.Revenue_Upload>0).length+'/'+totalUploadCount
|
||||
totalShow.budgetAmount = 0
|
||||
if(_this.provinceCode==620000){
|
||||
const ele = list.find(n=>n.name=="通美公司")
|
||||
totalShow.tmCrashPay = ele ? ele.cashpay :'0.00'
|
||||
}
|
||||
if(budgetAmount.length){
|
||||
totalShow.budgetAmount = budgetAmount[0].BUDGET_AMOUNT
|
||||
}
|
||||
return [list, totalShow, busniessTypePie, busniessTradePie,busniessAreaPie]
|
||||
}
|
||||
}
|
||||
|
||||
export default methods ;
|
||||
|
||||
@ -2,14 +2,14 @@
|
||||
<div class="page-body" v-if="showPage">
|
||||
<div class="box-card" v-if="!isBrandService">
|
||||
|
||||
<div class="serverpart-name">{{pageMsg.SERVERPART_NAME}}</div>
|
||||
<div class="serverpart-name">{{pageMsg.Serverpart_Name}}</div>
|
||||
<div class="analysis-box-title">
|
||||
<div>
|
||||
<div class="analysis-total">{{ $util.fmoney(pageMsg.CASHPAY) }}</div>
|
||||
<div class="analysis-total">{{ $util.fmoney(pageMsg.Revenue_Amount) }}</div>
|
||||
<span style="color:#959495;">日结营收</span>
|
||||
</div>
|
||||
<div>
|
||||
<div class="analysis-upload" :class="{'defferent':pageMsg.UpLoadCount!==pageMsg.TotalCount}">{{pageMsg.UPLOADSTATE}}</div>
|
||||
<div class="analysis-upload" :class="{'defferent':pageMsg.UploadShopCount!==pageMsg.TotalShopCount}">{{pageMsg.UploadShopCount}}/{{pageMsg.TotalShopCount}}</div>
|
||||
<span style="color:#959495;">上传门店</span>
|
||||
</div>
|
||||
</div>
|
||||
@ -23,7 +23,7 @@
|
||||
</div>
|
||||
<!--服务区门店分析-->
|
||||
<div style="margin-top: 0 20rpx;" v-if="!isBrandService">
|
||||
<shopCell v-for="(item,i) in pageMsg.List" :key="i" :item='item' @toggleShow="toggleShow" :i='i'></shopCell>
|
||||
<shopCell v-for="(item,i) in pageMsg.ShopEndaccountList" :key="i" :item='item' @toggleShow="toggleShow" :i='i'></shopCell>
|
||||
|
||||
</div>
|
||||
<div style="margin-top: 0 20rpx;" v-else>
|
||||
@ -58,12 +58,30 @@
|
||||
methods: {
|
||||
toggleShow(i){
|
||||
|
||||
let item = this.isBrandService ? this.pageMsg.listBrandShopModel[i] : this.pageMsg.List[i]
|
||||
let item = this.isBrandService ? this.pageMsg.listBrandShopModel[i] : this.pageMsg.ShopEndaccountList[i]
|
||||
item.show = !item.show
|
||||
this.$forceUpdate()
|
||||
},
|
||||
|
||||
},
|
||||
getData(obj) {
|
||||
let _this = this
|
||||
this.$request.$webGet('CommercialApi/Revenue/GetServerpartEndAccountList', {
|
||||
Serverpart_ID: obj.id,
|
||||
pushProvinceCode: obj.provinceId,
|
||||
Statistics_Date: obj.time,
|
||||
// EndDate: obj.time,
|
||||
}).then(res => {
|
||||
uni.hideLoading()
|
||||
if (res.Result_Code !== 100) return
|
||||
res.Result_Data.ShopEndaccountList.map(n=>{
|
||||
n.show = false
|
||||
n.detail = this.getDetail(n)
|
||||
})
|
||||
res.Result_Data.UpLoadCount = res.Result_Data.ShopEndaccountList.length // 门店上传总数
|
||||
_this.pageMsg = res.Result_Data
|
||||
_this.showPage =true
|
||||
})
|
||||
},
|
||||
getOtherData(obj) { // 450000和330300 省份获取数据的方法
|
||||
let _this = this
|
||||
this.$request.$get('getShopRevenueList', {
|
||||
serverpartID: obj.id,
|
||||
@ -77,7 +95,12 @@
|
||||
n.show = false
|
||||
n.detail = this.getDetail(n)
|
||||
})
|
||||
_this.pageMsg = res.Data
|
||||
|
||||
_this.pageMsg.Revenue_Amount = res.Data.CASHPAY
|
||||
_this.pageMsg.Serverpart_Name = res.Data.SERVERPART_NAME
|
||||
_this.pageMsg.UploadShopCount = res.Data.UpLoadCount
|
||||
_this.pageMsg.TotalShopCount = res.Data.TotalCount
|
||||
_this.pageMsg.ShopEndaccountList = res.Data.List
|
||||
_this.showPage =true
|
||||
})
|
||||
},
|
||||
@ -107,10 +130,12 @@
|
||||
n.show = false
|
||||
n.detail = this.getDetail(n)
|
||||
})
|
||||
|
||||
_this.pageMsg = res.Result_Data
|
||||
_this.showPage = true
|
||||
})
|
||||
},
|
||||
|
||||
},
|
||||
onUnload() {
|
||||
this.$util.addUserBehavior()
|
||||
@ -119,13 +144,17 @@
|
||||
uni.showLoading({
|
||||
title:'正在加载...'
|
||||
})
|
||||
|
||||
|
||||
if(option.bid) {
|
||||
this.isBrandService = true
|
||||
this.getBrandRevenue(option)
|
||||
}else {
|
||||
this.getData(option)
|
||||
|
||||
if(option.provinceId==450000 || option.provinceId==330300 || option.provinceId==140000 || option.provinceId==500000) { //这两个省份用的是老接口获取数据
|
||||
this.getOtherData(option)
|
||||
}else{ // 其余省份使用webapi接口获取数据
|
||||
|
||||
this.getData(option)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<!--服务区门店分析-->
|
||||
|
||||
<div style="margin-top: 0 20rpx;" >
|
||||
<shopCell v-for="(item,i) in pageMsg.listBrandShopModel" :key="i" :item='item' @toggleShow="toggleShow" :i='i'></shopCell>
|
||||
<shopCell v-for="(item,i) in pageMsg.ShopEndaccountList" :key="i" :item='item' @toggleShow="toggleShow" :i='i'></shopCell>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@ -46,7 +46,7 @@
|
||||
methods: {
|
||||
toggleShow(i){
|
||||
|
||||
let item = this.pageMsg.listBrandShopModel[i]
|
||||
let item = this.pageMsg.ShopEndaccountList[i]
|
||||
item.show = !item.show
|
||||
this.$forceUpdate()
|
||||
},
|
||||
@ -64,6 +64,24 @@
|
||||
return arr
|
||||
},
|
||||
getBrandRevenue(obj) {
|
||||
let _this = this
|
||||
this.$request.$webGet('CommercialApi/Revenue/GetShopEndAccountList', {
|
||||
Serverpart_Id: obj.id,
|
||||
pushProvinceCode: obj.provinceId,
|
||||
Statistics_Date: obj.time,
|
||||
ServerpartShop_Ids: obj.shopid,
|
||||
}).then(res => {
|
||||
uni.hideLoading()
|
||||
if (res.Result_Code != 100) return
|
||||
res.Result_Data.ShopEndaccountList.map(n=>{
|
||||
n.show = true
|
||||
n.detail = this.getDetail(n)
|
||||
})
|
||||
_this.pageMsg = res.Result_Data
|
||||
_this.showPage =true
|
||||
})
|
||||
},
|
||||
zgetBrandRevenue(obj) {
|
||||
let _this = this
|
||||
this.$request.$webGet('/WeChat/GetServerpartBrandShop', {
|
||||
Serverpart_Id: obj.id,
|
||||
@ -78,6 +96,7 @@
|
||||
n.show = true
|
||||
n.detail = this.getDetail(n)
|
||||
})
|
||||
res.Result_Data.ShopEndaccountList = res.Result_Data.listBrandShopModel
|
||||
_this.pageMsg = res.Result_Data
|
||||
_this.showPage =true
|
||||
})
|
||||
@ -90,7 +109,12 @@
|
||||
uni.showLoading({
|
||||
title:'正在加载...'
|
||||
})
|
||||
if(option.provinceId==='330000'){
|
||||
this.zgetBrandRevenue(option)
|
||||
}else{
|
||||
|
||||
this.getBrandRevenue(option)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<view>
|
||||
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@ -8,49 +8,172 @@
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
regionList: []
|
||||
regionList: [],
|
||||
totalData: {},
|
||||
busniessTypePie:[],
|
||||
busniessTradePie:[]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getData(obj){
|
||||
let _this =this
|
||||
let list = []
|
||||
this.$request.$webGet('/EShangApiMain/Revenue/GetRevenuePushList', {
|
||||
Statistics_Date: obj.Statistics_Date || '2021-12-05',
|
||||
pushProvinceCode: obj.ProvinceCode || '340000',
|
||||
|
||||
}).then(res => {
|
||||
if (res.Result_Code != 100) return
|
||||
res.Result_Data.map(n => {
|
||||
n.show = false
|
||||
let regin = list.find(m=>m.name ===n.SPREGIONTYPE_NAME)
|
||||
if(!regin ) {
|
||||
list.push({
|
||||
name: n.SPREGIONTYPE_NAME,
|
||||
crashpay: n.CASHPAY,
|
||||
child: [{
|
||||
SERVERPART_NAME: n.SERVERPART_NAME,
|
||||
CASHPAY: n.CASHPAY
|
||||
}]
|
||||
})
|
||||
}else{
|
||||
regin.crashpay+= n.CASHPAY
|
||||
let serverpart = regin.child.find(m=>m.SERVERPART_NAME ===n.SERVERPART_NAME)
|
||||
if(serverpart) {
|
||||
serverpart.CASHPAY+= n.CASHPAY
|
||||
}else{
|
||||
regin.child.push({
|
||||
SERVERPART_NAME: n.SERVERPART_NAME,
|
||||
CASHPAY: n.CASHPAY
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
async getData(obj) {
|
||||
let _this = this
|
||||
/* ts 数据类型声明
|
||||
type serverpartRegion = {
|
||||
serverpartname:string,
|
||||
crashpay: string
|
||||
}
|
||||
tyepy reginListModel = {
|
||||
name:string,
|
||||
crashpay:number,
|
||||
child: serverpartRegion[]
|
||||
}
|
||||
*/
|
||||
// let regionList = [] // 营收上传列表 reginListModel[]
|
||||
const requestParamas = {
|
||||
Statistics_Date: obj.date || '2021-12-12',
|
||||
pushProvinceCode: obj.provinceid || '340000',
|
||||
Serverpart_ID: obj.serverpartid || '',
|
||||
SPRegionType_ID: obj.regionid || ''
|
||||
// Revenue_Include: 1
|
||||
}
|
||||
// 营收数据
|
||||
const data = await this.$request.$webGet('CommercialApi/Revenue/GetRevenuePushList', requestParamas)
|
||||
console.log(data)
|
||||
if (data.Result_Code != 100) return
|
||||
|
||||
_this.regionList = list
|
||||
console.log(list)
|
||||
// 在营门店数量统计
|
||||
const busniessCounts = await this.$request.$webGet('CommercialApi/BaseInfo/GetSPShopCountList', requestParamas)
|
||||
if(busniessCounts.Result_Code != 100) return
|
||||
|
||||
// 在营门店数量统计
|
||||
const tradeData = await this.$request.$webPost('CommercialApi/BaseInfo/GetBusinessTradeList', {
|
||||
"SearchParameter": JSON.stringify({
|
||||
"PROVINCE_CODE": 340000
|
||||
}),
|
||||
"PageIndex": 1,
|
||||
"PageSize": 999,
|
||||
"SortStr": ""
|
||||
})
|
||||
if(tradeData.Result_Code != 100) return
|
||||
|
||||
const [reginList, totalData, busniessTypePie,busniessTradePie] = _this.getReginList(data.Result_Data.List, busniessCounts.Result_Data.List)
|
||||
_this.regionList = reginList // 营收上传列表 reginListModel[]
|
||||
_this.totalData = totalData
|
||||
_this.busniessTypePie = busniessTypePie
|
||||
_this.busniessTradePie = busniessTradePie
|
||||
},
|
||||
getTotalShowData(newData, oldData) {
|
||||
var data = {} // <TotalModel>
|
||||
/*
|
||||
type TotalModel = {
|
||||
ticketCount: number // 客单数量 ,
|
||||
totalCount: number// 总数量 ,
|
||||
totalOffAmount: number// 优惠金额 ,
|
||||
mobilePayment: number// 移动支付金额 ,
|
||||
cashPay: number// 实收金额 ,
|
||||
different_Price_Less: number// 短款金额 ,
|
||||
different_Price_More: number// 长款金额 ,
|
||||
}
|
||||
*/
|
||||
|
||||
if (oldData && oldData.ticketCount) {
|
||||
data.ticketCount = oldData.ticketCount + newData.TicketCount
|
||||
data.totalCount = oldData.totalCount + newData.TotalCount
|
||||
data.totalOffAmount = oldData.totalOffAmount + newData.TotalOffAmount
|
||||
data.mobilePayment = oldData.mobilePayment + newData.MobilePayment
|
||||
data.cashPay = oldData.cashPay + newData.CashPay
|
||||
data.diffLessPrice = oldData.diffLessPrice + newData.Different_Price_Less
|
||||
data.diffMorePrice = oldData.diffMorePrice + newData.Different_Price_More
|
||||
|
||||
} else {
|
||||
data.ticketCount = newData.TicketCount
|
||||
data.totalCount = newData.TotalCount
|
||||
data.totalOffAmount = newData.TotalOffAmount
|
||||
data.mobilePayment = newData.MobilePayment
|
||||
data.cashPay = newData.CashPay
|
||||
data.diffLessPrice = newData.Different_Price_Less
|
||||
data.diffMorePrice = newData.Different_Price_More
|
||||
}
|
||||
return data
|
||||
},
|
||||
getBusniessPie(typeName, item,list){ // 经营模式数据
|
||||
const oldData = list.find(m=>m.name === item[typeName])
|
||||
if(oldData){
|
||||
oldData.data += item.CashPay
|
||||
|
||||
|
||||
}else{
|
||||
list.push({
|
||||
name: item[typeName],
|
||||
data: item.CashPay,
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
return [...list]
|
||||
},
|
||||
|
||||
getReginList(data,shopCountList) {
|
||||
let _this = this
|
||||
let totalShow = {} // 总营收数据统计
|
||||
let list = [] // 上传营收列表数据
|
||||
let busniessTypePie = [] // 经营模式饼图统计数据
|
||||
let busniessTradePie = [] // 经营业态饼图统计数据
|
||||
data.map(async (n,index) => {
|
||||
n.show = false
|
||||
totalShow = _this.getTotalShowData(n, totalShow);// 总营收数据统计
|
||||
|
||||
// 上传营收情况
|
||||
let regin = list.find(m => m.name === n.SPRegionType_Name)
|
||||
let [reginShopCount,serverpartShopCount] = [0,0]
|
||||
shopCountList.forEach( shop => {
|
||||
if(shop.SPREGIONTYPE_NAME == n.SPRegionType_Name){
|
||||
reginShopCount += shop.SHOP_BUSINESSCOUNT
|
||||
}
|
||||
if(shop.SERVERPART_ID==n.Serverpart_ID) {
|
||||
serverpartShopCount = shop.SHOP_BUSINESSCOUNT
|
||||
}
|
||||
})
|
||||
|
||||
if (!regin) {
|
||||
list.push({
|
||||
name: n.SPRegionType_Name, // 区域名称
|
||||
crashpay: n.CashPay,
|
||||
uploadcount: 1, // 区域上传数量
|
||||
totalcount: reginShopCount,
|
||||
child: [{
|
||||
serverpart_Id: n.Serverpart_ID,
|
||||
serverpart_Name: n.Serverpart_Name,
|
||||
crashpay: n.CashPay,
|
||||
uploadcount: 1,
|
||||
totalcount: serverpartShopCount
|
||||
}]
|
||||
})
|
||||
} else {
|
||||
regin.crashpay += n.CashPay
|
||||
regin.uploadcount += 1
|
||||
let serverpart = regin.child.find(m => m.serverpart_Name === n.Serverpart_Name)
|
||||
if (serverpart) {
|
||||
serverpart.crashpay += n.CashPay
|
||||
serverpart.uploadcount += 1
|
||||
} else {
|
||||
regin.child.push({
|
||||
serverpart_Id: n.Serverpart_ID,
|
||||
serverpart_Name: n.Serverpart_Name,
|
||||
crashpay: n.CashPay,
|
||||
uploadcount: 1,
|
||||
totalcount: serverpartShopCount
|
||||
})
|
||||
|
||||
}
|
||||
regin.child.sort((a,b)=> b.crashpay- a.crashpay)
|
||||
}
|
||||
list.sort((a,b)=> b.crashpay -a.crashpay)
|
||||
busniessTypePie = _this.getBusniessPie('Business_TypeName',n,busniessTypePie)
|
||||
busniessTradePie = _this.getBusniessPie('BusinessTrade_Name',n,busniessTradePie)
|
||||
})
|
||||
|
||||
return [list, totalShow,busniessTypePie,busniessTradePie]
|
||||
}
|
||||
},
|
||||
onLoad(option) {
|
||||
|
||||
@ -158,6 +158,13 @@ const yewu = [{
|
||||
"imagePath": "/static/images/index/ndsj.png",
|
||||
"noImagePath": "/static/images/index/ndsj-no.png",
|
||||
"homeUrl": "/pages/webview/webview?src=https://eshangtech.com/questionnarie/business"
|
||||
},{
|
||||
"name": "权限审批",
|
||||
"id": "c802a38f-3bbd-4db0-89b6-34e404c8d8cc",
|
||||
"modelName": "authorityApproval",
|
||||
"imagePath": "/static/images/index/qxsp.png",
|
||||
"noImagePath": "/static/images/index/qxsp-no.png",
|
||||
"homeUrl": "/pages/authorityApproval/index"
|
||||
}
|
||||
]
|
||||
export default [
|
||||
|
||||
@ -107,8 +107,8 @@
|
||||
<script>
|
||||
import {mapGetters} from 'vuex'
|
||||
import processUnit from '@/components/auditingProcess/item.vue'
|
||||
import travelCard from '@/components/travelCard/travelCard.vue'
|
||||
import fundAppropriation from './components/fundAppropriation.vue'
|
||||
import travelCard from './components/travelCard/travelCard.vue'
|
||||
import paymentApproval from './components/paymentApproval.vue'
|
||||
import reimbursement from './components/reimbursement.vue'
|
||||
import travelExpense from './components/travelExpense.vue'
|
||||
|
||||
@ -1,274 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<view class="uni-card">
|
||||
<!-- <view class="uni-list"> -->
|
||||
<view class="uni-list-cell-navigate uni-navigate-right" v-for="(menu,index) in moduleAuthority" :key="index" :class="index === menu.length - 1 ? 'uni-list-cell-last' : ''">
|
||||
<!-- <view class="uni-list-cell-navigate " :hover-class="getMenuSever[menu.id].length>0?'uni-list-cell-hover':''" :class="{'uni-navigate-bottom': getMenuSever[menu.id] ,'uni-active': menu.show}"
|
||||
@tap="trigerCollapse(menu)"> -->
|
||||
<view class="uni-flex ai-center">
|
||||
|
||||
<image :src="`/static/images/user/${menu.class}`" mode="aspectFit" class="ico-images"></image>
|
||||
<text> {{menu.title}} </text>
|
||||
</view>
|
||||
|
||||
<!-- </view> -->
|
||||
<!--
|
||||
<view class="uni-list uni-collapse" :class="menu.show ? 'uni-active' : ''" v-if="getMenuSever[menu.id]">
|
||||
<div class="show-detail" >
|
||||
<div class="detail-unit" >
|
||||
<div style="display: flex;">
|
||||
|
||||
<strong class="detail-title mr20" v-for="(d,i) in getDatapower[menu.id]" :key="i">{{d}}</strong>
|
||||
</div>
|
||||
|
||||
<div class='detail-shop'>
|
||||
<span class="shop-name" v-for="(item,key) in getMenuSever[menu.id]" :key="key" >{{item}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</view> -->
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
<!-- </view> -->
|
||||
</view>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {mapGetters} from 'vuex';
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
modules: [],
|
||||
severList: [],
|
||||
shopShow: false,
|
||||
powerKey: [
|
||||
|
||||
{id: '2580cb9f-ad2c-4d0b-b478-0be52eaf6ef6', title: '公文阅办', show: false, class: 'mrys.png'},
|
||||
{id: 'c870b1bc-95c8-473d-81c8-8596eb793bd4', title: '阳光公示', show: false, class: 'mrys.png'},
|
||||
{id: '1ceeaa5c-d11e-4dcd-8d33-0c3df4cd4937', title: '请假加班', show: false, class: 'mrys.png'},
|
||||
{id: '5733dfdd-29f6-4233-9ff0-6f077d80d778', title: '安全问答', show: false, class: 'mrys.png'},
|
||||
{id: 'ff04b551-c382-4638-a947-f95c42387ada', title: '考勤打卡', show: false, class: 'mrys.png'},
|
||||
{id: '1ceeaa5c-d11e-4dcd-8d33-0c3df4cd4937', title: '请假加班', show: false, class: 'mrys.png'},
|
||||
|
||||
{id: '1a2907bd-c2f5-4ef9-9ead-70496650ace6', title: '财务报销', show: false, class: 'cwbx.png'},
|
||||
{id: '916cdbb5-f05b-4624-b6c4-9f111d4389fc', title: '招标投标', show: false, class: 'zbtb.png'},
|
||||
{id: '8fea5036-d67e-476e-9e56-5f379ba6ae18', title: '服务区报销', show: false, class: 'cwbx.png'},
|
||||
{id: 'ac661db4-1af1-4732-88db-76bc05eec335', title: '合同审批', show: false, class: 'cwbx.png'},
|
||||
|
||||
{id: 'c26c1620-2149-4b3d-ac2e-07e0c0494042', title: '走动式管理', show: false, class: 'zdsgl.png'},
|
||||
{id: 'd405ae13-3388-41c0-a5f6-d11194d0a943', title: '投诉意见', show: false, class: 'tsjy.png'},
|
||||
{id: '74934d31-385a-4eed-80bb-9c9ed7da29b5', title: '每日营收', show: false, class: 'mrys.png'},
|
||||
{id: 'b0b63a75-56c9-4f1d-aacb-a26e62b47e3e', title: '数据校验', show: false, class: 'sjjy.png'},
|
||||
{id: '056b29d7-4721-47ee-ad25-660814e1f3a9', title: '商品审批', show: false, class: 'spsp.png'},
|
||||
{id: '2290e96d-c6d7-4dde-b5b7-e699b615ff2f', title: '招商审批', show: false, class: 'spsp.png'},
|
||||
],
|
||||
dataPower: [
|
||||
{id: '6f020a1c-69db-4910-8d27-1f1140cb27d7',title: '日结校验',show: false},
|
||||
{id: '2eada261-97e7-4881-998b-06b1cfc290af',title: '日结审核',show: false},
|
||||
{id: '43ecf139-66a7-421b-ba0f-bf7ddd77437d',title: '主任确认',show: false},
|
||||
]
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters({
|
||||
'menus': 'getMenu',
|
||||
}),
|
||||
|
||||
moduleAuthority() {
|
||||
let _this = this
|
||||
let userModules = _this.menus
|
||||
let _data = []
|
||||
this.powerKey.forEach(u => {
|
||||
if (userModules[u.id] ==1) {
|
||||
_data.push(u)
|
||||
}
|
||||
})
|
||||
|
||||
return _data;
|
||||
},
|
||||
// getDatapower() {
|
||||
// let _this = this
|
||||
|
||||
// let _data = {}
|
||||
// let allMenu = this.moduleEffective
|
||||
|
||||
// this.powerKey.map(n => {
|
||||
// let hasMenu = allMenu.filter(a=> {return a.MODULE_PGUID===n.id})
|
||||
|
||||
// if(hasMenu.length>0) {
|
||||
// let c_name = []
|
||||
// hasMenu.map(u =>{
|
||||
// c_name.push(u.MODULE_NAME)
|
||||
// })
|
||||
|
||||
// _data[n.id] = c_name
|
||||
|
||||
// }
|
||||
// })
|
||||
|
||||
// return _data;
|
||||
// },
|
||||
// getMenuSever() {
|
||||
// let allMenu = this.$store.getters.getModuleEffective
|
||||
// let menuServer = {}
|
||||
|
||||
// this.powerKey.map(n => {
|
||||
// let hasMenu = allMenu.find(a=> {return a.MODULE_GUID===n.id})
|
||||
// if(hasMenu) {
|
||||
// menuServer[n.id] = hasMenu.SERVERPART_NAMES.length>0 ? hasMenu.SERVERPART_NAMES.split(',') : ''
|
||||
// }
|
||||
// })
|
||||
|
||||
// return menuServer
|
||||
// }
|
||||
|
||||
},
|
||||
methods: {
|
||||
trigerCollapse (item) {
|
||||
if(this.getMenuSever[item.id].length>0){
|
||||
|
||||
item.show = !item.show
|
||||
}
|
||||
},
|
||||
// getshop () {
|
||||
// let severList= []
|
||||
// this.revenueMode.map(el => {
|
||||
|
||||
// let u = severList.find(c=> {return c.name===el.SERVERPARTNAME})
|
||||
// if (!u) {
|
||||
|
||||
// severList.push({
|
||||
// SERVERPART_ID: el.SERVERPART_ID,
|
||||
// name: el.SERVERPARTNAME,
|
||||
// child: [{
|
||||
// id: el.SERVERPARTSHOP_ID,
|
||||
// name: el.SHOPNAME
|
||||
// }]
|
||||
// })
|
||||
// }else {
|
||||
// u.child.push({
|
||||
// id: el.SERVERPARTSHOP_ID,
|
||||
// name: el.SHOPNAME
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
// this.severList = severList
|
||||
// }
|
||||
},
|
||||
created() {
|
||||
|
||||
// this.getshop()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mr20 {
|
||||
margin-right: 24rpx;
|
||||
}
|
||||
.show-title {
|
||||
padding: 20upx;
|
||||
font-weight: 500;
|
||||
}
|
||||
.show-detail {
|
||||
background-color: #f1f1f1;
|
||||
padding: 16upx 32upx;
|
||||
}
|
||||
.detail-title {
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
|
||||
}
|
||||
.detail-shop {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
margin: 8upx 0 16upx 0;
|
||||
}
|
||||
.shop-name {
|
||||
margin: 8upx 14upx 8upx 0;
|
||||
background-color: #fff;
|
||||
display: block;
|
||||
padding: 8upx 16upx;
|
||||
border-radius: 4upx;
|
||||
font-size: 12px;
|
||||
color: #696969;
|
||||
}
|
||||
.uni-card {
|
||||
margin: 0;
|
||||
}
|
||||
.uni-list-cell-navigate.uni-active ,.uni-list-cell-hover{
|
||||
background-color: #fff;
|
||||
color: #6293e1;
|
||||
}
|
||||
/* .uni-list:before {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
.uni-list-cell:after,.uni-list:after {
|
||||
background-color: #efefef;
|
||||
} */
|
||||
.ico-images {
|
||||
width: 62rpx;
|
||||
height: 62rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.ico-spsp {
|
||||
background-image: url(/static/images/user/spsp.png);
|
||||
}
|
||||
.ico-sjjy {
|
||||
background-image: url(/static/images/user/sjjy.png);
|
||||
}
|
||||
.ico-cwbx {
|
||||
background-image: url(/static/images/user/cwbx.png);
|
||||
|
||||
}
|
||||
.ico-myshop {
|
||||
background-image: url(/static/images/user/myshop.png);
|
||||
}
|
||||
.ico-ndhz {
|
||||
background-image: url(/static/images/user/ndhz.png);
|
||||
}
|
||||
.ico-tsjy {
|
||||
background-image: url(/static/images/user/tsjy.png);
|
||||
}
|
||||
.ico-mrys {
|
||||
background-image: url(/static/images/user/mrys.png);
|
||||
}
|
||||
.ico-zbtb {
|
||||
background-image: url(/static/images/user/zbtb.png);
|
||||
}
|
||||
.ico-zdsgl {
|
||||
background-image: url(/static/images/user/zdsgl.png);
|
||||
}
|
||||
.ico-qjt {
|
||||
background-image: url(/static/images/user/qjt.png);
|
||||
}
|
||||
.ico-zdshz {
|
||||
background-image: url(/static/images/user/zdshz.png);
|
||||
}
|
||||
.ico-spsp,
|
||||
.ico-sjjy,
|
||||
.ico-cwbx,
|
||||
.ico-myshop,
|
||||
.ico-ndhz,
|
||||
.ico-tsjy,
|
||||
.ico-zbtb,
|
||||
.ico-zdsgl,
|
||||
.ico-qjt,
|
||||
.ico-mrys,
|
||||
.ico-zdshz{
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
margin-right: 16upx;
|
||||
background-size: contain;
|
||||
width: 62upx;
|
||||
height: 62upx;
|
||||
}
|
||||
</style>
|
||||
BIN
static/images/authority/serverpart.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
static/images/authority/shop.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
static/images/index/qxsp-no.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
static/images/index/qxsp.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
static/images/revenue/date-ico-red.png
Normal file
|
After Width: | Height: | Size: 464 B |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 893 B |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
189
uni_modules/qiun-data-charts/changelog.md
Normal file
@ -0,0 +1,189 @@
|
||||
## 2.3.7-20220122(2022-01-22)
|
||||
## 重要!使用vue3编译,请使用cli模式并升级至最新依赖,HbuilderX编译需要使用3.3.8以上版本
|
||||
- uCharts.js 修复uni-app平台组件模式使用vue3编译到小程序报错的bug。
|
||||
## 2.3.7-20220118(2022-01-18)
|
||||
## 注意,使用vue3的前提是需要3.3.8.20220114-alpha版本的HBuilder!
|
||||
## 2.3.67-20220118(2022-01-18)
|
||||
- 秋云图表组件 组件初步支持vue3,全端编译会有些问题,具体详见下面修改:
|
||||
1. 小程序端运行时,在uni_modules文件夹的qiun-data-charts.js中搜索 new uni_modules_qiunDataCharts_js_sdk_uCharts_uCharts.uCharts,将.uCharts去掉。
|
||||
2. 小程序端发行时,在uni_modules文件夹的qiun-data-charts.js中搜索 new e.uCharts,将.uCharts去掉,变为 new e。
|
||||
3. 如果觉得上述步骤比较麻烦,如果您的项目只编译到小程序端,可以修改u-charts.js最后一行导出方式,将 export default uCharts;变更为 export default { uCharts: uCharts }; 这样变更后,H5和App端的renderjs会有问题,请开发者自行选择。(此问题非组件问题,请等待DC官方修复Vue3的小程序端)
|
||||
## 2.3.6-20220111(2022-01-11)
|
||||
- 秋云图表组件 修改组件 props 属性中的 background 默认值为 rgba(0,0,0,0)
|
||||
## 2.3.6-20211201(2021-12-01)
|
||||
- uCharts.js 修复bar条状图开启圆角模式时,值很小时圆角渲染错误的bug
|
||||
## 2.3.5-20211014(2021-10-15)
|
||||
- uCharts.js 增加vue3的编译支持(仅原生uCharts,qiun-data-charts组件后续会支持,请关注更新)
|
||||
## 2.3.4-20211012(2021-10-12)
|
||||
- 秋云图表组件 修复 mac os x 系统 mouseover 事件丢失的 bug
|
||||
## 2.3.3-20210706(2021-07-06)
|
||||
- uCharts.js 增加雷达图开启数据点值(opts.dataLabel)的显示
|
||||
## 2.3.2-20210627(2021-06-27)
|
||||
- 秋云图表组件 修复tooltipCustom个别情况下传值不正确报错TypeError: Cannot read property 'name' of undefined的bug
|
||||
## 2.3.1-20210616(2021-06-16)
|
||||
- uCharts.js 修复圆角柱状图使用4角圆角时,当数值过大时不正确的bug
|
||||
## 2.3.0-20210612(2021-06-12)
|
||||
- uCharts.js 【重要】uCharts增加nvue兼容,可在nvue项目中使用gcanvas组件渲染uCharts,[详见码云uCharts-demo-nvue](https://gitee.com/uCharts/uCharts)
|
||||
- 秋云图表组件 增加tapLegend属性,是否开启图例点击交互事件
|
||||
- 秋云图表组件 getIndex事件中增加返回uCharts实例中的opts参数,以便在页面中调用参数
|
||||
- 示例项目 pages/other/other.vue增加app端自定义tooltip的方法,详见showOptsTooltip方法
|
||||
## 2.2.1-20210603(2021-06-03)
|
||||
- uCharts.js 修复饼图、圆环图、玫瑰图,当起始角度不为0时,tooltip位置不准确的bug
|
||||
- uCharts.js 增加温度计式柱状图开启顶部半圆形的配置
|
||||
## 2.2.0-20210529(2021-05-29)
|
||||
- uCharts.js 增加条状图type="bar"
|
||||
- 示例项目 pages/ucharts/ucharts.vue增加条状图的demo
|
||||
## 2.1.7-20210524(2021-05-24)
|
||||
- uCharts.js 修复大数据量模式下曲线图不平滑的bug
|
||||
## 2.1.6-20210523(2021-05-23)
|
||||
- 秋云图表组件 修复小程序端开启滚动条更新数据后滚动条位置不符合预期的bug
|
||||
## 2.1.5-2021051702(2021-05-17)
|
||||
- uCharts.js 修复自定义Y轴min和max值为0时不能正确显示的bug
|
||||
## 2.1.5-20210517(2021-05-17)
|
||||
- uCharts.js 修复Y轴自定义min和max时,未按指定的最大值最小值显示坐标轴刻度的bug
|
||||
## 2.1.4-20210516(2021-05-16)
|
||||
- 秋云图表组件 优化onWindowResize防抖方法
|
||||
- 秋云图表组件 修复APP端uCharts更新数据时,清空series显示loading图标后再显示图表,图表抖动的bug
|
||||
- uCharts.js 修复开启canvas2d后,x轴、y轴、series自定义字体大小未按比例缩放的bug
|
||||
- 示例项目 修复format-e.vue拼写错误导致app端使用uCharts渲染图表
|
||||
## 2.1.3-20210513(2021-05-13)
|
||||
- 秋云图表组件 修改uCharts变更chartData数据为updateData方法,支持带滚动条的数据动态打点
|
||||
- 秋云图表组件 增加onWindowResize防抖方法 fix by ど誓言,如尘般染指流年づ
|
||||
- 秋云图表组件 H5或者APP变更chartData数据显示loading图表时,原数据闪现的bug
|
||||
- 秋云图表组件 props增加errorReload禁用错误点击重新加载的方法
|
||||
- uCharts.js 增加tooltip显示category(x轴对应点位)标题的功能,opts.extra.tooltip.showCategory,默认为false
|
||||
- uCharts.js 修复mix混合图只有柱状图时,tooltip的分割线显示位置不正确的bug
|
||||
- uCharts.js 修复开启滚动条,图表在拖动中动态打点,滚动条位置不正确的bug
|
||||
- uCharts.js 修复饼图类数据格式为echarts数据格式,series为空数组报错的bug
|
||||
- 示例项目 修改uCharts.js更新到v2.1.2版本后,@getIndex方法获取索引值变更为e.currentIndex.index
|
||||
- 示例项目 pages/updata/updata.vue增加滚动条拖动更新(数据动态打点)的demo
|
||||
- 示例项目 pages/other/other.vue增加errorReload禁用错误点击重新加载的demo
|
||||
## 2.1.2-20210509(2021-05-09)
|
||||
秋云图表组件 修复APP端初始化时就传入chartData或lacaldata不显示图表的bug
|
||||
## 2.1.1-20210509(2021-05-09)
|
||||
- 秋云图表组件 变更ECharts的eopts配置在renderjs内执行,支持在config-echarts.js配置文件内写function配置。
|
||||
- 秋云图表组件 修复APP端报错Prop being mutated: "onmouse"错误的bug。
|
||||
- 秋云图表组件 修复APP端报错Error: Not Found:Page[6][-1,27] at view.umd.min.js:1的bug。
|
||||
## 2.1.0-20210507(2021-05-07)
|
||||
- 秋云图表组件 修复初始化时就有数据或者数据更新的时候loading加载动画闪动的bug
|
||||
- uCharts.js 修复x轴format方法categories为字符串类型时返回NaN的bug
|
||||
- uCharts.js 修复series.textColor、legend.fontColor未执行全局默认颜色的bug
|
||||
## 2.1.0-20210506(2021-05-06)
|
||||
- 秋云图表组件 修复极个别情况下报错item.properties undefined的bug
|
||||
- 秋云图表组件 修复极个别情况下关闭加载动画reshow不起作用,无法显示图表的bug
|
||||
- 示例项目 pages/ucharts/ucharts.vue 增加时间轴折线图(type="tline")、时间轴区域图(type="tarea")、散点图(type="scatter")、气泡图demo(type="bubble")、倒三角形漏斗图(opts.extra.funnel.type="triangle")、金字塔形漏斗图(opts.extra.funnel.type="pyramid")
|
||||
- 示例项目 pages/format-u/format-u.vue 增加X轴format格式化示例
|
||||
- uCharts.js 升级至v2.1.0版本
|
||||
- uCharts.js 修复 玫瑰图面积模式点击tooltip位置不正确的bug
|
||||
- uCharts.js 修复 玫瑰图点击图例,只剩一个类别显示空白的bug
|
||||
- uCharts.js 修复 饼图类图点击图例,其他图表tooltip位置某些情况下不准的bug
|
||||
- uCharts.js 修复 x轴为矢量轴(时间轴)情况下,点击tooltip位置不正确的bug
|
||||
- uCharts.js 修复 词云图获取点击索引偶尔不准的bug
|
||||
- uCharts.js 增加 直角坐标系图表X轴format格式化方法(原生uCharts.js用法请使用formatter)
|
||||
- uCharts.js 增加 漏斗图扩展配置,倒三角形(opts.extra.funnel.type="triangle"),金字塔形(opts.extra.funnel.type="pyramid")
|
||||
- uCharts.js 增加 散点图(opts.type="scatter")、气泡图(opts.type="bubble")
|
||||
- 后期计划 完善散点图、气泡图,增加markPoints标记点,增加横向条状图。
|
||||
## 2.0.0-20210502(2021-05-02)
|
||||
- uCharts.js 修复词云图获取点击索引不正确的bug
|
||||
## 2.0.0-20210501(2021-05-01)
|
||||
- 秋云图表组件 修复QQ小程序、百度小程序在关闭动画效果情况下,v-for循环使用图表,显示不正确的bug
|
||||
## 2.0.0-20210426(2021-04-26)
|
||||
- 秋云图表组件 修复QQ小程序不支持canvas2d的bug
|
||||
- 秋云图表组件 修复钉钉小程序某些情况点击坐标计算错误的bug
|
||||
- uCharts.js 增加 extra.column.categoryGap 参数,柱状图类每个category点位(X轴点)柱子组之间的间距
|
||||
- uCharts.js 增加 yAxis.data[i].titleOffsetY 参数,标题纵向偏移距离,负数为向上偏移,正数向下偏移
|
||||
- uCharts.js 增加 yAxis.data[i].titleOffsetX 参数,标题横向偏移距离,负数为向左偏移,正数向右偏移
|
||||
- uCharts.js 增加 extra.gauge.labelOffset 参数,仪表盘标签文字径向便宜距离,默认13px
|
||||
## 2.0.0-20210422-2(2021-04-22)
|
||||
秋云图表组件 修复 formatterAssign 未判断 args[key] == null 的情况导致栈溢出的 bug
|
||||
## 2.0.0-20210422(2021-04-22)
|
||||
- 秋云图表组件 修复H5、APP、支付宝小程序、微信小程序canvas2d模式下横屏模式的bug
|
||||
## 2.0.0-20210421(2021-04-21)
|
||||
- uCharts.js 修复多行图例的情况下,图例在上方或者下方时,图例float为左侧或者右侧时,第二行及以后的图例对齐方式不正确的bug
|
||||
## 2.0.0-20210420(2021-04-20)
|
||||
- 秋云图表组件 修复微信小程序开启canvas2d模式后,windows版微信小程序不支持canvas2d模式的bug
|
||||
- 秋云图表组件 修改非uni_modules版本为v2.0版本qiun-data-charts组件
|
||||
## 2.0.0-20210419(2021-04-19)
|
||||
## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
|
||||
## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,如仍不好用,请重启电脑;
|
||||
## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
|
||||
## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
|
||||
## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
|
||||
## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font>
|
||||
## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
- uCharts.js 修复混合图中柱状图单独设置颜色不生效的bug
|
||||
- uCharts.js 修复多Y轴单独设置fontSize时,开启canvas2d后,未对应放大字体的bug
|
||||
## 2.0.0-20210418(2021-04-18)
|
||||
- 秋云图表组件 增加directory配置,修复H5端history模式下如果发布到二级目录无法正确加载echarts.min.js的bug
|
||||
## 2.0.0-20210416(2021-04-16)
|
||||
## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
|
||||
## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,如仍不好用,请重启电脑;
|
||||
## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
|
||||
## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
|
||||
## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
|
||||
## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font>
|
||||
## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
- 秋云图表组件 修复APP端某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员
|
||||
- 示例项目 修复APP端v-for循环某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员
|
||||
- uCharts.js 修复非直角坐标系tooltip提示窗右侧超出未变换方向显示的bug
|
||||
## 2.0.0-20210415(2021-04-15)
|
||||
- 秋云图表组件 修复H5端发布到二级目录下echarts无法加载的bug
|
||||
- 秋云图表组件 修复某些情况下echarts.off('finished')移除监听事件报错的bug
|
||||
## 2.0.0-20210414(2021-04-14)
|
||||
## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
|
||||
## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,如仍不好用,请重启电脑;
|
||||
## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
|
||||
## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
|
||||
## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
|
||||
## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font>
|
||||
## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
- 秋云图表组件 修复H5端在cli项目下ECharts引用地址错误的bug
|
||||
- 示例项目 增加ECharts的formatter用法的示例(详见示例项目format-e.vue)
|
||||
- uCharts.js 增加圆环图中心背景色的配置extra.ring.centerColor
|
||||
- uCharts.js 修复微信小程序安卓端柱状图开启透明色后显示不正确的bug
|
||||
## 2.0.0-20210413(2021-04-13)
|
||||
- 秋云图表组件 修复百度小程序多个图表真机未能正确获取根元素dom尺寸的bug
|
||||
- 秋云图表组件 修复百度小程序横屏模式方向不正确的bug
|
||||
- 秋云图表组件 修改ontouch时,@getTouchStart@getTouchMove@getTouchEnd的触发条件
|
||||
- uCharts.js 修复饼图类数据格式series属性不生效的bug
|
||||
- uCharts.js 增加时序区域图 详见示例项目中ucharts.vue
|
||||
## 2.0.0-20210412-2(2021-04-12)
|
||||
## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
|
||||
## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX。如仍不好用,请重启电脑,此问题已于DCloud官方确认,HBuilderX下个版本会修复。
|
||||
## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
- 秋云图表组件 修复uCharts在APP端横屏模式下不能正确渲染的bug
|
||||
- 示例项目 增加ECharts柱状图渐变色、圆角柱状图、横向柱状图(条状图)的示例
|
||||
## 2.0.0-20210412(2021-04-12)
|
||||
- 秋云图表组件 修复created中判断echarts导致APP端无法识别,改回mounted中判断echarts初始化
|
||||
- uCharts.js 修复2d模式下series.textOffset未乘像素比的bug
|
||||
## 2.0.0-20210411(2021-04-11)
|
||||
## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
|
||||
## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,并清空小程序开发者工具缓存。
|
||||
## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
- uCharts.js 折线图区域图增加connectNulls断点续连的功能,详见示例项目中ucharts.vue
|
||||
- 秋云图表组件 变更初始化方法为created,变更type2d默认值为true,优化2d模式下组件初始化后dom获取不到的bug
|
||||
- 秋云图表组件 修复左右布局时,右侧图表点击坐标错误的bug,修复tooltip柱状图自定义颜色显示object的bug
|
||||
## 2.0.0-20210410(2021-04-10)
|
||||
- 修复左右布局时,右侧图表点击坐标错误的bug,修复柱状图自定义颜色tooltip显示object的bug
|
||||
- 增加标记线及柱状图自定义颜色的demo
|
||||
## 2.0.0-20210409(2021-04-08)
|
||||
## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
- uCharts.js 修复钉钉小程序百度小程序measureText不准确的bug,修复2d模式下饼图类activeRadius为按比例放大的bug
|
||||
- 修复组件在支付宝小程序端点击位置不准确的bug
|
||||
## 2.0.0-20210408(2021-04-07)
|
||||
- 修复组件在支付宝小程序端不能显示的bug(目前支付宝小程不能点击交互,后续修复)
|
||||
- uCharts.js 修复高分屏下柱状图类,圆弧进度条 自定义宽度不能按比例放大的bug
|
||||
## 2.0.0-20210407(2021-04-06)
|
||||
## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## 增加 通过tofix和unit快速格式化y轴的demo add by `howcode`
|
||||
## 增加 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
## 2.0.0-20210406(2021-04-05)
|
||||
# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页
|
||||
## 2.0.0(2021-04-05)
|
||||
# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页
|
||||
@ -0,0 +1,176 @@
|
||||
<template>
|
||||
<view class="container loading1">
|
||||
<view class="shape shape1"></view>
|
||||
<view class="shape shape2"></view>
|
||||
<view class="shape shape3"></view>
|
||||
<view class="shape shape4"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'loading1',
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped="true">
|
||||
.container {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.container.loading1 {
|
||||
-webkit-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.container .shape {
|
||||
position: absolute;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
|
||||
.container .shape.shape1 {
|
||||
left: 0;
|
||||
background-color: #1890FF;
|
||||
}
|
||||
|
||||
.container .shape.shape2 {
|
||||
right: 0;
|
||||
background-color: #91CB74;
|
||||
}
|
||||
|
||||
.container .shape.shape3 {
|
||||
bottom: 0;
|
||||
background-color: #FAC858;
|
||||
}
|
||||
|
||||
.container .shape.shape4 {
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: #EE6666;
|
||||
}
|
||||
|
||||
.loading1 .shape1 {
|
||||
-webkit-animation: animation1shape1 0.5s ease 0s infinite alternate;
|
||||
animation: animation1shape1 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation1shape1 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(16px, 16px);
|
||||
transform: translate(16px, 16px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation1shape1 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(16px, 16px);
|
||||
transform: translate(16px, 16px);
|
||||
}
|
||||
}
|
||||
|
||||
.loading1 .shape2 {
|
||||
-webkit-animation: animation1shape2 0.5s ease 0s infinite alternate;
|
||||
animation: animation1shape2 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation1shape2 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(-16px, 16px);
|
||||
transform: translate(-16px, 16px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation1shape2 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(-16px, 16px);
|
||||
transform: translate(-16px, 16px);
|
||||
}
|
||||
}
|
||||
|
||||
.loading1 .shape3 {
|
||||
-webkit-animation: animation1shape3 0.5s ease 0s infinite alternate;
|
||||
animation: animation1shape3 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation1shape3 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(16px, -16px);
|
||||
transform: translate(16px, -16px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation1shape3 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(16px, -16px);
|
||||
transform: translate(16px, -16px);
|
||||
}
|
||||
}
|
||||
|
||||
.loading1 .shape4 {
|
||||
-webkit-animation: animation1shape4 0.5s ease 0s infinite alternate;
|
||||
animation: animation1shape4 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation1shape4 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(-16px, -16px);
|
||||
transform: translate(-16px, -16px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation1shape4 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
to {
|
||||
-webkit-transform: translate(-16px, -16px);
|
||||
transform: translate(-16px, -16px);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,170 @@
|
||||
<template>
|
||||
<view class="container loading2">
|
||||
<view class="shape shape1"></view>
|
||||
<view class="shape shape2"></view>
|
||||
<view class="shape shape3"></view>
|
||||
<view class="shape shape4"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'loading2',
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped="true">
|
||||
.container {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.container.loading2 {
|
||||
-webkit-transform: rotate(10deg);
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
.container.loading2 .shape {
|
||||
border-radius: 5px;
|
||||
}
|
||||
.container.loading2{
|
||||
-webkit-animation: rotation 1s infinite;
|
||||
animation: rotation 1s infinite;
|
||||
}
|
||||
|
||||
.container .shape {
|
||||
position: absolute;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
.container .shape.shape1 {
|
||||
left: 0;
|
||||
background-color: #6B96F8;
|
||||
}
|
||||
.container .shape.shape2 {
|
||||
right: 0;
|
||||
background-color: #6BDBAB;
|
||||
}
|
||||
.container .shape.shape3 {
|
||||
bottom: 0;
|
||||
background-color: #F6B760;
|
||||
}
|
||||
.container .shape.shape4 {
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: #677798;
|
||||
}
|
||||
|
||||
|
||||
.loading2 .shape1 {
|
||||
-webkit-animation: animation2shape1 0.5s ease 0s infinite alternate;
|
||||
animation: animation2shape1 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation2shape1 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(20px, 20px);
|
||||
transform: translate(20px, 20px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation2shape1 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(20px, 20px);
|
||||
transform: translate(20px, 20px);
|
||||
}
|
||||
}
|
||||
.loading2 .shape2 {
|
||||
-webkit-animation: animation2shape2 0.5s ease 0s infinite alternate;
|
||||
animation: animation2shape2 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation2shape2 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-20px, 20px);
|
||||
transform: translate(-20px, 20px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation2shape2 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-20px, 20px);
|
||||
transform: translate(-20px, 20px);
|
||||
}
|
||||
}
|
||||
.loading2 .shape3 {
|
||||
-webkit-animation: animation2shape3 0.5s ease 0s infinite alternate;
|
||||
animation: animation2shape3 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation2shape3 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(20px, -20px);
|
||||
transform: translate(20px, -20px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation2shape3 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(20px, -20px);
|
||||
transform: translate(20px, -20px);
|
||||
}
|
||||
}
|
||||
.loading2 .shape4 {
|
||||
-webkit-animation: animation2shape4 0.5s ease 0s infinite alternate;
|
||||
animation: animation2shape4 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation2shape4 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-20px, -20px);
|
||||
transform: translate(-20px, -20px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation2shape4 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-20px, -20px);
|
||||
transform: translate(-20px, -20px);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,173 @@
|
||||
<template>
|
||||
<view class="container loading3">
|
||||
<view class="shape shape1"></view>
|
||||
<view class="shape shape2"></view>
|
||||
<view class="shape shape3"></view>
|
||||
<view class="shape shape4"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'loading3',
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped="true">
|
||||
.container {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.container.loading3 {
|
||||
-webkit-animation: rotation 1s infinite;
|
||||
animation: rotation 1s infinite;
|
||||
}
|
||||
.container.loading3 .shape1 {
|
||||
border-top-left-radius: 10px;
|
||||
}
|
||||
.container.loading3 .shape2 {
|
||||
border-top-right-radius: 10px;
|
||||
}
|
||||
.container.loading3 .shape3 {
|
||||
border-bottom-left-radius: 10px;
|
||||
}
|
||||
.container.loading3 .shape4 {
|
||||
border-bottom-right-radius: 10px;
|
||||
}
|
||||
|
||||
.container .shape {
|
||||
position: absolute;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
.container .shape.shape1 {
|
||||
left: 0;
|
||||
background-color: #1890FF;
|
||||
}
|
||||
.container .shape.shape2 {
|
||||
right: 0;
|
||||
background-color: #91CB74;
|
||||
}
|
||||
.container .shape.shape3 {
|
||||
bottom: 0;
|
||||
background-color: #FAC858;
|
||||
}
|
||||
.container .shape.shape4 {
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: #EE6666;
|
||||
}
|
||||
|
||||
.loading3 .shape1 {
|
||||
-webkit-animation: animation3shape1 0.5s ease 0s infinite alternate;
|
||||
animation: animation3shape1 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation3shape1 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(5px, 5px);
|
||||
transform: translate(5px, 5px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation3shape1 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(5px, 5px);
|
||||
transform: translate(5px, 5px);
|
||||
}
|
||||
}
|
||||
.loading3 .shape2 {
|
||||
-webkit-animation: animation3shape2 0.5s ease 0s infinite alternate;
|
||||
animation: animation3shape2 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation3shape2 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-5px, 5px);
|
||||
transform: translate(-5px, 5px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation3shape2 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-5px, 5px);
|
||||
transform: translate(-5px, 5px);
|
||||
}
|
||||
}
|
||||
.loading3 .shape3 {
|
||||
-webkit-animation: animation3shape3 0.5s ease 0s infinite alternate;
|
||||
animation: animation3shape3 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation3shape3 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(5px, -5px);
|
||||
transform: translate(5px, -5px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation3shape3 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(5px, -5px);
|
||||
transform: translate(5px, -5px);
|
||||
}
|
||||
}
|
||||
.loading3 .shape4 {
|
||||
-webkit-animation: animation3shape4 0.5s ease 0s infinite alternate;
|
||||
animation: animation3shape4 0.5s ease 0s infinite alternate;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation3shape4 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-5px, -5px);
|
||||
transform: translate(-5px, -5px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation3shape4 {
|
||||
from {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: translate(-5px, -5px);
|
||||
transform: translate(-5px, -5px);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,222 @@
|
||||
<template>
|
||||
<view class="container loading5">
|
||||
<view class="shape shape1"></view>
|
||||
<view class="shape shape2"></view>
|
||||
<view class="shape shape3"></view>
|
||||
<view class="shape shape4"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'loading5',
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped="true">
|
||||
.container {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.container.loading5 .shape {
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
}
|
||||
|
||||
.container .shape {
|
||||
position: absolute;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
.container .shape.shape1 {
|
||||
left: 0;
|
||||
background-color: #1890FF;
|
||||
}
|
||||
.container .shape.shape2 {
|
||||
right: 0;
|
||||
background-color: #91CB74;
|
||||
}
|
||||
.container .shape.shape3 {
|
||||
bottom: 0;
|
||||
background-color: #FAC858;
|
||||
}
|
||||
.container .shape.shape4 {
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: #EE6666;
|
||||
}
|
||||
|
||||
.loading5 .shape1 {
|
||||
animation: animation5shape1 2s ease 0s infinite reverse;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation5shape1 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, 15px);
|
||||
transform: translate(0, 15px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(15px, 15px);
|
||||
transform: translate(15px, 15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(15px, 0);
|
||||
transform: translate(15px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation5shape1 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, 15px);
|
||||
transform: translate(0, 15px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(15px, 15px);
|
||||
transform: translate(15px, 15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(15px, 0);
|
||||
transform: translate(15px, 0);
|
||||
}
|
||||
}
|
||||
.loading5 .shape2 {
|
||||
animation: animation5shape2 2s ease 0s infinite reverse;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation5shape2 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(-15px, 0);
|
||||
transform: translate(-15px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-15px, 15px);
|
||||
transform: translate(-15px, 15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, 15px);
|
||||
transform: translate(0, 15px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation5shape2 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(-15px, 0);
|
||||
transform: translate(-15px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-15px, 15px);
|
||||
transform: translate(-15px, 15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, 15px);
|
||||
transform: translate(0, 15px);
|
||||
}
|
||||
}
|
||||
.loading5 .shape3 {
|
||||
animation: animation5shape3 2s ease 0s infinite reverse;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation5shape3 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(15px, 0);
|
||||
transform: translate(15px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(15px, -15px);
|
||||
transform: translate(15px, -15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, -15px);
|
||||
transform: translate(0, -15px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation5shape3 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(15px, 0);
|
||||
transform: translate(15px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(15px, -15px);
|
||||
transform: translate(15px, -15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, -15px);
|
||||
transform: translate(0, -15px);
|
||||
}
|
||||
}
|
||||
.loading5 .shape4 {
|
||||
animation: animation5shape4 2s ease 0s infinite reverse;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation5shape4 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, -15px);
|
||||
transform: translate(0, -15px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-15px, -15px);
|
||||
transform: translate(-15px, -15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(-15px, 0);
|
||||
transform: translate(-15px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation5shape4 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, -15px);
|
||||
transform: translate(0, -15px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-15px, -15px);
|
||||
transform: translate(-15px, -15px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(-15px, 0);
|
||||
transform: translate(-15px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,229 @@
|
||||
<template>
|
||||
<view class="container loading6">
|
||||
<view class="shape shape1"></view>
|
||||
<view class="shape shape2"></view>
|
||||
<view class="shape shape3"></view>
|
||||
<view class="shape shape4"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'loading6',
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped="true">
|
||||
.container {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.container.loading6 {
|
||||
-webkit-animation: rotation 1s infinite;
|
||||
animation: rotation 1s infinite;
|
||||
}
|
||||
.container.loading6 .shape {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.container .shape {
|
||||
position: absolute;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 1px;
|
||||
}
|
||||
.container .shape.shape1 {
|
||||
left: 0;
|
||||
background-color: #1890FF;
|
||||
}
|
||||
.container .shape.shape2 {
|
||||
right: 0;
|
||||
background-color: #91CB74;
|
||||
}
|
||||
.container .shape.shape3 {
|
||||
bottom: 0;
|
||||
background-color: #FAC858;
|
||||
}
|
||||
.container .shape.shape4 {
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background-color: #EE6666;
|
||||
}
|
||||
|
||||
|
||||
.loading6 .shape1 {
|
||||
-webkit-animation: animation6shape1 2s linear 0s infinite normal;
|
||||
animation: animation6shape1 2s linear 0s infinite normal;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation6shape1 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, 18px);
|
||||
transform: translate(0, 18px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(18px, 18px);
|
||||
transform: translate(18px, 18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(18px, 0);
|
||||
transform: translate(18px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation6shape1 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, 18px);
|
||||
transform: translate(0, 18px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(18px, 18px);
|
||||
transform: translate(18px, 18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(18px, 0);
|
||||
transform: translate(18px, 0);
|
||||
}
|
||||
}
|
||||
.loading6 .shape2 {
|
||||
-webkit-animation: animation6shape2 2s linear 0s infinite normal;
|
||||
animation: animation6shape2 2s linear 0s infinite normal;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation6shape2 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(-18px, 0);
|
||||
transform: translate(-18px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-18px, 18px);
|
||||
transform: translate(-18px, 18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, 18px);
|
||||
transform: translate(0, 18px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation6shape2 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(-18px, 0);
|
||||
transform: translate(-18px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-18px, 18px);
|
||||
transform: translate(-18px, 18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, 18px);
|
||||
transform: translate(0, 18px);
|
||||
}
|
||||
}
|
||||
.loading6 .shape3 {
|
||||
-webkit-animation: animation6shape3 2s linear 0s infinite normal;
|
||||
animation: animation6shape3 2s linear 0s infinite normal;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation6shape3 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(18px, 0);
|
||||
transform: translate(18px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(18px, -18px);
|
||||
transform: translate(18px, -18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, -18px);
|
||||
transform: translate(0, -18px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation6shape3 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(18px, 0);
|
||||
transform: translate(18px, 0);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(18px, -18px);
|
||||
transform: translate(18px, -18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(0, -18px);
|
||||
transform: translate(0, -18px);
|
||||
}
|
||||
}
|
||||
.loading6 .shape4 {
|
||||
-webkit-animation: animation6shape4 2s linear 0s infinite normal;
|
||||
animation: animation6shape4 2s linear 0s infinite normal;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animation6shape4 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, -18px);
|
||||
transform: translate(0, -18px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-18px, -18px);
|
||||
transform: translate(-18px, -18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(-18px, 0);
|
||||
transform: translate(-18px, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animation6shape4 {
|
||||
0% {
|
||||
-webkit-transform: translate(0, 0);
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
25% {
|
||||
-webkit-transform: translate(0, -18px);
|
||||
transform: translate(0, -18px);
|
||||
}
|
||||
50% {
|
||||
-webkit-transform: translate(-18px, -18px);
|
||||
transform: translate(-18px, -18px);
|
||||
}
|
||||
75% {
|
||||
-webkit-transform: translate(-18px, 0);
|
||||
transform: translate(-18px, 0);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,36 @@
|
||||
<template>
|
||||
<view>
|
||||
<Loading1 v-if="loadingType==1"/>
|
||||
<Loading2 v-if="loadingType==2"/>
|
||||
<Loading3 v-if="loadingType==3"/>
|
||||
<Loading4 v-if="loadingType==4"/>
|
||||
<Loading5 v-if="loadingType==5"/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Loading1 from "./loading1.vue";
|
||||
import Loading2 from "./loading2.vue";
|
||||
import Loading3 from "./loading3.vue";
|
||||
import Loading4 from "./loading4.vue";
|
||||
import Loading5 from "./loading5.vue";
|
||||
export default {
|
||||
components:{Loading1,Loading2,Loading3,Loading4,Loading5},
|
||||
name: 'qiun-loading',
|
||||
props: {
|
||||
loadingType: {
|
||||
type: Number,
|
||||
default: 2
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
422
uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js
Normal file
@ -0,0 +1,422 @@
|
||||
/*
|
||||
* uCharts®
|
||||
* 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台
|
||||
* Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
|
||||
* Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
* 复制使用请保留本段注释,感谢支持开源!
|
||||
*
|
||||
* uCharts®官方网站
|
||||
* https://www.uCharts.cn
|
||||
*
|
||||
* 开源地址:
|
||||
* https://gitee.com/uCharts/uCharts
|
||||
*
|
||||
* uni-app插件市场地址:
|
||||
* http://ext.dcloud.net.cn/plugin?id=271
|
||||
*
|
||||
*/
|
||||
|
||||
// 通用配置项
|
||||
|
||||
// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性
|
||||
const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
|
||||
|
||||
const cfe = {
|
||||
//demotype为自定义图表类型
|
||||
"type": ["pie", "ring", "rose", "funnel", "line", "column", "area", "radar", "gauge","candle","demotype"],
|
||||
//增加自定义图表类型,如果需要categories,请在这里加入您的图表类型例如最后的"demotype"
|
||||
"categories": ["line", "column", "area", "radar", "gauge", "candle","demotype"],
|
||||
//instance为实例变量承载属性,option为eopts承载属性,不要删除
|
||||
"instance": {},
|
||||
"option": {},
|
||||
//下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
|
||||
"formatter":{
|
||||
"tooltipDemo1":function(res){
|
||||
let result = ''
|
||||
for (let i in res) {
|
||||
if (i == 0) {
|
||||
result += res[i].axisValueLabel + '年销售额'
|
||||
}
|
||||
let value = '--'
|
||||
if (res[i].data !== null) {
|
||||
value = res[i].data
|
||||
}
|
||||
// #ifdef H5
|
||||
result += '\n' + res[i].seriesName + ':' + value + ' 万元'
|
||||
// #endif
|
||||
|
||||
// #ifdef APP-PLUS
|
||||
result += '<br/>' + res[i].marker + res[i].seriesName + ':' + value + ' 万元'
|
||||
// #endif
|
||||
}
|
||||
return result;
|
||||
},
|
||||
legendFormat:function(name){
|
||||
return "自定义图例+"+name;
|
||||
},
|
||||
yAxisFormatDemo:function (value, index) {
|
||||
return value + '元';
|
||||
},
|
||||
seriesFormatDemo:function(res){
|
||||
return res.name + '年' + res.value + '元';
|
||||
}
|
||||
},
|
||||
//这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在eopts参数,会将demotype与eopts中option合并后渲染图表。
|
||||
"demotype":{
|
||||
"color": color,
|
||||
//在这里填写echarts的option即可
|
||||
|
||||
},
|
||||
//下面是自定义配置,请添加项目所需的通用配置
|
||||
"column": {
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": 'axis'
|
||||
},
|
||||
"grid": {
|
||||
"top": 30,
|
||||
"bottom": 50,
|
||||
"right": 15,
|
||||
"left": 40
|
||||
},
|
||||
"legend": {
|
||||
"bottom": 'left',
|
||||
},
|
||||
"toolbox": {
|
||||
"show": false,
|
||||
},
|
||||
"xAxis": {
|
||||
"type": 'category',
|
||||
"axisLabel": {
|
||||
"color": '#666666'
|
||||
},
|
||||
"axisLine": {
|
||||
"lineStyle": {
|
||||
"color": '#CCCCCC'
|
||||
}
|
||||
},
|
||||
"boundaryGap": true,
|
||||
"data": []
|
||||
},
|
||||
"yAxis": {
|
||||
"type": 'value',
|
||||
"axisTick": {
|
||||
"show": false,
|
||||
},
|
||||
"axisLabel": {
|
||||
"color": '#666666'
|
||||
},
|
||||
"axisLine": {
|
||||
"lineStyle": {
|
||||
"color": '#CCCCCC'
|
||||
}
|
||||
},
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'bar',
|
||||
"data": [],
|
||||
"barwidth": 20,
|
||||
"label": {
|
||||
"show": true,
|
||||
"color": "#666666",
|
||||
"position": 'top',
|
||||
},
|
||||
},
|
||||
},
|
||||
"line": {
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": 'axis'
|
||||
},
|
||||
"grid": {
|
||||
"top": 30,
|
||||
"bottom": 50,
|
||||
"right": 15,
|
||||
"left": 40
|
||||
},
|
||||
"legend": {
|
||||
"bottom": 'left',
|
||||
},
|
||||
"toolbox": {
|
||||
"show": false,
|
||||
},
|
||||
"xAxis": {
|
||||
"type": 'category',
|
||||
"axisLabel": {
|
||||
"color": '#666666'
|
||||
},
|
||||
"axisLine": {
|
||||
"lineStyle": {
|
||||
"color": '#CCCCCC'
|
||||
}
|
||||
},
|
||||
"boundaryGap": true,
|
||||
"data": []
|
||||
},
|
||||
"yAxis": {
|
||||
"type": 'value',
|
||||
"axisTick": {
|
||||
"show": false,
|
||||
},
|
||||
"axisLabel": {
|
||||
"color": '#666666'
|
||||
},
|
||||
"axisLine": {
|
||||
"lineStyle": {
|
||||
"color": '#CCCCCC'
|
||||
}
|
||||
},
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'line',
|
||||
"data": [],
|
||||
"barwidth": 20,
|
||||
"label": {
|
||||
"show": true,
|
||||
"color": "#666666",
|
||||
"position": 'top',
|
||||
},
|
||||
},
|
||||
},
|
||||
"area": {
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": 'axis'
|
||||
},
|
||||
"grid": {
|
||||
"top": 30,
|
||||
"bottom": 50,
|
||||
"right": 15,
|
||||
"left": 40
|
||||
},
|
||||
"legend": {
|
||||
"bottom": 'left',
|
||||
},
|
||||
"toolbox": {
|
||||
"show": false,
|
||||
},
|
||||
"xAxis": {
|
||||
"type": 'category',
|
||||
"axisLabel": {
|
||||
"color": '#666666'
|
||||
},
|
||||
"axisLine": {
|
||||
"lineStyle": {
|
||||
"color": '#CCCCCC'
|
||||
}
|
||||
},
|
||||
"boundaryGap": true,
|
||||
"data": []
|
||||
},
|
||||
"yAxis": {
|
||||
"type": 'value',
|
||||
"axisTick": {
|
||||
"show": false,
|
||||
},
|
||||
"axisLabel": {
|
||||
"color": '#666666'
|
||||
},
|
||||
"axisLine": {
|
||||
"lineStyle": {
|
||||
"color": '#CCCCCC'
|
||||
}
|
||||
},
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'line',
|
||||
"data": [],
|
||||
"areaStyle": {},
|
||||
"label": {
|
||||
"show": true,
|
||||
"color": "#666666",
|
||||
"position": 'top',
|
||||
},
|
||||
},
|
||||
},
|
||||
"pie": {
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": 'item'
|
||||
},
|
||||
"grid": {
|
||||
"top": 40,
|
||||
"bottom": 30,
|
||||
"right": 15,
|
||||
"left": 15
|
||||
},
|
||||
"legend": {
|
||||
"bottom": 'left',
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'pie',
|
||||
"data": [],
|
||||
"radius": '50%',
|
||||
"label": {
|
||||
"show": true,
|
||||
"color": "#666666",
|
||||
"position": 'top',
|
||||
},
|
||||
},
|
||||
},
|
||||
"ring": {
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": 'item'
|
||||
},
|
||||
"grid": {
|
||||
"top": 40,
|
||||
"bottom": 30,
|
||||
"right": 15,
|
||||
"left": 15
|
||||
},
|
||||
"legend": {
|
||||
"bottom": 'left',
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'pie',
|
||||
"data": [],
|
||||
"radius": ['40%', '70%'],
|
||||
"avoidLabelOverlap": false,
|
||||
"label": {
|
||||
"show": true,
|
||||
"color": "#666666",
|
||||
"position": 'top',
|
||||
},
|
||||
"labelLine": {
|
||||
"show": true
|
||||
},
|
||||
},
|
||||
},
|
||||
"rose": {
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": 'item'
|
||||
},
|
||||
"legend": {
|
||||
"top": 'bottom'
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'pie',
|
||||
"data": [],
|
||||
"radius": "55%",
|
||||
"center": ['50%', '50%'],
|
||||
"rosetype": 'area',
|
||||
},
|
||||
},
|
||||
"funnel": {
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"tooltip": {
|
||||
"trigger": 'item',
|
||||
"formatter": "{b} : {c}%"
|
||||
},
|
||||
"legend": {
|
||||
"top": 'bottom'
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'funnel',
|
||||
"left": '10%',
|
||||
"top": 60,
|
||||
"bottom": 60,
|
||||
"width": '80%',
|
||||
"min": 0,
|
||||
"max": 100,
|
||||
"minSize": '0%',
|
||||
"maxSize": '100%',
|
||||
"sort": 'descending',
|
||||
"gap": 2,
|
||||
"label": {
|
||||
"show": true,
|
||||
"position": 'inside'
|
||||
},
|
||||
"labelLine": {
|
||||
"length": 10,
|
||||
"lineStyle": {
|
||||
"width": 1,
|
||||
"type": 'solid'
|
||||
}
|
||||
},
|
||||
"itemStyle": {
|
||||
"bordercolor": '#fff',
|
||||
"borderwidth": 1
|
||||
},
|
||||
"emphasis": {
|
||||
"label": {
|
||||
"fontSize": 20
|
||||
}
|
||||
},
|
||||
"data": [],
|
||||
},
|
||||
},
|
||||
"gauge": {
|
||||
"color": color,
|
||||
"tooltip": {
|
||||
"formatter": '{a} <br/>{b} : {c}%'
|
||||
},
|
||||
"seriesTemplate": {
|
||||
"name": '业务指标',
|
||||
"type": 'gauge',
|
||||
"detail": {"formatter": '{value}%'},
|
||||
"data": [{"value": 50, "name": '完成率'}]
|
||||
},
|
||||
},
|
||||
"candle": {
|
||||
"xAxis": {
|
||||
"data": []
|
||||
},
|
||||
"yAxis": {},
|
||||
"color": color,
|
||||
"title": {
|
||||
"text": ''
|
||||
},
|
||||
"dataZoom": [{
|
||||
"type": 'inside',
|
||||
"xAxisIndex": [0, 1],
|
||||
"start": 10,
|
||||
"end": 100
|
||||
},
|
||||
{
|
||||
"show": true,
|
||||
"xAxisIndex": [0, 1],
|
||||
"type": 'slider',
|
||||
"bottom": 10,
|
||||
"start": 10,
|
||||
"end": 100
|
||||
}
|
||||
],
|
||||
"seriesTemplate": {
|
||||
"name": '',
|
||||
"type": 'k',
|
||||
"data": [],
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export default cfe;
|
||||
582
uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js
Normal file
@ -0,0 +1,582 @@
|
||||
/*
|
||||
* uCharts®
|
||||
* 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台
|
||||
* Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
|
||||
* Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
* 复制使用请保留本段注释,感谢支持开源!
|
||||
*
|
||||
* uCharts®官方网站
|
||||
* https://www.uCharts.cn
|
||||
*
|
||||
* 开源地址:
|
||||
* https://gitee.com/uCharts/uCharts
|
||||
*
|
||||
* uni-app插件市场地址:
|
||||
* http://ext.dcloud.net.cn/plugin?id=271
|
||||
*
|
||||
*/
|
||||
|
||||
// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性
|
||||
const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
|
||||
|
||||
//事件转换函数,主要用作格式化x轴为时间轴,根据需求自行修改
|
||||
const formatDateTime = (timeStamp, returnType)=>{
|
||||
var date = new Date();
|
||||
date.setTime(timeStamp * 1000);
|
||||
var y = date.getFullYear();
|
||||
var m = date.getMonth() + 1;
|
||||
m = m < 10 ? ('0' + m) : m;
|
||||
var d = date.getDate();
|
||||
d = d < 10 ? ('0' + d) : d;
|
||||
var h = date.getHours();
|
||||
h = h < 10 ? ('0' + h) : h;
|
||||
var minute = date.getMinutes();
|
||||
var second = date.getSeconds();
|
||||
minute = minute < 10 ? ('0' + minute) : minute;
|
||||
second = second < 10 ? ('0' + second) : second;
|
||||
if(returnType == 'full'){return y + '-' + m + '-' + d + ' '+ h +':' + minute + ':' + second;}
|
||||
if(returnType == 'y-m-d'){return y + '-' + m + '-' + d;}
|
||||
if(returnType == 'h:m'){return h +':' + minute;}
|
||||
if(returnType == 'h:m:s'){return h +':' + minute +':' + second;}
|
||||
return [y, m, d, h, minute, second];
|
||||
}
|
||||
|
||||
const cfu = {
|
||||
//demotype为自定义图表类型,一般不需要自定义图表类型,只需要改根节点上对应的类型即可
|
||||
"type":["pie","ring","rose","word","funnel","map","arcbar","line","column","bar","area","radar","gauge","candle","mix","tline","tarea","scatter","bubble","demotype"],
|
||||
"range":["饼状图","圆环图","玫瑰图","词云图","漏斗图","地图","圆弧进度条","折线图","柱状图","条状图","区域图","雷达图","仪表盘","K线图","混合图","时间轴折线","时间轴区域","散点图","气泡图","自定义类型"],
|
||||
//增加自定义图表类型,如果需要categories,请在这里加入您的图表类型,例如最后的"demotype"
|
||||
//自定义类型时需要注意"tline","tarea","scatter","bubble"等时间轴(矢量x轴)类图表,没有categories,不需要加入categories
|
||||
"categories":["line","column","bar","area","radar","gauge","candle","mix","demotype"],
|
||||
//instance为实例变量承载属性,不要删除
|
||||
"instance":{},
|
||||
//option为opts及eopts承载属性,不要删除
|
||||
"option":{},
|
||||
//下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
|
||||
"formatter":{
|
||||
"yAxisDemo1":function(val){return val+'元'},
|
||||
"yAxisDemo2":function(val){return val.toFixed(2)},
|
||||
"xAxisDemo1":function(val){return val+'年'},
|
||||
"xAxisDemo2":function(val){return formatDateTime(val,'h:m')},
|
||||
"seriesDemo1":function(val){return val+'元'},
|
||||
"tooltipDemo1":function(item, category, index, opts){
|
||||
if(index==0){
|
||||
return '随便用'+item.data+'年'
|
||||
}else{
|
||||
return '其他我没改'+item.data+'天'
|
||||
}
|
||||
},
|
||||
"pieDemo":function(val, index, series){
|
||||
if(index !== undefined){
|
||||
return series[index].name+':'+series[index].data+'元'
|
||||
}
|
||||
},
|
||||
},
|
||||
//这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在opts参数,会将demotype与opts中option合并后渲染图表。
|
||||
"demotype":{
|
||||
//我这里把曲线图当做了自定义图表类型,您可以根据需要随意指定类型或配置
|
||||
"type": "line",
|
||||
"color": color,
|
||||
"padding": [15,10,0,15],
|
||||
"xAxis": {
|
||||
"disableGrid": true,
|
||||
},
|
||||
"yAxis": {
|
||||
"gridType": "dash",
|
||||
"dashLength": 2,
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"line": {
|
||||
"type": "curve",
|
||||
"width": 2
|
||||
},
|
||||
}
|
||||
},
|
||||
//下面是自定义配置,请添加项目所需的通用配置
|
||||
"pie":{
|
||||
"type": "pie",
|
||||
"color": color,
|
||||
"padding": [5,5,5,5],
|
||||
"extra": {
|
||||
"pie": {
|
||||
"activeOpacity": 0.5,
|
||||
"activeRadius": 10,
|
||||
"offsetAngle": 0,
|
||||
"labelWidth": 15,
|
||||
"border": true,
|
||||
"borderWidth": 3,
|
||||
"borderColor": "#FFFFFF"
|
||||
},
|
||||
}
|
||||
},
|
||||
"ring":{
|
||||
"type": "ring",
|
||||
"color": color,
|
||||
"padding": [5,5,5,5],
|
||||
"rotate": false,
|
||||
"dataLabel": true,
|
||||
"legend": {
|
||||
"show": true,
|
||||
"position": "right",
|
||||
"lineHeight": 25,
|
||||
},
|
||||
"title": {
|
||||
"name": "收益率",
|
||||
"fontSize": 15,
|
||||
"color": "#666666"
|
||||
},
|
||||
"subtitle": {
|
||||
"name": "70%",
|
||||
"fontSize": 25,
|
||||
"color": "#7cb5ec"
|
||||
},
|
||||
"extra": {
|
||||
"ring": {
|
||||
"ringWidth":30,
|
||||
"activeOpacity": 0.5,
|
||||
"activeRadius": 10,
|
||||
"offsetAngle": 0,
|
||||
"labelWidth": 15,
|
||||
"border": true,
|
||||
"borderWidth": 3,
|
||||
"borderColor": "#FFFFFF"
|
||||
},
|
||||
},
|
||||
},
|
||||
"rose":{
|
||||
"type": "rose",
|
||||
"color": color,
|
||||
"padding": [5,5,5,5],
|
||||
"legend": {
|
||||
"show": true,
|
||||
"position": "left",
|
||||
"lineHeight": 25,
|
||||
},
|
||||
"extra": {
|
||||
"rose": {
|
||||
"type": "area",
|
||||
"minRadius": 50,
|
||||
"activeOpacity": 0.5,
|
||||
"activeRadius": 10,
|
||||
"offsetAngle": 0,
|
||||
"labelWidth": 15,
|
||||
"border": false,
|
||||
"borderWidth": 2,
|
||||
"borderColor": "#FFFFFF"
|
||||
},
|
||||
}
|
||||
},
|
||||
"word":{
|
||||
"type": "word",
|
||||
"color": color,
|
||||
"extra": {
|
||||
"word": {
|
||||
"type": "normal",
|
||||
"autoColors": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"funnel":{
|
||||
"type": "funnel",
|
||||
"color": color,
|
||||
"padding": [15,15,0,15],
|
||||
"extra": {
|
||||
"funnel": {
|
||||
"activeOpacity": 0.3,
|
||||
"activeWidth": 10,
|
||||
"border": true,
|
||||
"borderWidth": 2,
|
||||
"borderColor": "#FFFFFF",
|
||||
"fillOpacity": 1,
|
||||
"labelAlign": "right"
|
||||
},
|
||||
}
|
||||
},
|
||||
"map":{
|
||||
"type": "map",
|
||||
"color": color,
|
||||
"padding": [0,0,0,0],
|
||||
"dataLabel": true,
|
||||
"extra": {
|
||||
"map": {
|
||||
"border": true,
|
||||
"borderWidth": 1,
|
||||
"borderColor": "#666666",
|
||||
"fillOpacity": 0.6,
|
||||
"activeBorderColor": "#F04864",
|
||||
"activeFillColor": "#FACC14",
|
||||
"activeFillOpacity": 1
|
||||
},
|
||||
}
|
||||
},
|
||||
"arcbar":{
|
||||
"type": "arcbar",
|
||||
"color": color,
|
||||
"title": {
|
||||
"name": "百分比",
|
||||
"fontSize": 25,
|
||||
"color": "#00FF00"
|
||||
},
|
||||
"subtitle": {
|
||||
"name": "默认标题",
|
||||
"fontSize": 15,
|
||||
"color": "#666666"
|
||||
},
|
||||
"extra": {
|
||||
"arcbar": {
|
||||
"type": "default",
|
||||
"width": 12,
|
||||
"backgroundColor": "#E9E9E9",
|
||||
"startAngle": 0.75,
|
||||
"endAngle": 0.25,
|
||||
"gap": 2
|
||||
}
|
||||
}
|
||||
},
|
||||
"line":{
|
||||
"type": "line",
|
||||
"color": color,
|
||||
"padding": [15,10,0,15],
|
||||
"xAxis": {
|
||||
"disableGrid": true,
|
||||
},
|
||||
"yAxis": {
|
||||
"gridType": "dash",
|
||||
"dashLength": 2,
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"line": {
|
||||
"type": "straight",
|
||||
"width": 2
|
||||
},
|
||||
}
|
||||
},
|
||||
"tline":{
|
||||
"type": "line",
|
||||
"color": color,
|
||||
"padding": [15,10,0,15],
|
||||
"xAxis": {
|
||||
"disableGrid": false,
|
||||
"boundaryGap":"justify",
|
||||
},
|
||||
"yAxis": {
|
||||
"gridType": "dash",
|
||||
"dashLength": 2,
|
||||
"data":[
|
||||
{
|
||||
"min":0,
|
||||
"max":80
|
||||
}
|
||||
]
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"line": {
|
||||
"type": "curve",
|
||||
"width": 2
|
||||
},
|
||||
}
|
||||
},
|
||||
"tarea":{
|
||||
"type": "area",
|
||||
"color": color,
|
||||
"padding": [15,10,0,15],
|
||||
"xAxis": {
|
||||
"disableGrid": true,
|
||||
"boundaryGap":"justify",
|
||||
},
|
||||
"yAxis": {
|
||||
"gridType": "dash",
|
||||
"dashLength": 2,
|
||||
"data":[
|
||||
{
|
||||
"min":0,
|
||||
"max":80
|
||||
}
|
||||
]
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"area": {
|
||||
"type": "curve",
|
||||
"opacity": 0.2,
|
||||
"addLine": true,
|
||||
"width": 2,
|
||||
"gradient": true
|
||||
},
|
||||
}
|
||||
},
|
||||
"column":{
|
||||
"type": "column",
|
||||
"color": color,
|
||||
"padding": [15,15,0,5],
|
||||
"xAxis": {
|
||||
"disableGrid": true,
|
||||
},
|
||||
"yAxis": {
|
||||
"data":[{"min":0}]
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"column": {
|
||||
"type": "group",
|
||||
"width": 30,
|
||||
"activeBgColor": "#000000",
|
||||
"activeBgOpacity": 0.08
|
||||
},
|
||||
}
|
||||
},
|
||||
"bar":{
|
||||
"type": "bar",
|
||||
"color": color,
|
||||
"padding": [15,30,0,5],
|
||||
"xAxis": {
|
||||
"boundaryGap":"justify",
|
||||
"disableGrid":false,
|
||||
"min":0,
|
||||
"axisLine":false
|
||||
},
|
||||
"yAxis": {
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"bar": {
|
||||
"type": "group",
|
||||
"width": 30,
|
||||
"meterBorde": 1,
|
||||
"meterFillColor": "#FFFFFF",
|
||||
"activeBgColor": "#000000",
|
||||
"activeBgOpacity": 0.08
|
||||
},
|
||||
}
|
||||
},
|
||||
"area":{
|
||||
"type": "area",
|
||||
"color": color,
|
||||
"padding": [15,15,0,15],
|
||||
"xAxis": {
|
||||
"disableGrid": true,
|
||||
},
|
||||
"yAxis": {
|
||||
"gridType": "dash",
|
||||
"dashLength": 2,
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"area": {
|
||||
"type": "straight",
|
||||
"opacity": 0.2,
|
||||
"addLine": true,
|
||||
"width": 2,
|
||||
"gradient": false
|
||||
},
|
||||
}
|
||||
},
|
||||
"radar":{
|
||||
"type": "radar",
|
||||
"color": color,
|
||||
"padding": [5,5,5,5],
|
||||
"dataLabel": false,
|
||||
"legend": {
|
||||
"show": true,
|
||||
"position": "right",
|
||||
"lineHeight": 25,
|
||||
},
|
||||
"extra": {
|
||||
"radar": {
|
||||
"gridType": "radar",
|
||||
"gridColor": "#CCCCCC",
|
||||
"gridCount": 3,
|
||||
"opacity": 0.2,
|
||||
"max": 200
|
||||
},
|
||||
}
|
||||
},
|
||||
"gauge":{
|
||||
"type": "gauge",
|
||||
"color": color,
|
||||
"title": {
|
||||
"name": "66Km/H",
|
||||
"fontSize": 25,
|
||||
"color": "#2fc25b",
|
||||
"offsetY": 50
|
||||
},
|
||||
"subtitle": {
|
||||
"name": "实时速度",
|
||||
"fontSize": 15,
|
||||
"color": "#1890ff",
|
||||
"offsetY": -50
|
||||
},
|
||||
"extra": {
|
||||
"gauge": {
|
||||
"type": "default",
|
||||
"width": 30,
|
||||
"labelColor": "#666666",
|
||||
"startAngle": 0.75,
|
||||
"endAngle": 0.25,
|
||||
"startNumber": 0,
|
||||
"endNumber": 100,
|
||||
"labelFormat": "",
|
||||
"splitLine": {
|
||||
"fixRadius": 0,
|
||||
"splitNumber": 10,
|
||||
"width": 30,
|
||||
"color": "#FFFFFF",
|
||||
"childNumber": 5,
|
||||
"childWidth": 12
|
||||
},
|
||||
"pointer": {
|
||||
"width": 24,
|
||||
"color": "auto"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"candle":{
|
||||
"type": "candle",
|
||||
"color": color,
|
||||
"padding": [15,15,0,15],
|
||||
"enableScroll": true,
|
||||
"enableMarkLine": true,
|
||||
"dataLabel": false,
|
||||
"xAxis": {
|
||||
"labelCount": 4,
|
||||
"itemCount": 40,
|
||||
"disableGrid": true,
|
||||
"gridColor": "#CCCCCC",
|
||||
"gridType": "solid",
|
||||
"dashLength": 4,
|
||||
"scrollShow": true,
|
||||
"scrollAlign": "left",
|
||||
"scrollColor": "#A6A6A6",
|
||||
"scrollBackgroundColor": "#EFEBEF"
|
||||
},
|
||||
"yAxis": {
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"candle": {
|
||||
"color": {
|
||||
"upLine": "#f04864",
|
||||
"upFill": "#f04864",
|
||||
"downLine": "#2fc25b",
|
||||
"downFill": "#2fc25b"
|
||||
},
|
||||
"average": {
|
||||
"show": true,
|
||||
"name": ["MA5","MA10","MA30"],
|
||||
"day": [5,10,20],
|
||||
"color": ["#1890ff","#2fc25b","#facc14"]
|
||||
}
|
||||
},
|
||||
"markLine": {
|
||||
"type": "dash",
|
||||
"dashLength": 5,
|
||||
"data": [
|
||||
{
|
||||
"value": 2150,
|
||||
"lineColor": "#f04864",
|
||||
"showLabel": true
|
||||
},
|
||||
{
|
||||
"value": 2350,
|
||||
"lineColor": "#f04864",
|
||||
"showLabel": true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"mix":{
|
||||
"type": "mix",
|
||||
"color": color,
|
||||
"padding": [15,15,0,15],
|
||||
"xAxis": {
|
||||
"disableGrid": true,
|
||||
},
|
||||
"yAxis": {
|
||||
"disabled": false,
|
||||
"disableGrid": false,
|
||||
"splitNumber": 5,
|
||||
"gridType": "dash",
|
||||
"dashLength": 4,
|
||||
"gridColor": "#CCCCCC",
|
||||
"padding": 10,
|
||||
"showTitle": true,
|
||||
"data": []
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"mix": {
|
||||
"column": {
|
||||
"width": 20
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
"scatter":{
|
||||
"type": "scatter",
|
||||
"color":color,
|
||||
"padding":[15,15,0,15],
|
||||
"dataLabel":false,
|
||||
"xAxis": {
|
||||
"disableGrid": false,
|
||||
"gridType":"dash",
|
||||
"splitNumber":5,
|
||||
"boundaryGap":"justify",
|
||||
"min":0
|
||||
},
|
||||
"yAxis": {
|
||||
"disableGrid": false,
|
||||
"gridType":"dash",
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"scatter": {
|
||||
},
|
||||
}
|
||||
},
|
||||
"bubble":{
|
||||
"type": "bubble",
|
||||
"color":color,
|
||||
"padding":[15,15,0,15],
|
||||
"xAxis": {
|
||||
"disableGrid": false,
|
||||
"gridType":"dash",
|
||||
"splitNumber":5,
|
||||
"boundaryGap":"justify",
|
||||
"min":0,
|
||||
"max":250
|
||||
},
|
||||
"yAxis": {
|
||||
"disableGrid": false,
|
||||
"gridType":"dash",
|
||||
"data":[{
|
||||
"min":0,
|
||||
"max":150
|
||||
}]
|
||||
},
|
||||
"legend": {
|
||||
},
|
||||
"extra": {
|
||||
"bubble": {
|
||||
"border":2,
|
||||
"opacity": 0.5,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default cfu;
|
||||
12
uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md
Normal file
@ -0,0 +1,12 @@
|
||||
# uCharts JSSDK说明
|
||||
1、如不使用uCharts组件,可直接引用u-charts.js,打包编译后会`自动压缩`,压缩后体积约为`98kb`。
|
||||
2、如果100kb的体积仍需压缩,请手动删除u-charts.js内您不需要的图表类型,如k线图candle。
|
||||
3、config-ucharts.js为uCharts组件的用户配置文件,升级前请`自行备份config-ucharts.js`文件,以免被强制覆盖。
|
||||
3、config-echarts.js为ECharts组件的用户配置文件,升级前请`自行备份config-echarts.js`文件,以免被强制覆盖。
|
||||
|
||||
# v1.0转v2.0注意事项
|
||||
1、opts.colors变更为opts.color
|
||||
2、ring圆环图的扩展配置由extra.pie变更为extra.ring
|
||||
3、混合图借用的扩展配置由extra.column变更为extra.mix.column
|
||||
4、全部涉及到format的格式化属性变更为formatter
|
||||
5、不需要再传canvasId及$this参数,如果通过uChats获取context,可能会导致this实例混乱,导致小程序开发者工具报错。如果不使用qiun-data-charts官方组件,需要在new uCharts()实例化之前,自行获取canvas的上下文context(ctx),并传入new中的context(opts.context)。为了能跨更多的端,给您带来的不便敬请谅解。
|
||||
6804
uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js
Normal file
201
uni_modules/qiun-data-charts/license.md
Normal file
@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
84
uni_modules/qiun-data-charts/package.json
Normal file
@ -0,0 +1,84 @@
|
||||
{
|
||||
"id": "qiun-data-charts",
|
||||
"displayName": "秋云 ucharts echarts 高性能跨全端图表组件",
|
||||
"version": "2.3.7-20220122",
|
||||
"description": "uCharts v2.3.7支持Vue3!全新官方图表组件,支持H5及APP用ECharts渲染图表,uniapp可视化首选组件",
|
||||
"keywords": [
|
||||
"ucharts",
|
||||
"echarts",
|
||||
"f2",
|
||||
"图表",
|
||||
"可视化"
|
||||
],
|
||||
"repository": "https://gitee.com/uCharts/uCharts",
|
||||
"engines": {
|
||||
"HBuilderX": "^3.3.8"
|
||||
},
|
||||
"dcloudext": {
|
||||
"category": [
|
||||
"前端组件",
|
||||
"通用组件"
|
||||
],
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": "474119"
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "插件不采集任何数据",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": "https://www.npmjs.com/package/@qiun/ucharts"
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": [],
|
||||
"encrypt": [],
|
||||
"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",
|
||||
"阿里": "y",
|
||||
"百度": "y",
|
||||
"字节跳动": "y",
|
||||
"QQ": "y"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "y",
|
||||
"联盟": "y"
|
||||
},
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
447
uni_modules/qiun-data-charts/readme.md
Normal file
@ -0,0 +1,447 @@
|
||||
## [uCharts官方网站](https://www.ucharts.cn)
|
||||
## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
|
||||
## [优秀的nvue全端组件与模版库nPro](https://ext.dcloud.net.cn/plugin?id=5169)
|
||||
## [图表组件在项目中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
## [如何安装、更新 uni_modules 插件点这里,必看,必看,必看](https://uniapp.dcloud.io/uni_modules?id=%e4%bd%bf%e7%94%a8-uni_modules-%e6%8f%92%e4%bb%b6)
|
||||
## 点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
|
||||
## 初次使用不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
|
||||
## <font color=#FF0000> 新手请先完整阅读【帮助文档】及【常见问题】3遍,右侧蓝色按钮【示例项目】请看2遍! </font>
|
||||
## <font color=#FF0000> 关于NVUE兼容的说明: </font> uCharts.js从2.3.0开始支持nuve(暂时只能通过原生canvas写法调用uCharts,nuve版本组件请见码云示例项目[uCharts-demo-nvue](https://gitee.com/uCharts/uCharts)),因其渲染方式是通过nvue的gcanvas组件来渲染,理论上性能不及renderjs的qiun-data-charts组件性能。官方仍然建议NVUE使用图表的页面改为vue页面,在App端,从性能来讲,由于通讯阻塞的问题,nvue的canvas性能不可能达到使用renderjs的vue页面的canvas。在App端,仍然推荐使用qiun-data-charts组件。[详见uni-app官方说明](https://uniapp.dcloud.io/component/canvas?id=canvas)
|
||||
|
||||
[](https://gitee.com/uCharts/uCharts)
|
||||
|
||||
## 秋云图表组件使用帮助
|
||||
|
||||
全新图表组件,全端全平台支持,开箱即用,可选择uCharts引擎全端渲染,也可指定PC端或APP端`单独使用ECharts`引擎渲染图表。支持极简单的调用方式,只需指定图表类型及传入符合标准的图表数据即可,使开发者只需专注业务及数据。同时也支持datacom组件读取uniClinetDB,无需关心如何拼接数据等不必要的重复工作,大大缩短开发时间。
|
||||
|
||||
## 为何使用官方封装的组件?
|
||||
|
||||
封装组件并不难,谁都会,但组件调试却是一件令人掉头发的事,尤其是canvas封装成组件会带来一系列问题:例如封装后不显示,图表多次初始化导致抖动问题,单页面多个图表点击事件错乱,组件放在scroll-view中无法点击,在图表上滑动时页面无法滚动等等一系列问题。为解决开发者使用可视化组件的困扰,uCharts官方特推出可视化通用组件,本组件具备以下特点:
|
||||
|
||||
- 极简单的调用方式,默认配置下只需要传入`图表类型`及`图表数据`即可全端显示。
|
||||
- 提供强大的`在线配置生成工具`,可视化中的可视化,鼠标点一点就可以生成图表,可视化从此不再难配。
|
||||
- 兼容ECharts,可选择`PC端或APP端单独使用ECharts`引擎渲染图表。
|
||||
- H5及App采用`renderjs`渲染图表,动画流畅、性能翻倍。
|
||||
- 根据父容器尺寸`弹性显示图表`,再也不必为宽高匹配及多端适配问题发愁。
|
||||
- 支持`加载状态loading及error展示`,避免数据读取显示空白的尴尬。
|
||||
- chartData`配置与数据解耦`,即便使用ECharts引擎也不必担心拼接option的困扰。
|
||||
- localdata`后端数据直接渲染`,无需自行拼接chartData的categories及series,从后端拿回的数据简单处理即可生成图表。
|
||||
- 小程序端不必担心包体积过大问题,ECharts引擎将不会编译到各小程序端,u-charts.js编译后`仅为93kb`。
|
||||
- 未来将支持通过HbuilderX的[schema2code自动生成全端全平台图表](https://ext.dcloud.net.cn/plugin?id=4684),敬请期待!!!
|
||||
- uCharts官方拥有4个2000人的QQ群支持,庞大的用户量证明我们一直在努力,本组件将持续更新,请各位放心使用,您的宝贵建议是我们努力的动力!!
|
||||
|
||||
|
||||
## 致开发者
|
||||
|
||||
感谢各位开发者`三年`来对秋云及uCharts的支持,uCharts的进步离不开各位开发者的鼓励与贡献,为更好的帮助各位开发者在uni-app生态系统更好的应用图表,uCharts始终坚持开源,并提供社群帮助开发者解决问题。 为确保您能更好的应用图表组件,建议您先`仔细阅读本页文档`以及uCharts官方文档,而不是下载下来`直接使用`。 如遇到问题请先阅读文档,如仍然不能解决,请加入QQ群咨询,如群友均不能解决或者您有特殊需求,请在群内私聊我,因工作原因,回复不一定很及时,您可直接说问题,有时间一定会回复您。
|
||||
|
||||
uCharts的开源图表组件的开发,付出了大量的个人时间与精力,经过两年来的考验,不会有比较明显的bug,请各位放心使用。不求您5星评价,也不求您赞赏,`只求您对开源贡献的支持态度`,所以,当您想给`1星评价`的时候,秋云真的会`含泪希望您绕路而行……`。如果您有更好的想法,可以在`码云提交Pull Requests`以帮助更多开发者完成需求,再次感谢各位对uCharts的鼓励与支持!
|
||||
|
||||
## 快速体验
|
||||
|
||||
一套代码编到7个平台,依次扫描二维码,亲自体验uCharts图表跨平台效果!IOS因demo比较简单无法上架,请自行编译。
|
||||

|
||||
|
||||
## 快速上手
|
||||
### <font color=#FF0000> 注意前提条件【版本要求:HBuilderX 3.1.0+】 </font>
|
||||
- 1、插件市场点击右侧绿色按钮【使用HBuilderX导入插件】,或者【使用HBuilderX导入示例项目】查看完整示例工程
|
||||
- 2、依赖uniapp的vue-cli项目:请将uni-modules目录复制到src目录,即src/uni_modules。(请升级uniapp依赖为最新版本)
|
||||
- 3、页面中直接按下面用法直接调用即可,无需在页面中注册组件qiun-data-charts
|
||||
- 4、注意父元素class='charts-box'这个样式需要有宽高
|
||||
|
||||
## 基本用法
|
||||
|
||||
- template代码:([建议使用在线工具生成](https://demo.ucharts.cn))
|
||||
|
||||
```
|
||||
<view class="charts-box">
|
||||
<qiun-data-charts type="column" :chartData="chartData" />
|
||||
</view>
|
||||
```
|
||||
|
||||
- 标准数据格式1:(折线图、柱状图、区域图等需要categories的直角坐标系图表类型)
|
||||
|
||||
```
|
||||
chartData:{
|
||||
categories: ["2016", "2017", "2018", "2019", "2020", "2021"],
|
||||
series: [{
|
||||
name: "目标值",
|
||||
data: [35, 36, 31, 33, 13, 34]
|
||||
}, {
|
||||
name: "完成量",
|
||||
data: [18, 27, 21, 24, 6, 28]
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
- 标准数据格式2:(饼图、圆环图、漏斗图等不需要categories的图表类型)
|
||||
|
||||
```
|
||||
chartData:{
|
||||
series: [{
|
||||
data: [
|
||||
{
|
||||
name: "一班",
|
||||
value: 50
|
||||
}, {
|
||||
name: "二班",
|
||||
value: 30
|
||||
}, {
|
||||
name: "三班",
|
||||
value: 20
|
||||
}, {
|
||||
name: "四班",
|
||||
value: 18
|
||||
}, {
|
||||
name: "五班",
|
||||
value: 8
|
||||
}
|
||||
]
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
注:其他特殊图表类型,请参考mockdata文件夹下的数据格式,v2.0版本的uCharts已兼容ECharts的数据格式,v2.0版本仍然支持v1.0版本的数据格式。
|
||||
|
||||
## localdata数据渲染用法
|
||||
|
||||
- 使用localdata数据格式渲染图表的优势:数据结构简单,无需自行拼接chartData的categories及series,从后端拿回的数据简单处理即可生成图表。
|
||||
- localdata数据的缺点:并不是所有的图表类型均可通过localdata渲染图表,例如混合图,组件并不能识别哪个series分组需要渲染成折线还是柱状图,涉及到复杂的图表,仍需要由chartData传入。
|
||||
|
||||
- template代码:([建议使用在线工具生成](https://demo.ucharts.cn))
|
||||
|
||||
```
|
||||
<view class="charts-box">
|
||||
<qiun-data-charts type="column" :localdata="localdata" />
|
||||
</view>
|
||||
```
|
||||
|
||||
|
||||
- 标准数据格式1:(折线图、柱状图、区域图等需要categories的直角坐标系图表类型)
|
||||
|
||||
其中value代表数据的数值,text代表X轴的categories数据点,group代表series分组的类型名称即series[i].name。
|
||||
|
||||
```
|
||||
localdata:[
|
||||
{value:35, text:"2016", group:"目标值"},
|
||||
{value:18, text:"2016", group:"完成量"},
|
||||
{value:36, text:"2017", group:"目标值"},
|
||||
{value:27, text:"2017", group:"完成量"},
|
||||
{value:31, text:"2018", group:"目标值"},
|
||||
{value:21, text:"2018", group:"完成量"},
|
||||
{value:33, text:"2019", group:"目标值"},
|
||||
{value:24, text:"2019", group:"完成量"},
|
||||
{value:13, text:"2020", group:"目标值"},
|
||||
{value:6, text:"2020", group:"完成量"},
|
||||
{value:34, text:"2021", group:"目标值"},
|
||||
{value:28, text:"2021", group:"完成量"}
|
||||
]
|
||||
```
|
||||
|
||||
- 标准数据格式2:(饼图、圆环图、漏斗图等不需要categories的图表类型)
|
||||
|
||||
其中value代表数据的数值,text代表value数值对应的描述。
|
||||
|
||||
```
|
||||
localdata:[
|
||||
{value:50, text:"一班"},
|
||||
{value:30, text:"二班"},
|
||||
{value:20, text:"三班"},
|
||||
{value:18, text:"四班"},
|
||||
{value:8, text:"五班"},
|
||||
]
|
||||
```
|
||||
|
||||
- 注意,localdata的数据格式必需要符合datacom组件规范[【详见datacom组件】](https://uniapp.dcloud.io/component/datacom?id=mixindatacom)。
|
||||
|
||||
## 进阶用法读取uniCloud数据库并渲染图表
|
||||
|
||||
- 组件基于uniCloud的[clientDB](https://uniapp.dcloud.net.cn/uniCloud/clientdb)技术,无需云函数,在前端对数据库通过where查询条件及group和count统计即可渲染图表。
|
||||
- 具体可参考/pages/unicloud/unicloud.vue中的demo例子,使用前,请先关联云服务空间,然后在uniCloud/database/db_init.json文件上点右键,初始化云数据库,当控制台显示“初始化云数据库完成”即完成示例数据的导入,之后方可运行uniCloud的demo。
|
||||
|
||||
- template代码:
|
||||
|
||||
```
|
||||
<qiun-data-charts
|
||||
type="line"
|
||||
:chartData="demoData"
|
||||
collection="uni-id-users"
|
||||
field="register_date,status"
|
||||
:where="'publish_date >= ' + new Date(startDate).getTime() + ' && publish_date <= ' + new Date(endDate).getTime()"
|
||||
groupby="dateToString(add(new Date(0),register_date),'%Y-%m-%d','+0800') as text,status as group"
|
||||
group-field="count(*) as value"
|
||||
/>
|
||||
```
|
||||
|
||||
- 注意,从uniCloud读取出的数据,需要符合localdata的标准结果数据格式(参考上部分localdata),并需要把输出的字段as成规定的别名(value、text、group)。
|
||||
|
||||
|
||||
## 示例文件地址:
|
||||
|
||||
### <font color=#FF0000> 强烈建议先看本页帮助,再看下面示例文件源码!</font>
|
||||
|
||||
```
|
||||
/pages/ucharts/ucharts.vue(展示用uCharts全端运行的例子)
|
||||
|
||||
/pages/echarts/echarts.vue(展示H5和App用ECharts,小程序端用uCharts的例子)
|
||||
|
||||
/pages/unicloud/unicloud.vue(展示读取uniCloud数据库后直接渲染图表的例子)
|
||||
|
||||
/pages/updata/updata.vue(展示动态更新图表数据的例子)
|
||||
|
||||
/pages/other/other.vue(展示图表交互的例子:动态更新图表数据,渲染完成事件,获取点击索引,自定义tooltip,图表保存为图片,强制展示错误信息等)
|
||||
|
||||
/pages/format-u/format-u.vue(展示uCharts的formatter用法的例子)
|
||||
|
||||
/pages/format-e/format-e.vue(展示ECharts的formatter用法的例子)
|
||||
|
||||
/pages/tab/tab.vue(展示再tab选项卡中用法的例子,即父容器采用v-show或v-if时需要注意的问题)
|
||||
|
||||
/pages/layout/layout.vue(展示特殊布局用法的例子:swiper、scroll-view、绝对定位等布局)
|
||||
|
||||
/pages/canvas/canvas.vue(展示uCharts v2.0版本原生js用法的例子)
|
||||
|
||||
```
|
||||
|
||||
|
||||
## 组件基本API参数
|
||||
|
||||
|属性名|类型|默认值|必填|说明|
|
||||
| -- | -- | -- | -- | -- |
|
||||
|type|String|null|`是`|图表类型,如全端用uCharts,可选值为pie、ring、rose、word、funnel、map、arcbar、line、column、bar、area、radar、gauge、candle、mix、tline、tarea、scatter、bubble <font color=#FF0000>(您也可以根据需求自定义新图表类型,需要在config-ucharts.js或config-echarts.js内添加,可参考config-ucharts.js内的"demotype"类型)</font>|
|
||||
|chartData|Object|见说明|`是`|图表数据,常用的标准数据格式为{categories: [],series: []},请按不同图表类型传入对应的标准数据。|
|
||||
|localdata|Array|[]|`是`|图表数据,如果您觉得拼接上面chartData比较繁琐,可以通过使用localdata渲染,组件会根据传入的type类型,自动拼接categories或series数据(使用localdata就不必再传入chartData,详见 /pages/other/other.vue 中使用localdata渲染图表的例子)。【localdata和collection(uniCloud数据库)同时存在,优先使用localdata;如果localdata和chartData同时存在,优先使用chartData。<font color=#FF0000> 即chartData>localdata>collection的优先级</font>渲染图表】。|
|
||||
|opts|Object|{}|否|uCharts图表配置参数(option),请参考[【在线生成工具】](https://demo.ucharts.cn)<font color=#FF0000>注:传入的opts会覆盖默认config-ucharts.js中的配置,只需传入与config-ucharts.js中属性不一致的opts即可实现【同类型的图表显示不同的样式】。</font>|
|
||||
|eopts|Object|{}|否|ECharts图表配置参数(option),请参考[【ECharts配置手册】](https://echarts.apache.org/zh/option.html)传入eopts。<font color=#FF0000>注:1、传入的eopts会覆盖默认config-echarts.js中的配置,以实现同类型的图表显示不同的样式。2、eopts不能传递function,如果option配置参数需要function,请将option写在config-echarts.js中即可实现。</font>|
|
||||
|loadingType|Number|2|否|加载动画样式,0为不显示加载动画,1-5为不同的样式,见下面示例。|
|
||||
|errorShow|Boolean|true|否|是否在页面上显示错误提示,true为显示错误提示图片,false时会显示空白区域|
|
||||
|errorReload|Boolean|true|否|是否启用点击错误提示图表重新加载,true为允许点击重新加载,false为禁用点击重新加载事件|
|
||||
|errorMessage|String|null|否|自定义错误信息,强制显示错误图片及错误信息,当上面errorShow为true时可用。(组件会监听该属性的变化,只要有变化,就会强制显示错误信息!)。说明:1、一般用于页面网络不好或其他情况导致图表loading动画一直显示,可以传任意(不为null或者"null"或者空"")字符串强制显示错误图片及说明。2、如果组件使用了data-come属性读取uniCloud数据,组件会自动判断错误状态并展示错误图标,不必使用此功能。3、当状态从非null改变为null或者空时,会强制调用reload重新加载并渲染图表数据。|
|
||||
|echartsH5|Boolean|false|否|是否在H5端使用ECharts引擎渲染图表|
|
||||
|directory|String|'/'|否|二级目录名称,如果开启上面echartsH5即H5端用ECharts引擎渲染图表,并且项目未发布在website根目录,需要填写此项配置。例如二级目录是h5,则需要填写`/h5/`,左右两侧需要带`/`,发布到三级或更多层目录示例`/web/v2/h5/`|
|
||||
|echartsApp|Boolean|false|否|是否在APP端使用ECharts引擎渲染图表|
|
||||
|canvasId|String|见说明|否|默认生成32位随机字符串。如果指定canvasId,可方便后面调用指定图表实例,否则需要通过渲染完成事件获取自动生成随机的canvasId|
|
||||
|canvas2d|Boolean|false|否|是否开启canvas2d模式,用于解决微信小程序层级过高问题,仅微信小程序端可用,其他端会强制关闭canvas2d模式。<font color=#FF0000>注:开启canvas2d模式,必须要传入上面的canvasId(随机字符串,不能是动态绑定的值,不能是数字),否则微信小程序可能会获取不到dom导致无法渲染图表!**开启后,开发者工具显示不正常,预览正常(不能“真机调试”,不能“真机调试”,不能“真机调试”)**</font>|
|
||||
|background|String|none|否|背景颜色,默认透明none,可选css的16进制color值,如#FFFFFF|
|
||||
|animation|Boolean|true|否|是否开启图表动画效果|
|
||||
|inScrollView|Boolean|false|否|图表组件是否在scroll-view中,如果在请传true,否则会出现点击事件坐标不准确的现象|
|
||||
|pageScrollTop|Number|0|否|如果图表组件是在scroll-view中,并且整个页面还存在滚动条,这个值应为绑定为页面滚动条滚动的距离,否则会出现点击事件坐标不准确的现象|
|
||||
|reshow|Boolean|false|否|强制重新渲染属性,如果图表组件父级用v-show包裹,初始化的时候会获取不到元素的宽高值,导致渲染失败,此时需要把父元素的v-show方法复制到reshow中,组件检测到reshow值变化并且为true的时候会强制重新渲染|
|
||||
|reload|Boolean|false|否|强制重新加载属性,与上面的reshow区别在于:1、reload会重新显示loading动画;2、如果组件绑定了uniCloud数据查询,通过reload会重新执行SQL语句查询,重新请求网络。而reshow则不会显示loading动画,只是应用现有的chartData数据进行重新渲染|
|
||||
|disableScroll|Boolean|false|否|当在canvas中移动时,且有绑定手势事件时,禁止屏幕滚动以及下拉刷新(赋值为true时,在图表区域内无法拖动页面滚动)|
|
||||
|tooltipShow|Boolean|true|否|点击或者鼠标经过图表时,是否显示tooltip提示窗,默认显示|
|
||||
|tooltipFormat|String|undefined|否|自定义格式化Tooltip显示内容,详见下面【tooltipFormat格式化】|
|
||||
|tooltipCustom|Object|undefined|否|(仅uCharts)如果以上系统自带的Tooltip格式化方案仍然不满足您,您可以用此属性实现更多需求,详见下面【tooltipCustom自定义】|
|
||||
|startDate|String|undefined|否|需为标准时间格式,例如"2021-02-14"。用于配合uniClinetDB自动生成categories使用|
|
||||
|endDate|String|undefined|否|需为标准时间格式,例如"2021-03-31"。用于配合uniClinetDB自动生成categories使用|
|
||||
|groupEnum|Array|[]|否|当使用到uniCloud数据库时,group字段属性如果遇到统计枚举属性的字段,需要通过将DB Schema中的enum的描述定义指派给该属性,具体格式为[{value: 1,text: "男"},{value: 2,text: "女"}]|
|
||||
|textEnum|Array|[]|否|当使用到uniCloud数据库时,text字段属性如果遇到统计枚举属性的字段,需要通过将DB Schema中的enum的描述定义指派给该属性,具体格式为[{value: 1,text: "男"},{value: 2,text: "女"}]|
|
||||
|ontap|Boolean|true|否|是否监听@tap@cilck事件,禁用后不会触发组件点击事件|
|
||||
|ontouch|Boolean|false|否|(仅uCharts)是否监听@touchstart@touchmove@touchend事件(赋值为true时,非PC端在图表区域内无法拖动页面滚动)|
|
||||
|onmouse|Boolean|true|否|是否监听@mousedown@mousemove@mouseup事件,禁用后鼠标经过图表上方不会显示tooltip|
|
||||
|on movetip|Boolean|false|否|(仅uCharts)是否开启跟手显示tooltip功能(前提条件,1、需要开启touch功能,即:ontouch="true";2、并且opts.enableScroll=false即关闭图表的滚动条功能)(建议微信小程序开启canvas2d功能,否则原生canvas组件会很卡)|
|
||||
|tapLegend|Boolean|true|否|(仅uCharts)是否开启图例点击交互事件 |
|
||||
|
||||
## 组件事件及方法
|
||||
|
||||
|事件名|说明|
|
||||
| --| --|
|
||||
|@complete|图表渲染完成事件,渲染完成会返回图表实例{complete: true, id:"xxxxx"(canvasId), type:"complete"}。可以引入config-ucharts.js/config-echarts.js来根据返回的id,调用uCharts或者ECharts实例的相关方法,详见other.vue其他图表高级应用。|
|
||||
|@getIndex|获取点击数据索引,点击后返回图表索引currentIndex,图例索引(仅uCharts)legendIndex,等信息。返回数据:{type: "getIndex", currentIndex: 3, legendIndex: -1, id:"xxxxx"(canvasId), event: {x: 100, y: 100}(点击坐标值)}|
|
||||
|@error|当组件发生错误时会触发该事件。返回数据:返回数据:{type:"error",errorShow:true/false(组件props中的errorShow状态值) , msg:"错误消息xxxx", id: "xxxxx"(canvasId)}|
|
||||
|@getTouchStart|(仅uCharts)拖动开始监听事件。返回数据:{type:"touchStart",event:{x: 100, y: 100}(点击坐标值),id:"xxxxx"(canvasId)}|
|
||||
|@getTouchMove|(仅uCharts)拖动中监听事件。返回数据:{type:"touchMove",event:{x: 100, y: 100}(点击坐标值),id:"xxxxx"(canvasId)}|
|
||||
|@getTouchEnd|(仅uCharts)拖动结束监听事件。返回数据:{type:"touchEnd",event:{x: 100, y: 100}(点击坐标值),id:"xxxxx"(canvasId)}|
|
||||
|@scrollLeft|(仅uCharts)开启滚动条后,滚动条到最左侧触发的事件,用于动态打点,需要自行编写防抖方法。返回数据:{type:"scrollLeft", scrollLeft: true, id: "xxxxx"(canvasId)}|
|
||||
|@scrollRight|(仅uCharts)开启滚动条后,滚动条到最右侧触发的事件,用于动态打点,需要自行编写防抖方法。返回数据:返回数据:{type:"scrollRight", scrollRight: true, id: "xxxxx"(canvasId)}|
|
||||
|
||||
## tooltipFormat格式化(uCharts和ECharts)
|
||||
|
||||
tooltipFormat类型为string字符串类型,需要指定config-ucharts.js/config-echarts.js中formatter下的属性值。因各小程序及app端通过组件均不能传递function类型参数,因此请先在config-ucharts.js/config-echarts.js内定义您想格式化的数据,然后在这里传入formatter下的key值,组件会自动匹配与其对应的function。如不定义该属性,组件会调用默认的tooltip方案,标准的tooltipFormat使用姿势如下:
|
||||
|
||||
```
|
||||
<qiun-data-charts
|
||||
type="column"
|
||||
:chartData="chartData"
|
||||
tooltipFormat="tooltipDemo1"
|
||||
⁄>
|
||||
==================
|
||||
config-ucharts.js
|
||||
formatter:{
|
||||
tooltipDemo1:function(item, category, index, opts){return item.data+'天'}
|
||||
}
|
||||
==================
|
||||
config-echarts.js
|
||||
formatter:{
|
||||
tooltipDemo1:function(){
|
||||
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
注意,config-ucharts.js内的formatter下的function需要携带(item, category, index, opts)参数,这4个参数都是uCharts实例内传递过来的数据,具体定义如下:
|
||||
|
||||
|属性名|说明|
|
||||
| -- | -- |
|
||||
|item|组件内计算好的当前点位的series[index]数据,其属性有data(继承series[index].format属性),color,type,style,pointShape,disableLegend,name,show|
|
||||
|category|当前点位的X轴categories[index]分类名称(如果图表类型没有category,其值则为undefined)|
|
||||
|index|当前点位的索引值|
|
||||
|opts|全部uCharts的opts配置,包含categories、series等一切你需要的都在里面,可以根据index索引值获取其他相关数据。您可以在渲染完成后打印一下opts,看看里面都有什么,也可以自定义一些你需要的挂载到opts上,这样就可以根据需求更方便的显示自定义内容了。|
|
||||
|
||||
## tooltipCustom自定义(仅uCharts)
|
||||
|
||||
上面仅仅展示了Tooltip的自定义格式化,如果仍然仍然还不能还不能满足您的需求,只能看这里的方法了。tooltipCustom可以自定义在任何位置显示任何内容的文本,当然tooltipCustom可以和tooltipFormat格式化同时使用以达到更多不同的需求,下面展示了tooltip固定位置显示的方法:
|
||||
|
||||
```
|
||||
<qiun-data-charts
|
||||
type="column"
|
||||
:chartData="chartData"
|
||||
:tooltipCustom="{x:10,y:10}"
|
||||
/>
|
||||
```
|
||||
|
||||
tooltipCustom属性如下:
|
||||
|
||||
|属性名|类型|默认值|说明|
|
||||
| -- | -- | -- | -- |
|
||||
|x|Number|undefined|tooltip左上角相对于画布的X坐标|
|
||||
|y|Number|undefined|tooltip左上角相对于画布的Y坐标|
|
||||
|index|Number|undefined|相对于series或者categories中的索引值。当没有定义index或者index定义为undefined的时候,组件会自动获取当前点击的索引,并根据上面的xy位置绘制tooltip提示框。如果为0及以上的数字时,会根据您传的索引自动计算x轴方向的偏移量(仅直角坐标系有效)|
|
||||
|textList|Array.Object|undefined|多对象数组,tooltip的文字组。当没有定义textList或者textList定义为undefined的时候,会调自动获取点击索引并拼接相应的textList。如传递[{text:'默认显示的tooltip',color:null},{text:'类别1:某个值xxx',color:'#2fc25b'},{text:'类别2:某个值xxx',color:'#facc14'},{text:'类别3:某个值xxx',color:'#f04864'}]这样定义好的数组,则会只显示该数组。|
|
||||
|textList[i].text|String| |显示的文字|
|
||||
|textList[i].color|Color| |左侧图表颜色|
|
||||
|
||||
## datacome属性及说明
|
||||
|
||||
- 通过配置datacome属性,可直接获取uniCloud云数据,并快速自动生成图表,使开发者只需专注业务及数据,无需关心如何拼接数据等不必要的重复工作,大大缩短开发时间。datacome属性及说明,详见[datacom组件规范](https://uniapp.dcloud.io/component/datacom?id=mixindatacom)
|
||||
|
||||
|属性名|类型|默认值|说明|
|
||||
| -- | -- | -- | -- |
|
||||
|collection|String| |表名。支持输入多个表名,用 , 分割|
|
||||
|field|String| |查询字段,多个字段用 , 分割|
|
||||
|where|String| |查询条件,内容较多,另见jql文档:[详情](https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=jsquery)|
|
||||
|orderby|String| |排序字段及正序倒叙设置|
|
||||
|groupby|String| |对数据进行分组|
|
||||
|group-field|String| |对数据进行分组统计|
|
||||
|distinct|Boolean|false|是否对数据查询结果中重复的记录进行去重|
|
||||
|action|string| |云端执行数据库查询的前或后,触发某个action函数操作,进行预处理或后处理,详情。场景:前端无权操作的数据,比如阅读数+1|
|
||||
|page-data|string|add|分页策略选择。值为 add 代表下一页的数据追加到之前的数据中,常用于滚动到底加载下一页;值为 replace 时则替换当前data数据,常用于PC式交互,列表底部有页码分页按钮|
|
||||
|page-current|Number|0|当前页|
|
||||
|page-size|Number|0|每页数据数量|
|
||||
|getcount|Boolean|false|是否查询总数据条数,默认 false,需要分页模式时指定为 true|
|
||||
|getone|Boolean|false|指定查询结果是否仅返回数组第一条数据,默认 false。在false情况下返回的是数组,即便只有一条结果,也需要[0]的方式获取。在值为 true 时,直接返回结果数据,少一层数组。一般用于非列表页,比如详情页|
|
||||
|gettree|Boolean|false|是否查询树状数据,默认 false|
|
||||
|startwith|String|''|gettree的第一层级条件,此初始条件可以省略,不传startWith时默认从最顶级开始查询|
|
||||
|limitlevel|Number|10|gettree查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1|
|
||||
|
||||
## uni_modules目录说明
|
||||
|
||||
```
|
||||
├── components
|
||||
│ └── qiun-data-chatrs──────────# 组件主入口模块
|
||||
│ └── qiun-error────────────────# 加载动画组件文件目录(可以修改错误提示图标以减少包体积)
|
||||
│ └── qiun-loading──────────────# 加载动画组件文件目录(可以删除您不需要的动画效果以减少包体积)
|
||||
├── js_skd
|
||||
│ └── u-charts
|
||||
│ ── └──config-echarts.js ──────# ECharts默认配置文件(非APP端内可作为实例公用中转)
|
||||
│ ── └──config-ucharts.js ──────# uCharts默认配置文件(非APP端内可作为实例公用中转)
|
||||
│ ── └──u-charts-v2.0.0.js──────# uCharts基础库v2.0.0版本,部分API与之前版本不同
|
||||
├── static
|
||||
│ └── app-plus──────────────────# 条件编译目录,仅编译到APP端
|
||||
│ ── └──echarts.min.js──────────# Echarts基础库v4.2.1
|
||||
│ └── h5────────────────────────# 条件编译目录,仅编译到H5端
|
||||
│ ── └──echarts.min.js──────────# Echarts基础库v4.2.1
|
||||
```
|
||||
|
||||
|
||||
## 加载动画及错误提示
|
||||
- 为保证编译后的包体积,加载动画引用作者wkiwi提供的[w-loading](https://ext.dcloud.net.cn/plugin?id=504)中选取5种,如需其他样式请看下面说明。
|
||||
- loading的展示逻辑:
|
||||
* 1、如果是uniCloud数据,从发送网络请求到返回数据期间展示。
|
||||
* 2、如果是自行传入的chartData,当chartData.series=[]空数组的时候展示loading,也就是说初始化图表的时候,如果您没有数据,可以通过先传个空数组来展示loading效果,当chartData.series有数据后会自动隐藏loading图标。
|
||||
- <font color=#FF0000>如您修改了qiun-data-charts.vue组件文件,请务必在升级前备份您的文件,以免被覆盖!!!建议将加载状态显示做成组件,避免下次升级时丢失后无法找到。</font>
|
||||
|
||||
|
||||
## 配置文件说明
|
||||
|
||||
- <font color=#FF0000>注意,config-echarts.js和config-ucharts.js内只需要配置符合您项目整体UI的整体默认配置,根据需求,先用[【在线工具】](http://demo.ucharts.cn)调试好默认配置,并粘贴到配置文件中。</font>
|
||||
- <font color=#FF0000>如果需要与configjs中不同的配置,只需要在组件上绑定:opts或者:eopts传入与默认配置不同的某个属性及值即可覆盖默认配置,极大降低了代码量。</font>
|
||||
|
||||
- ECharts默认配置文件:config-echarts.js
|
||||
|
||||
i、<font color=#FF0000>如您修改了默认配置文件,请务必在升级前备份您的配置文件,以免被覆盖!!!</font>
|
||||
|
||||
ii、ECharts配置手册:[https://echarts.apache.org/zh/option.html](https://echarts.apache.org/zh/option.html)
|
||||
|
||||
iii、"type"及"categories"属性为支持的图表属性,您可参照ECharts配置手册,配置您更多的图表类型,并将对应的图表配置添加至下面
|
||||
|
||||
iv、"formatter"属性,因各小程序及app端通过组件均不能传递function类型参数,因此请先在此属性下定义您想格式化的数据,组件会自动匹配与其对应的function
|
||||
|
||||
v、"seriesTemplate"属性,因ECharts的大部分配置均在series内,seriesTemplate作为series的模板,这样只需要在这里做好模板配置,组件的数组层chartData(或者localdata或者collection)的series会自动挂载模板配置。如需临时或动态改变seriesTemplate,可在:eopts中传递seriesTemplate,详见pages/echarts/echarts.vue中的曲线图。
|
||||
|
||||
vi、ECharts配置仅可用于H5或者APP端,并且配置`echartsH5`或`echartsApp`为`true`时可用
|
||||
|
||||
- uCharts默认配置文件:config-ucharts.js
|
||||
|
||||
i、<font color=#FF0000>如您修改了默认配置文件,请务必在升级前备份您的配置文件,以免被覆盖!!!</font>
|
||||
|
||||
ii、v2版本后的uCharts基础库不提供配置手册,您可以使用在线配置生成工具来快速生成配置:[http://demo.ucharts.cn](http://demo.ucharts.cn)
|
||||
|
||||
iii、"type"及"categories"属性为支持的图表属性,不支持添加uCharts基础库没有的图表类型
|
||||
|
||||
iv、"formatter"属性因各小程序及app端通过组件均不能传递function类型参数,因此请先在此属性下定义您想格式化的数据,组件会自动匹配与其对应的function
|
||||
|
||||
v、uCharts配置可跨全端使用
|
||||
|
||||
|
||||
## 常见问题及注意事项
|
||||
|
||||
- `图表无法显示问题`:
|
||||
* 请先检查您的HBuilderX版本,要求高于3.1.0+。
|
||||
* 1、如果是首次导入插件不显示,或者报以下未注册`qiun-data-charts`的错误:
|
||||
> Unknown custom element: < qiun-data-charts > - did you register the component correctly? For recursive components, make sure to provide the "name" option.
|
||||
* 2、<font color=#FF0000>请【重启HBuilderX】或者【重启项目】或者【重启开发者工具】或者【删除APP基座】重新运行,避免缓存问题导致不能显示。</font>
|
||||
* 3、如果是基于uniapp的vue-cli项目,1、请 npm update 升级uniapp依赖为最新版本;2、请尝试清理node-modules,重新install,还不行就删除项目,再重新install。如果仍然不行,请检查uniapp依赖是否为最新版本,再重试以上步骤。如果仍然不行,请使用<font color=#FF0000>【非uni_modules版本】</font>组件,最新非uni_modules版本在码云发布,[点击此处获取](https://gitee.com/uCharts/uCharts/tree/master/qiun-data-charts%EF%BC%88%E9%9D%9Euni-modules%EF%BC%89)。。
|
||||
* 4、请检查控制台是否有报错或提示信息,如果没有报错,也没有提示信息,并且检查视图中class="charts-box"这个元素的宽高均为0,请修改父元素的css样式或进行下面第4步检查。
|
||||
* 5、检查父级是否使用了v-show来控制显示。如果页面初始化时组件处于隐藏状态,组件则无法正确获取宽高尺寸,此时<font color=#FF0000>需要组件内绑定reshow属性(逻辑应与父级的v-show的逻辑相同)</font>,强制重新渲染图表,例如:reshow="父级v-show绑定的事件"。
|
||||
* 6、如果在微信小程序端开启了canvas2d模式<font color=#FF0000>(不能使用真机调试,请直接预览)</font>不显示图表:
|
||||
* a、请务必在组件上定义canvasId,不能为纯数字、不能为变量、不能重复、尽量长一些。
|
||||
* b、请检查微信小程序的基础库,修改至2.16.0或者最新版本的基础库。
|
||||
* c、请检查父元素或父组件是否用v-if来控制显示,如有请改为v-show,并将v-show的逻辑绑定至组件。
|
||||
- `formatter格式化问题`:无论是uCharts还是ECharts,因为组件不能传递function,所有的formatter均需要变成别名format来定义,并在config-ucharts.js或config-echarts.js配置对应的formatter方法,组件会根据format的值自动替换配置文件中的formatter方法。(参考示例项目pages/format/format.vue)
|
||||
- `图表抖动问题`:如果开启了animation动画效果,由于组件内开启了chartData和opts的监听,当数据变化时会重新渲染图表,<font color=#FF0000>建议整体改变chartData及opts的属性值</font>,而不要通过循环或遍历来改变this实例下的chartData及opts,例如先定义一个临时变量,拼接好数据后再整体赋值。(参考示例项目pages/updata/updata.vue)
|
||||
- `微信小程序报错Maximum call stack size exceeded问题`:由于组件内开启了chartData和opts的监听,当数据变化时会重新渲染图表,<font color=#FF0000>建议整体改变chartData及opts的属性值</font>,而不要通过循环或遍历来改变this实例下的chartData及opts,例如先定义一个临时变量,拼接好数据后再整体赋值。(参考示例项目pages/updata/updata.vue)
|
||||
- `Loading状态问题`:如不使用uniClinetDB获取数据源,并且需要展示Loading状态,请先清空series,使组件变更为Loading状态,即this.chartData.series=[]即可展示,然后再从服务端获取数据,拼接完成后再传入this.chartData。如果不需要展示Loading状态,则不需要以上步骤,获取到数据,拼接好标准格式后,直接赋值即可。
|
||||
- `微信小程序图表层级过高问题`:因canvas在微信小程序是原生组件,如果使用自定义tabbar或者自定义导航栏,图表则会超出预期,此时需要给组件的canvas2d传值true来使用type='2d'的功能,开启此模式后,<font color=#FF0000>一定要在组件上自定义canvasId,不能为数字,不能动态绑定,要为随机字符串!不能“真机调试”,不能“真机调试”,不能“真机调试”</font>开发者工具显示不正常,图表层级会变高,而正常预览或者发布上线则是正常状态,开发者不必担心,一切以真机预览为准(因微信开发者工具显示不正确,canvas2d这种模式下给调试带来了困难,开发时,可以先用:canvas2d="false"来调试,预览无误后再改成true)。
|
||||
- `开启canvas2d后图表不显示问题`:开启canvas2d后,需要手动指定canvasId,并且父元素不能含有v-if,否则会导致获取不到dom节点问题,请将v-if改成v-show,更多开启canvas2d不显示问题,请参考示例项目pages/layout/layout.vue文件,对照示例项目修改您的项目。
|
||||
- `MiniPorgramError U.createEvent is ot a function`:此问题一般是微信小程序开启了canvas2d,并点击了“真机调试导致”,参考上面【微信小程序图表层级过高问题】解决办法,开启2d后,不可以真机调试,只能开发者工具调试或者扫二维码“预览”。
|
||||
- `在图表上滑动无法使页面滚动问题`:此问题是因为监听了touchstart、touchmove和touchend三个事件,或者开启了disableScroll属性,如果您的图表不需要开启图表内的滚动条功能,请禁用这三个方法的监听,即:ontouch="false"或者:disableScroll="false"即可(此时图表组件默认通过@tap事件来监听点击,可正常显示Tooltip提示窗)。
|
||||
- `开启滚动条无法拖动图表问题`:此问题正与以上问题相反,是因为禁用了监听touchstart、touchmove和touchend三个事件,请启用这三个方法的监听,即在组件上加入 :ontouch="true" 即可。注意,不要忘记在opts里需要配置enableScroll:true,另外如果需要显示滚动条,需要在xAxis中配置scrollShow:ture,及itemCount(单屏数据密度)数量的配置。
|
||||
- `开启滚动条后图表两侧有白边问题`:此问题是因为组件上的background为none或者没有指定,请在组件上加入background="#000000"(您的背景色)。如果父元素为图片,尽量不要开启滚动条,此时图表是透明色,可以显示父元素背景图片。
|
||||
- `开启滚动条后动态打点更新数据滚动条位置问题`:开启滚动条后动态打点,需要把opts中update需要赋值为true,来启用uCharts的updateData方法来更新视图,详见示例项目pages/updata/updata.vue。
|
||||
- `地图变形问题`:此问题是因为您引用的geojson地图数据的坐标系可能是地球坐标(WGS84)导致,需要开启【是否进行WGS84转墨卡托投影】功能。开启后因大量的数据运算tooltip可能会不跟手,建议自行转换为墨卡托坐标系,可参照源码内function lonlat2mercator()。其他地图数据下载地址:[http://datav.aliyun.com/tools/atlas/](http://datav.aliyun.com/tools/atlas/)
|
||||
- `支付宝(钉钉)小程序无法点击问题`:请检查支付宝小程序开发者工具中,点击【详情】,在弹出的【项目详情】中【取消】启用小程序基础库 2.0 构建,一定不要勾选此项。
|
||||
- `uni-simple-router中使用问题`:如果使用uni-simple-router路由插件,H5开启完全路由模式(即h5:{vueRouterDev:true})时,会导致组件内uni.xxx部分方法失效,引发节点获取不正常报错,请使用普通模式即可。
|
||||
- `Y轴刻度标签数字重复问题`:此问题一般是series数据内数值较小,而Y轴网格数量较多,并且Y轴刻度点显示整数导致。解决方法1,Y轴刻度值保留两位小数,组件上传值 :opts="{yAxis:{data:[{tofix:2}]}}";解决方法2,修改Y轴网格数量为series中的最大值的数量,例如series中最大值为3,那么修改yAxis.splitNumber=3即可;解决方法3,根据Y轴网格数量修改Y轴最大值 :opts="{yAxis:{data:[{max:5}]}}"。
|
||||
- `柱状图柱子高度不符合预期问题`:此问题是Y轴最小值未默认为0的问题导致,组件上传值 :opts="{yAxis:{data:[{min:0}]}}"即可解决。
|
||||
- `饼图类百分比改其他文案的问题`:参考示例项目pages/format-u/format-u.vue,在chartData的series中使用format。
|
||||
|
||||
## [更多常见问题以官方网站【常见问题】为准](http://demo.ucharts.cn)
|
||||
|
||||
## QQ群号码
|
||||
## <font color=#FF0000> 请先完整阅读【帮助文档】及【常见问题】3遍,右侧蓝色按钮【示例项目】请看2遍!不看文档不看常见问题进群就问的拒绝回答问题!咨询量太大请理解作者! </font>
|
||||
- 交流群1:371774600(已满)
|
||||
- 交流群2:619841586
|
||||
- 交流群3:955340127(已满)
|
||||
- 交流群4:641669795
|
||||
- 口令`uniapp`
|
||||
|
||||
|
||||
## 相关链接
|
||||
- [DCloud插件市场地址](https://ext.dcloud.net.cn/plugin?id=271)
|
||||
- [uCharts官网](https://www.ucharts.cn)
|
||||
- [uCharts码云开源托管地址](https://gitee.com/uCharts/uCharts) [](https://gitee.com/uCharts/uCharts/stargazers)
|
||||
- [图表组件在项目中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651)
|
||||
- [ECharts官网](https://echarts.apache.org/zh/index.html)
|
||||
- [ECharts配置手册](https://echarts.apache.org/zh/option.html)
|
||||
- [`wkiwi`提供的w-loading组件地址](https://ext.dcloud.net.cn/plugin?id=504)
|
||||
23
uni_modules/qiun-data-charts/static/app-plus/echarts.min.js
vendored
Normal file
23
uni_modules/qiun-data-charts/static/h5/echarts.min.js
vendored
Normal file
@ -40,10 +40,9 @@ export default {
|
||||
url: url,
|
||||
data: data,
|
||||
method: method,
|
||||
|
||||
}
|
||||
|
||||
if(method=='POST'){
|
||||
if(method=='POST' && !isWebApi){
|
||||
requstOptions.header = {
|
||||
'content-type': 'application/x-www-form-urlencoded;charset=utf-8'
|
||||
}
|
||||
|
||||
@ -32,10 +32,10 @@ export default {
|
||||
return this.post(data)
|
||||
},
|
||||
$webGet: function (controller,data) { // webapi
|
||||
return Api.request('GET', ApiPath.apiurl +controller ,data,true)
|
||||
return Api.request('GET', ApiPath.apiurl +controller ,data||{},true)
|
||||
},
|
||||
$webPost: function (controller,data) { // webapi
|
||||
return Api.request('POST', ApiPath.apiurl +controller ,data,true)
|
||||
return Api.request('POST', ApiPath.apiurl +controller ,data||{},true)
|
||||
}
|
||||
|
||||
}
|
||||