203 changed files with 101 additions and 18724 deletions
@ -1,90 +0,0 @@ |
|||||
<template> |
|
||||
<view class="upload"> |
|
||||
<view class="imagebox"> |
|
||||
<view class="imageborder"> |
|
||||
<view class="main"> |
|
||||
<slot></slot> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="text"> |
|
||||
<text>{{ text }}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script setup> |
|
||||
import { ref } from 'vue'; |
|
||||
|
|
||||
const text = ref("") |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="scss"> |
|
||||
.upload { |
|
||||
height: 400rpx; |
|
||||
width: 90%; |
|
||||
border-radius: 20rpx; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.imagebox { |
|
||||
height: 80%; |
|
||||
background-color: #eff8ff; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
display: flex; |
|
||||
|
|
||||
.imageborder { |
|
||||
border: 5px #319fea solid; |
|
||||
position: relative; |
|
||||
width: 70%; |
|
||||
height: 80%; |
|
||||
border-radius: 30rpx; |
|
||||
|
|
||||
&::after { |
|
||||
position: absolute; |
|
||||
content: ' '; |
|
||||
background-color: #eff8ff; |
|
||||
height: 80%; |
|
||||
width: 120%; |
|
||||
top: 10%; |
|
||||
left: -10%; |
|
||||
} |
|
||||
|
|
||||
&::before { |
|
||||
position: absolute; |
|
||||
content: ' '; |
|
||||
background-color: #eff8ff; |
|
||||
top: -10%; |
|
||||
left: 10%; |
|
||||
height: 120%; |
|
||||
width: 80%; |
|
||||
} |
|
||||
|
|
||||
.main { |
|
||||
position: absolute; |
|
||||
background-color: #eff8ff; |
|
||||
top: 5%; |
|
||||
left: 5%; |
|
||||
height: 90%; |
|
||||
width: 90%; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
z-index: 2; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.text { |
|
||||
height: 20%; |
|
||||
background-color: #319fea; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
|
|
||||
text { |
|
||||
color: #ffffff; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,681 +0,0 @@ |
|||||
<template> |
|
||||
<view v-show="show" class="t-wrapper" @touchmove.stop.prevent="moveHandle"> |
|
||||
<view class="t-mask" :class="{ active: active }" @click.stop="close"></view> |
|
||||
<view class="t-box" :class="{ active: active }"> |
|
||||
<view class="t-header"> |
|
||||
<view class="t-header-button" @click="close">取消</view> |
|
||||
<view class="t-header-button confrim" @click="confirm">确认</view> |
|
||||
</view> |
|
||||
<view class="t-color__box" |
|
||||
:style="{ background: 'rgb(' + bgcolor.r + ',' + bgcolor.g + ',' + bgcolor.b + ')' }"> |
|
||||
<view class="t-background boxs" @touchstart="touchstart($event, 0)" @touchmove="touchmove($event, 0)" |
|
||||
@touchend="touchend($event, 0)"> |
|
||||
<view class="t-color-mask"></view> |
|
||||
<view class="t-pointer" :style="{ top: site[0].top - 8 + 'px', left: site[0].left - 8 + 'px' }"></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="t-control__box"> |
|
||||
<view class="t-control__color"> |
|
||||
<view class="t-control__color-content" |
|
||||
:style="{ background: 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + rgba.a + ')' }"></view> |
|
||||
</view> |
|
||||
<view class="t-control-box__item"> |
|
||||
<view class="t-controller boxs" @touchstart="touchstart($event, 1)" @touchmove="touchmove($event, 1)" |
|
||||
@touchend="touchend($event, 1)"> |
|
||||
<view class="t-hue"> |
|
||||
<view class="t-circle" :style="{ left: site[1].left - 12 + 'px' }"></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="t-controller boxs" @touchstart="touchstart($event, 2)" @touchmove="touchmove($event, 2)" |
|
||||
@touchend="touchend($event, 2)"> |
|
||||
<view class="t-transparency"> |
|
||||
<view class="t-circle" :style="{ left: site[2].left - 12 + 'px' }"></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="t-result__box"> |
|
||||
<view v-if="mode" class="t-result__item"> |
|
||||
<view class="t-result__box-input">{{ hex }}</view> |
|
||||
<view class="t-result__box-text">HEX</view> |
|
||||
</view> |
|
||||
<template v-else> |
|
||||
<view class="t-result__item"> |
|
||||
<view class="t-result__box-input">{{ rgba.r }}</view> |
|
||||
<view class="t-result__box-text">R</view> |
|
||||
</view> |
|
||||
<view class="t-result__item"> |
|
||||
<view class="t-result__box-input">{{ rgba.g }}</view> |
|
||||
<view class="t-result__box-text">G</view> |
|
||||
</view> |
|
||||
<view class="t-result__item"> |
|
||||
<view class="t-result__box-input">{{ rgba.b }}</view> |
|
||||
<view class="t-result__box-text">B</view> |
|
||||
</view> |
|
||||
<view class="t-result__item"> |
|
||||
<view class="t-result__box-input">{{ rgba.a }}</view> |
|
||||
<view class="t-result__box-text">A</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<view class="t-result__item t-select" @click="select"> |
|
||||
<view class="t-result__box-input"> |
|
||||
<view>切换</view> |
|
||||
<view>模式</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="t-alternative"> |
|
||||
<view class="t-alternative__item" v-for="(item, index) in colorList" :key="index"> |
|
||||
<view class="t-alternative__item-content" |
|
||||
:style="{ background: 'rgba(' + item.r + ',' + item.g + ',' + item.b + ',' + item.a + ')' }" |
|
||||
@click="selectColor(item)"> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
props: { |
|
||||
color: { |
|
||||
type: Object, |
|
||||
default() { |
|
||||
return { r: 0, g: 0, b: 0, a: 0 } |
|
||||
} |
|
||||
}, |
|
||||
spareColor: { |
|
||||
type: Array, |
|
||||
default() { |
|
||||
return [] |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
show: false, |
|
||||
active: false, |
|
||||
// rgba 颜色 |
|
||||
rgba: { r: 0, g: 0, b: 0, a: 1 }, |
|
||||
// hsb 颜色 |
|
||||
hsb: { h: 0, s: 0, b: 0 }, |
|
||||
site: [{ top: 0, left: 0 }, { left: 0 }, { left: 0 }], |
|
||||
index: 0, |
|
||||
bgcolor: { r: 255, g: 0, b: 0, a: 1 }, |
|
||||
hex: '#000000', |
|
||||
mode: true, |
|
||||
colorList: [ |
|
||||
{ r: 244, g: 67, b: 54, a: 1 }, |
|
||||
{ r: 233, g: 30, b: 99, a: 1 }, |
|
||||
{ r: 156, g: 39, b: 176, a: 1 }, |
|
||||
{ r: 103, g: 58, b: 183, a: 1 }, |
|
||||
{ r: 63, g: 81, b: 181, a: 1 }, |
|
||||
{ r: 33, g: 150, b: 243, a: 1 }, |
|
||||
{ r: 3, g: 169, b: 244, a: 1 }, |
|
||||
{ r: 0, g: 188, b: 212, a: 1 }, |
|
||||
{ r: 0, g: 150, b: 136, a: 1 }, |
|
||||
{ r: 76, g: 175, b: 80, a: 1 }, |
|
||||
{ r: 139, g: 195, b: 74, a: 1 }, |
|
||||
{ r: 205, g: 220, b: 57, a: 1 }, |
|
||||
{ r: 255, g: 235, b: 59, a: 1 }, |
|
||||
{ r: 255, g: 193, b: 7, a: 1 }, |
|
||||
{ r: 255, g: 152, b: 0, a: 1 }, |
|
||||
{ r: 255, g: 87, b: 34, a: 1 }, |
|
||||
{ r: 121, g: 85, b: 72, a: 1 }, |
|
||||
{ r: 158, g: 158, b: 158, a: 1 }, |
|
||||
{ r: 0, g: 0, b: 0, a: 0.5 }, |
|
||||
{ r: 0, g: 0, b: 0, a: 0 }, |
|
||||
] |
|
||||
}; |
|
||||
}, |
|
||||
created() { |
|
||||
this.rgba = this.color; |
|
||||
if (this.spareColor.length !== 0) { |
|
||||
this.colorList = this.spareColor; |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
/** |
|
||||
* 初始化 |
|
||||
*/ |
|
||||
init() { |
|
||||
// hsb 颜色 |
|
||||
this.hsb = this.rgbToHex(this.rgba); |
|
||||
this.setValue(this.rgba); |
|
||||
}, |
|
||||
moveHandle() { }, |
|
||||
open() { |
|
||||
this.show = true; |
|
||||
this.$nextTick(() => { |
|
||||
this.init(); |
|
||||
setTimeout(() => { |
|
||||
this.active = true; |
|
||||
setTimeout(() => { |
|
||||
this.getSelectorQuery(); |
|
||||
}, 350) |
|
||||
}, 50) |
|
||||
}) |
|
||||
|
|
||||
}, |
|
||||
close() { |
|
||||
this.active = false; |
|
||||
this.$nextTick(() => { |
|
||||
setTimeout(() => { |
|
||||
this.show = false; |
|
||||
}, 500) |
|
||||
}) |
|
||||
}, |
|
||||
confirm() { |
|
||||
this.close(); |
|
||||
this.$emit('confirm', { |
|
||||
rgba: this.rgba, |
|
||||
hex: this.hex |
|
||||
}) |
|
||||
}, |
|
||||
// 选择模式 |
|
||||
select() { |
|
||||
this.mode = !this.mode |
|
||||
}, |
|
||||
// 常用颜色选择 |
|
||||
selectColor(item) { |
|
||||
this.setColorBySelect(item) |
|
||||
}, |
|
||||
touchstart(e, index) { |
|
||||
const { pageX, pageY, clientX, clientY } = e.touches[0]; |
|
||||
this.pageX = clientX; |
|
||||
this.pageY = clientY; |
|
||||
this.setPosition(this.pageX, this.pageY, index); |
|
||||
}, |
|
||||
touchmove(e, index) { |
|
||||
const { pageX, pageY, clientX, clientY } = e.touches[0]; |
|
||||
this.moveX = clientX; |
|
||||
this.moveY = clientY; |
|
||||
this.setPosition(this.moveX, this.moveY, index); |
|
||||
}, |
|
||||
touchend(e, index) { |
|
||||
}, |
|
||||
/** |
|
||||
* 设置位置 |
|
||||
*/ |
|
||||
setPosition(x, y, index) { |
|
||||
this.index = index; |
|
||||
const { |
|
||||
top, |
|
||||
left, |
|
||||
width, |
|
||||
height |
|
||||
} = this.position[index]; |
|
||||
// 设置最大最小值 |
|
||||
|
|
||||
this.site[index].left = Math.max(0, Math.min(parseInt(x - left), width)); |
|
||||
if (index === 0) { |
|
||||
this.site[index].top = Math.max(0, Math.min(parseInt(y - top), height)); |
|
||||
// 设置颜色 |
|
||||
this.hsb.s = parseInt((100 * this.site[index].left) / width); |
|
||||
this.hsb.b = parseInt(100 - (100 * this.site[index].top) / height); |
|
||||
this.setColor(); |
|
||||
this.setValue(this.rgba); |
|
||||
} else { |
|
||||
this.setControl(index, this.site[index].left); |
|
||||
} |
|
||||
}, |
|
||||
/** |
|
||||
* 设置 rgb 颜色 |
|
||||
*/ |
|
||||
setColor() { |
|
||||
const rgb = this.HSBToRGB(this.hsb); |
|
||||
this.rgba.r = rgb.r; |
|
||||
this.rgba.g = rgb.g; |
|
||||
this.rgba.b = rgb.b; |
|
||||
}, |
|
||||
/** |
|
||||
* 设置二进制颜色 |
|
||||
* @param {Object} rgb |
|
||||
*/ |
|
||||
setValue(rgb) { |
|
||||
this.hex = '#' + this.rgbToHex(rgb); |
|
||||
}, |
|
||||
setControl(index, x) { |
|
||||
const { |
|
||||
top, |
|
||||
left, |
|
||||
width, |
|
||||
height |
|
||||
} = this.position[index]; |
|
||||
|
|
||||
if (index === 1) { |
|
||||
this.hsb.h = parseInt((360 * x) / width); |
|
||||
this.bgcolor = this.HSBToRGB({ |
|
||||
h: this.hsb.h, |
|
||||
s: 100, |
|
||||
b: 100 |
|
||||
}); |
|
||||
this.setColor() |
|
||||
} else { |
|
||||
this.rgba.a = (x / width).toFixed(1); |
|
||||
} |
|
||||
this.setValue(this.rgba); |
|
||||
}, |
|
||||
/** |
|
||||
* rgb 转 二进制 hex |
|
||||
* @param {Object} rgb |
|
||||
*/ |
|
||||
rgbToHex(rgb) { |
|
||||
let hex = [rgb.r.toString(16), rgb.g.toString(16), rgb.b.toString(16)]; |
|
||||
hex.map(function (str, i) { |
|
||||
if (str.length == 1) { |
|
||||
hex[i] = '0' + str; |
|
||||
} |
|
||||
}); |
|
||||
return hex.join(''); |
|
||||
}, |
|
||||
setColorBySelect(getrgb) { |
|
||||
const { |
|
||||
r, |
|
||||
g, |
|
||||
b, |
|
||||
a |
|
||||
} = getrgb; |
|
||||
let rgb = {} |
|
||||
rgb = { |
|
||||
r: r ? parseInt(r) : 0, |
|
||||
g: g ? parseInt(g) : 0, |
|
||||
b: b ? parseInt(b) : 0, |
|
||||
a: a ? a : 0, |
|
||||
}; |
|
||||
this.rgba = rgb; |
|
||||
this.hsb = this.rgbToHsb(rgb); |
|
||||
this.changeViewByHsb(); |
|
||||
}, |
|
||||
changeViewByHsb() { |
|
||||
const [a, b, c] = this.position; |
|
||||
this.site[0].left = parseInt(this.hsb.s * a.width / 100); |
|
||||
this.site[0].top = parseInt((100 - this.hsb.b) * a.height / 100); |
|
||||
this.setColor(this.hsb.h); |
|
||||
this.setValue(this.rgba); |
|
||||
this.bgcolor = this.HSBToRGB({ |
|
||||
h: this.hsb.h, |
|
||||
s: 100, |
|
||||
b: 100 |
|
||||
}); |
|
||||
|
|
||||
this.site[1].left = this.hsb.h / 360 * b.width; |
|
||||
this.site[2].left = this.rgba.a * c.width; |
|
||||
|
|
||||
}, |
|
||||
/** |
|
||||
* hsb 转 rgb |
|
||||
* @param {Object} 颜色模式 H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度 |
|
||||
*/ |
|
||||
HSBToRGB(hsb) { |
|
||||
let rgb = {}; |
|
||||
let h = Math.round(hsb.h); |
|
||||
let s = Math.round((hsb.s * 255) / 100); |
|
||||
let v = Math.round((hsb.b * 255) / 100); |
|
||||
if (s == 0) { |
|
||||
rgb.r = rgb.g = rgb.b = v; |
|
||||
} else { |
|
||||
let t1 = v; |
|
||||
let t2 = ((255 - s) * v) / 255; |
|
||||
let t3 = ((t1 - t2) * (h % 60)) / 60; |
|
||||
if (h == 360) h = 0; |
|
||||
if (h < 60) { |
|
||||
rgb.r = t1; |
|
||||
rgb.b = t2; |
|
||||
rgb.g = t2 + t3; |
|
||||
} else if (h < 120) { |
|
||||
rgb.g = t1; |
|
||||
rgb.b = t2; |
|
||||
rgb.r = t1 - t3; |
|
||||
} else if (h < 180) { |
|
||||
rgb.g = t1; |
|
||||
rgb.r = t2; |
|
||||
rgb.b = t2 + t3; |
|
||||
} else if (h < 240) { |
|
||||
rgb.b = t1; |
|
||||
rgb.r = t2; |
|
||||
rgb.g = t1 - t3; |
|
||||
} else if (h < 300) { |
|
||||
rgb.b = t1; |
|
||||
rgb.g = t2; |
|
||||
rgb.r = t2 + t3; |
|
||||
} else if (h < 360) { |
|
||||
rgb.r = t1; |
|
||||
rgb.g = t2; |
|
||||
rgb.b = t1 - t3; |
|
||||
} else { |
|
||||
rgb.r = 0; |
|
||||
rgb.g = 0; |
|
||||
rgb.b = 0; |
|
||||
} |
|
||||
} |
|
||||
return { |
|
||||
r: Math.round(rgb.r), |
|
||||
g: Math.round(rgb.g), |
|
||||
b: Math.round(rgb.b) |
|
||||
}; |
|
||||
}, |
|
||||
rgbToHsb(rgb) { |
|
||||
let hsb = { |
|
||||
h: 0, |
|
||||
s: 0, |
|
||||
b: 0 |
|
||||
}; |
|
||||
let min = Math.min(rgb.r, rgb.g, rgb.b); |
|
||||
let max = Math.max(rgb.r, rgb.g, rgb.b); |
|
||||
let delta = max - min; |
|
||||
hsb.b = max; |
|
||||
hsb.s = max != 0 ? 255 * delta / max : 0; |
|
||||
if (hsb.s != 0) { |
|
||||
if (rgb.r == max) hsb.h = (rgb.g - rgb.b) / delta; |
|
||||
else if (rgb.g == max) hsb.h = 2 + (rgb.b - rgb.r) / delta; |
|
||||
else hsb.h = 4 + (rgb.r - rgb.g) / delta; |
|
||||
} else hsb.h = -1; |
|
||||
hsb.h *= 60; |
|
||||
if (hsb.h < 0) hsb.h = 0; |
|
||||
hsb.s *= 100 / 255; |
|
||||
hsb.b *= 100 / 255; |
|
||||
return hsb; |
|
||||
}, |
|
||||
getSelectorQuery() { |
|
||||
const views = uni.createSelectorQuery().in(this); |
|
||||
views |
|
||||
.selectAll('.boxs') |
|
||||
.boundingClientRect(data => { |
|
||||
if (!data || data.length === 0) { |
|
||||
setTimeout(() => this.getSelectorQuery(), 20) |
|
||||
return |
|
||||
} |
|
||||
this.position = data; |
|
||||
// this.site[0].top = data[0].height; |
|
||||
// this.site[0].left = 0; |
|
||||
// this.site[1].left = data[1].width; |
|
||||
// this.site[2].left = data[2].width; |
|
||||
this.setColorBySelect(this.rgba); |
|
||||
}) |
|
||||
.exec(); |
|
||||
} |
|
||||
}, |
|
||||
watch: { |
|
||||
spareColor(newVal) { |
|
||||
this.colorList = newVal; |
|
||||
} |
|
||||
} |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.t-wrapper { |
|
||||
position: fixed; |
|
||||
top: 0; |
|
||||
bottom: 0; |
|
||||
left: 0; |
|
||||
width: 100%; |
|
||||
box-sizing: border-box; |
|
||||
z-index: 9999; |
|
||||
} |
|
||||
|
|
||||
.t-box { |
|
||||
width: 100%; |
|
||||
position: absolute; |
|
||||
bottom: 0; |
|
||||
padding: 30upx 0; |
|
||||
padding-top: 0; |
|
||||
background: #fff; |
|
||||
transition: all 0.3s; |
|
||||
transform: translateY(100%); |
|
||||
|
|
||||
&.active { |
|
||||
transform: translateY(0%); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.t-header { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
width: 100%; |
|
||||
height: 100upx; |
|
||||
border-bottom: 1px #eee solid; |
|
||||
box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1); |
|
||||
background: #fff; |
|
||||
} |
|
||||
|
|
||||
.t-header-button { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
width: 150upx; |
|
||||
height: 100upx; |
|
||||
font-size: 30upx; |
|
||||
color: #666; |
|
||||
padding-left: 20upx; |
|
||||
|
|
||||
&:last-child { |
|
||||
justify-content: flex-end; |
|
||||
padding-right: 20upx; |
|
||||
} |
|
||||
|
|
||||
&.confrim { |
|
||||
color: #007AFF; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.t-mask { |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
bottom: 0; |
|
||||
background: rgba(0, 0, 0, 0.6); |
|
||||
z-index: -1; |
|
||||
transition: all 0.3s; |
|
||||
opacity: 0; |
|
||||
|
|
||||
&.active { |
|
||||
opacity: 1; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.t-color__box { |
|
||||
position: relative; |
|
||||
height: 400upx; |
|
||||
background: rgb(255, 0, 0); |
|
||||
overflow: hidden; |
|
||||
box-sizing: border-box; |
|
||||
margin: 0 20upx; |
|
||||
margin-top: 20upx; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.t-background { |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
bottom: 0; |
|
||||
background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0)); |
|
||||
} |
|
||||
|
|
||||
.t-color-mask { |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
bottom: 0; |
|
||||
width: 100%; |
|
||||
height: 400upx; |
|
||||
background: linear-gradient(to top, #000, rgba(0, 0, 0, 0)); |
|
||||
} |
|
||||
|
|
||||
.t-pointer { |
|
||||
position: absolute; |
|
||||
bottom: -8px; |
|
||||
left: -8px; |
|
||||
z-index: 2; |
|
||||
width: 15px; |
|
||||
height: 15px; |
|
||||
border: 1px #fff solid; |
|
||||
border-radius: 50%; |
|
||||
} |
|
||||
|
|
||||
.t-show-color { |
|
||||
width: 100upx; |
|
||||
height: 50upx; |
|
||||
} |
|
||||
|
|
||||
.t-control__box { |
|
||||
margin-top: 50upx; |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
padding-left: 20upx; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.t-control__color { |
|
||||
flex-shrink: 0; |
|
||||
width: 100upx; |
|
||||
height: 100upx; |
|
||||
border-radius: 50%; |
|
||||
background-color: #fff; |
|
||||
background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee), |
|
||||
linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee); |
|
||||
background-size: 36upx 36upx; |
|
||||
background-position: 0 0, 18upx 18upx; |
|
||||
border: 1px #eee solid; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
.t-control__color-content { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
} |
|
||||
|
|
||||
.t-control-box__item { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
justify-content: space-between; |
|
||||
width: 100%; |
|
||||
padding: 0 30upx; |
|
||||
} |
|
||||
|
|
||||
.t-controller { |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
height: 16px; |
|
||||
background-color: #fff; |
|
||||
background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee), |
|
||||
linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee); |
|
||||
background-size: 32upx 32upx; |
|
||||
background-position: 0 0, 16upx 16upx; |
|
||||
} |
|
||||
|
|
||||
.t-hue { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); |
|
||||
} |
|
||||
|
|
||||
.t-transparency { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
background: linear-gradient(to right, rgba(0, 0, 0, 0) 0%, rgb(0, 0, 0)); |
|
||||
} |
|
||||
|
|
||||
.t-circle { |
|
||||
position: absolute; |
|
||||
top: -2px; |
|
||||
width: 20px; |
|
||||
height: 20px; |
|
||||
box-sizing: border-box; |
|
||||
border-radius: 50%; |
|
||||
background: #fff; |
|
||||
box-shadow: 0 0 2px 1px rgba(0, 0, 0, 0.1); |
|
||||
} |
|
||||
|
|
||||
.t-result__box { |
|
||||
margin-top: 20upx; |
|
||||
padding: 10upx; |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.t-result__item { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
padding: 10upx; |
|
||||
width: 100%; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.t-result__box-input { |
|
||||
padding: 10upx 0; |
|
||||
width: 100%; |
|
||||
font-size: 28upx; |
|
||||
box-shadow: 0 0 1px 1px rgba(0, 0, 0, 0.1); |
|
||||
color: #999; |
|
||||
text-align: center; |
|
||||
background: #fff; |
|
||||
} |
|
||||
|
|
||||
.t-result__box-text { |
|
||||
margin-top: 10upx; |
|
||||
font-size: 28upx; |
|
||||
line-height: 2; |
|
||||
} |
|
||||
|
|
||||
.t-select { |
|
||||
flex-shrink: 0; |
|
||||
width: 150upx; |
|
||||
padding: 0 30upx; |
|
||||
|
|
||||
.t-result__box-input { |
|
||||
border-radius: 10upx; |
|
||||
border: none; |
|
||||
color: #999; |
|
||||
box-shadow: 1px 1px 2px 1px rgba(0, 0, 0, 0.1); |
|
||||
background: #fff; |
|
||||
|
|
||||
&:active { |
|
||||
box-shadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.1); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.t-alternative { |
|
||||
display: flex; |
|
||||
flex-wrap: wrap; |
|
||||
width: 100%; |
|
||||
padding-right: 10upx; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.t-alternative__item { |
|
||||
margin-left: 12upx; |
|
||||
margin-top: 10upx; |
|
||||
width: 50upx; |
|
||||
height: 50upx; |
|
||||
border-radius: 10upx; |
|
||||
background-color: #fff; |
|
||||
background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee), |
|
||||
linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee); |
|
||||
background-size: 36upx 36upx; |
|
||||
background-position: 0 0, 18upx 18upx; |
|
||||
border: 1px #eee solid; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
&:active { |
|
||||
transition: all 0.3s; |
|
||||
transform: scale(1.1); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.t-alternative__item-content { |
|
||||
width: 50upx; |
|
||||
height: 50upx; |
|
||||
background: rgba(255, 0, 0, 0.5); |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,123 +0,0 @@ |
|||||
<script setup> |
|
||||
const props = defineProps({ |
|
||||
img: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
title: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
subTitle: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
price: { |
|
||||
type: Number, |
|
||||
default: 0 |
|
||||
}, |
|
||||
type: { |
|
||||
type: String, |
|
||||
default: 'line' // line, rect |
|
||||
} |
|
||||
}) |
|
||||
</script> |
|
||||
<template> |
|
||||
<view class="card" :class="type" @click="$emit('click')"> |
|
||||
<image class="img" :src="img" /> |
|
||||
<view class="content"> |
|
||||
<view class="title">{{ title }}</view> |
|
||||
<view class="subTitle">{{ subTitle }}</view> |
|
||||
<view class="price">¥{{ price }}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
<style lang="scss" scoped> |
|
||||
.card { |
|
||||
padding: 0; |
|
||||
border-radius: 10px; |
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
|
||||
height: 240rpx; |
|
||||
width: 700rpx; |
|
||||
padding: 20rpx; |
|
||||
margin: 10rpx; |
|
||||
position: relative; |
|
||||
|
|
||||
.img { |
|
||||
height: 200rpx; |
|
||||
width: 200rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.line { |
|
||||
display: flex; |
|
||||
|
|
||||
.content { |
|
||||
height: 200rpx; |
|
||||
padding-left: 20rpx; |
|
||||
|
|
||||
.title { |
|
||||
width: 400rpx; |
|
||||
font-size: 35rpx; |
|
||||
} |
|
||||
|
|
||||
.subTitle { |
|
||||
width: 400rpx; |
|
||||
height: 90rpx; |
|
||||
margin-top: 10rpx; |
|
||||
font-size: 20rpx; |
|
||||
color: rgb(87, 87, 87); |
|
||||
} |
|
||||
|
|
||||
.price { |
|
||||
font-size: 40rpx; |
|
||||
color: red; |
|
||||
width: 400rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.rect { |
|
||||
border-radius: 10px; |
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
|
||||
height: 500rpx; |
|
||||
width: 350rpx; |
|
||||
padding: 0; |
|
||||
margin: 10rpx; |
|
||||
display: inline-block; |
|
||||
|
|
||||
.img { |
|
||||
border-radius: 10px 10px 0 0; |
|
||||
height: 350rpx; |
|
||||
width: 350rpx; |
|
||||
} |
|
||||
|
|
||||
.content { |
|
||||
padding: 0 20rpx; |
|
||||
margin: 0; |
|
||||
height: 140rpx; |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
justify-content: space-between; |
|
||||
|
|
||||
.title { |
|
||||
width: 330rpx; |
|
||||
font-size: 25rpx; |
|
||||
} |
|
||||
|
|
||||
.subTitle { |
|
||||
width: 330rpx; |
|
||||
height: 60rpx; |
|
||||
font-size: 20rpx; |
|
||||
color: rgb(87, 87, 87); |
|
||||
} |
|
||||
|
|
||||
.price { |
|
||||
font-size: 30rpx; |
|
||||
color: red; |
|
||||
width: 100%; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,72 +0,0 @@ |
|||||
<script setup> |
|
||||
import { computed } from 'vue'; |
|
||||
|
|
||||
const props = defineProps({ |
|
||||
icon: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
size: { |
|
||||
type: Number, |
|
||||
default: 80 |
|
||||
}, |
|
||||
label: { |
|
||||
type: String, |
|
||||
default: "菜单" |
|
||||
}, |
|
||||
labelColor: { |
|
||||
type: String, |
|
||||
default: '#515151' |
|
||||
}, |
|
||||
type: { |
|
||||
type: String, |
|
||||
default: 'circle' |
|
||||
} |
|
||||
}) |
|
||||
const menuStyle = computed(() => { |
|
||||
return { |
|
||||
width: `${props.size + 40}rpx`, |
|
||||
height: `${props.size + 40}rpx` |
|
||||
} |
|
||||
}) |
|
||||
const titleStype = computed(() => { |
|
||||
return { |
|
||||
width: `${props.size + 40}rpx`, |
|
||||
color: props.labelColor |
|
||||
} |
|
||||
}) |
|
||||
</script> |
|
||||
<template> |
|
||||
<view class="menu" :class="type" :style="menuStyle" @click="$emit('click')"> |
|
||||
<image :src="icon" style="width: 100%;height: 100%"></image> |
|
||||
</view> |
|
||||
<view class="title" :style="titleStype">{{ label }}</view> |
|
||||
</template> |
|
||||
<style lang="scss" scoped> |
|
||||
.menu { |
|
||||
padding: 20rpx; |
|
||||
} |
|
||||
|
|
||||
.circle { |
|
||||
padding: 20rpx; |
|
||||
border-radius: 100%; |
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
|
||||
|
|
||||
&:active { |
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.8); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.rect { |
|
||||
padding: 15rpx; |
|
||||
margin-bottom: -15rpx; |
|
||||
|
|
||||
&:active { |
|
||||
opacity: 0.5; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.title { |
|
||||
text-align: center; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,221 +0,0 @@ |
|||||
<template> |
|
||||
<view class="geek-card" @click="$emit('click')"> |
|
||||
<view class="geek-header"> |
|
||||
<view class="geek-shop">{{ shop }} > </view> |
|
||||
<view class="geek-status">{{ status }}</view> |
|
||||
</view> |
|
||||
<view class="geek-content"> |
|
||||
<image class="geek-img" :src="img"></image> |
|
||||
<view class="geek-label">{{ label }}</view> |
|
||||
<view class="geek-sum"> |
|
||||
<view class="geek-price"> |
|
||||
<view class="geek-sum-1">¥{{ number.integerPart }}</view> |
|
||||
<view class="geek-sum-2">. {{ number.decimalPart }}</view> |
|
||||
</view> |
|
||||
<view class="geek-sum-3">共 {{ num }} 件</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="geek-footer"> |
|
||||
<view class="geek-more" @click="$emit('more')">更多</view> |
|
||||
<view class="geek-buttonGroup"> |
|
||||
<view class="geek-btn" @click="$emit('sell')">卖了换钱</view> |
|
||||
<view class="geek-btn" @click="$emit('return')">退换/售后</view> |
|
||||
<view class="geek-buy" @click="$emit('again')">再次购买</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
<script setup> |
|
||||
import { computed } from 'vue'; |
|
||||
|
|
||||
const props = defineProps({ |
|
||||
shop: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
status: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
img: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
label: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
price: { |
|
||||
type: Number, |
|
||||
default: 0 |
|
||||
}, |
|
||||
num: { |
|
||||
type: Number, |
|
||||
default: 0 |
|
||||
}, |
|
||||
type: { |
|
||||
type: String, |
|
||||
default: 'line' |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
const number = computed(() => { |
|
||||
return formatNumber(props.price, 2) |
|
||||
}) |
|
||||
|
|
||||
function formatNumber(num, place) { |
|
||||
|
|
||||
let fixedNum = Number(num).toFixed(place); // 将数字保留两位小数 |
|
||||
let parts = fixedNum.split('.'); // 拆分整数部分和小数部分 |
|
||||
let integerPart = parts[0]; // 整数部分 |
|
||||
let decimalPart = parts[1]; // 小数部分 |
|
||||
|
|
||||
// 使用padStart方法补0到小数部分 |
|
||||
decimalPart = decimalPart.padStart(place, '0'); |
|
||||
|
|
||||
return { |
|
||||
integerPart, decimalPart |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
<style lang="scss" scoped> |
|
||||
.geek-card { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
justify-content: space-between; |
|
||||
position: relative; |
|
||||
padding: 20rpx; |
|
||||
background-color: white; |
|
||||
border: 1rpx solid rgb(183, 183, 183); |
|
||||
border-radius: 20rpx; |
|
||||
height: 360rpx; |
|
||||
width: 700rpx; |
|
||||
margin: 25rpx; |
|
||||
|
|
||||
.geek-header { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
height: 60rpx; |
|
||||
width: 100%; |
|
||||
margin-bottom: 6rpx; |
|
||||
|
|
||||
.geek-shop { |
|
||||
font-size: 28rpx; |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
|
|
||||
.geek-status { |
|
||||
width: 100rpx; |
|
||||
text-align: center; |
|
||||
opacity: 0.5; |
|
||||
font-size: 25rpx; |
|
||||
text-align: end; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
.geek-content { |
|
||||
position: relative; |
|
||||
height: auto; |
|
||||
width: 664rpx; |
|
||||
|
|
||||
.geek-img { |
|
||||
border-radius: 30rpx; |
|
||||
height: 170rpx; |
|
||||
width: 170rpx; |
|
||||
display: inline-block; |
|
||||
} |
|
||||
|
|
||||
.geek-label { |
|
||||
position: absolute; |
|
||||
top: 40rpx; |
|
||||
left: 178rpx; |
|
||||
|
|
||||
width: 350rpx; |
|
||||
|
|
||||
display: -webkit-box; |
|
||||
-webkit-line-clamp: 2; |
|
||||
-webkit-box-orient: vertical; |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
} |
|
||||
|
|
||||
.geek-sum { |
|
||||
position: absolute; |
|
||||
top: 44rpx; |
|
||||
right: 20rpx; |
|
||||
|
|
||||
width: 150rpx; |
|
||||
height: 84rpx; |
|
||||
|
|
||||
.geek-price { |
|
||||
display: flex; |
|
||||
justify-content: flex-end; |
|
||||
font-weight: bold; |
|
||||
|
|
||||
.geek-sum-1 { |
|
||||
font-size: 32rpx; |
|
||||
} |
|
||||
|
|
||||
.geek-sum-2 { |
|
||||
padding-top: 20rpx; |
|
||||
font-size: 20rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
.geek-sum-3 { |
|
||||
font-size: 20rpx; |
|
||||
text-align: end; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.geek-footer { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
height: 60rpx; |
|
||||
width: 100%; |
|
||||
font-size: 25rpx; |
|
||||
|
|
||||
.geek-more { |
|
||||
height: 60rpx; |
|
||||
margin-right: 110rpx; |
|
||||
text-align: center; |
|
||||
line-height: 60rpx; |
|
||||
display: inline-block; |
|
||||
} |
|
||||
|
|
||||
.geek-buttonGroup { |
|
||||
height: 60rpx; |
|
||||
display: inline-block; |
|
||||
|
|
||||
.geek-btn { |
|
||||
border: 1rpx solid #E9E9E9; |
|
||||
width: 140rpx; |
|
||||
height: 60rpx; |
|
||||
border-radius: 80rpx; |
|
||||
opacity: 0.8; |
|
||||
padding: 10rpx; |
|
||||
margin-right: 10rpx; |
|
||||
text-align: center; |
|
||||
display: inline-block; |
|
||||
|
|
||||
} |
|
||||
|
|
||||
.geek-buy { |
|
||||
width: 140rpx; |
|
||||
height: 60rpx; |
|
||||
border-radius: 80rpx; |
|
||||
opacity: 0.8; |
|
||||
padding: 10rpx; |
|
||||
text-align: center; |
|
||||
display: inline-block; |
|
||||
color: #F25E53; |
|
||||
border: 1rpx solid #F4DADA; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
</style> |
|
||||
@ -1,90 +0,0 @@ |
|||||
# uni-app 二维码生成器 |
|
||||
|
|
||||
改自作者诗小柒的tki-qrcode二维码生成器 |
|
||||
|
|
||||
### 作者:董玉可 |
|
||||
|
|
||||
1. H5、微信小程序、支付宝小程序、APP,其它平台的小程序没有测试 |
|
||||
2. 使用canvas生成 |
|
||||
3. 可设置二维码背景色,前景色,角标色 |
|
||||
4. 可设置二维码logo |
|
||||
|
|
||||
## 重要的事情说3遍 重要的事情说3遍 重要的事情说3遍 |
|
||||
|
|
||||
1. IOS、Android真机都可以正常生成二维码 |
|
||||
2. 使用的时候出现无法生成二维码或空白的请先github直接打包下载,问题依旧,请github上直接提出问题并配图 |
|
||||
3. 有问题请说明问题原因,这样我才好定位,否则我也无法解决 |
|
||||
4. 如果此插件有帮助到你请打5分或赞赏我,你的支持是我更新的动力 |
|
||||
|
|
||||
+ 图片1 是微信小程序真机实测 |
|
||||
+ 图片2 是微信小程序模拟实测 |
|
||||
+ 图片3 是支付宝小程序模拟器实测 |
|
||||
+ 图片4 是安卓真机实测 |
|
||||
+ 图片5 H5 |
|
||||
|
|
||||
### 使用方法 |
|
||||
|
|
||||
在 `template` 中使用 |
|
||||
|
|
||||
```javascript |
|
||||
<view class="qrimg"> |
|
||||
<geek-qrcode |
|
||||
ref="qrcode" |
|
||||
:cid="cid" |
|
||||
:val="val" |
|
||||
:size="size" |
|
||||
:unit="unit" |
|
||||
:background="background" |
|
||||
:foreground="foreground" |
|
||||
:pdground="pdground" |
|
||||
:icon="icon" |
|
||||
:iconSize="iconsize" |
|
||||
:lv="lv" |
|
||||
:onval="onval" |
|
||||
:loadMake="loadMake" |
|
||||
:usingComponents="usingComponents" |
|
||||
:showLoading="showLoading" |
|
||||
:loadingText="loadingText" |
|
||||
@result="qrR" /> |
|
||||
</view> |
|
||||
``` |
|
||||
|
|
||||
### 属性 |
|
||||
|
|
||||
| 属性名 | 类型 | 默认值 | 可选值 | 说明 | |
|
||||
| :-------------- | :-----: | :---------------: | :----: | :-------------------------------------------------------------------------------------------------- | |
|
||||
| cid | String | tki-qrcode-canvas | | canvasId,页面存在多个二维码组件时需设置不同的ID | |
|
||||
| size | Number | 200 | | 生成的二维码大小 | |
|
||||
| unit | String | upx | px | 大小单位尺寸 | |
|
||||
| show | Boolean | true | | 默认使用组件中的image标签显示二维码 | |
|
||||
| val | String | 二维码 | | 要生成的内容 | |
|
||||
| background | String | #000000 | | 二维码背景色 | |
|
||||
| foreground | String | #ffffff | | 二维码前景色 | |
|
||||
| pdground | String | #ffffff | | 二维码角标色 | |
|
||||
| icon | String | | | 二维码图标URL(必须是本地图片,网络图需要先下载至本地) | |
|
||||
| iconSize | Number | 40 | | 二维码图标大小(注意此大小不会跟随二维码size 动态变化,设置时需要注意大小,不要太大,以免无法识别) | |
|
||||
| lv | Number | 3 | | 容错级别(一般不用设置) | |
|
||||
| onval | Boolean | false | | 监听val值变化自动重新生成二维码 | |
|
||||
| loadMake | Boolean | false | | 组件初始化完成后自动生成二维码,val需要有值 | |
|
||||
| usingComponents | Boolean | true | false | 是否使用了自定义组件模式(主要是为了修复非自定义组件模式时 v-if 无法生成二维码的问题) | |
|
||||
| showLoading | Boolean | true | false | 是否显示loading | |
|
||||
| loadingText | String | 二维码生成中 | | loading文字 | |
|
||||
|
|
||||
### 方法 |
|
||||
|
|
||||
| 方法名 | 参数 | 默认值 | 说明 | |
|
||||
| :----------- | :--: | :----: | :-------------------------------------------------- | |
|
||||
| _makeCode() | | | 生成二维码 | |
|
||||
| _clearCode() | | | 清空二维码(清空二维码会触发result回调 返回值为空) | |
|
||||
| _saveCode() | | | 保存二维码到图库 | |
|
||||
|
|
||||
### 事件 |
|
||||
|
|
||||
| 事件名 | 返回值 | 说明 | |
|
||||
| :----- | :----------------------------: | --------------------------------------: | |
|
||||
| result | 生成的图片base64或图片临时地址 | 返回二维码路径 注:_clearCode()后返回空 | |
|
||||
|
|
||||
### 感谢 |
|
||||
|
|
||||
[uni-app](https://uniapp.dcloud.io/ "uni-app") |
|
||||
[qrcode](https://github.com/aralejs/qrcode "qrcode") |
|
||||
@ -1,205 +0,0 @@ |
|||||
<template xlang="wxml" minapp="mpvue"> |
|
||||
<view class="geek-qrcode"> |
|
||||
<canvas class="geek-qrcode-canvas" :canvas-id="cid" :style="{width:cpSize+'px',height:cpSize+'px'}" /> |
|
||||
<image v-show="show" :src="result" :style="{width:cpSize+'px',height:cpSize+'px'}" /> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import QRCode from "./qrcode.js" |
|
||||
let qrcode |
|
||||
export default { |
|
||||
name: "geek-qrcode", |
|
||||
props: { |
|
||||
cid: { |
|
||||
type: String, |
|
||||
default: 'geek-qrcode-canvas' |
|
||||
}, |
|
||||
size: { |
|
||||
type: Number, |
|
||||
default: 200 |
|
||||
}, |
|
||||
unit: { |
|
||||
type: String, |
|
||||
default: 'upx' |
|
||||
}, |
|
||||
show: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
}, |
|
||||
val: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
background: { |
|
||||
type: String, |
|
||||
default: '#ffffff' |
|
||||
}, |
|
||||
foreground: { |
|
||||
type: String, |
|
||||
default: '#000000' |
|
||||
}, |
|
||||
pdground: { |
|
||||
type: String, |
|
||||
default: '#000000' |
|
||||
}, |
|
||||
icon: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
iconSize: { |
|
||||
type: Number, |
|
||||
default: 40 |
|
||||
}, |
|
||||
lv: { |
|
||||
type: Number, |
|
||||
default: 3 |
|
||||
}, |
|
||||
onval: { |
|
||||
type: Boolean, |
|
||||
default: false |
|
||||
}, |
|
||||
loadMake: { |
|
||||
type: Boolean, |
|
||||
default: false |
|
||||
}, |
|
||||
usingComponents: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
}, |
|
||||
showLoading: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
}, |
|
||||
loadingText: { |
|
||||
type: String, |
|
||||
default: '二维码生成中' |
|
||||
}, |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
result: '', |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
_makeCode() { |
|
||||
let that = this |
|
||||
if (!this._empty(this.val)) { |
|
||||
qrcode = new QRCode({ |
|
||||
context: that, // 上下文环境 |
|
||||
canvasId:that.cid, // canvas-id |
|
||||
usingComponents: that.usingComponents, // 是否是自定义组件 |
|
||||
showLoading: that.showLoading, // 是否显示loading |
|
||||
loadingText: that.loadingText, // loading文字 |
|
||||
text: that.val, // 生成内容 |
|
||||
size: that.cpSize, // 二维码大小 |
|
||||
background: that.background, // 背景色 |
|
||||
foreground: that.foreground, // 前景色 |
|
||||
pdground: that.pdground, // 定位角点颜色 |
|
||||
correctLevel: that.lv, // 容错级别 |
|
||||
image: that.icon, // 二维码图标 |
|
||||
imageSize: that.iconSize,// 二维码图标大小 |
|
||||
cbResult: function (res) { // 生成二维码的回调 |
|
||||
that._result(res) |
|
||||
}, |
|
||||
}); |
|
||||
} else { |
|
||||
uni.showToast({ |
|
||||
title: '二维码内容不能为空', |
|
||||
icon: 'none', |
|
||||
duration: 2000 |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
_clearCode() { |
|
||||
this._result('') |
|
||||
qrcode.clear() |
|
||||
}, |
|
||||
_saveCode() { |
|
||||
let that = this; |
|
||||
if (this.result != "") { |
|
||||
uni.saveImageToPhotosAlbum({ |
|
||||
filePath: that.result, |
|
||||
success: function () { |
|
||||
uni.showToast({ |
|
||||
title: '二维码保存成功', |
|
||||
icon: 'success', |
|
||||
duration: 2000 |
|
||||
}); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
_result(res) { |
|
||||
this.result = res; |
|
||||
this.$emit('result', res) |
|
||||
}, |
|
||||
_empty(v) { |
|
||||
let tp = typeof v, |
|
||||
rt = false; |
|
||||
if (tp == "number" && String(v) == "") { |
|
||||
rt = true |
|
||||
} else if (tp == "undefined") { |
|
||||
rt = true |
|
||||
} else if (tp == "object") { |
|
||||
if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true |
|
||||
} else if (tp == "string") { |
|
||||
if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true |
|
||||
} else if (tp == "function") { |
|
||||
rt = false |
|
||||
} |
|
||||
return rt |
|
||||
} |
|
||||
}, |
|
||||
watch: { |
|
||||
size: function (n, o) { |
|
||||
if (n != o && !this._empty(n)) { |
|
||||
this.cSize = n |
|
||||
if (!this._empty(this.val)) { |
|
||||
setTimeout(() => { |
|
||||
this._makeCode() |
|
||||
}, 100); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
val: function (n, o) { |
|
||||
if (this.onval) { |
|
||||
if (n != o && !this._empty(n)) { |
|
||||
setTimeout(() => { |
|
||||
this._makeCode() |
|
||||
}, 0); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
cpSize() { |
|
||||
if(this.unit == "upx"){ |
|
||||
return uni.upx2px(this.size) |
|
||||
}else{ |
|
||||
return this.size |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
mounted: function () { |
|
||||
if (this.loadMake) { |
|
||||
if (!this._empty(this.val)) { |
|
||||
setTimeout(() => { |
|
||||
this._makeCode() |
|
||||
}, 0); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
} |
|
||||
</script> |
|
||||
<style> |
|
||||
.geek-qrcode { |
|
||||
position: relative; |
|
||||
} |
|
||||
.geek-qrcode-canvas { |
|
||||
position: fixed; |
|
||||
top: -99999upx; |
|
||||
left: -99999upx; |
|
||||
z-index: -99999; |
|
||||
} |
|
||||
</style> |
|
||||
File diff suppressed because it is too large
@ -1,84 +0,0 @@ |
|||||
<template> |
|
||||
<view :style="labelStyle" class="title">{{ label }}</view> |
|
||||
<view :style="numberStyle" class="number">{{ formatNumber(number,props.place) }}</view> |
|
||||
</template> |
|
||||
|
|
||||
<script setup> |
|
||||
import { computed } from 'vue'; |
|
||||
|
|
||||
const props = defineProps({ |
|
||||
label: { |
|
||||
type: String, |
|
||||
default: "订单数量" |
|
||||
}, |
|
||||
width: { |
|
||||
type: Number, |
|
||||
default: 300 |
|
||||
}, |
|
||||
labelColor: { |
|
||||
type: String, |
|
||||
default: '#white' |
|
||||
}, |
|
||||
labelSize: { |
|
||||
type: Number, |
|
||||
default: 16 |
|
||||
}, |
|
||||
number: { |
|
||||
type: Number, |
|
||||
default: 80 |
|
||||
}, |
|
||||
numberColor: { |
|
||||
type: String, |
|
||||
default: 'red' |
|
||||
}, |
|
||||
numberSize: { |
|
||||
type: Number, |
|
||||
default: 20 |
|
||||
}, |
|
||||
place: { |
|
||||
type: Number, |
|
||||
default: 2 |
|
||||
} |
|
||||
}) |
|
||||
const labelStyle = computed(() => { |
|
||||
return { |
|
||||
width: `${props.width}rpx`, |
|
||||
color: props.labelColor, |
|
||||
fontSize: `${props.labelSize}px` |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
const numberStyle = computed(() => { |
|
||||
return { |
|
||||
width: `${props.width}rpx`, |
|
||||
color: props.numberColor, |
|
||||
fontSize: `${props.numberSize}px` |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
function formatNumber(num,place) { |
|
||||
|
|
||||
let fixedNum = Number(num).toFixed(place); // 将数字保留两位小数 |
|
||||
let parts = fixedNum.split('.'); // 拆分整数部分和小数部分 |
|
||||
let integerPart = parts[0]; // 整数部分 |
|
||||
let decimalPart = parts[1]; // 小数部分 |
|
||||
|
|
||||
// 使用padStart方法补0到小数部分 |
|
||||
decimalPart = decimalPart.padStart(place, '0'); |
|
||||
|
|
||||
return integerPart + '.' + decimalPart; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.title { |
|
||||
text-align: center; |
|
||||
} |
|
||||
|
|
||||
.number { |
|
||||
text-align: center; |
|
||||
} |
|
||||
</style> |
|
||||
|
|
||||
@ -1,18 +0,0 @@ |
|||||
export interface Menu { |
|
||||
icon: string, |
|
||||
label: string |
|
||||
} |
|
||||
|
|
||||
export interface Commodity { |
|
||||
img: string, |
|
||||
title: string, |
|
||||
subTitle?: string, |
|
||||
price: number |
|
||||
} |
|
||||
|
|
||||
export interface CommodityOrder extends Commodity { |
|
||||
shop: string, |
|
||||
status: string, |
|
||||
num: number, |
|
||||
label?:string |
|
||||
} |
|
||||
@ -1,131 +0,0 @@ |
|||||
export default [ |
|
||||
{ |
|
||||
groupName: 'geek组件', |
|
||||
groupName_en: 'Page', |
|
||||
list: [ |
|
||||
{ |
|
||||
path: '/pages_geek/pages/index/index', |
|
||||
icon: 'wxCenter', |
|
||||
title: '组件展示', |
|
||||
title_en: 'index', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_geek/pages/code/index', |
|
||||
icon: 'wxCenter', |
|
||||
title: '二维码', |
|
||||
title_en: 'index', |
|
||||
} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
groupName: '部件', |
|
||||
groupName_en: 'Parts', |
|
||||
list: [ |
|
||||
{ |
|
||||
path: '/pages_template/pages/coupon/index', |
|
||||
icon: 'coupon', |
|
||||
title: 'Coupon 优惠券', |
|
||||
title_en: 'Coupon', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_template/pages/citySelect/index', |
|
||||
icon: 'citySelect', |
|
||||
title: 'CitySelect 城市选择', |
|
||||
title_en: 'CitySelect', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_template/pages/submitBar/index', |
|
||||
icon: 'submitBar', |
|
||||
title: 'SubmitBar 提交订单栏', |
|
||||
title_en: 'SubmitBar', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_template/pages/keyboardPay/index', |
|
||||
icon: 'keyboardPay', |
|
||||
title: 'KeyboardPay 自定义键盘支付模板', |
|
||||
title_en: 'KeyboardPay', |
|
||||
}, |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
groupName: '报表', |
|
||||
groupName_en: 'Parts', |
|
||||
list: [ |
|
||||
{ |
|
||||
path: '/pages_qiun/pages/finance/index', |
|
||||
icon: 'coupon', |
|
||||
title: '财务报告', |
|
||||
title_en: 'finace', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_qiun/pages/main/index', |
|
||||
icon: 'coupon', |
|
||||
title: '数据报表中心', |
|
||||
title_en: 'main', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_qiun/pages/school/index', |
|
||||
icon: 'coupon', |
|
||||
title: '智慧教育报表中心', |
|
||||
title_en: 'school', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_qiun/pages/sport/index', |
|
||||
icon: 'coupon', |
|
||||
title: '运动报告', |
|
||||
title_en: 'sport', |
|
||||
}, |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
groupName: '页面', |
|
||||
groupName_en: 'Page', |
|
||||
list: [ |
|
||||
{ |
|
||||
path: '/pages_template/pages/wxCenter/index', |
|
||||
icon: 'wxCenter', |
|
||||
title: 'WxCenter 仿微信个人中心', |
|
||||
title_en: 'WxCenter', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_template/pages/mallMenu/index1', |
|
||||
icon: 'mall_menu_1', |
|
||||
title: 'MallMenu 垂直分类(左右独立)', |
|
||||
title_en: 'MallMenu 1', |
|
||||
}, { |
|
||||
path: '/pages_template/pages/mallMenu/index2', |
|
||||
icon: 'mall_menu_2', |
|
||||
title: 'MallMenu 垂直分类(左右联动)', |
|
||||
title_en: 'MallMenu 2', |
|
||||
}, { |
|
||||
path: '/pages_template/pages/comment/index', |
|
||||
icon: 'comment', |
|
||||
title: 'Comment 评论列表', |
|
||||
title_en: 'Comment', |
|
||||
}, { |
|
||||
path: '/pages_template/pages/order/index', |
|
||||
icon: 'order', |
|
||||
title: 'Order 订单列表', |
|
||||
title_en: 'Order', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_template/pages/login/index1', |
|
||||
icon: 'login', |
|
||||
title: 'Login 登录界面', |
|
||||
title_en: 'Login', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_template/pages/login/index2', |
|
||||
icon: 'login', |
|
||||
title: 'Login 水滴登录', |
|
||||
title_en: 'Login', |
|
||||
}, |
|
||||
{ |
|
||||
path: '/pages_template/pages/address/index', |
|
||||
icon: 'address', |
|
||||
title: 'Address 收货地址', |
|
||||
title_en: 'Address', |
|
||||
}, |
|
||||
] |
|
||||
}, |
|
||||
] |
|
||||
@ -1,65 +0,0 @@ |
|||||
<template> |
|
||||
<view class="wrap"> |
|
||||
<view class="list-wrap"> |
|
||||
<u-cell-group title-bg-color="rgb(243, 244, 246)" :title="getGroupTitle(item)" v-for="(item, index) in list" |
|
||||
:key="index"> |
|
||||
<u-cell :titleStyle="{ fontWeight: 500 }" @click="openPage(item1.path)" :title="getFieldTitle(item1)" |
|
||||
v-for="(item1, index1) in item.list" :key="index1"> |
|
||||
<template v-slot:icon> |
|
||||
<image class="u-cell-icon" :src="getIcon(item1.icon)" mode="widthFix"></image> |
|
||||
</template> |
|
||||
</u-cell> |
|
||||
</u-cell-group> |
|
||||
</view> |
|
||||
<u-gap height="70"></u-gap> |
|
||||
<!-- <u-tabbar :list="vuex_tabbar" :mid-button="true"></u-tabbar> --> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import list from "./template.config.js"; |
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
list: list, |
|
||||
// desc: '收集众多的常用页面和布局,减少开发者的重复工作,让你专注逻辑,事半功倍' |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
getIcon() { |
|
||||
return path => { |
|
||||
return '../static/uview/demo/' + path + '.png'; |
|
||||
return 'https://cdn.uviewui.com/uview/example/' + path + '.png'; |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
methods: { |
|
||||
openPage(path) { |
|
||||
this.$u.route({ |
|
||||
url: path |
|
||||
}) |
|
||||
}, |
|
||||
getGroupTitle(item) { |
|
||||
return item.groupName |
|
||||
}, |
|
||||
getFieldTitle(item) { |
|
||||
return item.title |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style> |
|
||||
/* page { |
|
||||
background-color: rgb(240, 242, 244); |
|
||||
} */ |
|
||||
</style> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.u-cell-icon { |
|
||||
width: 36rpx; |
|
||||
height: 36rpx; |
|
||||
margin-right: 8rpx; |
|
||||
} |
|
||||
</style> |
|
||||
|
|
||||
@ -1,130 +0,0 @@ |
|||||
<template xlang="wxml"> |
|
||||
<view class="container"> |
|
||||
<view class="qrimg"> |
|
||||
<view class="qrimg-i"> |
|
||||
<geek-qrcode v-if="ifShow" cid="qrcode1" ref="qrcode" :val="val" :size="size" :unit="unit" |
|
||||
:background="background" :foreground="foreground" :pdground="pdground" :icon="icon" :iconSize="iconsize" |
|
||||
:lv="lv" :onval="onval" :loadMake="loadMake" :usingComponents="true" @result="qrR" /> |
|
||||
</view> |
|
||||
<view class="qrimg-i"> |
|
||||
<geek-qrcode v-if="ifShow" cid="qrcode2" ref="qrcode2" val="第二个二维码" :size="size" :onval="onval" |
|
||||
:loadMake="loadMake" :usingComponents="true" @result="qrR" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="uni-padding-wrap"> |
|
||||
<view class="uni-title">请输入要生成的二维码内容</view> |
|
||||
</view> |
|
||||
<view class="uni-list"> |
|
||||
<input class="uni-input" placeholder="请输入要生成的二维码内容" v-model="val" /> |
|
||||
</view> |
|
||||
<view class="uni-padding-wrap uni-common-mt"> |
|
||||
<view class="uni-title">设置二维码大小</view> |
|
||||
</view> |
|
||||
<view class="body-view"> |
|
||||
<slider :value="size" @change="sliderchange" min="50" max="500" show-value /> |
|
||||
</view> |
|
||||
<view class="uni-padding-wrap"> |
|
||||
<view class="btns"> |
|
||||
<button type="primary" @tap="selectIcon">选择二维码图标</button> |
|
||||
<button type="primary" @tap="creatQrcode">生成二维码</button> |
|
||||
<button type="primary" @tap="saveQrcode">保存到图库</button> |
|
||||
<button type="warn" @tap="clearQrcode">清除二维码</button> |
|
||||
<button type="warn" @tap="ifQrcode">显示隐藏二维码</button> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
<script> |
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
ifShow: true, |
|
||||
val: '二维码', // 要生成的二维码值 |
|
||||
size: 200, // 二维码大小 |
|
||||
unit: 'upx', // 单位 |
|
||||
background: '#b4e9e2', // 背景色 |
|
||||
foreground: '#309286', // 前景色 |
|
||||
pdground: '#32dbc6', // 角标色 |
|
||||
icon: '', // 二维码图标 |
|
||||
iconsize: 40, // 二维码图标大小 |
|
||||
lv: 3, // 二维码容错级别 , 一般不用设置,默认就行 |
|
||||
onval: false, // val值变化时自动重新生成二维码 |
|
||||
loadMake: true, // 组件加载完成后自动生成二维码 |
|
||||
src: '' // 二维码生成后的图片地址或base64 |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
sliderchange(e) { |
|
||||
this.size = e.detail.value |
|
||||
}, |
|
||||
creatQrcode() { |
|
||||
this.$refs.qrcode._makeCode() |
|
||||
}, |
|
||||
saveQrcode() { |
|
||||
this.$refs.qrcode._saveCode() |
|
||||
}, |
|
||||
qrR(res) { |
|
||||
this.src = res |
|
||||
}, |
|
||||
clearQrcode() { |
|
||||
this.$refs.qrcode._clearCode() |
|
||||
this.val = '' |
|
||||
}, |
|
||||
ifQrcode() { |
|
||||
this.ifShow = !this.ifShow |
|
||||
}, |
|
||||
selectIcon() { |
|
||||
let that = this |
|
||||
uni.chooseImage({ |
|
||||
count: 1, //默认9 |
|
||||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 |
|
||||
sourceType: ['album'], //从相册选择 |
|
||||
success: function (res) { |
|
||||
that.icon = res.tempFilePaths[0] |
|
||||
setTimeout(() => { |
|
||||
that.creatQrcode() |
|
||||
}, 100); |
|
||||
// console.log(res.tempFilePaths); |
|
||||
} |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style> |
|
||||
/* @import "../../../common/icon.css"; */ |
|
||||
.container { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
.qrimg { |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
|
|
||||
.qrimg-i { |
|
||||
margin-right: 10px; |
|
||||
} |
|
||||
|
|
||||
slider { |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
input { |
|
||||
width: 100%; |
|
||||
margin-bottom: 20upx; |
|
||||
} |
|
||||
|
|
||||
.btns { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
button { |
|
||||
width: 100%; |
|
||||
margin-top: 10upx; |
|
||||
}</style> |
|
||||
@ -1,120 +0,0 @@ |
|||||
<template> |
|
||||
<uni-section class="mb-10" title="数值板" sub-title="statistic" type="line"></uni-section> |
|
||||
<u-row gutter="0"> |
|
||||
<u-col span="6"> |
|
||||
<geek-statistic label="订单数量(个)" labelColor="#1f1f1f" :number="0" numberColor="red" /> |
|
||||
</u-col> |
|
||||
<u-col span="6"> |
|
||||
<geek-statistic label="交易金额(元)" labelColor="#1f1f1f" :number="0" numberColor="red" /> |
|
||||
</u-col> |
|
||||
</u-row> |
|
||||
|
|
||||
<uni-section class="mb-10" title="菜单" sub-title="menu" type="line"></uni-section> |
|
||||
<u-row> |
|
||||
<u-col :span="2.1" :offset="0.3" v-for="menu, index in menus" :key="index"> |
|
||||
<geek-menu v-bind=menu :size="60" @click="modal.msg(menu.label)" type="circle" /> |
|
||||
</u-col> |
|
||||
</u-row> |
|
||||
<u-row> |
|
||||
<u-col :span="2.1" :offset="0.3" v-for="menu, index in menus" :key="index"> |
|
||||
<geek-menu :icon="menu.icon" :label="menu.label" :size="60" @click="modal.msg(menu.label)" type="rect" /> |
|
||||
</u-col> |
|
||||
</u-row> |
|
||||
|
|
||||
<uni-section class="mb-10" title="商品列表" sub-title="commodity" type="line"></uni-section> |
|
||||
<geek-commodity v-for="item, index in commodityList" :key="index" v-bind="item" type="line" |
|
||||
@click="modal.msg(item.title)" /> |
|
||||
<geek-commodity v-for="item, index in commodityList" :key="index" v-bind="item" type="rect" |
|
||||
@click="modal.msg(item.title)" /> |
|
||||
|
|
||||
|
|
||||
<uni-section class="mb-10" title="订单列表" sub-title="order" type="line"></uni-section> |
|
||||
<geek-order v-for="item, index in orderList" :key="index" v-bind="item" @more="modal.msg('更多')" |
|
||||
@again="modal.msg('再次购买')" @return="modal.msg('退换')" @sell="modal.msg('卖了换钱')"></geek-order> |
|
||||
|
|
||||
<uni-section class="mb-10" title="颜色选择器" sub-title="order" type="line"></uni-section> |
|
||||
<geek-color-picker ref="gk" @confirm="getcolor"></geek-color-picker> |
|
||||
<button @click="open()">打开颜色选择器</button> |
|
||||
|
|
||||
|
|
||||
<uni-section class="mb-10" title="二维码" sub-title="order" type="line"></uni-section> |
|
||||
<geek-qrcode cid="qrcode2" ref="qrcode2" val="二维码" :loadMake="true" /> |
|
||||
</template> |
|
||||
|
|
||||
<script setup lang="ts"> |
|
||||
import { ref, reactive } from 'vue'; |
|
||||
import modal from '@/plugins/modal' |
|
||||
import { Commodity, CommodityOrder, Menu } from "@/components/geek-xd/types" |
|
||||
|
|
||||
const gk = ref(null) |
|
||||
function open() { |
|
||||
//@ts-ignore |
|
||||
gk.value.open() |
|
||||
} |
|
||||
function getcolor(color: { hex: string, rgba: { r: number, g: number, b: number, a: number } }) { |
|
||||
console.log(color) |
|
||||
} |
|
||||
|
|
||||
const menus: Array<Menu> = reactive([ |
|
||||
{ icon: "/static/images/icon/rocket.png", label: '抢单' }, |
|
||||
{ icon: "/static/images/icon/phone.png", label: '回访' }, |
|
||||
{ icon: "/static/images/icon/message.png", label: '消息' }, |
|
||||
{ icon: "/static/images/icon/dialogue.png", label: '公告' }, |
|
||||
{ icon: "/static/images/icon/knowledge.png", label: '知识库' } |
|
||||
]); |
|
||||
|
|
||||
const commodityList: Array<Commodity> = reactive([ |
|
||||
{ |
|
||||
img: '/static/images/banner/banner01.jpg', |
|
||||
title: '商品1', |
|
||||
subTitle: '商品1简介', |
|
||||
price: 100, |
|
||||
}, |
|
||||
{ |
|
||||
img: '/static/images/banner/banner02.jpg', |
|
||||
title: '商品2', |
|
||||
subTitle: '商品2简介', |
|
||||
price: 300, |
|
||||
}, |
|
||||
{ |
|
||||
img: '/static/images/banner/banner03.jpg', |
|
||||
title: '商品3', |
|
||||
subTitle: '商品3简介', |
|
||||
price: 200, |
|
||||
} |
|
||||
]) |
|
||||
|
|
||||
const orderList: Array<CommodityOrder> = [ |
|
||||
{ |
|
||||
shop: 'geek自营旗舰店', |
|
||||
status: '完成', |
|
||||
img: '/static/images/banner/banner01.jpg', |
|
||||
title: '商品1', |
|
||||
label: '商品1简介', |
|
||||
price: 100.32, |
|
||||
num: 10 |
|
||||
}, |
|
||||
{ |
|
||||
shop: 'geek自营旗舰店', |
|
||||
status: '已取消', |
|
||||
img: '/static/images/banner/banner03.jpg', |
|
||||
title: '商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商品3', |
|
||||
label: '商品3简介', |
|
||||
price: 2000.67, |
|
||||
num: 10 |
|
||||
}, |
|
||||
{ |
|
||||
shop: 'geek自营旗舰店', |
|
||||
status: '已取消', |
|
||||
img: '/static/images/banner/banner03.jpg', |
|
||||
title: '商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商商品3', |
|
||||
label: '商品3简介', |
|
||||
price: 10.67, |
|
||||
num: 10 |
|
||||
} |
|
||||
] |
|
||||
|
|
||||
|
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped></style> |
|
||||
@ -1,71 +0,0 @@ |
|||||
<template> |
|
||||
<view class="about-container"> |
|
||||
<view class="header-section text-center"> |
|
||||
<image style="width: 150rpx;height: 150rpx;" src="/static/logo200.png" mode="widthFix"> |
|
||||
</image> |
|
||||
<uni-title type="h2" title="若依移动端"></uni-title> |
|
||||
</view> |
|
||||
|
|
||||
<view class="content-section"> |
|
||||
<view class="menu-list"> |
|
||||
<view class="list-cell list-cell-arrow"> |
|
||||
<view class="menu-item-box"> |
|
||||
<view>版本信息</view> |
|
||||
<view class="text-right">v{{version}}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="list-cell list-cell-arrow"> |
|
||||
<view class="menu-item-box"> |
|
||||
<view>官方邮箱</view> |
|
||||
<view class="text-right">ruoyi@xx.com</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="list-cell list-cell-arrow"> |
|
||||
<view class="menu-item-box"> |
|
||||
<view>服务热线</view> |
|
||||
<view class="text-right">400-999-9999</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="list-cell list-cell-arrow"> |
|
||||
<view class="menu-item-box"> |
|
||||
<view>公司网站</view> |
|
||||
<view class="text-right"> |
|
||||
<uni-link :href="url" :text="url" showUnderLine="false"></uni-link> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<view class="copyright"> |
|
||||
<view>Copyright © 2022 ruoyi.vip All Rights Reserved.</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script setup> |
|
||||
import config from '@/config.js' |
|
||||
const url=config.appInfo.site_url; |
|
||||
const version=config.appInfo.version; |
|
||||
|
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
page { |
|
||||
background-color: #f8f8f8; |
|
||||
} |
|
||||
|
|
||||
.copyright { |
|
||||
margin-top: 50rpx; |
|
||||
text-align: center; |
|
||||
line-height: 60rpx; |
|
||||
color: #999; |
|
||||
} |
|
||||
|
|
||||
.header-section { |
|
||||
display: flex; |
|
||||
padding: 30rpx 0 0; |
|
||||
flex-direction: column; |
|
||||
align-items: center; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,642 +0,0 @@ |
|||||
<template> |
|
||||
<view class="container"> |
|
||||
<view class="page-body uni-content-info"> |
|
||||
<view class='cropper-content'> |
|
||||
<view v-if="isShowImg" class="uni-corpper" |
|
||||
:style="'width:' + cropperInitW + 'px;height:' + cropperInitH + 'px;background:#000'"> |
|
||||
<view class="uni-corpper-content" |
|
||||
:style="'width:' + cropperW + 'px;height:' + cropperH + 'px;left:' + cropperL + 'px;top:' + cropperT + 'px'"> |
|
||||
<image :src="imageSrc" :style="'width:' + cropperW + 'px;height:' + cropperH + 'px'"></image> |
|
||||
<view class="uni-corpper-crop-box" @touchstart.stop="contentStartMove" |
|
||||
@touchmove.stop="contentMoveing" @touchend.stop="contentTouchEnd" |
|
||||
:style="'left:' + cutL + 'px;top:' + cutT + 'px;right:' + cutR + 'px;bottom:' + cutB + 'px'"> |
|
||||
<view class="uni-cropper-view-box"> |
|
||||
<view class="uni-cropper-dashed-h"></view> |
|
||||
<view class="uni-cropper-dashed-v"></view> |
|
||||
<view class="uni-cropper-line-t" data-drag="top" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-line-r" data-drag="right" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-line-b" data-drag="bottom" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-line-l" data-drag="left" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-point point-t" data-drag="top" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-point point-tr" data-drag="topTight"></view> |
|
||||
<view class="uni-cropper-point point-r" data-drag="right" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-point point-rb" data-drag="rightBottom" |
|
||||
@touchstart.stop="dragStart" @touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-point point-b" data-drag="bottom" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove" @touchend.stop="dragEnd"></view> |
|
||||
<view class="uni-cropper-point point-bl" data-drag="bottomLeft"></view> |
|
||||
<view class="uni-cropper-point point-l" data-drag="left" @touchstart.stop="dragStart" |
|
||||
@touchmove.stop="dragMove"></view> |
|
||||
<view class="uni-cropper-point point-lt" data-drag="leftTop"></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class='cropper-config'> |
|
||||
<button type="primary reverse" @click="getImage" style='margin-top: 30rpx;'> 选择头像 </button> |
|
||||
<button type="warn" @click="getImageInfo" style='margin-top: 30rpx;'> 提交 </button> |
|
||||
</view> |
|
||||
<canvas canvas-id="myCanvas" |
|
||||
:style="'position:absolute;border: 1px solid red; width:' + imageW + 'px;height:' + imageH + 'px;top:-9999px;left:-9999px;'"></canvas> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import config from '@/config' |
|
||||
import { uploadAvatar } from "@/api/system/user" |
|
||||
import useUserStore from '@/store/modules/user' |
|
||||
|
|
||||
const baseUrl = config.baseUrl |
|
||||
let sysInfo = uni.getSystemInfoSync() |
|
||||
let SCREEN_WIDTH = sysInfo.screenWidth |
|
||||
let PAGE_X, // 手按下的x位置 |
|
||||
PAGE_Y, // 手按下y的位置 |
|
||||
PR = sysInfo.pixelRatio, // dpi |
|
||||
T_PAGE_X, // 手移动的时候x的位置 |
|
||||
T_PAGE_Y, // 手移动的时候Y的位置 |
|
||||
CUT_L, // 初始化拖拽元素的left值 |
|
||||
CUT_T, // 初始化拖拽元素的top值 |
|
||||
CUT_R, // 初始化拖拽元素的 |
|
||||
CUT_B, // 初始化拖拽元素的 |
|
||||
CUT_W, // 初始化拖拽元素的宽度 |
|
||||
CUT_H, // 初始化拖拽元素的高度 |
|
||||
IMG_RATIO, // 图片比例 |
|
||||
IMG_REAL_W, // 图片实际的宽度 |
|
||||
IMG_REAL_H, // 图片实际的高度 |
|
||||
DRAFG_MOVE_RATIO = 1, //移动时候的比例, |
|
||||
INIT_DRAG_POSITION = 100, // 初始化屏幕宽度和裁剪区域的宽度之差,用于设置初始化裁剪的宽度 |
|
||||
DRAW_IMAGE_W = sysInfo.screenWidth // 设置生成的图片宽度 |
|
||||
|
|
||||
export default { |
|
||||
/** |
|
||||
* 页面的初始数据 |
|
||||
*/ |
|
||||
data() { |
|
||||
return { |
|
||||
imageSrc: useUserStore().avatar, |
|
||||
isShowImg: false, |
|
||||
// 初始化的宽高 |
|
||||
cropperInitW: SCREEN_WIDTH, |
|
||||
cropperInitH: SCREEN_WIDTH, |
|
||||
// 动态的宽高 |
|
||||
cropperW: SCREEN_WIDTH, |
|
||||
cropperH: SCREEN_WIDTH, |
|
||||
// 动态的left top值 |
|
||||
cropperL: 0, |
|
||||
cropperT: 0, |
|
||||
|
|
||||
transL: 0, |
|
||||
transT: 0, |
|
||||
|
|
||||
// 图片缩放值 |
|
||||
scaleP: 0, |
|
||||
imageW: 0, |
|
||||
imageH: 0, |
|
||||
|
|
||||
// 裁剪框 宽高 |
|
||||
cutL: 0, |
|
||||
cutT: 0, |
|
||||
cutB: SCREEN_WIDTH, |
|
||||
cutR: '100%', |
|
||||
qualityWidth: DRAW_IMAGE_W, |
|
||||
innerAspectRadio: DRAFG_MOVE_RATIO |
|
||||
} |
|
||||
}, |
|
||||
/** |
|
||||
* 生命周期函数--监听页面初次渲染完成 |
|
||||
*/ |
|
||||
onReady: function () { |
|
||||
this.loadImage() |
|
||||
}, |
|
||||
methods: { |
|
||||
setData: function (obj) { |
|
||||
let that = this |
|
||||
Object.keys(obj).forEach(function (key) { |
|
||||
that.$set(that.$data, key, obj[key]) |
|
||||
}) |
|
||||
}, |
|
||||
getImage: function () { |
|
||||
var _this = this |
|
||||
uni.chooseImage({ |
|
||||
success: function (res) { |
|
||||
_this.setData({ |
|
||||
imageSrc: res.tempFilePaths[0], |
|
||||
}) |
|
||||
_this.loadImage() |
|
||||
}, |
|
||||
}) |
|
||||
}, |
|
||||
loadImage: function () { |
|
||||
var _this = this |
|
||||
|
|
||||
uni.getImageInfo({ |
|
||||
src: _this.imageSrc, |
|
||||
success: function success(res) { |
|
||||
IMG_RATIO = 1 / 1 |
|
||||
if (IMG_RATIO >= 1) { |
|
||||
IMG_REAL_W = SCREEN_WIDTH |
|
||||
IMG_REAL_H = SCREEN_WIDTH / IMG_RATIO |
|
||||
} else { |
|
||||
IMG_REAL_W = SCREEN_WIDTH * IMG_RATIO |
|
||||
IMG_REAL_H = SCREEN_WIDTH |
|
||||
} |
|
||||
let minRange = IMG_REAL_W > IMG_REAL_H ? IMG_REAL_W : IMG_REAL_H |
|
||||
INIT_DRAG_POSITION = minRange > INIT_DRAG_POSITION ? INIT_DRAG_POSITION : minRange |
|
||||
// 根据图片的宽高显示不同的效果 保证图片可以正常显示 |
|
||||
if (IMG_RATIO >= 1) { |
|
||||
let cutT = Math.ceil((SCREEN_WIDTH / IMG_RATIO - (SCREEN_WIDTH / IMG_RATIO - INIT_DRAG_POSITION)) / 2) |
|
||||
let cutB = cutT |
|
||||
let cutL = Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH + INIT_DRAG_POSITION) / 2) |
|
||||
let cutR = cutL |
|
||||
_this.setData({ |
|
||||
cropperW: SCREEN_WIDTH, |
|
||||
cropperH: SCREEN_WIDTH / IMG_RATIO, |
|
||||
// 初始化left right |
|
||||
cropperL: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH) / 2), |
|
||||
cropperT: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH / IMG_RATIO) / 2), |
|
||||
cutL: cutL, |
|
||||
cutT: cutT, |
|
||||
cutR: cutR, |
|
||||
cutB: cutB, |
|
||||
// 图片缩放值 |
|
||||
imageW: IMG_REAL_W, |
|
||||
imageH: IMG_REAL_H, |
|
||||
scaleP: IMG_REAL_W / SCREEN_WIDTH, |
|
||||
qualityWidth: DRAW_IMAGE_W, |
|
||||
innerAspectRadio: IMG_RATIO |
|
||||
}) |
|
||||
} else { |
|
||||
let cutL = Math.ceil((SCREEN_WIDTH * IMG_RATIO - (SCREEN_WIDTH * IMG_RATIO)) / 2) |
|
||||
let cutR = cutL |
|
||||
let cutT = Math.ceil((SCREEN_WIDTH - INIT_DRAG_POSITION) / 2) |
|
||||
let cutB = cutT |
|
||||
_this.setData({ |
|
||||
cropperW: SCREEN_WIDTH * IMG_RATIO, |
|
||||
cropperH: SCREEN_WIDTH, |
|
||||
// 初始化left right |
|
||||
cropperL: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH * IMG_RATIO) / 2), |
|
||||
cropperT: Math.ceil((SCREEN_WIDTH - SCREEN_WIDTH) / 2), |
|
||||
|
|
||||
cutL: cutL, |
|
||||
cutT: cutT, |
|
||||
cutR: cutR, |
|
||||
cutB: cutB, |
|
||||
// 图片缩放值 |
|
||||
imageW: IMG_REAL_W, |
|
||||
imageH: IMG_REAL_H, |
|
||||
scaleP: IMG_REAL_W / SCREEN_WIDTH, |
|
||||
qualityWidth: DRAW_IMAGE_W, |
|
||||
innerAspectRadio: IMG_RATIO |
|
||||
}) |
|
||||
} |
|
||||
_this.setData({ |
|
||||
isShowImg: true |
|
||||
}) |
|
||||
uni.hideLoading() |
|
||||
} |
|
||||
}) |
|
||||
}, |
|
||||
// 拖动时候触发的touchStart事件 |
|
||||
contentStartMove(e) { |
|
||||
PAGE_X = e.touches[0].pageX |
|
||||
PAGE_Y = e.touches[0].pageY |
|
||||
}, |
|
||||
|
|
||||
// 拖动时候触发的touchMove事件 |
|
||||
contentMoveing(e) { |
|
||||
var _this = this |
|
||||
var dragLengthX = (PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|
||||
var dragLengthY = (PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|
||||
// 左移 |
|
||||
if (dragLengthX > 0) { |
|
||||
if (this.cutL - dragLengthX < 0) dragLengthX = this.cutL |
|
||||
} else { |
|
||||
if (this.cutR + dragLengthX < 0) dragLengthX = -this.cutR |
|
||||
} |
|
||||
|
|
||||
if (dragLengthY > 0) { |
|
||||
if (this.cutT - dragLengthY < 0) dragLengthY = this.cutT |
|
||||
} else { |
|
||||
if (this.cutB + dragLengthY < 0) dragLengthY = -this.cutB |
|
||||
} |
|
||||
this.setData({ |
|
||||
cutL: this.cutL - dragLengthX, |
|
||||
cutT: this.cutT - dragLengthY, |
|
||||
cutR: this.cutR + dragLengthX, |
|
||||
cutB: this.cutB + dragLengthY |
|
||||
}) |
|
||||
|
|
||||
PAGE_X = e.touches[0].pageX |
|
||||
PAGE_Y = e.touches[0].pageY |
|
||||
}, |
|
||||
|
|
||||
contentTouchEnd() { |
|
||||
|
|
||||
}, |
|
||||
|
|
||||
// 获取图片 |
|
||||
getImageInfo() { |
|
||||
var _this = this |
|
||||
uni.showLoading({ |
|
||||
title: '图片生成中...', |
|
||||
}) |
|
||||
// 将图片写入画布 |
|
||||
const ctx = uni.createCanvasContext('myCanvas') |
|
||||
ctx.drawImage(_this.imageSrc, 0, 0, IMG_REAL_W, IMG_REAL_H) |
|
||||
ctx.draw(true, () => { |
|
||||
// 获取画布要裁剪的位置和宽度 均为百分比 * 画布中图片的宽度 保证了在微信小程序中裁剪的图片模糊 位置不对的问题 canvasT = (_this.cutT / _this.cropperH) * (_this.imageH / pixelRatio) |
|
||||
var canvasW = ((_this.cropperW - _this.cutL - _this.cutR) / _this.cropperW) * IMG_REAL_W |
|
||||
var canvasH = ((_this.cropperH - _this.cutT - _this.cutB) / _this.cropperH) * IMG_REAL_H |
|
||||
var canvasL = (_this.cutL / _this.cropperW) * IMG_REAL_W |
|
||||
var canvasT = (_this.cutT / _this.cropperH) * IMG_REAL_H |
|
||||
uni.canvasToTempFilePath({ |
|
||||
x: canvasL, |
|
||||
y: canvasT, |
|
||||
width: canvasW, |
|
||||
height: canvasH, |
|
||||
destWidth: canvasW, |
|
||||
destHeight: canvasH, |
|
||||
quality: 0.5, |
|
||||
canvasId: 'myCanvas', |
|
||||
success: function (res) { |
|
||||
uni.hideLoading() |
|
||||
let data = { name: 'avatarfile', filePath: res.tempFilePath } |
|
||||
uploadAvatar(data).then(response => { |
|
||||
// userStore.avatar = response.imgUrl |
|
||||
/*cloud*/ |
|
||||
useUserStore().avatar = baseUrl + response.imgUrl |
|
||||
uni.showToast({ title: "修改成功", icon: 'success' }) |
|
||||
uni.$emit('refresh'); |
|
||||
uni.navigateBack(); |
|
||||
}) |
|
||||
} |
|
||||
}) |
|
||||
}) |
|
||||
}, |
|
||||
// 设置大小的时候触发的touchStart事件 |
|
||||
dragStart(e) { |
|
||||
T_PAGE_X = e.touches[0].pageX |
|
||||
T_PAGE_Y = e.touches[0].pageY |
|
||||
CUT_L = this.cutL |
|
||||
CUT_R = this.cutR |
|
||||
CUT_B = this.cutB |
|
||||
CUT_T = this.cutT |
|
||||
}, |
|
||||
|
|
||||
// 设置大小的时候触发的touchMove事件 |
|
||||
dragMove(e) { |
|
||||
var _this = this |
|
||||
var dragType = e.target.dataset.drag |
|
||||
switch (dragType) { |
|
||||
case 'right': |
|
||||
var dragLength = (T_PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|
||||
if (CUT_R + dragLength < 0) dragLength = -CUT_R |
|
||||
this.setData({ |
|
||||
cutR: CUT_R + dragLength |
|
||||
}) |
|
||||
break |
|
||||
case 'left': |
|
||||
var dragLength = (T_PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|
||||
if (CUT_L - dragLength < 0) dragLength = CUT_L |
|
||||
if ((CUT_L - dragLength) > (this.cropperW - this.cutR)) dragLength = CUT_L - (this.cropperW - this.cutR) |
|
||||
this.setData({ |
|
||||
cutL: CUT_L - dragLength |
|
||||
}) |
|
||||
break |
|
||||
case 'top': |
|
||||
var dragLength = (T_PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|
||||
if (CUT_T - dragLength < 0) dragLength = CUT_T |
|
||||
if ((CUT_T - dragLength) > (this.cropperH - this.cutB)) dragLength = CUT_T - (this.cropperH - this.cutB) |
|
||||
this.setData({ |
|
||||
cutT: CUT_T - dragLength |
|
||||
}) |
|
||||
break |
|
||||
case 'bottom': |
|
||||
var dragLength = (T_PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|
||||
if (CUT_B + dragLength < 0) dragLength = -CUT_B |
|
||||
this.setData({ |
|
||||
cutB: CUT_B + dragLength |
|
||||
}) |
|
||||
break |
|
||||
case 'rightBottom': |
|
||||
var dragLengthX = (T_PAGE_X - e.touches[0].pageX) * DRAFG_MOVE_RATIO |
|
||||
var dragLengthY = (T_PAGE_Y - e.touches[0].pageY) * DRAFG_MOVE_RATIO |
|
||||
|
|
||||
if (CUT_B + dragLengthY < 0) dragLengthY = -CUT_B |
|
||||
if (CUT_R + dragLengthX < 0) dragLengthX = -CUT_R |
|
||||
let cutB = CUT_B + dragLengthY |
|
||||
let cutR = CUT_R + dragLengthX |
|
||||
|
|
||||
this.setData({ |
|
||||
cutB: cutB, |
|
||||
cutR: cutR |
|
||||
}) |
|
||||
break |
|
||||
default: |
|
||||
break |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style> |
|
||||
/* pages/uni-cropper/index.wxss */ |
|
||||
|
|
||||
.cropper-config { |
|
||||
padding: 20rpx 40rpx; |
|
||||
} |
|
||||
|
|
||||
.cropper-content { |
|
||||
min-height: 750rpx; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
.uni-corpper { |
|
||||
position: relative; |
|
||||
overflow: hidden; |
|
||||
-webkit-user-select: none; |
|
||||
-moz-user-select: none; |
|
||||
-ms-user-select: none; |
|
||||
user-select: none; |
|
||||
-webkit-tap-highlight-color: transparent; |
|
||||
-webkit-touch-callout: none; |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.uni-corpper-content { |
|
||||
position: relative; |
|
||||
} |
|
||||
|
|
||||
.uni-corpper-content image { |
|
||||
display: block; |
|
||||
width: 100%; |
|
||||
min-width: 0 !important; |
|
||||
max-width: none !important; |
|
||||
height: 100%; |
|
||||
min-height: 0 !important; |
|
||||
max-height: none !important; |
|
||||
image-orientation: 0deg !important; |
|
||||
margin: 0 auto; |
|
||||
} |
|
||||
|
|
||||
/* 移动图片效果 */ |
|
||||
|
|
||||
.uni-cropper-drag-box { |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
right: 0; |
|
||||
bottom: 0; |
|
||||
left: 0; |
|
||||
cursor: move; |
|
||||
background: rgba(0, 0, 0, 0.6); |
|
||||
z-index: 1; |
|
||||
} |
|
||||
|
|
||||
/* 内部的信息 */ |
|
||||
|
|
||||
.uni-corpper-crop-box { |
|
||||
position: absolute; |
|
||||
background: rgba(255, 255, 255, 0.3); |
|
||||
z-index: 2; |
|
||||
} |
|
||||
|
|
||||
.uni-corpper-crop-box .uni-cropper-view-box { |
|
||||
position: relative; |
|
||||
display: block; |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
overflow: visible; |
|
||||
outline: 1rpx solid #69f; |
|
||||
outline-color: rgba(102, 153, 255, .75) |
|
||||
} |
|
||||
|
|
||||
/* 横向虚线 */ |
|
||||
|
|
||||
.uni-cropper-dashed-h { |
|
||||
position: absolute; |
|
||||
top: 33.33333333%; |
|
||||
left: 0; |
|
||||
width: 100%; |
|
||||
height: 33.33333333%; |
|
||||
border-top: 1rpx dashed rgba(255, 255, 255, 0.5); |
|
||||
border-bottom: 1rpx dashed rgba(255, 255, 255, 0.5); |
|
||||
} |
|
||||
|
|
||||
/* 纵向虚线 */ |
|
||||
|
|
||||
.uni-cropper-dashed-v { |
|
||||
position: absolute; |
|
||||
left: 33.33333333%; |
|
||||
top: 0; |
|
||||
width: 33.33333333%; |
|
||||
height: 100%; |
|
||||
border-left: 1rpx dashed rgba(255, 255, 255, 0.5); |
|
||||
border-right: 1rpx dashed rgba(255, 255, 255, 0.5); |
|
||||
} |
|
||||
|
|
||||
/* 四个方向的线 为了之后的拖动事件*/ |
|
||||
|
|
||||
.uni-cropper-line-t { |
|
||||
position: absolute; |
|
||||
display: block; |
|
||||
width: 100%; |
|
||||
background-color: #69f; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
height: 1rpx; |
|
||||
opacity: 0.1; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-line-t::before { |
|
||||
content: ''; |
|
||||
position: absolute; |
|
||||
top: 50%; |
|
||||
right: 0rpx; |
|
||||
width: 100%; |
|
||||
-webkit-transform: translate3d(0, -50%, 0); |
|
||||
transform: translate3d(0, -50%, 0); |
|
||||
bottom: 0; |
|
||||
height: 41rpx; |
|
||||
background: transparent; |
|
||||
z-index: 11; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-line-r { |
|
||||
position: absolute; |
|
||||
display: block; |
|
||||
background-color: #69f; |
|
||||
top: 0; |
|
||||
right: 0rpx; |
|
||||
width: 1rpx; |
|
||||
opacity: 0.1; |
|
||||
height: 100%; |
|
||||
cursor: e-resize; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-line-r::before { |
|
||||
content: ''; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: 50%; |
|
||||
width: 41rpx; |
|
||||
-webkit-transform: translate3d(-50%, 0, 0); |
|
||||
transform: translate3d(-50%, 0, 0); |
|
||||
bottom: 0; |
|
||||
height: 100%; |
|
||||
background: transparent; |
|
||||
z-index: 11; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-line-b { |
|
||||
position: absolute; |
|
||||
display: block; |
|
||||
width: 100%; |
|
||||
background-color: #69f; |
|
||||
bottom: 0; |
|
||||
left: 0; |
|
||||
height: 1rpx; |
|
||||
opacity: 0.1; |
|
||||
cursor: s-resize; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-line-b::before { |
|
||||
content: ''; |
|
||||
position: absolute; |
|
||||
top: 50%; |
|
||||
right: 0rpx; |
|
||||
width: 100%; |
|
||||
-webkit-transform: translate3d(0, -50%, 0); |
|
||||
transform: translate3d(0, -50%, 0); |
|
||||
bottom: 0; |
|
||||
height: 41rpx; |
|
||||
background: transparent; |
|
||||
z-index: 11; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-line-l { |
|
||||
position: absolute; |
|
||||
display: block; |
|
||||
background-color: #69f; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
width: 1rpx; |
|
||||
opacity: 0.1; |
|
||||
height: 100%; |
|
||||
cursor: w-resize; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-line-l::before { |
|
||||
content: ''; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: 50%; |
|
||||
width: 41rpx; |
|
||||
-webkit-transform: translate3d(-50%, 0, 0); |
|
||||
transform: translate3d(-50%, 0, 0); |
|
||||
bottom: 0; |
|
||||
height: 100%; |
|
||||
background: transparent; |
|
||||
z-index: 11; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-point { |
|
||||
width: 5rpx; |
|
||||
height: 5rpx; |
|
||||
background-color: #69f; |
|
||||
opacity: .75; |
|
||||
position: absolute; |
|
||||
z-index: 3; |
|
||||
} |
|
||||
|
|
||||
.point-t { |
|
||||
top: -3rpx; |
|
||||
left: 50%; |
|
||||
margin-left: -3rpx; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
.point-tr { |
|
||||
top: -3rpx; |
|
||||
left: 100%; |
|
||||
margin-left: -3rpx; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
.point-r { |
|
||||
top: 50%; |
|
||||
left: 100%; |
|
||||
margin-left: -3rpx; |
|
||||
margin-top: -3rpx; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
.point-rb { |
|
||||
left: 100%; |
|
||||
top: 100%; |
|
||||
-webkit-transform: translate3d(-50%, -50%, 0); |
|
||||
transform: translate3d(-50%, -50%, 0); |
|
||||
cursor: n-resize; |
|
||||
width: 36rpx; |
|
||||
height: 36rpx; |
|
||||
background-color: #69f; |
|
||||
position: absolute; |
|
||||
z-index: 1112; |
|
||||
opacity: 1; |
|
||||
} |
|
||||
|
|
||||
.point-b { |
|
||||
left: 50%; |
|
||||
top: 100%; |
|
||||
margin-left: -3rpx; |
|
||||
margin-top: -3rpx; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
.point-bl { |
|
||||
left: 0%; |
|
||||
top: 100%; |
|
||||
margin-left: -3rpx; |
|
||||
margin-top: -3rpx; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
.point-l { |
|
||||
left: 0%; |
|
||||
top: 50%; |
|
||||
margin-left: -3rpx; |
|
||||
margin-top: -3rpx; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
.point-lt { |
|
||||
left: 0%; |
|
||||
top: 0%; |
|
||||
margin-left: -3rpx; |
|
||||
margin-top: -3rpx; |
|
||||
cursor: n-resize; |
|
||||
} |
|
||||
|
|
||||
/* 裁剪框预览内容 */ |
|
||||
|
|
||||
.uni-cropper-viewer { |
|
||||
position: relative; |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
.uni-cropper-viewer image { |
|
||||
position: absolute; |
|
||||
z-index: 2; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,109 +0,0 @@ |
|||||
<template> |
|
||||
<view class="help-container"> |
|
||||
<view v-for="(item, findex) in list" :key="findex" :title="item.title" class="list-title"> |
|
||||
<view class="text-title"> |
|
||||
<view :class="item.icon"></view>{{ item.title }} |
|
||||
</view> |
|
||||
<view class="childList"> |
|
||||
<view v-for="(child, zindex) in item.childList" :key="zindex" class="question" hover-class="hover" |
|
||||
@click="handleText(child)"> |
|
||||
<view class="text-item">{{ child.title }}</view> |
|
||||
<view class="line" v-if="zindex !== item.childList.length - 1"></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script setup> |
|
||||
import { ref } from "vue"; |
|
||||
|
|
||||
const list =ref([{ |
|
||||
icon: 'iconfont icon-github', |
|
||||
title: '若依问题', |
|
||||
childList: [{ |
|
||||
title: '若依开源吗?', |
|
||||
content: '开源' |
|
||||
}, { |
|
||||
title: '若依可以商用吗?', |
|
||||
content: '可以' |
|
||||
}, { |
|
||||
title: '若依官网地址多少?', |
|
||||
content: 'http://ruoyi.vip' |
|
||||
}, { |
|
||||
title: '若依文档地址多少?', |
|
||||
content: 'http://doc.ruoyi.vip' |
|
||||
}] |
|
||||
}, |
|
||||
{ |
|
||||
icon: 'iconfont icon-help', |
|
||||
title: '其他问题', |
|
||||
childList: [{ |
|
||||
title: '如何退出登录?', |
|
||||
content: '请点击[我的] - [应用设置] - [退出登录]即可退出登录', |
|
||||
}, { |
|
||||
title: '如何修改用户头像?', |
|
||||
content: '请点击[我的] - [选择头像] - [点击提交]即可更换用户头像', |
|
||||
}, { |
|
||||
title: '如何修改登录密码?', |
|
||||
content: '请点击[我的] - [应用设置] - [修改密码]即可修改登录密码', |
|
||||
}] |
|
||||
} |
|
||||
]) |
|
||||
|
|
||||
function handleText(item) { |
|
||||
uni.navigateTo({ |
|
||||
url: `/pages/common/textview/index?title=${item.title}&content=${item.content}` |
|
||||
}); |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
page { |
|
||||
background-color: #f8f8f8; |
|
||||
} |
|
||||
|
|
||||
.help-container { |
|
||||
margin-bottom: 100rpx; |
|
||||
padding: 30rpx; |
|
||||
} |
|
||||
|
|
||||
.list-title { |
|
||||
margin-bottom: 30rpx; |
|
||||
} |
|
||||
|
|
||||
.childList { |
|
||||
background: #ffffff; |
|
||||
box-shadow: 0px 0px 10rpx rgba(193, 193, 193, 0.2); |
|
||||
border-radius: 16rpx; |
|
||||
margin-top: 10rpx; |
|
||||
} |
|
||||
|
|
||||
.line { |
|
||||
width: 100%; |
|
||||
height: 1rpx; |
|
||||
background-color: #F5F5F5; |
|
||||
} |
|
||||
|
|
||||
.text-title { |
|
||||
color: #303133; |
|
||||
font-size: 32rpx; |
|
||||
font-weight: bold; |
|
||||
margin-left: 10rpx; |
|
||||
|
|
||||
.iconfont { |
|
||||
font-size: 16px; |
|
||||
margin-right: 10rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.text-item { |
|
||||
font-size: 28rpx; |
|
||||
padding: 24rpx; |
|
||||
} |
|
||||
|
|
||||
.question { |
|
||||
color: #606266; |
|
||||
font-size: 28rpx; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,132 +0,0 @@ |
|||||
<template> |
|
||||
<view class="container"> |
|
||||
<view class="example"> |
|
||||
<uni-forms ref="form" :model="user" labelWidth="80px"> |
|
||||
<uni-forms-item label="用户昵称" name="nickName"> |
|
||||
<uni-easyinput v-model="user.nickName" placeholder="请输入昵称" /> |
|
||||
</uni-forms-item> |
|
||||
<uni-forms-item label="手机号码" name="phonenumber"> |
|
||||
<uni-easyinput v-model="user.phonenumber" placeholder="请输入手机号码" /> |
|
||||
</uni-forms-item> |
|
||||
<uni-forms-item label="邮箱" name="email"> |
|
||||
<uni-easyinput v-model="user.email" placeholder="请输入邮箱" /> |
|
||||
</uni-forms-item> |
|
||||
<uni-forms-item label="性别" name="sex" required> |
|
||||
<uni-data-checkbox v-model="user.sex" :localdata="sexs" /> |
|
||||
</uni-forms-item> |
|
||||
</uni-forms> |
|
||||
<button type="primary" @click="submit">提交</button> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { getUserProfile } from "@/api/system/user" |
|
||||
import { updateUserProfile } from "@/api/system/user" |
|
||||
|
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
user: { |
|
||||
nickName: "", |
|
||||
phonenumber: "", |
|
||||
email: "", |
|
||||
sex: "" |
|
||||
}, |
|
||||
sexs: [{ |
|
||||
text: '男', |
|
||||
value: "0" |
|
||||
}, { |
|
||||
text: '女', |
|
||||
value: "1" |
|
||||
}], |
|
||||
rules: { |
|
||||
nickName: { |
|
||||
rules: [{ |
|
||||
required: true, |
|
||||
errorMessage: '用户昵称不能为空' |
|
||||
}] |
|
||||
}, |
|
||||
phonenumber: { |
|
||||
rules: [{ |
|
||||
required: true, |
|
||||
errorMessage: '手机号码不能为空' |
|
||||
}, { |
|
||||
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, |
|
||||
errorMessage: '请输入正确的手机号码' |
|
||||
}] |
|
||||
}, |
|
||||
email: { |
|
||||
rules: [{ |
|
||||
required: true, |
|
||||
errorMessage: '邮箱地址不能为空' |
|
||||
}, { |
|
||||
format: 'email', |
|
||||
errorMessage: '请输入正确的邮箱地址' |
|
||||
}] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
onLoad() { |
|
||||
this.getUser() |
|
||||
}, |
|
||||
onReady() { |
|
||||
this.$refs.form.setRules(this.rules) |
|
||||
}, |
|
||||
methods: { |
|
||||
getUser() { |
|
||||
getUserProfile().then(response => { |
|
||||
this.user = response.data |
|
||||
}) |
|
||||
}, |
|
||||
submit(ref) { |
|
||||
this.$refs.form.validate().then(res => { |
|
||||
updateUserProfile(this.user).then(response => { |
|
||||
uni.showToast({ |
|
||||
title: '修改成功', |
|
||||
mask: false, |
|
||||
duration: 1000 |
|
||||
}); |
|
||||
uni.navigateBack(); |
|
||||
}) |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
page { |
|
||||
background-color: #ffffff; |
|
||||
} |
|
||||
|
|
||||
.example { |
|
||||
padding: 15px; |
|
||||
background-color: #fff; |
|
||||
} |
|
||||
|
|
||||
.segmented-control { |
|
||||
margin-bottom: 15px; |
|
||||
} |
|
||||
|
|
||||
.button-group { |
|
||||
margin-top: 15px; |
|
||||
display: flex; |
|
||||
justify-content: space-around; |
|
||||
} |
|
||||
|
|
||||
.form-item { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
flex: 1; |
|
||||
} |
|
||||
|
|
||||
.button { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
height: 35px; |
|
||||
line-height: 35px; |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,53 +0,0 @@ |
|||||
<template> |
|
||||
<view class="container"> |
|
||||
<uni-list> |
|
||||
<uni-list-item showExtraIcon="true" :extraIcon="{ type: 'person-filled' }" title="昵称" :rightText="user.nickName" /> |
|
||||
<uni-list-item showExtraIcon="true" :extraIcon="{ type: 'phone-filled' }" title="手机号码" |
|
||||
:rightText="user.phonenumber" /> |
|
||||
<uni-list-item showExtraIcon="true" :extraIcon="{ type: 'email-filled' }" title="邮箱" :rightText="user.email" /> |
|
||||
<uni-list-item showExtraIcon="true" :extraIcon="{ type: 'auth-filled' }" title="岗位" :rightText="postGroup" /> |
|
||||
<uni-list-item showExtraIcon="true" :extraIcon="{ type: 'staff-filled' }" title="角色" :rightText="roleGroup" /> |
|
||||
<uni-list-item showExtraIcon="true" :extraIcon="{ type: 'calendar-filled' }" title="创建日期" |
|
||||
:rightText="user.createTime" /> |
|
||||
</uni-list> |
|
||||
|
|
||||
<u-button @click="register()">绑定微信</u-button> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script setup> |
|
||||
import { getUserProfile } from "@/api/system/user" |
|
||||
import { ref } from "vue"; |
|
||||
import modal from "@/plugins/modal" |
|
||||
|
|
||||
const user = ref({}) |
|
||||
const roleGroup = ref("") |
|
||||
const postGroup = ref("") |
|
||||
function getUser() { |
|
||||
getUserProfile().then(response => { |
|
||||
user.value = response.data |
|
||||
roleGroup.value = response.roleGroup |
|
||||
postGroup.value = response.postGroup |
|
||||
}) |
|
||||
} |
|
||||
getUser() |
|
||||
|
|
||||
import { wxRegister } from "@/api/oauth" |
|
||||
import { getWxCode } from "@/utils/geek" |
|
||||
function register(){ |
|
||||
modal.loading('绑定微信中...') |
|
||||
getWxCode().then(res=>{ |
|
||||
wxRegister('miniapp',res).then(res=>{ |
|
||||
modal.closeLoading() |
|
||||
}) |
|
||||
}) |
|
||||
|
|
||||
} |
|
||||
|
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
page { |
|
||||
background-color: #ffffff; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,91 +0,0 @@ |
|||||
<template> |
|
||||
<view class="pwd-retrieve-container"> |
|
||||
<uni-forms ref="form" :value="user" labelWidth="80px"> |
|
||||
<uni-forms-item name="oldPassword" label="旧密码"> |
|
||||
<uni-easyinput type="password" v-model="user.oldPassword" placeholder="请输入旧密码" /> |
|
||||
</uni-forms-item> |
|
||||
<uni-forms-item name="newPassword" label="新密码"> |
|
||||
<uni-easyinput type="password" v-model="user.newPassword" placeholder="请输入新密码" /> |
|
||||
</uni-forms-item> |
|
||||
<uni-forms-item name="confirmPassword" label="确认密码"> |
|
||||
<uni-easyinput type="password" v-model="user.confirmPassword" placeholder="请确认新密码" /> |
|
||||
</uni-forms-item> |
|
||||
<button type="primary" @click="submit">提交</button> |
|
||||
</uni-forms> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { updateUserPwd } from "@/api/system/user" |
|
||||
|
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
user: { |
|
||||
oldPassword: undefined, |
|
||||
newPassword: undefined, |
|
||||
confirmPassword: undefined |
|
||||
}, |
|
||||
rules: { |
|
||||
oldPassword: { |
|
||||
rules: [{ |
|
||||
required: true, |
|
||||
errorMessage: '旧密码不能为空' |
|
||||
}] |
|
||||
}, |
|
||||
newPassword: { |
|
||||
rules: [{ |
|
||||
required: true, |
|
||||
errorMessage: '新密码不能为空', |
|
||||
}, |
|
||||
{ |
|
||||
minLength: 6, |
|
||||
maxLength: 20, |
|
||||
errorMessage: '长度在 6 到 20 个字符' |
|
||||
} |
|
||||
] |
|
||||
}, |
|
||||
confirmPassword: { |
|
||||
rules: [{ |
|
||||
required: true, |
|
||||
errorMessage: '确认密码不能为空' |
|
||||
}, { |
|
||||
validateFunction: (rule, value, data) => data.newPassword === value, |
|
||||
errorMessage: '两次输入的密码不一致' |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
onReady() { |
|
||||
this.$refs.form.setRules(this.rules) |
|
||||
}, |
|
||||
methods: { |
|
||||
submit() { |
|
||||
this.$refs.form.validate().then(res => { |
|
||||
updateUserPwd(this.user.oldPassword, this.user.newPassword).then(response => { |
|
||||
uni.showToast({ |
|
||||
title: '修改成功', |
|
||||
mask: false, |
|
||||
duration: 1000 |
|
||||
}); |
|
||||
uni.navigateBack(); |
|
||||
}) |
|
||||
|
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
page { |
|
||||
background-color: #ffffff; |
|
||||
} |
|
||||
|
|
||||
.pwd-retrieve-container { |
|
||||
padding-top: 36rpx; |
|
||||
padding: 15px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,104 +0,0 @@ |
|||||
<template> |
|
||||
<view class="setting-container" :style="{ height: `${windowHeight}px` }"> |
|
||||
<view class="menu-list"> |
|
||||
<view class="list-cell list-cell-arrow" @click="handleToPwd"> |
|
||||
<view class="menu-item-box"> |
|
||||
<view class="iconfont icon-password menu-icon"></view> |
|
||||
<view>修改密码</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="list-cell list-cell-arrow" @click="handleToUpgrade"> |
|
||||
<view class="menu-item-box"> |
|
||||
<view class="iconfont icon-refresh menu-icon"></view> |
|
||||
<view>检查更新</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="list-cell list-cell-arrow" @click="handleCleanTmp"> |
|
||||
<view class="menu-item-box"> |
|
||||
<view class="iconfont icon-clean menu-icon"></view> |
|
||||
<view>清理缓存</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="cu-list menu"> |
|
||||
<view class="cu-item item-box"> |
|
||||
<view class="content text-center" @click="handleLogout"> |
|
||||
<text class="text-black">退出登录</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view> |
|
||||
<uni-popup ref="popup" type="dialog"> |
|
||||
<uni-popup-dialog type="info" cancelText="关闭" confirmText="退出" title="通知" content="确定注销并退出系统吗" |
|
||||
@confirm="dialogConfirm" @close="dialogClose"> |
|
||||
</uni-popup-dialog> |
|
||||
</uni-popup> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script setup> |
|
||||
import { ref } from "vue"; |
|
||||
import useUserStore from '@/store/modules/user' |
|
||||
const userStore = useUserStore() |
|
||||
|
|
||||
const windowHeight = ref(uni.getSystemInfoSync().windowHeight); |
|
||||
const popup = ref(null); |
|
||||
|
|
||||
function handleToPwd() { |
|
||||
uni.navigateTo({ |
|
||||
url: '/pages/mine/pwd/index' |
|
||||
}); |
|
||||
}; |
|
||||
|
|
||||
function handleToUpgrade() { |
|
||||
uni.showToast({ |
|
||||
title: '模块建设中~', |
|
||||
mask: false, |
|
||||
icon: "none", |
|
||||
duration: 1000 |
|
||||
}); |
|
||||
}; |
|
||||
|
|
||||
function handleCleanTmp() { |
|
||||
uni.showToast({ |
|
||||
title: '模块建设中~', |
|
||||
mask: false, |
|
||||
icon: "none", |
|
||||
duration: 1000 |
|
||||
}); |
|
||||
}; |
|
||||
function handleLogout() { |
|
||||
popup.value.open(); |
|
||||
}; |
|
||||
function dialogConfirm() { |
|
||||
//console.log('----------------点击确认------------') |
|
||||
userStore.logOut().then(() => { |
|
||||
uni.reLaunch({ |
|
||||
url: '/pages/login' |
|
||||
}); |
|
||||
}) |
|
||||
}; |
|
||||
function dialogClose() { |
|
||||
//console.log('点击关闭') |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.page { |
|
||||
background-color: #f8f8f8; |
|
||||
} |
|
||||
|
|
||||
.item-box { |
|
||||
background-color: #FFFFFF; |
|
||||
margin: 30rpx; |
|
||||
display: flex; |
|
||||
flex-direction: row; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
padding: 10rpx; |
|
||||
border-radius: 8rpx; |
|
||||
color: #303133; |
|
||||
font-size: 32rpx; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,148 +0,0 @@ |
|||||
<template> |
|
||||
<view> |
|
||||
<view class="top-swiper"> |
|
||||
<view class="box"> |
|
||||
<view style="height: 44px;"></view> |
|
||||
<swiper class="swiper" :previous-margin="swiper.margin" :next-margin='swiper.margin' :circular="true" |
|
||||
@change="swiperChange"> |
|
||||
<swiper-item v-for="(item,index) in card_menu" :key="index" @click="toUrl(item.url)"> |
|
||||
<!-- <image class='le-img' :src='item' :class="{'le-active':swiper.index == index}"></image> --> |
|
||||
<view class="le-img" :class="{'le-active':swiper.index == index}"> |
|
||||
<view class="img_box"> |
|
||||
<image class="card_img" :src="item.img" mode="aspectFill"></image> |
|
||||
</view> |
|
||||
<view class="detail_box"> |
|
||||
<view class="title_box">{{item.title}}</view> |
|
||||
<view class="author_box">By:{{item.author}}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</swiper-item> |
|
||||
</swiper> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import Common from '../../static/js/common' |
|
||||
export default { |
|
||||
props: { |
|
||||
card_menu: { |
|
||||
type: Array, |
|
||||
default: [] |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
swiper: { |
|
||||
margin: "150rpx", |
|
||||
index: 0, |
|
||||
list: [ |
|
||||
"/static/images/douyin/0.jpg", |
|
||||
"/static/images/douyin/4.jpg", |
|
||||
"/static/images/douyin/7.jpg", |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
components: { |
|
||||
|
|
||||
}, |
|
||||
mounted() { |
|
||||
|
|
||||
}, |
|
||||
methods: { |
|
||||
//swiper滑动事件 |
|
||||
swiperChange: function(e) { |
|
||||
this.swiper.index = e.detail.current; |
|
||||
}, |
|
||||
toUrl(url){ |
|
||||
Common.navigateTo(url); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
.top-swiper { |
|
||||
margin-bottom: 30rpx; |
|
||||
|
|
||||
.box { |
|
||||
padding-top: var(--status-bar-height); |
|
||||
box-sizing: content-box; |
|
||||
position: absolute; |
|
||||
z-index: 5; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
width: 100%; |
|
||||
height: auto; |
|
||||
} |
|
||||
|
|
||||
.swiper { |
|
||||
height: 600rpx; |
|
||||
margin: 0 20rpx; |
|
||||
|
|
||||
.le-img { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
display: block; |
|
||||
transform: scale(0.9); |
|
||||
transition: transform 0.3s ease-in-out 0s; |
|
||||
border-radius: 10px; |
|
||||
background-color: #fff; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
&.le-active { |
|
||||
transform: scale(1); |
|
||||
} |
|
||||
|
|
||||
.img_box { |
|
||||
width: 100%; |
|
||||
height: 65%; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.card_img { |
|
||||
height: 100%; |
|
||||
width: 100%; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.detail_box { |
|
||||
width: 100%; |
|
||||
height: 35%; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.title_box { |
|
||||
width: 100%; |
|
||||
text-align: center; |
|
||||
font-size: 40rpx; |
|
||||
margin: 30rpx 0; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
|
|
||||
.author_box { |
|
||||
width: 100%; |
|
||||
text-align: center; |
|
||||
font-size: 30rpx; |
|
||||
position: relative; |
|
||||
height: 80rpx; |
|
||||
line-height: 80rpx; |
|
||||
|
|
||||
&::before { |
|
||||
content: ""; |
|
||||
height: 1px; |
|
||||
width: 150rpx; |
|
||||
position: absolute; |
|
||||
transform: translateX(-50%); |
|
||||
left: 50%; |
|
||||
top: 0; |
|
||||
background: #000; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,141 +0,0 @@ |
|||||
<template> |
|
||||
<view class="content"> |
|
||||
<scroll-view v-if="true" scroll-y class="data_body" :style="{height:scrollHeight}"> |
|
||||
<!--数据进度条--> |
|
||||
<view class="progress"> |
|
||||
<data-progress :progressList="userHealthyLineBar" :borderRadius="20" padMiddle="true"></data-progress> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 新增小程序会员趋势--> |
|
||||
<view class="friend_operate"> |
|
||||
<text-block :content="baseData"></text-block> |
|
||||
<view class="trend_title">新增小程序会员趋势</view> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts |
|
||||
type="mix" |
|
||||
canvasId="three_a" |
|
||||
:canvas2d="isCanvas2d" |
|
||||
:reshow="delayload" |
|
||||
:opts="{yAxis:{data:[{position: 'left',title: '销售额/万',max:userTrand?userTrand.yAxis[0].max:0,min:userTrand?userTrand.yAxis[0].min:0},{position: 'right',title: '',max:userTrand?userTrand.yAxis[1].max:0,min:userTrand?userTrand.yAxis[1].min:0,unit:'%'}]}}" |
|
||||
:chartData="userTrand"/> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 会员扫码率趋势--> |
|
||||
<view class="friend_operate"> |
|
||||
<text-block :content="scanTrand"></text-block> |
|
||||
<view class="trend_title">会员扫码率趋势</view> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts |
|
||||
type="mix" |
|
||||
canvasId="three_b" |
|
||||
:canvas2d="isCanvas2d" |
|
||||
:reshow="delayload" |
|
||||
:opts="{yAxis:{data:[{position: 'left',title: '',max:scanTrandPrecent?scanTrandPrecent.yAxis[0].max:0,min:scanTrandPrecent?scanTrandPrecent.yAxis[0].min:0,unit:'%'}]}}" |
|
||||
:chartData="scanTrandPrecent"/> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 小程序活跃会员占比--> |
|
||||
<view class="friend_operate"> |
|
||||
<text-block :content="miniActive"></text-block> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts |
|
||||
type="mix" |
|
||||
canvasId="three_c" |
|
||||
:canvas2d="isCanvas2d" |
|
||||
:reshow="delayload" |
|
||||
:opts="{yAxis:{data:[{position: 'left',title: '销售额/万',max:miniActivePrecent?miniActivePrecent.yAxis[0].max:0,min:miniActivePrecent?miniActivePrecent.yAxis[0].min:0},{position: 'right',title: '',max:miniActivePrecent?miniActivePrecent.yAxis[1].max:0,min:miniActivePrecent?miniActivePrecent.yAxis[1].min:0,unit:'%'}]}}" |
|
||||
:chartData="miniActivePrecent" |
|
||||
/> |
|
||||
</view> |
|
||||
</view> |
|
||||
</scroll-view> |
|
||||
<view v-else class="container padding_stand-big normal_color"> |
|
||||
<li class="iconfont icon-cry cry"></li>暂无数据 |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import DataProgress from "../data-progress/data-progress.vue" |
|
||||
|
|
||||
import userHealthyLineBar from '../../static/json/user-healthy/1.json'; |
|
||||
import baseData from '../../static/json/user-healthy/2.json'; |
|
||||
import userTrand from '../../static/json/user-healthy/3.json'; |
|
||||
|
|
||||
import scanTrand from '../../static/json/user-healthy/4.json'; |
|
||||
import scanTrandPrecent from '../../static/json/user-healthy/5.json'; |
|
||||
import miniActive from '../../static/json/user-healthy/6.json'; |
|
||||
import miniActivePrecent from '../../static/json/user-healthy/7.json'; |
|
||||
|
|
||||
import Config from '../../static/js/config' |
|
||||
|
|
||||
var _self; |
|
||||
export default { |
|
||||
name:'user-healthy', |
|
||||
props: { |
|
||||
scrollHeight:{ |
|
||||
type:String, |
|
||||
default:"600px" |
|
||||
} |
|
||||
}, |
|
||||
components:{ |
|
||||
DataProgress |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
userHealthyLineBar, |
|
||||
baseData, |
|
||||
userTrand, |
|
||||
scanTrand, |
|
||||
scanTrandPrecent, |
|
||||
miniActive, |
|
||||
miniActivePrecent, |
|
||||
delayload:false, |
|
||||
isCanvas2d:Config.ISCANVAS2D, |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.getData(); |
|
||||
}, |
|
||||
methods:{ |
|
||||
async getData(){ |
|
||||
uni.showLoading(); |
|
||||
await setTimeout(() => { |
|
||||
this.delayload = true; |
|
||||
uni.hideLoading(); |
|
||||
}, 1000) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="less"> |
|
||||
.content{ |
|
||||
padding-top: 10rpx; |
|
||||
.progress,.firend_operate{ |
|
||||
padding: 0 10rpx; |
|
||||
} |
|
||||
.progress{ |
|
||||
margin-bottom: 20rpx; |
|
||||
} |
|
||||
.friend_operate{ |
|
||||
padding: 30rpx 10rpx; |
|
||||
.title{ |
|
||||
text-align:left; |
|
||||
margin-bottom: 20rpx; |
|
||||
} |
|
||||
.trend_title{ |
|
||||
text-align: right; |
|
||||
font-size: 22rpx; |
|
||||
color: #ff9900; |
|
||||
margin-top: 20rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
</style> |
|
||||
@ -1,200 +0,0 @@ |
|||||
<template> |
|
||||
<view class="content"> |
|
||||
<scroll-view v-if="true" scroll-y class="data_body" :style="{height:scrollHeight}"> |
|
||||
<!--数据进度条--> |
|
||||
<view class="progress"> |
|
||||
<data-progress :progressList="userOperateLineBar" :borderRadius="20" padMiddle="true"></data-progress> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 活跃会员--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">活跃会员</view> |
|
||||
<text-block :content="userActive"></text-block> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 会员消费 --> |
|
||||
<view class="friend_operate" style="padding-bottom: 30rpx;"> |
|
||||
<view class="title">会员消费</view> |
|
||||
<text-block :content="userConsume"></text-block> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 会员ARPU --> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">会员ARPU |
|
||||
<text class="font-small">(会员年度平均销售金额)</text> |
|
||||
<text class="trend_title">目标增量{{userARPU.targetAdd}}</text> |
|
||||
</view> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts type="mix" |
|
||||
:chartData="userARPU" |
|
||||
:reshow="delayload" |
|
||||
:canvas2d="isCanvas2d" |
|
||||
canvasId="two_a" |
|
||||
:opts="{yAxis:{data:[{title: '',max:userARPU?userARPU.yAxis[0].max:0,min:userARPU?userARPU.yAxis[0].min:0},{title: '',unit:'%',max:userARPU?userARPU.yAxis[1].max:0,min:userARPU?userARPU.yAxis[1].min:0,position:'right'}]},extra:{markLine:{data:[{value:userARPU?userARPU.target:'',LineColor:'#ff9900',showLabel:true}]}}}"/> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 会员消费频次 --> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">会员消费频次 |
|
||||
<text class="font-middle">(年)</text> |
|
||||
<text class="trend_title">目标增量{{userARPU.targetAdd}}</text> |
|
||||
</view> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts type="mix" |
|
||||
:chartData="userARPU" |
|
||||
:reshow="delayload" |
|
||||
:canvas2d="isCanvas2d" |
|
||||
canvasId="two_b" |
|
||||
:opts="{yAxis:{data:[{title: '',max:userARPU?userARPU.yAxis[0].max:0,min:userARPU?userARPU.yAxis[0].min:0},{title: '',unit:'%',max:userARPU?userARPU.yAxis[1].max:0,min:userARPU?userARPU.yAxis[1].min:0,position:'right'}]},extra:{markLine:{data:[{value:userARPU?userARPU.target:'',LineColor:'#ff9900',showLabel:true}]}}}"/> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 微客群运营--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">活跃会员分布 |
|
||||
<text class="font-middle">(最近活跃时间)</text> |
|
||||
</view> |
|
||||
<senior-table :headers="dataTable.headers" :contents="dataTable.contents" :urlCol="dataTable.urlCol" :firstLineFixed="true" :sortCol="dataTable.sortCol" :computedCol="dataTable.computedCol" :formatCol="dataTable.formatCol"></senior-table> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- X商品脱落率--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title"> |
|
||||
X(慢病) 商品脱落率 |
|
||||
</view> |
|
||||
<view style="display: flex;justify-content: space-between;"> |
|
||||
<view v-for="(item,index) in xProductDropPrecent" class="charts-box" style="height: 130px;width: 45%;"> |
|
||||
<qiun-data-charts |
|
||||
type="arcbar" |
|
||||
:chartData="item" |
|
||||
:canvasId="'two_c_'+ index" |
|
||||
:canvas2d="true" |
|
||||
:reshow="delayload" |
|
||||
:opts="{title:{name:item.series[0].data * 100 + '%',color:item.series[0].color,fontSize:25},subtitle:{name:item.series[0].name,color:'#666666',fontSize:12}}" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 慢病病种脱落率--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">慢病病种脱落率 |
|
||||
</view> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts type="mix" |
|
||||
:chartData="illnessDropPrecent" |
|
||||
:reshow="delayload" |
|
||||
:canvas2d="true" |
|
||||
canvasId="two_d" |
|
||||
:opts="{yAxis:{data:[{title: ''}]}}"/> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- W商品脱落率--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title"> |
|
||||
W(保健) 商品脱落率 |
|
||||
</view> |
|
||||
<view style="display: flex;justify-content: space-between;"> |
|
||||
<view v-for="(item,index) in wProductDropPrecent" class="charts-box" style="height: 130px;width: 45%;"> |
|
||||
<qiun-data-charts |
|
||||
type="arcbar" |
|
||||
:chartData="item" |
|
||||
:canvasId="'two_e_'+index" |
|
||||
:canvas2d="true" |
|
||||
:reshow="delayload" |
|
||||
:opts="{title:{name:item.series[0].data * 100 + '%',color:item.series[0].color,fontSize:25},subtitle:{name:item.series[0].name,color:'#666666',fontSize:12}}" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</scroll-view> |
|
||||
<view v-else class="container padding_stand-big normal_color"> |
|
||||
<li class="iconfont icon-cry cry"></li>暂无数据 |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import DataProgress from "../data-progress/data-progress.vue" |
|
||||
import SeniorTable from "../data-table/senior-table.vue" |
|
||||
|
|
||||
import userOperateLineBar from '../../static/json/user-operate/1.json'; |
|
||||
import userActive from '../../static/json/user-operate/2.json'; |
|
||||
import userConsume from '../../static/json/user-operate/3.json'; |
|
||||
import userARPU from '../../static/json/user-operate/4.json'; |
|
||||
import dataTable from "../../static/json/user-operate/6.json" |
|
||||
import xProductDropPrecent from '../../static/json/user-operate/7.json'; |
|
||||
import wProductDropPrecent from '../../static/json/user-operate/9.json'; |
|
||||
import illnessDropPrecent from '../../static/json/user-operate/8.json'; |
|
||||
|
|
||||
|
|
||||
export default { |
|
||||
name:'user-operate', |
|
||||
props: { |
|
||||
scrollHeight:{ |
|
||||
type:String, |
|
||||
default:"600px" |
|
||||
} |
|
||||
}, |
|
||||
components:{ |
|
||||
DataProgress,SeniorTable |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
userOperateLineBar, |
|
||||
userActive, |
|
||||
userConsume, |
|
||||
userARPU, |
|
||||
xProductDropPrecent, |
|
||||
wProductDropPrecent, |
|
||||
illnessDropPrecent, |
|
||||
dataTable, |
|
||||
delayload:false, |
|
||||
isCanvas2d:Config.ISCANVAS2D |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.getData(); |
|
||||
}, |
|
||||
methods:{ |
|
||||
async getData(){ |
|
||||
uni.showLoading(); |
|
||||
await setTimeout(() => { |
|
||||
this.delayload = true; |
|
||||
uni.hideLoading(); |
|
||||
}, 1000) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="less"> |
|
||||
.content{ |
|
||||
padding-top: 10rpx; |
|
||||
.progress,.firend_operate{ |
|
||||
padding: 0 10rpx; |
|
||||
} |
|
||||
.progress{ |
|
||||
margin-bottom: 20rpx; |
|
||||
} |
|
||||
.friend_operate{ |
|
||||
padding: 30rpx 20rpx; |
|
||||
.title{ |
|
||||
text-align:left; |
|
||||
margin-bottom: 30rpx; |
|
||||
font-size: 40rpx; |
|
||||
} |
|
||||
.trend_title{ |
|
||||
float: right; |
|
||||
font-size: 22rpx; |
|
||||
color: #ff9900; |
|
||||
margin-top: 20rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,385 +0,0 @@ |
|||||
<template> |
|
||||
<view class="content"> |
|
||||
<scroll-view class="data_body" scroll-y :style="{height:scrollHeight}"> |
|
||||
<template v-if="true"> |
|
||||
<!-- 会员成长数据--> |
|
||||
<view class="view_item"> |
|
||||
<view class="title">会员成长数据</view> |
|
||||
<view class="progress_circle"> |
|
||||
<view v-for="(item,index) in CircleData" :key="index" :class="['progress_block','block_'+index]"> |
|
||||
<view class="name">{{item.series[0].name}}</view> |
|
||||
<view class="value">{{item.series[0].value}}</view> |
|
||||
<view class="charts-box arcbar" style="height: 180rpx;width: 60%;"> |
|
||||
<qiun-data-charts type="arcbar" :chartData="item" :canvasId="'four_a_'+index" :canvas2d="isCanvas2d" |
|
||||
:resshow="delayload" |
|
||||
:opts="{title:{name:item.series[0].precent,color:item.series[0].color,fontSize:15},subtitle:{name:'',color:'#666666',fontSize:12},extra:{arcbar:{backgroundColor:item.series[0].backgroundColor}}}" /> |
|
||||
</view> |
|
||||
<view class="planet"> |
|
||||
<view class="planet_shadow"></view> |
|
||||
<view class="crater1"></view> |
|
||||
<view class="crater2"></view> |
|
||||
<view class="crater3"></view> |
|
||||
<view class="crater4"></view> |
|
||||
</view> |
|
||||
<view class="star" :class="['star'+index]"></view> |
|
||||
<view class="star pink" :class="['star'+index]"></view> |
|
||||
<view class="star blue" :class="['star'+index]"></view> |
|
||||
<view class="star yellow" :class="['star'+index]"></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 会员数据来源 --> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">会员数据来源 |
|
||||
<text class="font-small" style="color: #ff9900;">(Top5访问来源)</text> |
|
||||
</view> |
|
||||
<view v-if="delayload" class="charts-box"> |
|
||||
<qiun-data-charts |
|
||||
type="ring" |
|
||||
canvasId="four_b" |
|
||||
:canvas2d="isCanvas2d" |
|
||||
:resshow="delayload" |
|
||||
:opts="{legend:{position: 'bottom'},title:{name: '',},subtitle: {name: ''}}" |
|
||||
:chartData="ProductRateData"/> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 服务评价概览--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">服务评价概览</view> |
|
||||
<text-block :content="ServiceComment"></text-block> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 本周会员访问趋势图 --> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">本周会员访问趋势图</view> |
|
||||
<view v-if="delayload" class="charts-box" style="height: 300px;"> |
|
||||
<qiun-data-charts |
|
||||
type="mix" |
|
||||
canvasId="four_c" |
|
||||
:canvas2d="isCanvas2d" |
|
||||
:resshow="delayload" |
|
||||
:opts="{yAxis:{data:[{position: 'left',title: '',min:0,unit:'万'}]}}" |
|
||||
:chartData="TrendData" |
|
||||
/> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 新增会员排行榜 --> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">新增会员排行榜</view> |
|
||||
<progress-bar :isRank="isRank" :content="RankData" /> |
|
||||
</view> |
|
||||
</template> |
|
||||
<template v-else> |
|
||||
<view class="container padding_stand-big normal_color"> |
|
||||
<li class="iconfont icon-cry cry"></li>暂无数据 |
|
||||
</view> |
|
||||
</template> |
|
||||
</scroll-view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import ProgressBar from "../progress-bar/progress-bar.vue" |
|
||||
|
|
||||
import CircleData from "../../static/json/user-server/1.json" |
|
||||
import ProductRateData from '../../static/json/user-server/2.json'; |
|
||||
import TrendData from '../../static/json/user-server/3.json'; |
|
||||
import ServiceComment from '../../static/json/user-server/4.json'; |
|
||||
import RankData from '../../static/json/user-server/5.json'; |
|
||||
|
|
||||
import Config from '../../static/js/config' |
|
||||
export default { |
|
||||
name:"user-server", |
|
||||
props:{ |
|
||||
scrollHeight:{ |
|
||||
type:String, |
|
||||
default:"600px" |
|
||||
} |
|
||||
}, |
|
||||
components:{ |
|
||||
ProgressBar |
|
||||
}, |
|
||||
data(){ |
|
||||
return { |
|
||||
CircleData, |
|
||||
TrendData, |
|
||||
ProductRateData, |
|
||||
ServiceComment, |
|
||||
RankData, |
|
||||
isRank:true, |
|
||||
isCanvas2d:Config.ISCANVAS2D, |
|
||||
delayload: false, //延时加载图表,否则会出现图表加载完后定位错乱 |
|
||||
} |
|
||||
}, |
|
||||
methods:{ |
|
||||
async getData(){ |
|
||||
uni.showLoading(); |
|
||||
await setTimeout(() => { |
|
||||
this.delayload = true; |
|
||||
uni.hideLoading(); |
|
||||
}, 1000) |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.getData(); |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="scss"> |
|
||||
.content{ |
|
||||
padding-top: 10rpx; |
|
||||
} |
|
||||
.data_body{ |
|
||||
height: 100%; |
|
||||
text-align: center; |
|
||||
color: #333333; |
|
||||
background-repeat: repeat; |
|
||||
background-color: #ffffff; |
|
||||
.friend_operate{ |
|
||||
padding: 30rpx 20rpx; |
|
||||
.title{ |
|
||||
text-align:left; |
|
||||
margin-bottom: 30rpx; |
|
||||
font-size: 40rpx; |
|
||||
} |
|
||||
} |
|
||||
.view_item{ |
|
||||
padding: 30rpx 20rpx; |
|
||||
.title{ |
|
||||
text-align:left; |
|
||||
margin-bottom: 30rpx; |
|
||||
font-size: 40rpx; |
|
||||
} |
|
||||
} |
|
||||
.progress_circle{ |
|
||||
display: flex; |
|
||||
flex-wrap: wrap; |
|
||||
justify-content: space-around; |
|
||||
align-items: center; |
|
||||
height: 450rpx; |
|
||||
|
|
||||
.progress_block{ |
|
||||
width: 45%; |
|
||||
border-radius: 20rpx; |
|
||||
height: 180rpx; |
|
||||
position: relative; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.name{ |
|
||||
color: #fff; |
|
||||
font-size: 24rpx; |
|
||||
position: absolute; |
|
||||
top: 20rpx; |
|
||||
left: 10rpx; |
|
||||
max-width: 144rpx; |
|
||||
} |
|
||||
.value{ |
|
||||
color: #fff; |
|
||||
font-size: 40rpx; |
|
||||
position: absolute; |
|
||||
top: 64rpx; |
|
||||
left: 10rpx; |
|
||||
max-width: 144rpx; |
|
||||
} |
|
||||
|
|
||||
.circle{ |
|
||||
position: absolute; |
|
||||
right: 8rpx; |
|
||||
top: 16rpx; |
|
||||
} |
|
||||
.arcbar{ |
|
||||
position: absolute; |
|
||||
right: -4rpx; |
|
||||
top: 8rpx; |
|
||||
} |
|
||||
} |
|
||||
.block_0{ |
|
||||
background-color: #0FC3FF; |
|
||||
} |
|
||||
.block_1{ |
|
||||
background-color: #FF6B8B; |
|
||||
} |
|
||||
.block_2{ |
|
||||
background-color: #FFCB1D; |
|
||||
} |
|
||||
.block_3{ |
|
||||
background-color: #3BDCAA; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
.planet { |
|
||||
width: 60px; |
|
||||
height: 60px; |
|
||||
border-radius: 50%; |
|
||||
background: #333; |
|
||||
position: absolute; |
|
||||
left: -13px; |
|
||||
bottom: -26px; |
|
||||
overflow: hidden; |
|
||||
opacity: 0.5; |
|
||||
z-index: 0; |
|
||||
} |
|
||||
|
|
||||
.planet_shadow { |
|
||||
position: absolute; |
|
||||
border-radius: 50%; |
|
||||
height: 100%; |
|
||||
width: 100%; |
|
||||
top: -40%; |
|
||||
right: -10%; |
|
||||
border: 35px solid rgba(0, 0, 0, .15); |
|
||||
} |
|
||||
|
|
||||
.crater1, |
|
||||
.crater2, |
|
||||
.crater3, |
|
||||
.crater4 { |
|
||||
position: absolute; |
|
||||
border-radius: 50%; |
|
||||
background: rgba(0, 0, 0, .3); |
|
||||
box-shadow: inset 3px 3px 0 rgba(0, 0, 0, .2); |
|
||||
} |
|
||||
|
|
||||
.crater1 { |
|
||||
width: 20px; |
|
||||
height: 20px; |
|
||||
left: 25%; |
|
||||
top: 20%; |
|
||||
} |
|
||||
|
|
||||
.crater2 { |
|
||||
width: 10px; |
|
||||
height: 10px; |
|
||||
left: 50%; |
|
||||
top: 60%; |
|
||||
} |
|
||||
|
|
||||
.crater3 { |
|
||||
width: 15px; |
|
||||
height: 15px; |
|
||||
left: 30%; |
|
||||
top: 65%; |
|
||||
} |
|
||||
|
|
||||
.crater4 { |
|
||||
width: 15px; |
|
||||
height: 15px; |
|
||||
left: 60%; |
|
||||
top: 35%; |
|
||||
} |
|
||||
|
|
||||
.star { |
|
||||
display: block; |
|
||||
width: 5px; |
|
||||
height: 5px; |
|
||||
border-radius: 50%; |
|
||||
background: #FFF; |
|
||||
top: 10px; |
|
||||
left: 50px; |
|
||||
position: relative; |
|
||||
transform-origin: 100% 0; |
|
||||
box-shadow: 0 0 5px 5px rgba(255, 255, 255, .3); |
|
||||
opacity: 0; |
|
||||
z-index: 2; |
|
||||
} |
|
||||
.star0{ |
|
||||
animation: star-ani 4s infinite ease-out; |
|
||||
} |
|
||||
.star1{ |
|
||||
animation: star-ani 5s infinite ease-out; |
|
||||
} |
|
||||
.star2{ |
|
||||
animation: star-ani 6s infinite ease-out; |
|
||||
} |
|
||||
.star3{ |
|
||||
animation: star-ani 7s infinite ease-out; |
|
||||
} |
|
||||
|
|
||||
.star:after { |
|
||||
content: ''; |
|
||||
display: block; |
|
||||
top: 20px; |
|
||||
left: 60px; |
|
||||
border: 0px solid #fff; |
|
||||
border-width: 0px 90px 2px 90px; |
|
||||
border-color: transparent transparent transparent rgba(255, 255, 255, .3); |
|
||||
transform: rotate(-45deg) translate3d(1px, 3px, 0); |
|
||||
box-shadow: 0 0 1px 0 rgba(255, 255, 255, .1); |
|
||||
transform-origin: 0% 100%; |
|
||||
animation: shooting-ani 100s infinite ease-out; |
|
||||
} |
|
||||
|
|
||||
.pink { |
|
||||
top: 10px; |
|
||||
left: 60px; |
|
||||
background: #ff5a99; |
|
||||
animation-delay: 5s; |
|
||||
-webkit-animation-delay: 5s; |
|
||||
-moz-animation-delay: 5s; |
|
||||
} |
|
||||
|
|
||||
.pink:after { |
|
||||
border-color: transparent transparent transparent #ff5a99; |
|
||||
animation-delay: 5s; |
|
||||
-webkit-animation-delay: 5s; |
|
||||
-moz-animation-delay: 5s; |
|
||||
} |
|
||||
|
|
||||
.blue { |
|
||||
top: 15px; |
|
||||
left: 70px; |
|
||||
background: cyan; |
|
||||
animation-delay: 7s; |
|
||||
-webkit-animation-delay: 7s; |
|
||||
-moz-animation-delay: 7s; |
|
||||
} |
|
||||
|
|
||||
.blue:after { |
|
||||
border-color: 'transpareanimation-delay: 12s'; |
|
||||
-webkit-animation-delay: 7s; |
|
||||
-moz-animation-delay: 7s; |
|
||||
animation-delay: 7s; |
|
||||
} |
|
||||
|
|
||||
.yellow { |
|
||||
top: 0px; |
|
||||
left: 80px; |
|
||||
background: #ffcd5c; |
|
||||
animation-delay: 5.8s; |
|
||||
} |
|
||||
|
|
||||
.yellow:after { |
|
||||
border-color: transparent transparent transparent #ffcd5c; |
|
||||
animation-delay: 5.8s; |
|
||||
} |
|
||||
|
|
||||
@keyframes star-ani { |
|
||||
0% { |
|
||||
opacity: 0; |
|
||||
transform: scale(0) rotate(0) translate3d(0, 0, 0); |
|
||||
-webkit-transform: scale(0) rotate(0) translate3d(0, 0, 0); |
|
||||
-moz-transform: scale(0) rotate(0) translate3d(0, 0, 0); |
|
||||
} |
|
||||
|
|
||||
50% { |
|
||||
opacity: 0.5; |
|
||||
transform: scale(1) rotate(0) translate3d(-20px, 20px, 0); |
|
||||
-webkit-transform: scale(1) rotate(0) translate3d(-20px, 20px, 0); |
|
||||
-moz-transform: scale(1) rotate(0) translate3d(-20px, 20px, 0); |
|
||||
} |
|
||||
|
|
||||
100% { |
|
||||
opacity: 0; |
|
||||
transform: scale(1) rotate(0) translate3d(-30px, 30px, 0); |
|
||||
-webkit-transform: scale(1) rotate(0) translate3d(-30px, 30px, 0); |
|
||||
-moz-transform: scale(1) rotate(0) translate3d(-30px, 30px, 0); |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,132 +0,0 @@ |
|||||
<template> |
|
||||
<view class="content"> |
|
||||
<scroll-view v-if="true" scroll-y class="data_body" :style="{height:scrollHeight}"> |
|
||||
<!--数据进度条--> |
|
||||
<view class="progress"> |
|
||||
<data-progress :progressList="wechatLineBar" :borderRadius="20" padMiddle="true"></data-progress> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 微好友运营--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">微好友运营</view> |
|
||||
<text-block :content="friendTextBlock"></text-block> |
|
||||
<view style="display: flex;justify-content: space-around;"> |
|
||||
<view v-for="(item,index) in panelData" :key="index" class="charts-box" |
|
||||
style="width: 45%;height: 200px;"> |
|
||||
<qiun-data-charts type="gauge" |
|
||||
:opts="{title:{name: item.series[0].data * 100 + '%',color: '#24ABFD',offsetY:30},subtitle: {name: item.series[0].name,color: '#666666',fontSize: 15,offsetY:70},extra:{gauge:{type:'progress',width:20,splitLine:{fixRadius:-10,width:15,},}}}" |
|
||||
:chartData="item" :reshow="delayload" :canvas2d="isCanvas2d" :canvasId="'one_a_' + index" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="trend_title">新增微好友&小程序会员趋势</view> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts type="mix" :chartData="friendTrand" :reshow="delayload" |
|
||||
:canvas2d="isCanvas2d" canvasId="one_b" :opts="{yAxis:{data:[{title: ''}]}}" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 微客群运营--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">微客群运营</view> |
|
||||
<text-block :content="friendTextBlock"></text-block> |
|
||||
<view class="trend_title">新增人群&退群人数趋势</view> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts type="mix" :chartData="teamTrand" :reshow="delayload" :canvas2d="isCanvas2d" |
|
||||
canvasId="one_c" :opts="{yAxis:{data:[{title: '',max:teamTrand?teamTrand.yAxis[0].max:0,min:teamTrand?teamTrand.yAxis[0].min:0}]}}" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="split_line"></view> |
|
||||
|
|
||||
<!-- 客户联系--> |
|
||||
<view class="friend_operate"> |
|
||||
<view class="title">【客户联系】1对1运营执行</view> |
|
||||
<senior-table :headers="dataTable.headers" :contents="dataTable.contents" :urlCol="dataTable.urlCol" :firstLineFixed="true" :sortCol="dataTable.sortCol"></senior-table> |
|
||||
</view> |
|
||||
</scroll-view> |
|
||||
<view v-else class="container padding_stand-big normal_color"> |
|
||||
<li class="iconfont icon-cry cry"></li>暂无数据 |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import DataProgress from "../data-progress/data-progress.vue" |
|
||||
import SeniorTable from "../data-table/senior-table.vue" |
|
||||
|
|
||||
import wechatLineBar from '../../static/json/wechat/1.json'; |
|
||||
import friendTextBlock from '../../static/json/wechat/2.json'; |
|
||||
import panelData from '../../static/json/wechat/3.json'; |
|
||||
import friendTrand from '../../static/json/wechat/4.json'; |
|
||||
import teamTrand from '../../static/json/wechat/5.json'; |
|
||||
import dataTable from "../../static/json/wechat/6.json" |
|
||||
|
|
||||
import Config from '../../static/js/config' |
|
||||
|
|
||||
export default { |
|
||||
name:'wechat', |
|
||||
props: { |
|
||||
scrollHeight:{ |
|
||||
type:String, |
|
||||
default:"600px" |
|
||||
} |
|
||||
}, |
|
||||
components:{ |
|
||||
DataProgress, |
|
||||
SeniorTable, |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
wechatLineBar, |
|
||||
friendTextBlock, |
|
||||
friendTrand, |
|
||||
panelData, |
|
||||
teamTrand, |
|
||||
dataTable, |
|
||||
scrollTop: 0, |
|
||||
delayload: false, |
|
||||
isCanvas2d: Config.ISCANVAS2D, |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.getData(); |
|
||||
}, |
|
||||
methods:{ |
|
||||
async getData() { |
|
||||
uni.showLoading(); |
|
||||
await setTimeout(() => { |
|
||||
this.delayload = true; |
|
||||
uni.hideLoading(); |
|
||||
}, 1000) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="less"> |
|
||||
.content{ |
|
||||
padding-top: 10rpx; |
|
||||
.progress,.firend_operate{ |
|
||||
padding: 0 10rpx; |
|
||||
} |
|
||||
.progress{ |
|
||||
margin-bottom: 20rpx; |
|
||||
} |
|
||||
.friend_operate{ |
|
||||
padding: 30rpx 20rpx; |
|
||||
.title{ |
|
||||
text-align:left; |
|
||||
margin-bottom: 30rpx; |
|
||||
font-size: 40rpx; |
|
||||
} |
|
||||
.trend_title{ |
|
||||
text-align: right; |
|
||||
font-size: 22rpx; |
|
||||
color: #ff9900; |
|
||||
margin-top: 50rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
</style> |
|
||||
@ -1,93 +0,0 @@ |
|||||
<template> |
|
||||
<view class="column"> |
|
||||
<view v-for="(item,index) in progressList" :key="index" :class="['row','font-small','progress',padMiddle?'paddingMiddle':'']"> |
|
||||
<text class="title">{{item.name}}</text> |
|
||||
<view class="body"> |
|
||||
<view class="number">{{item.now?item.now+"/":""}}{{item.expect}} [{{item.value}}%]</view> |
|
||||
<progress :percent="item.value" backgroundColor="#C9C9C9" |
|
||||
:border-radius="borderRadius?borderRadius+'rpx':'0px'" |
|
||||
:color="time" |
|
||||
stroke-width="16" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name:'data-progress', |
|
||||
props: { |
|
||||
progressList: { |
|
||||
type: Array, |
|
||||
default: ()=> { |
|
||||
return [] |
|
||||
} |
|
||||
}, |
|
||||
borderRadius:{ |
|
||||
type:Number, |
|
||||
default:0 |
|
||||
}, |
|
||||
padMiddle:{ |
|
||||
type:String, |
|
||||
default:"false" |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
time:0 |
|
||||
} |
|
||||
}, |
|
||||
watch:{ |
|
||||
"progressList":{ |
|
||||
deep: true, |
|
||||
handler: function(newVal, oldVal) { |
|
||||
this.time = newVal.filter(x=>x.name=="时间进度")[0].value; |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
created() { |
|
||||
this.time = this.progressList.filter(x=>x.name=="时间进度")[0].value; |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
.paddingMiddle{ |
|
||||
padding: 18rpx 10rpx; |
|
||||
} |
|
||||
.progress{ |
|
||||
|
|
||||
.title{ |
|
||||
font-size: 28rpx; |
|
||||
width: 170rpx; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
|
|
||||
} |
|
||||
.body{ |
|
||||
position: relative; |
|
||||
flex: 1; |
|
||||
|
|
||||
.number{ |
|
||||
color: #fff; |
|
||||
position: absolute; |
|
||||
z-index: 2; |
|
||||
left: 26rpx; |
|
||||
height: 100%; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
text-overflow: ellipsis; |
|
||||
white-space: nowrap; |
|
||||
overflow: hidden; |
|
||||
height: 44rpx; |
|
||||
} |
|
||||
progress{ |
|
||||
padding: 6rpx 0; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
|
|
||||
</style> |
|
||||
File diff suppressed because it is too large
@ -1,218 +0,0 @@ |
|||||
<template> |
|
||||
<div class="dropdown-item"> |
|
||||
<!-- selected --> |
|
||||
<view :class="['dropdown-item__selected',listWidth!='150rpx'?'dropdown-item__right':'dropdown-item__left']" |
|
||||
@click="changePopup" :style="{maxWidth:selectWidth}"> |
|
||||
<view class="selected__name">{{selectItem.text}}</view> |
|
||||
<view class="selected__icon" |
|
||||
:class="showClass === 'show'? 'up' : 'down'" |
|
||||
> |
|
||||
<li class="iconfont icon-caretdown"></li> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="dropdown-item__content" :style="{top: contentTop + 'rpx'}" v-if="showList"> |
|
||||
<!-- dropdown --> |
|
||||
<view :class="['list', showClass]" :style="{left: contentLeft>0?contentLeft + 'rpx':'auto',right: contentRight>0?contentRight + 'rpx':'auto',}"> |
|
||||
<view class="list__option" |
|
||||
v-for="(item, index) in list" :key="index" |
|
||||
@click="choose(item)"> |
|
||||
<view>{{item.text}}</view> |
|
||||
<icon v-if="item.value === value" type="success_no_circle" size="20"/> |
|
||||
</view> |
|
||||
</view> |
|
||||
<!-- dropdown-mask --> |
|
||||
<view :class="['dropdown-mask', showClass]" v-if="showList" @click="closePopup"></view> |
|
||||
</view> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
components: { |
|
||||
}, |
|
||||
props: { |
|
||||
value: [Number, String, Object], |
|
||||
list: { |
|
||||
type: Array, |
|
||||
default: ()=> { |
|
||||
return [] |
|
||||
} |
|
||||
}, |
|
||||
contentTop:{ |
|
||||
type:String, |
|
||||
default:"185" |
|
||||
}, |
|
||||
contentLeft:{ |
|
||||
type:String, |
|
||||
default:"0" |
|
||||
}, |
|
||||
contentRight:{ |
|
||||
type:String, |
|
||||
default:"0" |
|
||||
}, |
|
||||
listWidth:{ |
|
||||
type:String, |
|
||||
default:'150rpx' |
|
||||
}, |
|
||||
selectWidth:{ |
|
||||
type:String, |
|
||||
default:'150rpx' |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
showList: "", |
|
||||
showClass: '', |
|
||||
selectItem: {}, |
|
||||
} |
|
||||
}, |
|
||||
watch: { |
|
||||
list(newVal,oldVal){ |
|
||||
this.selectItem = newVal[0]; |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.showList = this.active; |
|
||||
this.selectItem = this.list[0]; |
|
||||
}, |
|
||||
methods: { |
|
||||
choose(item) { |
|
||||
if(item.value != "auto"){ |
|
||||
this.selectItem = item |
|
||||
} |
|
||||
this.$emit('changeItem', item); |
|
||||
this.closePopup(); |
|
||||
}, |
|
||||
selectAuto(){ |
|
||||
this.selectItem = {text: '指定日期',value: 'auto'}; |
|
||||
}, |
|
||||
changePopup() { |
|
||||
if(this.showList) { |
|
||||
this.closePopup() |
|
||||
} else { |
|
||||
this.openPopup() |
|
||||
} |
|
||||
}, |
|
||||
openPopup() { |
|
||||
setTimeout(() => { |
|
||||
this.showClass = 'show'; |
|
||||
this.showList = true; |
|
||||
}, 100); |
|
||||
}, |
|
||||
closePopup() { |
|
||||
this.showClass = '' |
|
||||
setTimeout(() => { |
|
||||
this.showList = false |
|
||||
}, 200); |
|
||||
}, |
|
||||
close() { |
|
||||
this.showClass = '' |
|
||||
this.showList = false |
|
||||
}, |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
|
|
||||
li{ |
|
||||
list-style-type:none; |
|
||||
} |
|
||||
.dropdown-item__content{ |
|
||||
z-index: 10!important; |
|
||||
} |
|
||||
.dropdown-item { |
|
||||
width: 100%; |
|
||||
flex:1; |
|
||||
position: relative; |
|
||||
&__selected { |
|
||||
position: relative; |
|
||||
padding: 10rpx 0; |
|
||||
box-sizing: border-box; |
|
||||
color: #fff; |
|
||||
.selected__name { |
|
||||
font-size: 28rpx; |
|
||||
text-overflow: ellipsis; |
|
||||
white-space: nowrap; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
.selected__icon { |
|
||||
margin-left: 20rpx; |
|
||||
&.down { |
|
||||
transition: transform .3s; |
|
||||
transform: rotateZ(0); |
|
||||
} |
|
||||
&.up { |
|
||||
transition: transform .3s; |
|
||||
transform: rotateZ(-180deg); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
&__left{ |
|
||||
display: flex; |
|
||||
flex-direction: row; |
|
||||
justify-content: flex-start; |
|
||||
align-items: center; |
|
||||
} |
|
||||
&__right{ |
|
||||
display: flex; |
|
||||
flex-direction: row; |
|
||||
justify-content: flex-end; |
|
||||
align-items: center; |
|
||||
} |
|
||||
&__content { |
|
||||
position: fixed; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
overflow: hidden; |
|
||||
top: 0; |
|
||||
bottom: 0; |
|
||||
z-index: 1; |
|
||||
.list { |
|
||||
max-height: 400px; |
|
||||
text-align: center; |
|
||||
overflow-y: auto; |
|
||||
position: absolute; |
|
||||
z-index: 1200; |
|
||||
background: #fff; |
|
||||
transform: translateY(-100%); |
|
||||
transition: all .3s; |
|
||||
&.show { |
|
||||
transform: translateY(0); |
|
||||
} |
|
||||
&__option { |
|
||||
font-size:30rpx; |
|
||||
padding: 18rpx; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
color: #303133; |
|
||||
&:not(:last-child) { |
|
||||
border-bottom: 1rpx solid #DDDDDD; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
.dropdown-mask { |
|
||||
position: absolute; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
top: 0; |
|
||||
bottom: 0; |
|
||||
transition: all .3s; |
|
||||
z-index: 1100; |
|
||||
&.show { |
|
||||
background:rgba(0,0,0,0.5); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
&:not(:last-child):after { |
|
||||
content: ' '; |
|
||||
position: absolute; |
|
||||
width: 2rpx; |
|
||||
top: 36rpx; |
|
||||
bottom: 36rpx; |
|
||||
right: 0; |
|
||||
background: $uni-border-color; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,125 +0,0 @@ |
|||||
<template> |
|
||||
<view> |
|
||||
<view v-if="copyContent.length > 0" class="ranking"> |
|
||||
<view class="ranking-item" v-for="(content,index) in copyContent" :key="index" :style="{padding:progressPadding+'rpx'}"> |
|
||||
<view class="name">{{content.name}}</view> |
|
||||
<view class="progress" > |
|
||||
<text :style="{background:content.background,width:content.width + '%',height:progressWidth+'rpx'}"></text> |
|
||||
</view> |
|
||||
<view class="num">{{content.num}}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default{ |
|
||||
name:'ranking-list', |
|
||||
props:{ |
|
||||
content:{ |
|
||||
type: Array, |
|
||||
default() { |
|
||||
return [] |
|
||||
} |
|
||||
}, |
|
||||
isPC:{ |
|
||||
type:Boolean, |
|
||||
default:false |
|
||||
}, |
|
||||
isRank:{ |
|
||||
type:Boolean, |
|
||||
default:false |
|
||||
} |
|
||||
}, |
|
||||
data(){ |
|
||||
return{ |
|
||||
progressWidth:24, |
|
||||
progressPadding:10, |
|
||||
maxNumber:0, |
|
||||
culCount:0, |
|
||||
copyContent:[] |
|
||||
} |
|
||||
}, |
|
||||
watch:{ |
|
||||
content(newV){ |
|
||||
this.init() |
|
||||
} |
|
||||
}, |
|
||||
methods:{ |
|
||||
init(){ |
|
||||
this.copyContent = this.deepClone(this.content) |
|
||||
if(this.copyContent && this.copyContent.length >0){ |
|
||||
if(this.isRank){ |
|
||||
this.copyContent = this.copyContent.sort((a,b) => b.num - a.num); |
|
||||
this.maxNumber = this.copyContent[0].num; |
|
||||
}else{ |
|
||||
this.maxNumber = Math.max.apply(Math,this.copyContent.map(item => { return item.num })); |
|
||||
} |
|
||||
this.copyContent.map((item,index) =>{ |
|
||||
item.width = this.computeWidth(this.maxNumber,item.num); |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
computeWidth(max,current){ |
|
||||
let num = (current / max) * 100; |
|
||||
return num.toFixed(2); |
|
||||
}, |
|
||||
deepClone(obj) { |
|
||||
var cloneObj = new obj.constructor() |
|
||||
if(obj === null) return obj |
|
||||
if(obj instanceof Date) return new Date(obj) |
|
||||
if(obj instanceof RegExp) return new RegExp(obj) |
|
||||
if (typeof obj !== 'object') return obj |
|
||||
for (var i in obj) { |
|
||||
if (obj.hasOwnProperty(i)) { |
|
||||
cloneObj[i] = this.deepClone(obj[i]) |
|
||||
} |
|
||||
} |
|
||||
return cloneObj |
|
||||
} |
|
||||
}, |
|
||||
mounted() { |
|
||||
if(this.isPC){ |
|
||||
this.progressWidth = 40; |
|
||||
this.progressPadding = 30; |
|
||||
} |
|
||||
this.init(); |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="scss"> |
|
||||
.ranking-item{ |
|
||||
display: flex; |
|
||||
margin-bottom: 13rpx; |
|
||||
align-content: center; |
|
||||
height: 50rpx; |
|
||||
|
|
||||
.name{ |
|
||||
padding-right: 10rpx; |
|
||||
color: #868688; |
|
||||
font-size: 20rpx; |
|
||||
flex: 1; |
|
||||
white-space: nowrap; |
|
||||
overflow: hidden; |
|
||||
text-overflow: ellipsis; |
|
||||
} |
|
||||
.progress{ |
|
||||
flex:5; |
|
||||
text-align: left; |
|
||||
padding-right: 10rpx; |
|
||||
|
|
||||
text{ |
|
||||
display: inline-block; |
|
||||
border-radius: 30rpx; |
|
||||
vertical-align:top; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
.num{ |
|
||||
font-size: 26rpx; |
|
||||
color: #3EB2F5; |
|
||||
flex: 1; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,93 +0,0 @@ |
|||||
<template> |
|
||||
<view> |
|
||||
<view class="ranking"> |
|
||||
<view class="ranking-item" v-for="(content,index) in content" :key="index"> |
|
||||
<view class="name">{{content.name}}</view> |
|
||||
<view class="progress" > |
|
||||
<text :style="{backgroundImage:'linear-gradient(to top right,'+getColor(0,index)+','+getColor(1,index)+')',width:content.width + '%'}"></text> |
|
||||
</view> |
|
||||
<view class="num">{{content.num}}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default{ |
|
||||
name:'ranking-list', |
|
||||
props:{ |
|
||||
content:{ |
|
||||
type: Array, |
|
||||
default() { |
|
||||
return [] |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
methods:{ |
|
||||
init(){ |
|
||||
if(this.content && this.content.length >0){ |
|
||||
this.content = this.content.sort((a,b) => b.num - a.num); |
|
||||
let max = this.content[0].num; |
|
||||
this.content.map((item,index) =>{ |
|
||||
item.width = this.computeWidth(max,item.num); |
|
||||
}); |
|
||||
this.$emit("updateRanking",this.content) |
|
||||
} |
|
||||
}, |
|
||||
computeWidth(max,current){ |
|
||||
let num = (current / max) * 100; |
|
||||
return num.toFixed(2); |
|
||||
}, |
|
||||
getColor(id,index){ |
|
||||
let color = ""; |
|
||||
switch(index){ |
|
||||
case 0: |
|
||||
color = id == 0 ? "#fff":"#A80BFC"; |
|
||||
break; |
|
||||
case 1: |
|
||||
color = id == 0 ? "#fff":"#740CFF"; |
|
||||
break; |
|
||||
case 2: |
|
||||
color = id == 0 ? "#fff":"#4A08DC"; |
|
||||
break; |
|
||||
default : |
|
||||
color = id == 0 ? "#fff":"#1936DA"; |
|
||||
break; |
|
||||
} |
|
||||
return color; |
|
||||
}, |
|
||||
}, |
|
||||
mounted() { |
|
||||
this.init(); |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="scss"> |
|
||||
.ranking-item{ |
|
||||
display: flex; |
|
||||
margin-bottom: 13rpx; |
|
||||
padding: 10rpx; |
|
||||
align-content: center; |
|
||||
|
|
||||
.name{ |
|
||||
padding-right: 10rpx; |
|
||||
color: #868688; |
|
||||
} |
|
||||
.progress{ |
|
||||
flex:5; |
|
||||
text-align: left; |
|
||||
padding-right: 10rpx; |
|
||||
|
|
||||
text{ |
|
||||
display: inline-block; |
|
||||
height: 100%; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
.num{ |
|
||||
font-size: 26rpx; |
|
||||
color: #3EB2F5; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,186 +0,0 @@ |
|||||
<template> |
|
||||
<view class="text_block"> |
|
||||
<template v-for="(item,index) in content"> |
|
||||
<view v-if="item.kind == 1" :key="index" :style="{backgroundImage:'linear-gradient(to top right,'+item.background[0]+','+item.background[1]+')'}" :class="[(index+1)%3==0 ? '':'marginRight','kind','kind_one','breathe-blue']"> |
|
||||
<view class="view_100" :style="{fontSize:item.content[0].size,color:item.content[0].colorvalue}">{{item.content[0].value}}</view> |
|
||||
<view class="view_100" :style="{fontSize:item.content[1].size,color:item.content[1].colortext}">{{item.content[1].text}}</view> |
|
||||
</view> |
|
||||
<view v-else-if="item.kind == 2" :class="[(index+1)%3==0 ? '':'marginRight','kind','kind_two','breathe-blue']" :style="{backgroundImage:'linear-gradient(to top right,'+item.background[0]+','+item.background+')' ,marginRight:(index+1)%3==0?'0rpx':'40rpx'}"> |
|
||||
<view v-for="(content,i) in item.content" :key="i" class="two_1"> |
|
||||
<text :style="{fontSize:content.size,color:content.colortext}">{{content.text}}:</text> |
|
||||
<text :style="{fontSize:content.size,color:content.colorvalue}">{{content.value}}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view v-else-if="item.kind == 3" class="kind kind_three breathe-blue" :style="{backgroundImage:'linear-gradient(to top right,'+item.background[0]+','+item.background+')'}"> |
|
||||
<view class="view_100" :style="{fontSize:item.content[0].size,color:item.content[0].colorvalue}">{{item.content[0].value}}</view> |
|
||||
<view class="view_100" :style="{fontSize:item.content[1].size,color:item.content[1].colortext}">{{item.content[1].text}}</view> |
|
||||
<view class="three_3 view_100"> |
|
||||
<view v-for="(j,i) in 2" :key="i"> |
|
||||
<text :style="{fontSize:item.content[i+2].size,color:item.content[i+2].colortext}">{{item.content[i+2].text}}:</text> |
|
||||
<text :style="{fontSize:item.content[i+2].size,color:item.content[i+2].colorvalue}">{{item.content[i+2].value}}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view v-else-if="item.kind == 4" :class="[(index+1)%3==0 ? '':'marginRight','kind','kind_four','breathe-blue']" :style="{backgroundImage:'linear-gradient(to top right,'+item.background[0]+','+item.background[1]+')',marginRight:(index+1)%3==0?'0rpx':'40rpx'}"> |
|
||||
<view class="view_100" :style="{fontSize:item.content[0].size,color:item.content[0].colortext}">{{item.content[0].text}}</view> |
|
||||
<view class="view_100" :style="{fontSize:item.content[1].size,color:item.content[1].colorvalue}">{{item.content[1].value}}</view> |
|
||||
<view class="four_3" :style="{fontSize:item.content[2].size,color:item.content[2].colorvalue}"> |
|
||||
<text :style="{fontSize:item.content[3].size,color:item.content[3].colorvalue}">{{item.content[2].text}}</text> |
|
||||
<li v-if="item.content[3].text == 'up'" class="iconfont icon-up icon li_1" :style="{color:item.content[3].colortext}"></li> |
|
||||
<li v-else class="iconfont icon-down icon li_1" :style="{color:item.content[3].colortext}"></li> |
|
||||
<text :style="{fontSize:item.content[3].size,color:item.content[3].colorvalue}">{{item.content[3].value}}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view v-else-if="item.kind == 5" :class="[(index+1)%3==0 ? '':'marginRight','kind','kind_five','breathe-red']" :style="{backgroundImage:'linear-gradient(to top right,'+item.background[0]+','+item.background[1]+')',marginRight:(index+1)%3==0?'0rpx':'40rpx'}"> |
|
||||
<view class="view_100" :style="{fontSize:item.content[0].size,color:item.content[0].colortext}">{{item.content[0].text}}</view> |
|
||||
<view class="view_100" :style="{fontSize:item.content[1].size,color:item.content[1].colorvalue}">{{item.content[1].value}}</view> |
|
||||
<view class="five_3 view_100"> |
|
||||
<view v-for="(j,i) in 2" :key="i"> |
|
||||
<text :style="{fontSize:item.content[j+2].size,color:item.content[j+2].colortext}">{{item.content[j+2].text}}</text> |
|
||||
<text :style="{fontSize:item.content[j+2].size,color:item.content[j+2].colorvalue}">{{item.content[j+2].value}}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="five_4"> |
|
||||
<text :style="{fontSize:item.content[4].size,color:item.content[4].colortext}">{{item.content[4].text}}</text> |
|
||||
<text :style="{fontSize:item.content[4].size,color:item.content[4].colorvalue}">{{item.content[4].value}}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
props:{ |
|
||||
content: { |
|
||||
type: Array, |
|
||||
default: [] |
|
||||
}, |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
|
|
||||
}, |
|
||||
mounted() { |
|
||||
uni.onWindowResize((res) => { |
|
||||
console.log('变化后的窗口宽度=' + res.size.windowWidth) |
|
||||
console.log('变化后的窗口高度=' + res.size.windowHeight) |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
.text_block{ |
|
||||
display: flex; |
|
||||
width: 100%; |
|
||||
flex-wrap: wrap; |
|
||||
.marginRight{ |
|
||||
margin-right: 36rpx!important; |
|
||||
} |
|
||||
.view_100{ |
|
||||
width: 100%; |
|
||||
} |
|
||||
.CPT_DYBG { |
|
||||
overflow: hidden; |
|
||||
position: relative; |
|
||||
} |
|
||||
.kind{ |
|
||||
width: 24%; |
|
||||
padding: 10rpx; |
|
||||
margin-bottom: 40rpx; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
flex-wrap: wrap; |
|
||||
border-radius: 16rpx; |
|
||||
margin-left: 16rpx; |
|
||||
box-shadow: -4px 4px 4px #ccc; |
|
||||
position: relative; |
|
||||
} |
|
||||
.kind_one{ |
|
||||
border-radius: 10rpx; |
|
||||
} |
|
||||
.kind_two{ |
|
||||
border-radius: 10rpx; |
|
||||
} |
|
||||
.kind_three{ |
|
||||
border-radius: 16rpx; |
|
||||
width: 300rpx; |
|
||||
margin: 0 auto; |
|
||||
.three_3{ |
|
||||
display: flex; |
|
||||
justify-content: space-around; |
|
||||
} |
|
||||
} |
|
||||
.kind_four{ |
|
||||
border-radius: 10rpx; |
|
||||
.four_3{ |
|
||||
display: flex; |
|
||||
.li_1 { |
|
||||
list-style-type:none; |
|
||||
} |
|
||||
.icon{ |
|
||||
margin-top: -8rpx; |
|
||||
transform: scale(0.8); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
.kind_five{ |
|
||||
border-radius: 20rpx; |
|
||||
.five_3{ |
|
||||
view{ |
|
||||
width: 100%; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
// .breathe-blue { |
|
||||
// position:relative; |
|
||||
// color:#fff; |
|
||||
// text-align:center; |
|
||||
// cursor:pointer; |
|
||||
// box-shadow:0 1px 2px rgba(0,0,0,.3); |
|
||||
// overflow:hidden; |
|
||||
// -webkit-animation-timing-function:ease-in-out; |
|
||||
// -webkit-animation-name:breatheblue; |
|
||||
// -webkit-animation-duration:2000ms; |
|
||||
// -webkit-animation-iteration-count:infinite; |
|
||||
// -webkit-animation-direction:alternate; |
|
||||
// } |
|
||||
// @keyframes breatheblue { |
|
||||
// 0% { |
|
||||
// opacity:.8; |
|
||||
// box-shadow:0 1px 2px rgba(62,178,245,0.5); |
|
||||
// } |
|
||||
// 100% { |
|
||||
// opacity:1; |
|
||||
// box-shadow:0 1px 30px rgba(147,116,247,0.6); |
|
||||
// } |
|
||||
// } |
|
||||
// .breathe-red { |
|
||||
// position:relative; |
|
||||
// color:#fff; |
|
||||
// text-align:center; |
|
||||
// cursor:pointer; |
|
||||
// box-shadow:0 1px 2px rgba(0,0,0,.3); |
|
||||
// overflow:hidden; |
|
||||
// -webkit-animation-timing-function:ease-in-out; |
|
||||
// -webkit-animation-name:breathered; |
|
||||
// -webkit-animation-duration:2000ms; |
|
||||
// -webkit-animation-iteration-count:infinite; |
|
||||
// -webkit-animation-direction:alternate; |
|
||||
// } |
|
||||
// @keyframes breathered { |
|
||||
// 0% { |
|
||||
// opacity:.8; |
|
||||
// box-shadow:0 1px 2px rgba(247,126,137,0.5); |
|
||||
// } |
|
||||
// 100% { |
|
||||
// opacity:1; |
|
||||
// box-shadow:0 1px 30px rgba(247,149,59,0.9); |
|
||||
// } |
|
||||
// } |
|
||||
</style> |
|
||||
@ -1,600 +0,0 @@ |
|||||
/** |
|
||||
* @1900-2100区间内的公历、农历互转 |
|
||||
* @charset UTF-8 |
|
||||
* @github https://github.com/jjonline/calendar.js
|
|
||||
* @Author Jea杨(JJonline@JJonline.Cn) |
|
||||
* @Time 2014-7-21 |
|
||||
* @Time 2016-8-13 Fixed 2033hex、Attribution Annals |
|
||||
* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug |
|
||||
* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year |
|
||||
* @Version 1.0.3 |
|
||||
* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
|
|
||||
* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0]
|
|
||||
*/ |
|
||||
/* eslint-disable */ |
|
||||
var calendar = { |
|
||||
|
|
||||
/** |
|
||||
* 农历1900-2100的润大小信息表 |
|
||||
* @Array Of Property |
|
||||
* @return Hex |
|
||||
*/ |
|
||||
lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909
|
|
||||
0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919
|
|
||||
0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929
|
|
||||
0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939
|
|
||||
0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949
|
|
||||
0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959
|
|
||||
0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969
|
|
||||
0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979
|
|
||||
0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989
|
|
||||
0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999
|
|
||||
0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009
|
|
||||
0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019
|
|
||||
0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029
|
|
||||
0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039
|
|
||||
0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049
|
|
||||
/** Add By JJonline@JJonline.Cn**/ |
|
||||
0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059
|
|
||||
0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069
|
|
||||
0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079
|
|
||||
0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089
|
|
||||
0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099
|
|
||||
0x0d520], // 2100
|
|
||||
|
|
||||
/** |
|
||||
* 公历每个月份的天数普通表 |
|
||||
* @Array Of Property |
|
||||
* @return Number |
|
||||
*/ |
|
||||
solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], |
|
||||
|
|
||||
/** |
|
||||
* 天干地支之天干速查表 |
|
||||
* @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], |
|
||||
|
|
||||
/** |
|
||||
* 天干地支之地支速查表 |
|
||||
* @Array Of Property |
|
||||
* @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], |
|
||||
|
|
||||
/** |
|
||||
* 天干地支之地支速查表<=>生肖 |
|
||||
* @Array Of Property |
|
||||
* @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], |
|
||||
|
|
||||
/** |
|
||||
* 24节气速查表 |
|
||||
* @Array Of Property |
|
||||
* @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], |
|
||||
|
|
||||
/** |
|
||||
* 1900-2100各年的24节气日期速查表 |
|
||||
* @Array Of Property |
|
||||
* @return 0x string For splice |
|
||||
*/ |
|
||||
sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', |
|
||||
'97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
|
||||
'97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', |
|
||||
'97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', |
|
||||
'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', |
|
||||
'97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', |
|
||||
'97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', |
|
||||
'9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', |
|
||||
'97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
|
||||
'97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
|
||||
'97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', |
|
||||
'9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', |
|
||||
'97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
|
||||
'97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
|
||||
'97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', |
|
||||
'9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', |
|
||||
'97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', |
|
||||
'97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', |
|
||||
'9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', |
|
||||
'7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
|
||||
'97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
|
||||
'97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', |
|
||||
'9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', |
|
||||
'7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', |
|
||||
'97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
|
||||
'97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', |
|
||||
'9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', |
|
||||
'7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', |
|
||||
'97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', |
|
||||
'9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', |
|
||||
'7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', |
|
||||
'7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
|
||||
'97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', |
|
||||
'9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', |
|
||||
'7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', |
|
||||
'7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', |
|
||||
'97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', |
|
||||
'9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', |
|
||||
'7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', |
|
||||
'7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', |
|
||||
'977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', |
|
||||
'7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
|
||||
'7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', |
|
||||
'7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', |
|
||||
'977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', |
|
||||
'7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
|
||||
'7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', |
|
||||
'7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', |
|
||||
'977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', |
|
||||
'7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', |
|
||||
'7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', |
|
||||
'7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', |
|
||||
'7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
|
||||
'7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', |
|
||||
'7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', |
|
||||
'7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', |
|
||||
'7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', |
|
||||
'7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', |
|
||||
'7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', |
|
||||
'7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', |
|
||||
'7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', |
|
||||
'7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', |
|
||||
'7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', |
|
||||
'665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', |
|
||||
'7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', |
|
||||
'7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', |
|
||||
'7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], |
|
||||
|
|
||||
/** |
|
||||
* 数字转中文速查表 |
|
||||
* @Array Of Property |
|
||||
* @trans ['日','一','二','三','四','五','六','七','八','九','十'] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], |
|
||||
|
|
||||
/** |
|
||||
* 日期转农历称呼速查表 |
|
||||
* @Array Of Property |
|
||||
* @trans ['初','十','廿','卅'] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], |
|
||||
|
|
||||
/** |
|
||||
* 月份转农历称呼速查表 |
|
||||
* @Array Of Property |
|
||||
* @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], |
|
||||
|
|
||||
/** |
|
||||
* 返回农历y年一整年的总天数 |
|
||||
* @param lunar Year |
|
||||
* @return Number |
|
||||
* @eg:var count = calendar.lYearDays(1987) ;//count=387
|
|
||||
*/ |
|
||||
lYearDays: function (y) { |
|
||||
var i; |
|
||||
var sum = 348 |
|
||||
for (i = 0x8000; i > 0x8; i >>= 1) { |
|
||||
sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 |
|
||||
} |
|
||||
return (sum + this.leapDays(y)) |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 |
|
||||
* @param lunar Year |
|
||||
* @return Number (0-12) |
|
||||
* @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
|
|
||||
*/ |
|
||||
leapMonth: function (y) { // 闰字编码 \u95f0
|
|
||||
return (this.lunarInfo[y - 1900] & 0xf) |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 返回农历y年闰月的天数 若该年没有闰月则返回0 |
|
||||
* @param lunar Year |
|
||||
* @return Number (0、29、30) |
|
||||
* @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
|
|
||||
*/ |
|
||||
leapDays: function (y) { |
|
||||
if (this.leapMonth(y)) { |
|
||||
return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) |
|
||||
} |
|
||||
return (0) |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 |
|
||||
* @param lunar Year |
|
||||
* @return Number (-1、29、30) |
|
||||
* @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
|
|
||||
*/ |
|
||||
monthDays: function (y, m) { |
|
||||
if (m > 12 || m < 1) { |
|
||||
return -1 |
|
||||
}// 月份参数从1至12,参数错误返回-1
|
|
||||
return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 返回公历(!)y年m月的天数 |
|
||||
* @param solar Year |
|
||||
* @return Number (-1、28、29、30、31) |
|
||||
* @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
|
|
||||
*/ |
|
||||
solarDays: function (y, m) { |
|
||||
if (m > 12 || m < 1) { |
|
||||
return -1 |
|
||||
} // 若参数错误 返回-1
|
|
||||
var ms = m - 1 |
|
||||
if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29
|
|
||||
return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) |
|
||||
} else { |
|
||||
return (this.solarMonth[ms]) |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 农历年份转换为干支纪年 |
|
||||
* @param lYear 农历年的年份数 |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
toGanZhiYear: function (lYear) { |
|
||||
var ganKey = (lYear - 3) % 10 |
|
||||
var zhiKey = (lYear - 3) % 12 |
|
||||
if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干
|
|
||||
if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支
|
|
||||
return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 公历月、日判断所属星座 |
|
||||
* @param cMonth [description] |
|
||||
* @param cDay [description] |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
toAstro: function (cMonth, cDay) { |
|
||||
var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' |
|
||||
var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] |
|
||||
return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座
|
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 传入offset偏移量返回干支 |
|
||||
* @param offset 相对甲子的偏移量 |
|
||||
* @return Cn string |
|
||||
*/ |
|
||||
toGanZhi: function (offset) { |
|
||||
return this.Gan[offset % 10] + this.Zhi[offset % 12] |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 传入公历(!)y年获得该年第n个节气的公历日期 |
|
||||
* @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 |
|
||||
* @return day Number |
|
||||
* @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
|
|
||||
*/ |
|
||||
getTerm: function (y, n) { |
|
||||
if (y < 1900 || y > 2100) { |
|
||||
return -1 |
|
||||
} |
|
||||
if (n < 1 || n > 24) { |
|
||||
return -1 |
|
||||
} |
|
||||
var _table = this.sTermInfo[y - 1900] |
|
||||
var _info = [ |
|
||||
parseInt('0x' + _table.substr(0, 5)).toString(), |
|
||||
parseInt('0x' + _table.substr(5, 5)).toString(), |
|
||||
parseInt('0x' + _table.substr(10, 5)).toString(), |
|
||||
parseInt('0x' + _table.substr(15, 5)).toString(), |
|
||||
parseInt('0x' + _table.substr(20, 5)).toString(), |
|
||||
parseInt('0x' + _table.substr(25, 5)).toString() |
|
||||
] |
|
||||
var _calday = [ |
|
||||
_info[0].substr(0, 1), |
|
||||
_info[0].substr(1, 2), |
|
||||
_info[0].substr(3, 1), |
|
||||
_info[0].substr(4, 2), |
|
||||
|
|
||||
_info[1].substr(0, 1), |
|
||||
_info[1].substr(1, 2), |
|
||||
_info[1].substr(3, 1), |
|
||||
_info[1].substr(4, 2), |
|
||||
|
|
||||
_info[2].substr(0, 1), |
|
||||
_info[2].substr(1, 2), |
|
||||
_info[2].substr(3, 1), |
|
||||
_info[2].substr(4, 2), |
|
||||
|
|
||||
_info[3].substr(0, 1), |
|
||||
_info[3].substr(1, 2), |
|
||||
_info[3].substr(3, 1), |
|
||||
_info[3].substr(4, 2), |
|
||||
|
|
||||
_info[4].substr(0, 1), |
|
||||
_info[4].substr(1, 2), |
|
||||
_info[4].substr(3, 1), |
|
||||
_info[4].substr(4, 2), |
|
||||
|
|
||||
_info[5].substr(0, 1), |
|
||||
_info[5].substr(1, 2), |
|
||||
_info[5].substr(3, 1), |
|
||||
_info[5].substr(4, 2) |
|
||||
] |
|
||||
return parseInt(_calday[n - 1]) |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 传入农历数字月份返回汉语通俗表示法 |
|
||||
* @param lunar month |
|
||||
* @return Cn string |
|
||||
* @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
|
|
||||
*/ |
|
||||
toChinaMonth: function (m) { // 月 => \u6708
|
|
||||
if (m > 12 || m < 1) { |
|
||||
return -1 |
|
||||
} // 若参数错误 返回-1
|
|
||||
var s = this.nStr3[m - 1] |
|
||||
s += '\u6708'// 加上月字
|
|
||||
return s |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 传入农历日期数字返回汉字表示法 |
|
||||
* @param lunar day |
|
||||
* @return Cn string |
|
||||
* @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
|
|
||||
*/ |
|
||||
toChinaDay: function (d) { // 日 => \u65e5
|
|
||||
var s |
|
||||
switch (d) { |
|
||||
case 10: |
|
||||
s = '\u521d\u5341'; |
|
||||
break |
|
||||
case 20: |
|
||||
s = '\u4e8c\u5341'; |
|
||||
break |
|
||||
break |
|
||||
case 30: |
|
||||
s = '\u4e09\u5341'; |
|
||||
break |
|
||||
break |
|
||||
default : |
|
||||
s = this.nStr2[Math.floor(d / 10)] |
|
||||
s += this.nStr1[d % 10] |
|
||||
} |
|
||||
return (s) |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” |
|
||||
* @param y year |
|
||||
* @return Cn string |
|
||||
* @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
|
|
||||
*/ |
|
||||
getAnimal: function (y) { |
|
||||
return this.Animals[(y - 4) % 12] |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 传入阳历年月日获得详细的公历、农历object信息 <=>JSON |
|
||||
* @param y solar year |
|
||||
* @param m solar month |
|
||||
* @param d solar day |
|
||||
* @return JSON object |
|
||||
* @eg:console.log(calendar.solar2lunar(1987,11,01)); |
|
||||
*/ |
|
||||
solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31
|
|
||||
// 年份限定、上限
|
|
||||
if (y < 1900 || y > 2100) { |
|
||||
return -1// undefined转换为数字变为NaN
|
|
||||
} |
|
||||
// 公历传参最下限
|
|
||||
if (y == 1900 && m == 1 && d < 31) { |
|
||||
return -1 |
|
||||
} |
|
||||
// 未传参 获得当天
|
|
||||
if (!y) { |
|
||||
var objDate = new Date() |
|
||||
} else { |
|
||||
var objDate = new Date(y, parseInt(m) - 1, d) |
|
||||
} |
|
||||
var i; |
|
||||
var leap = 0; |
|
||||
var temp = 0 |
|
||||
// 修正ymd参数
|
|
||||
var y = objDate.getFullYear() |
|
||||
var m = objDate.getMonth() + 1 |
|
||||
var d = objDate.getDate() |
|
||||
var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 |
|
||||
for (i = 1900; i < 2101 && offset > 0; i++) { |
|
||||
temp = this.lYearDays(i) |
|
||||
offset -= temp |
|
||||
} |
|
||||
if (offset < 0) { |
|
||||
offset += temp; |
|
||||
i-- |
|
||||
} |
|
||||
|
|
||||
// 是否今天
|
|
||||
var isTodayObj = new Date() |
|
||||
var isToday = false |
|
||||
if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { |
|
||||
isToday = true |
|
||||
} |
|
||||
// 星期几
|
|
||||
var nWeek = objDate.getDay() |
|
||||
var cWeek = this.nStr1[nWeek] |
|
||||
// 数字表示周几顺应天朝周一开始的惯例
|
|
||||
if (nWeek == 0) { |
|
||||
nWeek = 7 |
|
||||
} |
|
||||
// 农历年
|
|
||||
var year = i |
|
||||
var leap = this.leapMonth(i) // 闰哪个月
|
|
||||
var isLeap = false |
|
||||
|
|
||||
// 效验闰月
|
|
||||
for (i = 1; i < 13 && offset > 0; i++) { |
|
||||
// 闰月
|
|
||||
if (leap > 0 && i == (leap + 1) && isLeap == false) { |
|
||||
--i |
|
||||
isLeap = true; |
|
||||
temp = this.leapDays(year) // 计算农历闰月天数
|
|
||||
} else { |
|
||||
temp = this.monthDays(year, i)// 计算农历普通月天数
|
|
||||
} |
|
||||
// 解除闰月
|
|
||||
if (isLeap == true && i == (leap + 1)) { |
|
||||
isLeap = false |
|
||||
} |
|
||||
offset -= temp |
|
||||
} |
|
||||
// 闰月导致数组下标重叠取反
|
|
||||
if (offset == 0 && leap > 0 && i == leap + 1) { |
|
||||
if (isLeap) { |
|
||||
isLeap = false |
|
||||
} else { |
|
||||
isLeap = true; |
|
||||
--i |
|
||||
} |
|
||||
} |
|
||||
if (offset < 0) { |
|
||||
offset += temp; |
|
||||
--i |
|
||||
} |
|
||||
// 农历月
|
|
||||
var month = i |
|
||||
// 农历日
|
|
||||
var day = offset + 1 |
|
||||
// 天干地支处理
|
|
||||
var sm = m - 1 |
|
||||
var gzY = this.toGanZhiYear(year) |
|
||||
|
|
||||
// 当月的两个节气
|
|
||||
// bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
|
|
||||
var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始
|
|
||||
var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始
|
|
||||
|
|
||||
// 依据12节气修正干支月
|
|
||||
var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) |
|
||||
if (d >= firstNode) { |
|
||||
gzM = this.toGanZhi((y - 1900) * 12 + m + 12) |
|
||||
} |
|
||||
|
|
||||
// 传入的日期的节气与否
|
|
||||
var isTerm = false |
|
||||
var Term = null |
|
||||
if (firstNode == d) { |
|
||||
isTerm = true |
|
||||
Term = this.solarTerm[m * 2 - 2] |
|
||||
} |
|
||||
if (secondNode == d) { |
|
||||
isTerm = true |
|
||||
Term = this.solarTerm[m * 2 - 1] |
|
||||
} |
|
||||
// 日柱 当月一日与 1900/1/1 相差天数
|
|
||||
var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 |
|
||||
var gzD = this.toGanZhi(dayCyclical + d - 1) |
|
||||
// 该日期所属的星座
|
|
||||
var astro = this.toAstro(m, d) |
|
||||
|
|
||||
return { |
|
||||
'lYear': year, |
|
||||
'lMonth': month, |
|
||||
'lDay': day, |
|
||||
'Animal': this.getAnimal(year), |
|
||||
'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), |
|
||||
'IDayCn': this.toChinaDay(day), |
|
||||
'cYear': y, |
|
||||
'cMonth': m, |
|
||||
'cDay': d, |
|
||||
'gzYear': gzY, |
|
||||
'gzMonth': gzM, |
|
||||
'gzDay': gzD, |
|
||||
'isToday': isToday, |
|
||||
'isLeap': isLeap, |
|
||||
'nWeek': nWeek, |
|
||||
'ncWeek': '\u661f\u671f' + cWeek, |
|
||||
'isTerm': isTerm, |
|
||||
'Term': Term, |
|
||||
'astro': astro |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
/** |
|
||||
* 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON |
|
||||
* @param y lunar year |
|
||||
* @param m lunar month |
|
||||
* @param d lunar day |
|
||||
* @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] |
|
||||
* @return JSON object |
|
||||
* @eg:console.log(calendar.lunar2solar(1987,9,10)); |
|
||||
*/ |
|
||||
lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1
|
|
||||
var isLeapMonth = !!isLeapMonth |
|
||||
var leapOffset = 0 |
|
||||
var leapMonth = this.leapMonth(y) |
|
||||
var leapDay = this.leapDays(y) |
|
||||
if (isLeapMonth && (leapMonth != m)) { |
|
||||
return -1 |
|
||||
}// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
|
|
||||
if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { |
|
||||
return -1 |
|
||||
}// 超出了最大极限值
|
|
||||
var day = this.monthDays(y, m) |
|
||||
var _day = day |
|
||||
// bugFix 2016-9-25
|
|
||||
// if month is leap, _day use leapDays method
|
|
||||
if (isLeapMonth) { |
|
||||
_day = this.leapDays(y, m) |
|
||||
} |
|
||||
if (y < 1900 || y > 2100 || d > _day) { |
|
||||
return -1 |
|
||||
}// 参数合法性效验
|
|
||||
|
|
||||
// 计算农历的时间差
|
|
||||
var offset = 0 |
|
||||
for (var i = 1900; i < y; i++) { |
|
||||
offset += this.lYearDays(i) |
|
||||
} |
|
||||
var leap = 0; |
|
||||
var isAdd = false |
|
||||
for (var i = 1; i < m; i++) { |
|
||||
leap = this.leapMonth(y) |
|
||||
if (!isAdd) { // 处理闰月
|
|
||||
if (leap <= i && leap > 0) { |
|
||||
offset += this.leapDays(y); |
|
||||
isAdd = true |
|
||||
} |
|
||||
} |
|
||||
offset += this.monthDays(y, i) |
|
||||
} |
|
||||
// 转换闰月农历 需补充该年闰月的前一个月的时差
|
|
||||
if (isLeapMonth) { |
|
||||
offset += day |
|
||||
} |
|
||||
// 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
|
|
||||
var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) |
|
||||
var calObj = new Date((offset + d - 31) * 86400000 + stmap) |
|
||||
var cY = calObj.getUTCFullYear() |
|
||||
var cM = calObj.getUTCMonth() + 1 |
|
||||
var cD = calObj.getUTCDate() |
|
||||
|
|
||||
return this.solar2lunar(cY, cM, cD) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
export default calendar |
|
||||
@ -1,170 +0,0 @@ |
|||||
<template> |
|
||||
<view class="uni-calendar-item__weeks-box" :class="{ |
|
||||
'uni-calendar-item--disable':weeks.disable, |
|
||||
'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, |
|
||||
'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) , |
|
||||
'uni-calendar-item--before-checked':weeks.beforeMultiple, |
|
||||
'uni-calendar-item--multiple': weeks.multiple, |
|
||||
'uni-calendar-item--after-checked':weeks.afterMultiple, |
|
||||
}" |
|
||||
@click="choiceDate(weeks)"> |
|
||||
<view class="uni-calendar-item__weeks-box-item"> |
|
||||
<text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text> |
|
||||
<text class="uni-calendar-item__weeks-box-text" :class="{ |
|
||||
'uni-calendar-item--isDay-text': weeks.isDay, |
|
||||
'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, |
|
||||
'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, |
|
||||
'uni-calendar-item--before-checked':weeks.beforeMultiple, |
|
||||
'uni-calendar-item--multiple': weeks.multiple, |
|
||||
'uni-calendar-item--after-checked':weeks.afterMultiple, |
|
||||
'uni-calendar-item--disable':weeks.disable, |
|
||||
}">{{weeks.date}}</text> |
|
||||
<text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{ |
|
||||
'uni-calendar-item--isDay-text':weeks.isDay, |
|
||||
'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, |
|
||||
'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, |
|
||||
'uni-calendar-item--before-checked':weeks.beforeMultiple, |
|
||||
'uni-calendar-item--multiple': weeks.multiple, |
|
||||
'uni-calendar-item--after-checked':weeks.afterMultiple, |
|
||||
}">今天</text> |
|
||||
<text v-if="lunar&&!weeks.extraInfo" class="uni-calendar-item__weeks-lunar-text" :class="{ |
|
||||
'uni-calendar-item--isDay-text':weeks.isDay, |
|
||||
'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, |
|
||||
'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, |
|
||||
'uni-calendar-item--before-checked':weeks.beforeMultiple, |
|
||||
'uni-calendar-item--multiple': weeks.multiple, |
|
||||
'uni-calendar-item--after-checked':weeks.afterMultiple, |
|
||||
'uni-calendar-item--disable':weeks.disable, |
|
||||
}">{{weeks.isDay?'今天': (weeks.lunar.IDayCn === '初一'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}</text> |
|
||||
<text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{ |
|
||||
'uni-calendar-item--extra':weeks.extraInfo.info, |
|
||||
'uni-calendar-item--isDay-text':weeks.isDay, |
|
||||
'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay, |
|
||||
'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay, |
|
||||
'uni-calendar-item--before-checked':weeks.beforeMultiple, |
|
||||
'uni-calendar-item--multiple': weeks.multiple, |
|
||||
'uni-calendar-item--after-checked':weeks.afterMultiple, |
|
||||
'uni-calendar-item--disable':weeks.disable, |
|
||||
}">{{weeks.extraInfo.info}}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
props: { |
|
||||
weeks: { |
|
||||
type: Object, |
|
||||
default () { |
|
||||
return {} |
|
||||
} |
|
||||
}, |
|
||||
calendar: { |
|
||||
type: Object, |
|
||||
default: () => { |
|
||||
return {} |
|
||||
} |
|
||||
}, |
|
||||
selected: { |
|
||||
type: Array, |
|
||||
default: () => { |
|
||||
return [] |
|
||||
} |
|
||||
}, |
|
||||
lunar: { |
|
||||
type: Boolean, |
|
||||
default: false |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
choiceDate(weeks) { |
|
||||
this.$emit('change', weeks) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.uni-calendar-item__weeks-box { |
|
||||
flex: 1; |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: column; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item__weeks-box-text { |
|
||||
font-size: $uni-font-size-base; |
|
||||
color: $uni-text-color; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item__weeks-lunar-text { |
|
||||
font-size: $uni-font-size-sm; |
|
||||
color: $uni-text-color; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item__weeks-box-item { |
|
||||
position: relative; |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: column; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
width: 100rpx; |
|
||||
height: 100rpx; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item__weeks-box-circle { |
|
||||
position: absolute; |
|
||||
top: 5px; |
|
||||
right: 5px; |
|
||||
width: 8px; |
|
||||
height: 8px; |
|
||||
border-radius: 8px; |
|
||||
background-color: $uni-color-error; |
|
||||
|
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item--disable { |
|
||||
background-color: rgba(249, 249, 249, $uni-opacity-disabled); |
|
||||
color: $uni-text-color-disable; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item--isDay-text { |
|
||||
color: $uni-color-primary; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item--isDay { |
|
||||
background-color: $uni-color-primary; |
|
||||
opacity: 0.8; |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item--extra { |
|
||||
color: $uni-color-error; |
|
||||
opacity: 0.8; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item--checked { |
|
||||
background-color: $uni-color-primary; |
|
||||
color: #fff; |
|
||||
opacity: 0.8; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar-item--multiple { |
|
||||
background-color: $uni-color-primary; |
|
||||
color: #fff; |
|
||||
opacity: 0.8; |
|
||||
} |
|
||||
.uni-calendar-item--before-checked { |
|
||||
background-color: #ff5a5f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
.uni-calendar-item--after-checked { |
|
||||
background-color: #ff5a5f; |
|
||||
color: #fff; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,512 +0,0 @@ |
|||||
<template> |
|
||||
<view class="uni-calendar"> |
|
||||
<view v-if="!insert&&show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}" @click="clean"></view> |
|
||||
<view v-if="insert || show" class="uni-calendar__content" :class="{'uni-calendar--fixed':!insert,'uni-calendar--ani-show':aniMaskShow}"> |
|
||||
<view v-if="!insert" class="uni-calendar__header uni-calendar--fixed-top"> |
|
||||
<view class="uni-calendar__header-btn-box" @click="close"> |
|
||||
<text class="uni-calendar__header-text uni-calendar--fixed-width">取消</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__header-btn-box" @click="confirm"> |
|
||||
<text class="uni-calendar__header-text uni-calendar--fixed-width">确定</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="uni-calendar__header"> |
|
||||
<view class="uni-calendar__header-btn-box" @click.stop="pre"> |
|
||||
<view class="uni-calendar__header-btn uni-calendar--left"></view> |
|
||||
</view> |
|
||||
<picker mode="date" :value="date" fields="month" @change="bindDateChange"> |
|
||||
<text class="uni-calendar__header-text">{{ (nowDate.year||'') +'年'+( nowDate.month||'') +'月'}}</text> |
|
||||
</picker> |
|
||||
<view class="uni-calendar__header-btn-box" @click.stop="next"> |
|
||||
<view class="uni-calendar__header-btn uni-calendar--right"></view> |
|
||||
</view> |
|
||||
<text class="uni-calendar__backtoday" @click="backtoday">回到今天</text> |
|
||||
|
|
||||
</view> |
|
||||
<view class="uni-calendar__box"> |
|
||||
<view v-if="showMonth" class="uni-calendar__box-bg"> |
|
||||
<text class="uni-calendar__box-bg-text">{{nowDate.month}}</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks"> |
|
||||
<view class="uni-calendar__weeks-day"> |
|
||||
<text class="uni-calendar__weeks-day-text">日</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks-day"> |
|
||||
<text class="uni-calendar__weeks-day-text">一</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks-day"> |
|
||||
<text class="uni-calendar__weeks-day-text">二</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks-day"> |
|
||||
<text class="uni-calendar__weeks-day-text">三</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks-day"> |
|
||||
<text class="uni-calendar__weeks-day-text">四</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks-day"> |
|
||||
<text class="uni-calendar__weeks-day-text">五</text> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks-day"> |
|
||||
<text class="uni-calendar__weeks-day-text">六</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="uni-calendar__weeks" v-for="(item,weekIndex) in weeks" :key="weekIndex"> |
|
||||
<view class="uni-calendar__weeks-item" v-for="(weeks,weeksIndex) in item" :key="weeksIndex"> |
|
||||
<calendar-item :weeks="weeks" :calendar="calendar" :selected="selected" :lunar="lunar" @change="choiceDate"></calendar-item> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import Calendar from './util.js'; |
|
||||
import calendarItem from './uni-calendar-item.vue' |
|
||||
/** |
|
||||
* Calendar 日历 |
|
||||
* @description 日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等 |
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=56 |
|
||||
* @property {String} date 自定义当前时间,默认为今天 |
|
||||
* @property {Boolean} lunar 显示农历 |
|
||||
* @property {String} startDate 日期选择范围-开始日期 |
|
||||
* @property {String} endDate 日期选择范围-结束日期 |
|
||||
* @property {Boolean} range 范围选择 |
|
||||
* @property {Boolean} insert = [true|false] 插入模式,默认为false |
|
||||
* @value true 弹窗模式 |
|
||||
* @value false 插入模式 |
|
||||
* @property {Boolean} clearDate = [true|false] 弹窗模式是否清空上次选择内容 |
|
||||
* @property {Array} selected 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] |
|
||||
* @property {Boolean} showMonth 是否选择月份为背景 |
|
||||
* @event {Function} change 日期改变,`insert :ture` 时生效 |
|
||||
* @event {Function} confirm 确认选择`insert :false` 时生效 |
|
||||
* @event {Function} monthSwitch 切换月份时触发 |
|
||||
* @example <uni-calendar :insert="true":lunar="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" /> |
|
||||
*/ |
|
||||
export default { |
|
||||
components: { |
|
||||
calendarItem |
|
||||
}, |
|
||||
props: { |
|
||||
date: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
selected: { |
|
||||
type: Array, |
|
||||
default () { |
|
||||
return [] |
|
||||
} |
|
||||
}, |
|
||||
lunar: { |
|
||||
type: Boolean, |
|
||||
default: false |
|
||||
}, |
|
||||
startDate: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
endDate: { |
|
||||
type: String, |
|
||||
default: '' |
|
||||
}, |
|
||||
range: { |
|
||||
type: Boolean, |
|
||||
default: false |
|
||||
}, |
|
||||
insert: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
}, |
|
||||
showMonth: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
}, |
|
||||
clearDate: { |
|
||||
type: Boolean, |
|
||||
default: true |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
show: false, |
|
||||
weeks: [], |
|
||||
calendar: {}, |
|
||||
nowDate: '', |
|
||||
aniMaskShow: false |
|
||||
} |
|
||||
}, |
|
||||
watch: { |
|
||||
date(newVal) { |
|
||||
this.cale.setDate(newVal) |
|
||||
this.init(this.cale.selectDate.fullDate) |
|
||||
}, |
|
||||
startDate(val){ |
|
||||
this.cale.resetSatrtDate(val) |
|
||||
}, |
|
||||
endDate(val){ |
|
||||
this.cale.resetEndDate(val) |
|
||||
}, |
|
||||
selected(newVal) { |
|
||||
this.cale.setSelectInfo(this.nowDate.fullDate, newVal) |
|
||||
this.weeks = this.cale.weeks |
|
||||
} |
|
||||
}, |
|
||||
created() { |
|
||||
// 获取日历方法实例 |
|
||||
this.cale = new Calendar({ |
|
||||
// date: new Date(), |
|
||||
selected: this.selected, |
|
||||
startDate: this.startDate, |
|
||||
endDate: this.endDate, |
|
||||
range: this.range, |
|
||||
}) |
|
||||
// 选中某一天 |
|
||||
this.cale.setDate(this.date) |
|
||||
this.init(this.cale.selectDate.fullDate) |
|
||||
// this.setDay |
|
||||
}, |
|
||||
methods: { |
|
||||
// 取消穿透 |
|
||||
clean() { |
|
||||
this.aniMaskShow = false |
|
||||
this.$nextTick(() => { |
|
||||
setTimeout(() => { |
|
||||
this.show = false |
|
||||
this.$emit('close') |
|
||||
}, 300) |
|
||||
}) |
|
||||
}, |
|
||||
bindDateChange(e) { |
|
||||
const value = e.detail.value + '-1' |
|
||||
this.cale.setDate(value) |
|
||||
this.init(value) |
|
||||
}, |
|
||||
/** |
|
||||
* 初始化日期显示 |
|
||||
* @param {Object} date |
|
||||
*/ |
|
||||
init(date) { |
|
||||
this.weeks = this.cale.weeks |
|
||||
this.nowDate = this.calendar = this.cale.getInfo(date) |
|
||||
}, |
|
||||
/** |
|
||||
* 打开日历弹窗 |
|
||||
*/ |
|
||||
open() { |
|
||||
// 弹窗模式并且清理数据 |
|
||||
if (this.clearDate && !this.insert) { |
|
||||
this.cale.cleanMultipleStatus() |
|
||||
this.cale.setDate(this.date) |
|
||||
this.init(this.cale.selectDate.fullDate) |
|
||||
} |
|
||||
this.show = true |
|
||||
this.$nextTick(() => { |
|
||||
setTimeout(() => { |
|
||||
this.aniMaskShow = true |
|
||||
}, 50) |
|
||||
}) |
|
||||
}, |
|
||||
/** |
|
||||
* 关闭日历弹窗 |
|
||||
*/ |
|
||||
close() { |
|
||||
this.aniMaskShow = false |
|
||||
this.$nextTick(() => { |
|
||||
setTimeout(() => { |
|
||||
this.show = false |
|
||||
this.$emit('close') |
|
||||
}, 300) |
|
||||
}) |
|
||||
}, |
|
||||
/** |
|
||||
* 确认按钮 |
|
||||
*/ |
|
||||
confirm() { |
|
||||
this.setEmit('confirm') |
|
||||
this.close() |
|
||||
}, |
|
||||
/** |
|
||||
* 变化触发 |
|
||||
*/ |
|
||||
change() { |
|
||||
if (!this.insert) return |
|
||||
this.setEmit('change') |
|
||||
}, |
|
||||
/** |
|
||||
* 选择月份触发 |
|
||||
*/ |
|
||||
monthSwitch() { |
|
||||
let { |
|
||||
year, |
|
||||
month |
|
||||
} = this.nowDate |
|
||||
this.$emit('monthSwitch', { |
|
||||
year, |
|
||||
month: Number(month) |
|
||||
}) |
|
||||
}, |
|
||||
/** |
|
||||
* 派发事件 |
|
||||
* @param {Object} name |
|
||||
*/ |
|
||||
setEmit(name) { |
|
||||
let { |
|
||||
year, |
|
||||
month, |
|
||||
date, |
|
||||
fullDate, |
|
||||
lunar, |
|
||||
extraInfo |
|
||||
} = this.calendar |
|
||||
this.$emit(name, { |
|
||||
range: this.cale.multipleStatus, |
|
||||
year, |
|
||||
month, |
|
||||
date, |
|
||||
fulldate: fullDate, |
|
||||
lunar, |
|
||||
extraInfo: extraInfo || {} |
|
||||
}) |
|
||||
}, |
|
||||
/** |
|
||||
* 选择天触发 |
|
||||
* @param {Object} weeks |
|
||||
*/ |
|
||||
choiceDate(weeks) { |
|
||||
if (weeks.disable) return |
|
||||
this.calendar = weeks |
|
||||
// 设置多选 |
|
||||
this.cale.setMultiple(this.calendar.fullDate) |
|
||||
this.weeks = this.cale.weeks |
|
||||
this.change() |
|
||||
}, |
|
||||
/** |
|
||||
* 回到今天 |
|
||||
*/ |
|
||||
backtoday() { |
|
||||
console.log(this.cale.getDate(new Date()).fullDate); |
|
||||
let date = this.cale.getDate(new Date()).fullDate |
|
||||
this.cale.setDate(date) |
|
||||
this.init(date) |
|
||||
this.change() |
|
||||
}, |
|
||||
/** |
|
||||
* 上个月 |
|
||||
*/ |
|
||||
pre() { |
|
||||
const preDate = this.cale.getDate(this.nowDate.fullDate, -1, 'month').fullDate |
|
||||
this.setDate(preDate) |
|
||||
this.monthSwitch() |
|
||||
|
|
||||
}, |
|
||||
/** |
|
||||
* 下个月 |
|
||||
*/ |
|
||||
next() { |
|
||||
const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, 'month').fullDate |
|
||||
this.setDate(nextDate) |
|
||||
this.monthSwitch() |
|
||||
}, |
|
||||
/** |
|
||||
* 设置日期 |
|
||||
* @param {Object} date |
|
||||
*/ |
|
||||
setDate(date) { |
|
||||
this.cale.setDate(date) |
|
||||
this.weeks = this.cale.weeks |
|
||||
this.nowDate = this.cale.getInfo(date) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.uni-calendar { |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: column; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__mask { |
|
||||
position: fixed; |
|
||||
bottom: 0; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
background-color: $uni-bg-color-mask; |
|
||||
transition-property: opacity; |
|
||||
transition-duration: 0.3s; |
|
||||
opacity: 0; |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
z-index: 99; |
|
||||
/* #endif */ |
|
||||
} |
|
||||
|
|
||||
.uni-calendar--mask-show { |
|
||||
opacity: 1 |
|
||||
} |
|
||||
|
|
||||
.uni-calendar--fixed { |
|
||||
position: fixed; |
|
||||
bottom: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
transition-property: transform; |
|
||||
transition-duration: 0.3s; |
|
||||
transform: translateY(460px); |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
z-index: 99; |
|
||||
/* #endif */ |
|
||||
} |
|
||||
|
|
||||
.uni-calendar--ani-show { |
|
||||
transform: translateY(0); |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__content { |
|
||||
background-color: #fff; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__header { |
|
||||
position: relative; |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: row; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
height: 50px; |
|
||||
border-bottom-color: $uni-border-color; |
|
||||
border-bottom-style: solid; |
|
||||
border-bottom-width: 1px; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar--fixed-top { |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: row; |
|
||||
justify-content: space-between; |
|
||||
border-top-color: $uni-border-color; |
|
||||
border-top-style: solid; |
|
||||
border-top-width: 1px; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar--fixed-width { |
|
||||
width: 50px; |
|
||||
// padding: 0 15px; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__backtoday { |
|
||||
position: absolute; |
|
||||
right: 0; |
|
||||
top: 25rpx; |
|
||||
padding: 0 5px; |
|
||||
padding-left: 10px; |
|
||||
height: 25px; |
|
||||
line-height: 25px; |
|
||||
font-size: 12px; |
|
||||
border-top-left-radius: 25px; |
|
||||
border-bottom-left-radius: 25px; |
|
||||
color: $uni-text-color; |
|
||||
background-color: $uni-bg-color-hover; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__header-text { |
|
||||
text-align: center; |
|
||||
width: 100px; |
|
||||
font-size: $uni-font-size-base; |
|
||||
color: $uni-text-color; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__header-btn-box { |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: row; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
width: 50px; |
|
||||
height: 50px; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__header-btn { |
|
||||
width: 10px; |
|
||||
height: 10px; |
|
||||
border-left-color: $uni-text-color-placeholder; |
|
||||
border-left-style: solid; |
|
||||
border-left-width: 2px; |
|
||||
border-top-color: $uni-color-subtitle; |
|
||||
border-top-style: solid; |
|
||||
border-top-width: 2px; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar--left { |
|
||||
transform: rotate(-45deg); |
|
||||
} |
|
||||
|
|
||||
.uni-calendar--right { |
|
||||
transform: rotate(135deg); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
.uni-calendar__weeks { |
|
||||
position: relative; |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: row; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__weeks-item { |
|
||||
flex: 1; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__weeks-day { |
|
||||
flex: 1; |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
flex-direction: column; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
height: 45px; |
|
||||
border-bottom-color: #F5F5F5; |
|
||||
border-bottom-style: solid; |
|
||||
border-bottom-width: 1px; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__weeks-day-text { |
|
||||
font-size: 14px; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__box { |
|
||||
position: relative; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__box-bg { |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
right: 0; |
|
||||
bottom: 0; |
|
||||
} |
|
||||
|
|
||||
.uni-calendar__box-bg-text { |
|
||||
font-size: 200px; |
|
||||
font-weight: bold; |
|
||||
color: $uni-text-color-grey; |
|
||||
opacity: 0.1; |
|
||||
text-align: center; |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
line-height: 1; |
|
||||
/* #endif */ |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,357 +0,0 @@ |
|||||
import CALENDAR from './calendar.js' |
|
||||
|
|
||||
class Calendar { |
|
||||
constructor({ |
|
||||
date, |
|
||||
selected, |
|
||||
startDate, |
|
||||
endDate, |
|
||||
range |
|
||||
} = {}) { |
|
||||
// 当前日期
|
|
||||
this.date = this.getDate(new Date()) // 当前初入日期
|
|
||||
// 打点信息
|
|
||||
this.selected = selected || []; |
|
||||
// 范围开始
|
|
||||
this.startDate = startDate |
|
||||
// 范围结束
|
|
||||
this.endDate = endDate |
|
||||
this.range = range |
|
||||
// 多选状态
|
|
||||
this.cleanMultipleStatus() |
|
||||
// 每周日期
|
|
||||
this.weeks = {} |
|
||||
// this._getWeek(this.date.fullDate)
|
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 设置日期 |
|
||||
* @param {Object} date |
|
||||
*/ |
|
||||
setDate(date) { |
|
||||
this.selectDate = this.getDate(date) |
|
||||
this._getWeek(this.selectDate.fullDate) |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 清理多选状态 |
|
||||
*/ |
|
||||
cleanMultipleStatus() { |
|
||||
this.multipleStatus = { |
|
||||
before: '', |
|
||||
after: '', |
|
||||
data: [] |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 重置开始日期 |
|
||||
*/ |
|
||||
resetSatrtDate(startDate) { |
|
||||
// 范围开始
|
|
||||
this.startDate = startDate |
|
||||
|
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 重置结束日期 |
|
||||
*/ |
|
||||
resetEndDate(endDate) { |
|
||||
// 范围结束
|
|
||||
this.endDate = endDate |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取任意时间 |
|
||||
*/ |
|
||||
getDate(date, AddDayCount = 0, str = 'day') { |
|
||||
if (!date) { |
|
||||
date = new Date() |
|
||||
} |
|
||||
if (typeof date !== 'object') { |
|
||||
date = date.replace(/-/g, '/') |
|
||||
} |
|
||||
const dd = new Date(date) |
|
||||
switch (str) { |
|
||||
case 'day': |
|
||||
dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
|
|
||||
break |
|
||||
case 'month': |
|
||||
if (dd.getDate() === 31) { |
|
||||
dd.setDate(dd.getDate() + AddDayCount) |
|
||||
} else { |
|
||||
dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期
|
|
||||
} |
|
||||
break |
|
||||
case 'year': |
|
||||
dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期
|
|
||||
break |
|
||||
} |
|
||||
const y = dd.getFullYear() |
|
||||
const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
|
|
||||
const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
|
|
||||
return { |
|
||||
fullDate: y + '-' + m + '-' + d, |
|
||||
year: y, |
|
||||
month: m, |
|
||||
date: d, |
|
||||
day: dd.getDay() |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
/** |
|
||||
* 获取上月剩余天数 |
|
||||
*/ |
|
||||
_getLastMonthDays(firstDay, full) { |
|
||||
let dateArr = [] |
|
||||
for (let i = firstDay; i > 0; i--) { |
|
||||
const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() |
|
||||
dateArr.push({ |
|
||||
date: beforeDate, |
|
||||
month: full.month - 1, |
|
||||
lunar: this.getlunar(full.year, full.month - 1, beforeDate), |
|
||||
disable: true |
|
||||
}) |
|
||||
} |
|
||||
return dateArr |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取本月天数 |
|
||||
*/ |
|
||||
_currentMonthDys(dateData, full) { |
|
||||
let dateArr = [] |
|
||||
let fullDate = this.date.fullDate |
|
||||
for (let i = 1; i <= dateData; i++) { |
|
||||
let isinfo = false |
|
||||
let nowDate = full.year + '-' + (full.month < 10 ? |
|
||||
full.month : full.month) + '-' + (i < 10 ? |
|
||||
'0' + i : i) |
|
||||
// 是否今天
|
|
||||
let isDay = fullDate === nowDate |
|
||||
// 获取打点信息
|
|
||||
let info = this.selected && this.selected.find((item) => { |
|
||||
if (this.dateEqual(nowDate, item.date)) { |
|
||||
return item |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
// 日期禁用
|
|
||||
let disableBefore = true |
|
||||
let disableAfter = true |
|
||||
if (this.startDate) { |
|
||||
let dateCompBefore = this.dateCompare(this.startDate, fullDate) |
|
||||
disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) |
|
||||
} |
|
||||
|
|
||||
if (this.endDate) { |
|
||||
let dateCompAfter = this.dateCompare(fullDate, this.endDate) |
|
||||
disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) |
|
||||
} |
|
||||
let multiples = this.multipleStatus.data |
|
||||
let checked = false |
|
||||
let multiplesStatus = -1 |
|
||||
if (this.range) { |
|
||||
if (multiples) { |
|
||||
multiplesStatus = multiples.findIndex((item) => { |
|
||||
return this.dateEqual(item, nowDate) |
|
||||
}) |
|
||||
} |
|
||||
if (multiplesStatus !== -1) { |
|
||||
checked = true |
|
||||
} |
|
||||
} |
|
||||
let data = { |
|
||||
fullDate: nowDate, |
|
||||
year: full.year, |
|
||||
date: i, |
|
||||
multiple: this.range ? checked : false, |
|
||||
beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), |
|
||||
afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), |
|
||||
month: full.month, |
|
||||
lunar: this.getlunar(full.year, full.month, i), |
|
||||
disable: !disableBefore || !disableAfter, |
|
||||
isDay |
|
||||
} |
|
||||
if (info) { |
|
||||
data.extraInfo = info |
|
||||
} |
|
||||
|
|
||||
dateArr.push(data) |
|
||||
} |
|
||||
return dateArr |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取下月天数 |
|
||||
*/ |
|
||||
_getNextMonthDays(surplus, full) { |
|
||||
let dateArr = [] |
|
||||
for (let i = 1; i < surplus + 1; i++) { |
|
||||
dateArr.push({ |
|
||||
date: i, |
|
||||
month: Number(full.month) + 1, |
|
||||
lunar: this.getlunar(full.year, Number(full.month) + 1, i), |
|
||||
disable: true |
|
||||
}) |
|
||||
} |
|
||||
return dateArr |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取当前日期详情 |
|
||||
* @param {Object} date |
|
||||
*/ |
|
||||
getInfo(date) { |
|
||||
if (!date) { |
|
||||
date = new Date() |
|
||||
} |
|
||||
const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) |
|
||||
return dateInfo |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 比较时间大小 |
|
||||
*/ |
|
||||
dateCompare(startDate, endDate) { |
|
||||
// 计算截止时间
|
|
||||
startDate = new Date(startDate.replace('-', '/').replace('-', '/')) |
|
||||
// 计算详细项的截止时间
|
|
||||
endDate = new Date(endDate.replace('-', '/').replace('-', '/')) |
|
||||
if (startDate <= endDate) { |
|
||||
return true |
|
||||
} else { |
|
||||
return false |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 比较时间是否相等 |
|
||||
*/ |
|
||||
dateEqual(before, after) { |
|
||||
// 计算截止时间
|
|
||||
before = new Date(before.replace('-', '/').replace('-', '/')) |
|
||||
// 计算详细项的截止时间
|
|
||||
after = new Date(after.replace('-', '/').replace('-', '/')) |
|
||||
if (before.getTime() - after.getTime() === 0) { |
|
||||
return true |
|
||||
} else { |
|
||||
return false |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
|
|
||||
/** |
|
||||
* 获取日期范围内所有日期 |
|
||||
* @param {Object} begin |
|
||||
* @param {Object} end |
|
||||
*/ |
|
||||
geDateAll(begin, end) { |
|
||||
var arr = [] |
|
||||
var ab = begin.split('-') |
|
||||
var ae = end.split('-') |
|
||||
var db = new Date() |
|
||||
db.setFullYear(ab[0], ab[1] - 1, ab[2]) |
|
||||
var de = new Date() |
|
||||
de.setFullYear(ae[0], ae[1] - 1, ae[2]) |
|
||||
var unixDb = db.getTime() - 24 * 60 * 60 * 1000 |
|
||||
var unixDe = de.getTime() - 24 * 60 * 60 * 1000 |
|
||||
for (var k = unixDb; k <= unixDe;) { |
|
||||
k = k + 24 * 60 * 60 * 1000 |
|
||||
arr.push(this.getDate(new Date(parseInt(k))).fullDate) |
|
||||
} |
|
||||
return arr |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 计算阴历日期显示 |
|
||||
*/ |
|
||||
getlunar(year, month, date) { |
|
||||
return CALENDAR.solar2lunar(year, month, date) |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 设置打点 |
|
||||
*/ |
|
||||
setSelectInfo(data, value) { |
|
||||
this.selected = value |
|
||||
this._getWeek(data) |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取多选状态 |
|
||||
*/ |
|
||||
setMultiple(fullDate) { |
|
||||
let { |
|
||||
before, |
|
||||
after |
|
||||
} = this.multipleStatus |
|
||||
|
|
||||
if (!this.range) return |
|
||||
if (before && after) { |
|
||||
this.multipleStatus.before = '' |
|
||||
this.multipleStatus.after = '' |
|
||||
this.multipleStatus.data = [] |
|
||||
} else { |
|
||||
if (!before) { |
|
||||
this.multipleStatus.before = fullDate |
|
||||
} else { |
|
||||
this.multipleStatus.after = fullDate |
|
||||
if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { |
|
||||
this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); |
|
||||
} else { |
|
||||
this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
this._getWeek(fullDate) |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取每周数据 |
|
||||
* @param {Object} dateData |
|
||||
*/ |
|
||||
_getWeek(dateData) { |
|
||||
const { |
|
||||
fullDate, |
|
||||
year, |
|
||||
month, |
|
||||
date, |
|
||||
day |
|
||||
} = this.getDate(dateData) |
|
||||
let firstDay = new Date(year, month - 1, 1).getDay() |
|
||||
let currentDay = new Date(year, month, 0).getDate() |
|
||||
let dates = { |
|
||||
lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天
|
|
||||
currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数
|
|
||||
nextMonthDays: [], // 下个月开始几天
|
|
||||
weeks: [] |
|
||||
} |
|
||||
let canlender = [] |
|
||||
const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) |
|
||||
dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) |
|
||||
canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) |
|
||||
let weeks = {} |
|
||||
// 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天
|
|
||||
for (let i = 0; i < canlender.length; i++) { |
|
||||
if (i % 7 === 0) { |
|
||||
weeks[parseInt(i / 7)] = new Array(7) |
|
||||
} |
|
||||
weeks[parseInt(i / 7)][i % 7] = canlender[i] |
|
||||
} |
|
||||
this.canlender = canlender |
|
||||
this.weeks = weeks |
|
||||
} |
|
||||
|
|
||||
//静态方法
|
|
||||
// static init(date) {
|
|
||||
// if (!this.instance) {
|
|
||||
// this.instance = new Calendar(date);
|
|
||||
// }
|
|
||||
// return this.instance;
|
|
||||
// }
|
|
||||
} |
|
||||
|
|
||||
|
|
||||
export default Calendar |
|
||||
@ -1,134 +0,0 @@ |
|||||
<template> |
|
||||
<scroll-view class="wuc-tab" :class="tabClass" :style="tabStyle" scroll-with-animation scroll-x :scroll-left="scrollLeft"> |
|
||||
<div v-if="!textFlex"> |
|
||||
<div class="wuc-tab-item" :class="[index === tabCur ? selectClass + ' cur':'']" v-for="(item,index) in tabList" :key="index" :id="index" @tap="tabSelect(index,$event)"> |
|
||||
<text :class="item.icon"></text> |
|
||||
<span>{{item.name}}</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
|
|
||||
<div class="flex text-center" v-if="textFlex"> |
|
||||
<div class="wuc-tab-item flex-sub" :class="index === tabCur ? selectClass + ' cur':''" v-for="(item,index) in tabList" :key="index" :id="index" @tap="tabSelect(index,$event)"> |
|
||||
<text :class="item.icon"></text> |
|
||||
<span>{{item.name}}</span> |
|
||||
</div> |
|
||||
</div> |
|
||||
</scroll-view> |
|
||||
</template> |
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'wuc-tab', |
|
||||
data() { |
|
||||
return {}; |
|
||||
}, |
|
||||
props: { |
|
||||
tabList: { |
|
||||
type: Array, |
|
||||
default() { |
|
||||
return []; |
|
||||
} |
|
||||
}, |
|
||||
tabCur: { |
|
||||
type: Number, |
|
||||
default() { |
|
||||
return 0; |
|
||||
} |
|
||||
}, |
|
||||
tabClass: { |
|
||||
type: String, |
|
||||
default() { |
|
||||
return ''; |
|
||||
} |
|
||||
}, |
|
||||
tabStyle: { |
|
||||
type: String, |
|
||||
default() { |
|
||||
return ''; |
|
||||
} |
|
||||
}, |
|
||||
textFlex: { |
|
||||
type: Boolean, |
|
||||
default() { |
|
||||
return false; |
|
||||
} |
|
||||
}, |
|
||||
selectClass: { |
|
||||
type: String, |
|
||||
default() { |
|
||||
return 'text-blue'; |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
tabSelect(index, e) { |
|
||||
if (this.currentTab === index) return false; |
|
||||
this.$emit('update:tabCur', index); |
|
||||
this.$emit('changeTab', this.tabList[index]); |
|
||||
} |
|
||||
}, |
|
||||
computed: { |
|
||||
scrollLeft() { |
|
||||
return (this.tabCur - 1) * 60; |
|
||||
} |
|
||||
} |
|
||||
}; |
|
||||
</script> |
|
||||
<style> |
|
||||
div, |
|
||||
scroll-view, |
|
||||
swiper { |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
.wuc-tab { |
|
||||
white-space: nowrap; |
|
||||
} |
|
||||
.wuc-tab-item { |
|
||||
height: 90rpx; |
|
||||
display: inline-block; |
|
||||
line-height: 90rpx; |
|
||||
margin: 0 10upx; |
|
||||
padding: 0 20upx; |
|
||||
} |
|
||||
|
|
||||
.wuc-tab-item.cur { |
|
||||
color: #40A2ED; |
|
||||
background-color: #fff; |
|
||||
} |
|
||||
|
|
||||
.wuc-tab.fixed { |
|
||||
position: fixed; |
|
||||
width: 100%; |
|
||||
top: 0; |
|
||||
z-index: 1024; |
|
||||
box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1); |
|
||||
} |
|
||||
|
|
||||
.flex { |
|
||||
display: flex; |
|
||||
} |
|
||||
.text-center { |
|
||||
text-align: center; |
|
||||
} |
|
||||
.flex-sub { |
|
||||
flex: 1; |
|
||||
} |
|
||||
.text-blue{ |
|
||||
color:#40A2ED; |
|
||||
} |
|
||||
.text-white{ |
|
||||
color:#ffffff; |
|
||||
} |
|
||||
.bg-white{ |
|
||||
background-color: #ffffff; |
|
||||
} |
|
||||
.bg-blue{ |
|
||||
background-color: #40A2ED; |
|
||||
} |
|
||||
.text-orange{ |
|
||||
color: #f37b1d |
|
||||
} |
|
||||
|
|
||||
.text-xl { |
|
||||
font-size: 36upx; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,585 +0,0 @@ |
|||||
<template> |
|
||||
<view class="body"> |
|
||||
<!-- <view class="topLine" :style="{height: topBar+'px'}"></view> --> |
|
||||
<view class="nav row_align_center" id="nav"> |
|
||||
<li class="li_4" style="color: #fff;z-index: 999;" :class="['iconfont icon-zuojiantou back']" @click="gotoBack()"></li> |
|
||||
</view> |
|
||||
<view class="top_head"> |
|
||||
<view class="text_des"> |
|
||||
<text class="month_num">{{ nowTime.month }}</text> |
|
||||
<text class="month_text">月</text> |
|
||||
<text class="month_year">{{ nowTime.year }}</text> |
|
||||
<text class="point">.</text> |
|
||||
<text class="title">财务报告</text> |
|
||||
</view> |
|
||||
<view class="top_desc"> |
|
||||
<view class="text-gray">结余</view> |
|
||||
<view class="remaining">{{ myWallet.remaining }}</view> |
|
||||
<view class="row head_block"> |
|
||||
<view class="flex_1"> |
|
||||
<text class="text-gray">支出</text> |
|
||||
<text class="text_green">{{ myWallet.expend }}</text> |
|
||||
</view> |
|
||||
<view class="flex_1"> |
|
||||
<text class="text-gray">收入</text> |
|
||||
<text class="income">{{ myWallet.income }}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="main"> |
|
||||
<view class="row_block"> |
|
||||
<view class="the_title" style="justify-content: space-between;"> |
|
||||
<view class="left_title"> |
|
||||
<view class="title_icon"></view> |
|
||||
<text class="margin_stand-samll font-big wide">历史趋势</text> |
|
||||
</view> |
|
||||
<view class="right_btn"> |
|
||||
<view v-for="(item, index) in historyBtn" :key="index" :class="item.state ? 'active_btn' : ''" |
|
||||
@click="changeHistoryBtn(item.type)">{{ item.name }}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="charts-box" style="height: 200px;"> |
|
||||
<qiun-data-charts type="line" canvasId="finance_a" :canvas2d="isCanvas2d" :reshow="delayload" |
|
||||
:opts="{ xAxis: { itemCount: 12, disableGrid: true }, yAxis: { disableGrid: true, data: [{ disabled: true }] } }" |
|
||||
:chartData="historyData" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="row_block"> |
|
||||
<view class="the_title"> |
|
||||
<view class="title_icon"></view> |
|
||||
<text class="margin_stand-samll font-big wide">钱都去哪了</text> |
|
||||
</view> |
|
||||
<view v-if="delayload" class="charts-box"> |
|
||||
<qiun-data-charts type="ring" canvasId="finance_b" :canvas2d="isCanvas2d" :reshow="delayload" |
|
||||
:opts="{ padding: [15, 0, 4, 0], legend: { position: 'bottom' }, title: { name: expendCount }, subtitle: { name: '支出', fontSize: '20' } }" |
|
||||
:chartData="expendDetail" /> |
|
||||
</view> |
|
||||
<view class="the_title"> |
|
||||
<text class="margin_stand-samll font-middle wide">支出单笔最贵</text> |
|
||||
</view> |
|
||||
<view class="extend_rank"> |
|
||||
<view class="rank_item" v-for="(item, index) in extendRank" :key="index"> |
|
||||
<image :src="getImage(index)" mode="widthFix"></image> |
|
||||
<text class="name">{{ item.name }}</text> |
|
||||
<text class="desc">{{ item.desc }}</text> |
|
||||
<text class="text_green money">{{ item.money }}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="row_block"> |
|
||||
<view class="the_title"> |
|
||||
<view class="title_icon"></view> |
|
||||
<text class="margin_stand-samll font-big wide">{{ nowTime.month }}月明细</text> |
|
||||
</view> |
|
||||
<view class="detail_list"> |
|
||||
<view v-for="(item, index) in detail_list" :key="index" class="detail_item"> |
|
||||
<view> |
|
||||
<view class="font-middle">{{ item.date }}</view> |
|
||||
<view class="font-small">{{ item.time }}</view> |
|
||||
</view> |
|
||||
<view class="icon"> |
|
||||
<li class="li_2" :class="['iconfont', item.type == 'income' ? 'icon-income' : 'icon-expend']"></li> |
|
||||
</view> |
|
||||
<view class="right_content"> |
|
||||
<view class="money">{{ item.type == 'income' ? '+' : '-' }}{{ item.money }}</view> |
|
||||
<view class="text-gray font-middle">{{ item.desc }}</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="end_block"> |
|
||||
<view class="the_title" style="margin-bottom: 40rpx;"> |
|
||||
<view class="title_icon"></view> |
|
||||
<text class="margin_stand-samll font-big wide">我的支出水平</text> |
|
||||
</view> |
|
||||
<view class="level_bar"> |
|
||||
<view v-for="(item, index) in extend_level_bar" :key="index" :style="{ width: item.width }" |
|
||||
:class="item.state ? 'text_green font-middle' : ''">{{ item.name }}</view> |
|
||||
</view> |
|
||||
<view class="level_bar"> |
|
||||
<view v-for="(item, index) in extend_level_bar" :key="index" :style="{ width: item.width }" |
|
||||
:class="item.state ? 'active_bar' : 'default_bar'"></view> |
|
||||
</view> |
|
||||
<view class="level_bar"> |
|
||||
<view v-for="(item, index) in extend_level_bar" :key="index" :style="{ width: item.width }" |
|
||||
:class="item.state ? 'text_green font-middle' : ''">{{ item.range }}</view> |
|
||||
</view> |
|
||||
<view class="extend_message"> |
|
||||
<li style="color: #ccc;" :class="['iconfont icon-message']"></li> |
|
||||
<view> |
|
||||
“ 我的支出水平已超过 |
|
||||
<text>{{ extend_morethan }}</text> |
|
||||
的乡镇居民。 ” |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import ProgressBar from "../../components/progress-bar/progress-bar.vue" |
|
||||
import dataOne from '../../static/json/finance/1.json'; |
|
||||
import expendDetail from '../../static/json/finance/2.json'; |
|
||||
|
|
||||
import Config from '../../static/js/config' |
|
||||
import Common from '../../static/js/common' |
|
||||
let _now = new Date(); |
|
||||
let now_time = {}; |
|
||||
now_time.year = _now.getFullYear() |
|
||||
now_time.month = _now.getMonth() + 1 |
|
||||
now_time.day = _now.getDay() |
|
||||
export default { |
|
||||
components: { |
|
||||
ProgressBar |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
info: '大便超人', //用户数据 |
|
||||
scrollHeight: "600px", //数据展示体高度 |
|
||||
isCanvas2d: Config.ISCANVAS2D, |
|
||||
historyData: {}, |
|
||||
dataOne, |
|
||||
expendDetail, |
|
||||
expendCount: 0, |
|
||||
delayload: false, |
|
||||
nowTime: { |
|
||||
year: now_time.year, |
|
||||
month: now_time.month, |
|
||||
day: now_time.day |
|
||||
}, |
|
||||
historyBtn: [{ |
|
||||
name: "支出", |
|
||||
state: 1, |
|
||||
type: "expend" |
|
||||
}, |
|
||||
{ |
|
||||
name: "收入", |
|
||||
state: 0, |
|
||||
type: "income" |
|
||||
}, |
|
||||
{ |
|
||||
name: "结余", |
|
||||
state: 0, |
|
||||
type: "remaining" |
|
||||
}, |
|
||||
], |
|
||||
myWallet: { |
|
||||
remaining: 3000.34, |
|
||||
expend: 5240.32, |
|
||||
income: 8240.66 |
|
||||
}, |
|
||||
extendRank: [{ |
|
||||
name: "腐败聚会", |
|
||||
desc: now_time.month + "月6日12:34-跨界空间轰趴", |
|
||||
money: "422.12" |
|
||||
}, |
|
||||
{ |
|
||||
name: "沐浴按摩", |
|
||||
desc: now_time.month + "月12日21:34-乔杉沐浴城", |
|
||||
money: "318.00" |
|
||||
}, |
|
||||
{ |
|
||||
name: "食品酒水", |
|
||||
desc: now_time.month + "月1日21:34-school酒馆", |
|
||||
money: "289.50" |
|
||||
}, |
|
||||
], |
|
||||
extend_level_bar: [ |
|
||||
{ name: "低消费", range: "<2000元", width: "20%" }, |
|
||||
{ name: "中间消费", range: "2000-5000元", width: "35%" }, |
|
||||
{ name: "较高消费", range: "5000-8000元", width: "25%", state: 1 }, |
|
||||
{ name: "高消费", range: ">8000元", width: "20%" }, |
|
||||
], |
|
||||
extend_morethan: "68%", |
|
||||
detail_list: [ |
|
||||
{ date: now_time.month + "-01", time: "11:01", "type": "extend", money: "10.00", desc: "银行卡转出" }, |
|
||||
{ date: now_time.month + "-01", time: "13:45", "type": "income", money: "18.00", desc: "银行卡收入" }, |
|
||||
{ date: now_time.month + "-02", time: "06:21", "type": "extend", money: "123.45", desc: "信用卡转出" }, |
|
||||
{ date: now_time.month + "-03", time: "07:38", "type": "income", money: "23.00", desc: "银行卡收入" }, |
|
||||
{ date: now_time.month + "-08", time: "16:28", "type": "extend", money: "23.56", desc: "信用卡转出" }, |
|
||||
{ date: now_time.month + "-09", time: "15:25", "type": "income", money: "850.12", desc: "银行卡收入" }, |
|
||||
{ date: now_time.month + "-09", time: "18:52", "type": "income", money: "1.88", desc: "银行卡收入" }, |
|
||||
{ date: now_time.month + "-11", time: "21:12", "type": "extend", money: "220.21", desc: "银行卡转出" }, |
|
||||
{ date: now_time.month + "-12", time: "13:08", "type": "income", money: "32.28", desc: "银行卡收入" }, |
|
||||
{ date: now_time.month + "-12", time: "12:41", "type": "extend", money: "122.12", desc: "信用卡转出" }, |
|
||||
{ date: now_time.month + "-13", time: "17:21", "type": "income", money: "10.00", desc: "银行卡收入" }, |
|
||||
] |
|
||||
}; |
|
||||
}, |
|
||||
watch: { |
|
||||
"historyBtn": { |
|
||||
deep: true, |
|
||||
handler: function (newVal, oldVal) { |
|
||||
this.filterHistoryData(); |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
async getData() { |
|
||||
uni.showLoading(); |
|
||||
this.filterHistoryData(); |
|
||||
for (let i = 0; i < this.expendDetail.series.length; i++) { |
|
||||
this.expendDetail.series[i].format = "pieDemo" |
|
||||
} |
|
||||
let length = this.expendDetail.series[0].data.length |
|
||||
for (let i = 0; i < length; i++) { |
|
||||
this.expendCount += this.expendDetail.series[0].data[i].value |
|
||||
} |
|
||||
await setTimeout(() => { |
|
||||
this.delayload = true; |
|
||||
uni.hideLoading(); |
|
||||
}, 1000) |
|
||||
}, |
|
||||
changeHistoryBtn(type) { |
|
||||
for (let i = 0; i < this.historyBtn.length; i++) { |
|
||||
if (this.historyBtn[i].type == type) { |
|
||||
this.historyBtn[i].state = 1 |
|
||||
} else { |
|
||||
this.historyBtn[i].state = 0 |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
filterHistoryData() { |
|
||||
let type = this.historyBtn.filter(x => x.state == 1)[0].type; |
|
||||
switch (type) { |
|
||||
case "expend": |
|
||||
this.historyData = this.dataOne.expend; |
|
||||
break; |
|
||||
case "income": |
|
||||
this.historyData = this.dataOne.income; |
|
||||
break; |
|
||||
case "remaining": |
|
||||
this.historyData = this.dataOne.remaining; |
|
||||
break; |
|
||||
} |
|
||||
}, |
|
||||
gotoBack() { |
|
||||
Common.navigateBack("/index/index"); |
|
||||
}, |
|
||||
getImage(index) { |
|
||||
switch (index) { |
|
||||
case 0: |
|
||||
return "https://s1.ax1x.com/2023/03/31/ppRYrfP.png"; |
|
||||
break; |
|
||||
case 1: |
|
||||
return "https://s1.ax1x.com/2023/03/31/ppRYySf.png"; |
|
||||
break; |
|
||||
case 2: |
|
||||
return "https://s1.ax1x.com/2023/03/31/ppRY6l8.png"; |
|
||||
break; |
|
||||
} |
|
||||
} |
|
||||
}, |
|
||||
onReady() { |
|
||||
//#ifndef H5 |
|
||||
uni.showShareMenu(); |
|
||||
//#endif |
|
||||
this.getData() |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="scss"> |
|
||||
.body { |
|
||||
height: 100%; |
|
||||
background-color: #560594; |
|
||||
margin: 0; |
|
||||
padding-bottom: 20rpx; |
|
||||
|
|
||||
.li_4 { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
|
|
||||
.nav { |
|
||||
position: fixed; |
|
||||
top: 50rpx; |
|
||||
left: 20rpx; |
|
||||
} |
|
||||
|
|
||||
.text_green { |
|
||||
color: #4ECDB6; |
|
||||
} |
|
||||
|
|
||||
.main { |
|
||||
width: 100%; |
|
||||
padding: 0 10rpx; |
|
||||
box-sizing: border-box; |
|
||||
margin-top: 20rpx; |
|
||||
|
|
||||
.detail_list { |
|
||||
height: 700rpx; |
|
||||
overflow: auto; |
|
||||
color: #9E9E9E; |
|
||||
|
|
||||
.detail_item { |
|
||||
display: flex; |
|
||||
margin: 20rpx 0; |
|
||||
align-items: center; |
|
||||
|
|
||||
.icon { |
|
||||
width: 30%; |
|
||||
text-align: center; |
|
||||
|
|
||||
.li_2 { |
|
||||
font-size: 80rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.right_content { |
|
||||
width: 50%; |
|
||||
text-align: center; |
|
||||
} |
|
||||
|
|
||||
.icon-income { |
|
||||
color: #4AABF9; |
|
||||
} |
|
||||
|
|
||||
.icon-expend { |
|
||||
color: #E45521; |
|
||||
} |
|
||||
|
|
||||
.money { |
|
||||
color: #000; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.extend_message { |
|
||||
margin-top: 20rpx; |
|
||||
color: #ccc; |
|
||||
display: flex; |
|
||||
|
|
||||
text { |
|
||||
color: #ff9900; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.level_bar { |
|
||||
width: 100%; |
|
||||
height: 40rpx; |
|
||||
border-radius: 40rpx; |
|
||||
overflow: hidden; |
|
||||
display: flex; |
|
||||
color: #ccc; |
|
||||
font-size: 20rpx; |
|
||||
text-align: right; |
|
||||
line-height: 40rpx; |
|
||||
|
|
||||
view { |
|
||||
border-right: 2rpx solid #fff; |
|
||||
position: relative; |
|
||||
} |
|
||||
|
|
||||
.name { |
|
||||
position: absolute; |
|
||||
top: -30rpx; |
|
||||
right: -40rpx; |
|
||||
} |
|
||||
|
|
||||
.range { |
|
||||
position: absolute; |
|
||||
bottom: 30rpx; |
|
||||
right: -40rpx; |
|
||||
} |
|
||||
|
|
||||
.default_bar { |
|
||||
background-color: #A0DFCD; |
|
||||
} |
|
||||
|
|
||||
.active_bar { |
|
||||
background-color: #02AE7A; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.right_btn { |
|
||||
float: right; |
|
||||
display: flex; |
|
||||
color: #ccc; |
|
||||
font-size: 22rpx; |
|
||||
|
|
||||
view { |
|
||||
line-height: 50rpx; |
|
||||
height: 50rpx; |
|
||||
margin: 0 20rpx; |
|
||||
} |
|
||||
|
|
||||
.active_btn { |
|
||||
padding: 0rpx 20rpx; |
|
||||
border: 1px solid #ccc; |
|
||||
border-radius: 40rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.end_block { |
|
||||
width: 100%; |
|
||||
box-sizing: border-box; |
|
||||
background-color: #fff; |
|
||||
border-radius: 12rpx; |
|
||||
position: relative; |
|
||||
padding: 20rpx; |
|
||||
} |
|
||||
|
|
||||
.row_block { |
|
||||
width: 100%; |
|
||||
box-sizing: border-box; |
|
||||
background-color: #fff; |
|
||||
border-radius: 12rpx; |
|
||||
position: relative; |
|
||||
padding: 20rpx; |
|
||||
|
|
||||
&::after { |
|
||||
content: ""; |
|
||||
height: 0px; |
|
||||
width: 92%; |
|
||||
position: absolute; |
|
||||
transform: translateX(-50%); |
|
||||
left: 50%; |
|
||||
bottom: 0; |
|
||||
border-top: 1px dashed #ccc; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.the_title { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
|
|
||||
.left_title { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
} |
|
||||
|
|
||||
.title_icon { |
|
||||
background-color: #7E7E7E; |
|
||||
height: 40rpx; |
|
||||
width: 10rpx; |
|
||||
border-radius: 10rpx; |
|
||||
margin-right: 20rpx; |
|
||||
font-size: 16px; |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.extend_rank { |
|
||||
width: 100%; |
|
||||
background-color: #F5F5F5; |
|
||||
box-sizing: border-box; |
|
||||
padding: 10rpx; |
|
||||
|
|
||||
.rank_item { |
|
||||
width: 100%; |
|
||||
margin: 20rpx 0; |
|
||||
box-sizing: border-box; |
|
||||
display: flex; |
|
||||
font-size: 26rpx; |
|
||||
justify-content: space-between; |
|
||||
align-items: center; |
|
||||
|
|
||||
image { |
|
||||
width: 10%; |
|
||||
} |
|
||||
|
|
||||
text { |
|
||||
text-overflow: ellipsis; |
|
||||
overflow: hidden; |
|
||||
white-space: nowrap; |
|
||||
display: block; |
|
||||
} |
|
||||
|
|
||||
.name { |
|
||||
margin: 0 10rpx; |
|
||||
color: #7D7D7D; |
|
||||
width: 20%; |
|
||||
} |
|
||||
|
|
||||
.desc { |
|
||||
width: 50%; |
|
||||
color: #ccc; |
|
||||
} |
|
||||
|
|
||||
.money { |
|
||||
width: 20%; |
|
||||
text-align: right; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.top_head { |
|
||||
height: 435rpx; |
|
||||
width: 100%; |
|
||||
padding: 110rpx 10rpx 0rpx 10rpx; |
|
||||
background: url("https://img1.qunarzz.com/travel/d3/1704/db/34de73c353d44db5.jpg_r_640x426x70_53f464ca.jpg") no-repeat center 0px; |
|
||||
background-size: 100% 100%; |
|
||||
box-sizing: border-box; |
|
||||
|
|
||||
.top_desc { |
|
||||
width: 100%; |
|
||||
border-radius: 20rpx; |
|
||||
background-color: #fff; |
|
||||
margin-top: 20rpx; |
|
||||
padding: 20rpx; |
|
||||
box-sizing: border-box; |
|
||||
|
|
||||
.text-gray { |
|
||||
font-size: 28rpx; |
|
||||
color: #ccc; |
|
||||
margin-right: 10rpx; |
|
||||
} |
|
||||
|
|
||||
.remaining { |
|
||||
font-size: 46rpx; |
|
||||
} |
|
||||
|
|
||||
.flex_1 { |
|
||||
flex: 1; |
|
||||
} |
|
||||
|
|
||||
.head_block { |
|
||||
margin-top: 20rpx; |
|
||||
|
|
||||
.income { |
|
||||
color: #E34B5E; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.text_des { |
|
||||
height: 100rpx; |
|
||||
color: #fff; |
|
||||
font-weight: 900; |
|
||||
position: relative; |
|
||||
margin-left: 60rpx; |
|
||||
|
|
||||
text { |
|
||||
display: inline-block; |
|
||||
height: 100%; |
|
||||
} |
|
||||
|
|
||||
.month_num { |
|
||||
font-size: 90rpx; |
|
||||
} |
|
||||
|
|
||||
.month_text { |
|
||||
font-size: 56rpx; |
|
||||
} |
|
||||
|
|
||||
.month_year { |
|
||||
font-size: 22rpx; |
|
||||
position: absolute; |
|
||||
left: 60rpx; |
|
||||
top: 20rpx; |
|
||||
} |
|
||||
|
|
||||
.point { |
|
||||
font-size: 40rpx; |
|
||||
} |
|
||||
|
|
||||
.title { |
|
||||
font-size: 40rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,348 +0,0 @@ |
|||||
<template> |
|
||||
<view class="window"> |
|
||||
<!-- #ifndef H5 --> |
|
||||
<view class="topLine" :style="{ height: topBar + 'px' }"></view> |
|
||||
<!-- #endif --> |
|
||||
<view class="nav row_align_center" id="nav"> |
|
||||
<li class="li_5" :class="['iconfont icon-zuojiantou back']" @click="gotoBack()"></li> |
|
||||
<text class="title li_5">{{ title ? title : '' }}</text> |
|
||||
<li class="iconfont icon-zuojiantou back hidden"></li> |
|
||||
</view> |
|
||||
<view class="row_align_center head" id="head"> |
|
||||
<!-- 日期下拉列表 --> |
|
||||
<drop-down ref="caleDrop" @tap="changDrop(1)" @changeItem="changeTime" :list="timeArray" :contentTop="top" |
|
||||
selectWidth="260rpx" contentLeft="0"></drop-down> |
|
||||
<!-- 日历选择日期 --> |
|
||||
<view v-if="showCalendar" |
|
||||
:class="['dropdown-item__selected', listWidth != '150rpx' ? 'dropdown-item__right' : 'dropdown-item__left']" |
|
||||
@click="openCalendar" class="calendar_drag"> |
|
||||
<view class="selected__name">{{ nowDate }}</view> |
|
||||
<li class="iconfont icon-calendar" style="margin-left: 10rpx;"></li> |
|
||||
</view> |
|
||||
<!-- 公司区域下拉列表 --> |
|
||||
<drop-down ref="companyDrop" @tap="changDrop(2)" @changeItem="changeLocation" :list="locationArray" |
|
||||
:contentTop="top" contentRight="10" :selectWidth="showCalendar ? '200rpx' : '300rpx'" listWidth="75%"> |
|
||||
</drop-down> |
|
||||
</view> |
|
||||
<uni-calendar ref="calendar" :insert="false" :start-date="startDate" :end-date="endDate" :clearDate="false" |
|
||||
@confirm="confirm"> |
|
||||
</uni-calendar> |
|
||||
<!--滑动列表头--> |
|
||||
<wuc-tab id="wuctab" :tab-list="tabList" :tabCur.sync="tabCur" tab-class="text-center text-white bg-blue" |
|
||||
select-class="text-white"></wuc-tab> |
|
||||
<!--主体内容--> |
|
||||
<view class="data_body" :style="{ height: scrollHeight }"> |
|
||||
<view v-if="tabCur == 0"> |
|
||||
<wechat :scrollHeight="scrollHeight" /> |
|
||||
</view> |
|
||||
<view v-else-if="tabCur == 1"> |
|
||||
<user-operate :scrollHeight="scrollHeight" /> |
|
||||
</view> |
|
||||
<view v-else-if="tabCur == 2"> |
|
||||
<user-healthy :scrollHeight="scrollHeight" /> |
|
||||
</view> |
|
||||
<view v-else-if="tabCur == 3"> |
|
||||
<user-server :scrollHeight="scrollHeight"></user-server> |
|
||||
</view> |
|
||||
</view> |
|
||||
<!--水印--> |
|
||||
<view class="water-mark-mask row_wrap" :style="{ height: scrollHeight }"> |
|
||||
<text class="container" v-for="(count, index) in 10" :key="index">{{ info.name }}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
<script> |
|
||||
import Wechat from "../../components/data-center/wechat.vue" |
|
||||
import UserOperate from "../../components/data-center/user-operate.vue" |
|
||||
import UserHealthy from "../../components/data-center/user-healthy.vue" |
|
||||
import UserServer from "../../components/data-center/user-server.vue" |
|
||||
import WucTab from '../../components/wuc-tab/wuc-tab.vue' |
|
||||
import DropDown from '../../components/drop-down/drop-down.vue' |
|
||||
import UniCalendar from '../../components/uni-calendar/uni-calendar.vue' |
|
||||
|
|
||||
import Config from '../../static/js/config' |
|
||||
import Common from "../../static/js/common" |
|
||||
|
|
||||
export default { |
|
||||
components: { |
|
||||
WucTab, |
|
||||
DropDown, |
|
||||
UniCalendar, |
|
||||
Wechat, |
|
||||
UserOperate, |
|
||||
UserHealthy, |
|
||||
UserServer, |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
tabList: Config.TABLIST, //标签头 |
|
||||
timeArray: Config.TIMEARRAY, //时间数组 |
|
||||
info: '大便超人', //用户数据 |
|
||||
title: "数据报表中心", //标题 |
|
||||
showDataTime: "today", //选中的时间 |
|
||||
tabCur: 0, //标签头下标 |
|
||||
topBar: 17, //导航高 |
|
||||
top: '180', //下拉栏位置 |
|
||||
scrollHeight: "100%", //数据展示体高度 |
|
||||
nowDate: Common.getNowDate(), //现在日期 |
|
||||
endDate: Common.getNowDate(), //日历可选日期范围的结束时间 |
|
||||
startDate: Common.getPreMonth(Common.getNowDate()), //日历可选日期范围的开始时间, |
|
||||
showCalendar: false, |
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
locationArray() { |
|
||||
return [{ |
|
||||
value: "GDBJ-ENTRY-1", |
|
||||
text: "天猫" |
|
||||
}, { |
|
||||
value: "GDBJ-ENTRY-201", |
|
||||
text: "京东" |
|
||||
}]; |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
gotoBack() { |
|
||||
Common.navigateBack("/index/index"); |
|
||||
}, |
|
||||
changDrop(index) { |
|
||||
if (index == 1 && this.$refs.companyDrop.showList) { |
|
||||
this.$refs.companyDrop.closePopup() |
|
||||
} else if (index == 2 && this.$refs.caleDrop.showList) { |
|
||||
this.$refs.caleDrop.closePopup() |
|
||||
} |
|
||||
}, |
|
||||
// 打开日历 |
|
||||
openCalendar() { |
|
||||
this.$refs.calendar.open(); |
|
||||
}, |
|
||||
// 日历选择日期 |
|
||||
confirm(e) { |
|
||||
if (this.nowDate != e.fulldate || !this.showCalendar) { |
|
||||
this.showCalendar = true; |
|
||||
this.$refs.caleDrop.selectAuto(); |
|
||||
this.nowDate = e.fulldate; |
|
||||
this.showDataTime = e.fulldate.replace(/-/g, ""); |
|
||||
Common.tipMsg("当前时间:" + this.showDataTime) |
|
||||
} |
|
||||
}, |
|
||||
//下拉选择时间 |
|
||||
changeTime(e) { |
|
||||
if (e.value == "auto") { |
|
||||
this.openCalendar(); |
|
||||
} else if (this.showDataTime != e.value) { |
|
||||
this.showDataTime = e.value; |
|
||||
this.showCalendar = false; |
|
||||
Common.tipMsg("当前时间:" + this.showDataTime) |
|
||||
} |
|
||||
}, |
|
||||
changeLocation(e) { |
|
||||
Common.tipMsg("当前选中平台:" + e.text) |
|
||||
}, |
|
||||
//获取设备信息 |
|
||||
async getTelephoneInfo() { |
|
||||
var telephoneInfo = await Common.getTelephoneInfo(); |
|
||||
let hasHeight = 0; |
|
||||
if (telephoneInfo.top >= 40) { |
|
||||
this.top = telephoneInfo.statusBarHeight * 2 + 150; |
|
||||
this.topBar = telephoneInfo.statusBarHeight; |
|
||||
} |
|
||||
|
|
||||
// 设置滚动高度 |
|
||||
const query = wx.createSelectorQuery(); |
|
||||
query.select('#nav').boundingClientRect(); |
|
||||
query.select('#head').boundingClientRect(); |
|
||||
query.select('#wuctab').boundingClientRect(); |
|
||||
query.exec(res => { |
|
||||
res.map((item, index) => { |
|
||||
hasHeight += item.height; |
|
||||
}) |
|
||||
this.scrollHeight = (telephoneInfo.screenHeight - hasHeight - this.topBar) + 'px'; |
|
||||
}) |
|
||||
}, |
|
||||
getH5Info() { |
|
||||
uni.getSystemInfo({ |
|
||||
success: e => { |
|
||||
let hasHeight = 0; |
|
||||
let element = wx.createSelectorQuery().in(this); |
|
||||
element.select('#nav').boundingClientRect(); |
|
||||
element.select('#head').boundingClientRect(); |
|
||||
element.select('#wuctab').boundingClientRect(); |
|
||||
element.exec(res => { |
|
||||
res.map((item, index) => { |
|
||||
hasHeight += item.height; |
|
||||
}) |
|
||||
this.scrollHeight = (e.screenHeight - hasHeight) + 'px'; |
|
||||
}) |
|
||||
}, |
|
||||
fail: (err) => { |
|
||||
reject(err); |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
}, |
|
||||
onReady() { |
|
||||
//#ifndef H5 |
|
||||
uni.showShareMenu(); |
|
||||
this.getTelephoneInfo(); |
|
||||
//#endif |
|
||||
//#ifdef H5 |
|
||||
this.getH5Info(); |
|
||||
//#endif |
|
||||
} |
|
||||
}; |
|
||||
</script> |
|
||||
<style lang="scss"> |
|
||||
page, |
|
||||
body { |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
} |
|
||||
|
|
||||
.li_5 { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
|
|
||||
.window { |
|
||||
height: 100vh; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.topLine { |
|
||||
background-color: #40A2ED; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
scroll-view { |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.swiper { |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.nav { |
|
||||
background-image: url(http://photo.gdbjyy.cn/image/BCAI/top_bg.jpg); |
|
||||
background-size: 100% 100%; |
|
||||
|
|
||||
.back { |
|
||||
font-size: 54rpx; |
|
||||
padding: 20rpx 14rpx 15rpx 14rpx; |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
.title { |
|
||||
color: #fff; |
|
||||
font-size: 30rpx; |
|
||||
flex: 1; |
|
||||
text-align: center; |
|
||||
} |
|
||||
|
|
||||
.hidden { |
|
||||
visibility: hidden; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.head { |
|
||||
padding: 0 16rpx 14rpx 16rpx; |
|
||||
color: #fff; |
|
||||
background-color: #40A2ED; |
|
||||
justify-content: space-between; |
|
||||
font-size: 26rpx !important; |
|
||||
|
|
||||
.calendar_drag { |
|
||||
width: 340rpx; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
|
|
||||
.calendar_name { |
|
||||
margin-right: 10rpx; |
|
||||
} |
|
||||
|
|
||||
.icon-calendar { |
|
||||
font-size: 26rpx; |
|
||||
margin-top: 4rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.data_body { |
|
||||
overflow: auto; |
|
||||
text-align: center; |
|
||||
color: #333333; |
|
||||
background-repeat: repeat; |
|
||||
background-color: #ffffff; |
|
||||
position: relative; |
|
||||
|
|
||||
.item { |
|
||||
padding: 0 20rpx; |
|
||||
margin-bottom: 20rpx; |
|
||||
|
|
||||
.name { |
|
||||
font-weight: 600; |
|
||||
font-size: 36rpx; |
|
||||
} |
|
||||
|
|
||||
.operate { |
|
||||
view { |
|
||||
padding: 5rpx 12rpx; |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
.bg-blue { |
|
||||
background-color: #40A2ED; |
|
||||
} |
|
||||
|
|
||||
.bg-yellow { |
|
||||
background-color: #FFC300; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.tip { |
|
||||
margin-bottom: 30rpx; |
|
||||
|
|
||||
.update { |
|
||||
color: #C4100A; |
|
||||
margin-left: auto; |
|
||||
font-size: 30rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.cry { |
|
||||
font-size: 96rpx; |
|
||||
margin-bottom: 10rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.water-mark-mask { |
|
||||
width: 100%; |
|
||||
position: fixed; |
|
||||
left: 0; |
|
||||
bottom: 0; |
|
||||
z-index: 1000; |
|
||||
justify-content: space-between; |
|
||||
pointer-events: none; //无视鼠标事件,相当于鼠标事件透传下去一样 |
|
||||
flex: 1; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
text { |
|
||||
width: 50%; |
|
||||
color: #909399; |
|
||||
opacity: 0.25; |
|
||||
transform: rotate(-15deg); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.histogram { |
|
||||
height: 100%; |
|
||||
width: 100%; |
|
||||
|
|
||||
canvas { |
|
||||
margin-top: 40rpx; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,259 +0,0 @@ |
|||||
<template> |
|
||||
<view class="body window"> |
|
||||
<view class="topLine" :style="{ height: topBar + 'px' }"></view> |
|
||||
<view class="nav row_align_center" id="nav"> |
|
||||
<li class="li_6" :class="['iconfont icon-zuojiantou back']" @click="gotoBack()"></li> |
|
||||
<text class="title">{{ title ? title : '' }}</text> |
|
||||
<li class="iconfont icon-zuojiantou back hidden li_6"></li> |
|
||||
</view> |
|
||||
<view class="data_body"> |
|
||||
<scroll-view class="scroll_list" scroll-y :style="{ height: scrollHeight }"> |
|
||||
<!-- 教学科研情况 --> |
|
||||
<view class="view_block"> |
|
||||
<view class="title">教学科研情况</view> |
|
||||
<progress-bar :content="RankData" @updateRanking="updateRanking"></progress-bar> |
|
||||
</view> |
|
||||
<!-- 学历分布状况 --> |
|
||||
<view class="view_block"> |
|
||||
<view class="title">学历分布状况 |
|
||||
<text class="font-small" style="color: #ccc;">(教职工)</text> |
|
||||
</view> |
|
||||
<view class="charts-box" style="height: 300px;"> |
|
||||
<qiun-data-charts type="rose" :chartData="ProductRateData" canvasId="school_a" |
|
||||
:canvas2d="isCanvas2d" :resshow="delayload" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<!-- 学业成绩 --> |
|
||||
<view class="view_block"> |
|
||||
<view class="title">学业成绩分布图 |
|
||||
<text class="font-small" style="color: #ccc;">(班级)</text> |
|
||||
</view> |
|
||||
<view class="charts-box" style="height: 300px;"> |
|
||||
<qiun-data-charts type="radar" :chartData="RadarModel" background="none" canvasId="school_b" |
|
||||
:animation="false" :canvas2d="isCanvas2d" :resshow="delayload" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<!-- 图书借阅情况 --> |
|
||||
<view class="view_block"> |
|
||||
<view class="title">图书借阅情况</view> |
|
||||
<view class="charts-box" style="height: 300px;"> |
|
||||
<qiun-data-charts type="line" canvasId="school_c" :canvas2d="isCanvas2d" :resshow="delayload" |
|
||||
:ontouch="true" |
|
||||
:opts="{ enableScroll: true, xAxis: { scrollShow: true, itemCount: 4, disableGrid: true }, series: { style: 'curve' } }" |
|
||||
:chartData="friendTrand" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
</scroll-view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import ProgressBar from "../../components/progress-bar/progress-bar.vue" |
|
||||
import RankData from '../../static/json/school/1.json'; |
|
||||
import ProductRateData from '../../static/json/school/2.json'; |
|
||||
import RadarModel from '../../static/json/school/3.json'; |
|
||||
import friendTrand from '../../static/json/school/4.json'; |
|
||||
import Config from '../../static/js/config' |
|
||||
import Common from '../../static/js/common' |
|
||||
|
|
||||
export default { |
|
||||
components: { |
|
||||
ProgressBar |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
info: "大便超人", //用户数据 |
|
||||
title: "智慧教育报表中心", //标题 |
|
||||
showDataTime: "today", //选中的时间 |
|
||||
tabCur: 0, //标签头下标 |
|
||||
topBar: 17, //导航高 |
|
||||
top: '180', //下拉栏位置 |
|
||||
scrollHeight: "1400rpx", //数据展示体高度 |
|
||||
friendTrand, |
|
||||
RankData, |
|
||||
ProductRateData, |
|
||||
RadarModel, |
|
||||
isCanvas2d: Config.ISCANVAS2D, |
|
||||
delayload: false, //延时加载图表,否则会出现图表加载完后定位错乱 |
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
locationArray() { |
|
||||
return [{ value: "GDBJ-ENTRY-1", text: "天猫" }, { value: "GDBJ-ENTRY-201", text: "京东" }]; |
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
async getData() { |
|
||||
uni.showLoading(); |
|
||||
await setTimeout(() => { |
|
||||
this.delayload = true; |
|
||||
uni.hideLoading(); |
|
||||
}, 1000) |
|
||||
}, |
|
||||
gotoBack() { |
|
||||
Common.navigateBack("/index/index"); |
|
||||
}, |
|
||||
//获取设备信息 |
|
||||
async getTelephoneInfo() { |
|
||||
var telephoneInfo = await Common.getTelephoneInfo(); |
|
||||
let hasHeight = 0; |
|
||||
if (telephoneInfo.top >= 40) { |
|
||||
this.top = telephoneInfo.statusBarHeight * 2 + 150; |
|
||||
this.topBar = telephoneInfo.statusBarHeight; |
|
||||
} |
|
||||
// 设置滚动高度 |
|
||||
const query = wx.createSelectorQuery(); |
|
||||
query.select('#nav').boundingClientRect(); |
|
||||
query.exec(res => { |
|
||||
res.map((item, index) => { |
|
||||
hasHeight += item.height; |
|
||||
}) |
|
||||
this.scrollHeight = (telephoneInfo.screenHeight - hasHeight - this.topBar) + 'px'; |
|
||||
}) |
|
||||
}, |
|
||||
updateRanking(nVal) { |
|
||||
this.RankData = nVal; |
|
||||
}, |
|
||||
}, |
|
||||
onLoad() { |
|
||||
//#ifndef H5 |
|
||||
uni.showShareMenu(); |
|
||||
//#endif |
|
||||
this.getData() |
|
||||
this.getTelephoneInfo(); |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="scss"> |
|
||||
.body { |
|
||||
height: 100vh; |
|
||||
margin: 0; |
|
||||
padding: 0 20rpx; |
|
||||
font-family: "montserrat"; |
|
||||
background-image: linear-gradient(125deg, #CB9FFE, #5894F7, #ABCDFA, #74A3F6, #CB9FFE); |
|
||||
background-size: 400%; |
|
||||
animation: bganimation 15s infinite; |
|
||||
} |
|
||||
|
|
||||
.li_6 { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
|
|
||||
page, |
|
||||
body { |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
} |
|
||||
|
|
||||
.window { |
|
||||
height: 100vh; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.topLine { |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
scroll-view { |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.swiper { |
|
||||
box-sizing: border-box; |
|
||||
} |
|
||||
|
|
||||
.nav { |
|
||||
background-size: 100% 100%; |
|
||||
|
|
||||
.back { |
|
||||
font-size: 54rpx; |
|
||||
padding: 20rpx 14rpx 15rpx 14rpx; |
|
||||
color: #fff; |
|
||||
} |
|
||||
|
|
||||
.title { |
|
||||
color: #fff; |
|
||||
font-size: 30rpx; |
|
||||
flex: 1; |
|
||||
text-align: center; |
|
||||
} |
|
||||
|
|
||||
.hidden { |
|
||||
visibility: hidden; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.head { |
|
||||
padding: 0 16rpx 14rpx 16rpx; |
|
||||
color: #fff; |
|
||||
background-color: #40A2ED; |
|
||||
justify-content: space-between; |
|
||||
font-size: 26rpx !important; |
|
||||
|
|
||||
.calendar_drag { |
|
||||
width: 340rpx; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
|
|
||||
.calendar_name { |
|
||||
margin-right: 10rpx; |
|
||||
} |
|
||||
|
|
||||
.icon-calendar { |
|
||||
font-size: 26rpx; |
|
||||
margin-top: 4rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.data_body { |
|
||||
overflow: auto; |
|
||||
text-align: center; |
|
||||
color: #333333; |
|
||||
background-repeat: repeat; |
|
||||
height: 100%; |
|
||||
|
|
||||
.scroll_list { |
|
||||
height: 100%; |
|
||||
|
|
||||
.view_block { |
|
||||
background-color: #fff; |
|
||||
padding: 16rpx 20rpx 10rpx 20rpx; |
|
||||
border-radius: 20rpx; |
|
||||
margin-bottom: 40rpx; |
|
||||
|
|
||||
.title { |
|
||||
text-align: left; |
|
||||
margin-bottom: 30rpx; |
|
||||
font-size: 30rpx; |
|
||||
} |
|
||||
|
|
||||
.trend_title { |
|
||||
text-align: right; |
|
||||
font-size: 22rpx; |
|
||||
color: #ff9900; |
|
||||
margin-top: 50rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@keyframes bganimation { |
|
||||
0% { |
|
||||
background-position: 0% 50%; |
|
||||
} |
|
||||
|
|
||||
50% { |
|
||||
background-position: 100% 50%; |
|
||||
} |
|
||||
|
|
||||
100% { |
|
||||
background-position: 0% 50%; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,762 +0,0 @@ |
|||||
<template> |
|
||||
<view class="body"> |
|
||||
<view class="nav row_align_center" id="nav"> |
|
||||
<li class="li_7" style="z-index: 999;font-size: 50rpx;" :class="['iconfont icon-zuojiantou back']" @click="gotoBack()"> |
|
||||
</li> |
|
||||
</view> |
|
||||
<view class="head"> |
|
||||
<view class="title">运动报告</view> |
|
||||
<view class="customer_img"> |
|
||||
<!-- <open-data type="userAvatarUrl" class="img"></open-data> --> |
|
||||
<image class="img" src="https://s1.ax1x.com/2022/11/16/zZUoK1.jpg" mode="widthFix"></image> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="score_view"> |
|
||||
<view class="title">本次评分</view> |
|
||||
<view class="detail"> |
|
||||
<view class="socre">98</view> |
|
||||
<li class="li_7" :class="['iconfont icon-up text-green']" @click="gotoBack()"></li> |
|
||||
<view class="up_socre">0.4</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="census_view"> |
|
||||
<view class="left"> |
|
||||
<view class="text_gray small_text">消耗(千卡)</view> |
|
||||
<view class="middle_text text_wide_900">165</view> |
|
||||
</view> |
|
||||
<view class="right"> |
|
||||
<view class="text_gray small_text">心率主要集中在</view> |
|
||||
<view style="font-size: 30rpx;">燃烧脂肪</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="census_view"> |
|
||||
<view class="left"> |
|
||||
<view class="text_gray small_text">时长(分钟)</view> |
|
||||
<view class="middle_text text_wide_900">75</view> |
|
||||
</view> |
|
||||
<view class="center"> |
|
||||
<view class="text_gray small_text">累计打卡(天)</view> |
|
||||
<view class="middle_text text_wide_900">24</view> |
|
||||
</view> |
|
||||
<view class="right"> |
|
||||
<view class="text_gray small_text">平均心率(次/分钟)</view> |
|
||||
<view class="middle_text text_wide_900">98</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="consume_view"> |
|
||||
<view class="wrap"><span class="consume_tip">身体消耗</span></view> |
|
||||
<li class="li_7" :class="['iconfont icon-niunai consume_icon']"></li> |
|
||||
<view class="desc"> |
|
||||
<view class="small_text">约消耗</view> |
|
||||
<view class="text_wide_900"><text class="left">1000</text><text class="right">毫升牛奶</text></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="heart_rate_view"> |
|
||||
<view class="left"> |
|
||||
<li class="li_7" :class="['iconfont icon-zhexiantu']"></li> |
|
||||
<text class="title">心率变化曲线</text> |
|
||||
</view> |
|
||||
<view class="right text_gray">心率变化</view> |
|
||||
</view> |
|
||||
<view v-if="heartRateData.series" class="heart_rate_chart"> |
|
||||
<view class="charts-box"> |
|
||||
<qiun-data-charts type="tline" canvasId="sport_a" :canvas2d="isCanvas2d" :resshow="delayload" |
|
||||
:opts="{ padding: [0, 20, 10, 0], legend: { position: 'top', lineHeight: 20 }, xAxis: { disableGrid: true, format: 'xAxisDemo3' }, yAxis: { data: [{ min: 0, max: 175 }], gridType: 'solid' }, dataLabel: false, dataPointShape: false }" |
|
||||
:chartData="heartRateData" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="title_view"> |
|
||||
<view class="left"> |
|
||||
<li class="li_7" :class="['iconfont icon-xinlv']"></li> |
|
||||
<text class="title">心率区间</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="heart_rate_range"> |
|
||||
<view class="top"> |
|
||||
<view class="item" v-for="(item, index) in heatRateRange" :key="index"> |
|
||||
<view class="name text_gray">{{ item.name }}</view> |
|
||||
<view class="data">{{ item.type }}{{ item.data }}<text class="unit text_gray">分钟</text></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view v-if="heartRateRangeData" class="charts-box"> |
|
||||
<qiun-data-charts type="ring" canvasId="sport_b" :canvas2d="isCanvas2d" :resshow="delayload" |
|
||||
:opts="{ legend: { position: 'bottom' }, extra: { ring: { border: false, centerColor: '#312C34' } }, title: { name: '' }, subtitle: { name: '' } }" |
|
||||
:chartData="heartRateRangeData" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="title_view"> |
|
||||
<view class="left"> |
|
||||
<li class="li_7" :class="['iconfont icon-pie']"></li> |
|
||||
<text class="title">运动分析</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="sport_analysis_view"> |
|
||||
<view class="top"> |
|
||||
<li class="iconfont icon-feiji li_7"></li> |
|
||||
<text class="title font-s-34">跑步机</text> |
|
||||
</view> |
|
||||
<view class="middle"> |
|
||||
<view class="left"> |
|
||||
<li class="iconfont icon-clock li_7"></li> |
|
||||
<view>3.24P.M</view> |
|
||||
</view> |
|
||||
<view class="right"> |
|
||||
<li class="iconfont icon-huo li_7"></li> |
|
||||
<view>热量消耗(千卡)</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="bottom"> |
|
||||
<view class="left"> |
|
||||
<li class="iconfont icon-kongxinyuan li_7"></li> |
|
||||
<view>燃烧脂肪</view> |
|
||||
</view> |
|
||||
<view class="right"> |
|
||||
<view class="text_wide_600 font-s-40">637</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="box_view speed_rank_view"> |
|
||||
<view class="top"> |
|
||||
<view class="item" v-for="(item, index) in speedRank" :key="index"> |
|
||||
<view class="name text_gray">{{ item.name }}</view> |
|
||||
<view class="data">{{ item.data }}<text class="unit text_gray">{{ item.unit }}</text></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view v-if="speedRankData" class="charts-box"> |
|
||||
<qiun-data-charts type="bar" canvasId="sport_c" :canvas2d="isCanvas2d" :resshow="delayload" |
|
||||
:chartData="speedRankData" background="none" |
|
||||
:opts="{ xAxis: { disabled: true, disableGrid: true }, extra: { bar: { barBorderCircle: true, width: 20 } }, legend: { show: false } }" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="box_view"> |
|
||||
<view v-if="speedAndRateData.series" class="charts-box"> |
|
||||
<qiun-data-charts type="tline" canvasId="sport_d" :canvas2d="isCanvas2d" :resshow="delayload" |
|
||||
:opts="{ padding: [0, 20, 10, 0], legend: { position: 'top', lineHeight: 20 }, xAxis: { disableGrid: true, format: 'xAxisDemo3' }, yAxis: { data: [{ position: 'left', min: 0, max: 25 }, { position: 'right', min: 50, max: 175 }], gridType: 'solid' }, dataLabel: false, dataPointShape: false }" |
|
||||
:chartData="speedAndRateData" /> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import heartRateData from "../../static/json/sport/1.json" |
|
||||
import heartRateRangeData from "../../static/json/sport/2.json" |
|
||||
import speedRankData from "../../static/json/sport/3.json" |
|
||||
import speedAndRateData from "../../static/json/sport/4.json" |
|
||||
import Config from '../../static/js/config' |
|
||||
import Common from '../../static/js/common' |
|
||||
|
|
||||
export default { |
|
||||
components: { |
|
||||
|
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
info: '大便超人', //用户数据 |
|
||||
isCanvas2d: Config.ISCANVAS2D, |
|
||||
heartRateData: {}, |
|
||||
speedRankData: {}, |
|
||||
speedAndRateData: {}, |
|
||||
delayload: null, |
|
||||
heartRateRangeData: {}, |
|
||||
heatRateRange: [{ |
|
||||
name: "激活放松", |
|
||||
data: "5", |
|
||||
type: "≤" |
|
||||
}, |
|
||||
{ |
|
||||
name: "动态热身", |
|
||||
data: "13", |
|
||||
type: "" |
|
||||
}, |
|
||||
{ |
|
||||
name: "脂肪燃烧", |
|
||||
data: "24", |
|
||||
type: "" |
|
||||
}, |
|
||||
{ |
|
||||
name: "糖分消耗", |
|
||||
data: "8", |
|
||||
type: "≤" |
|
||||
}, |
|
||||
{ |
|
||||
name: "心肺训练", |
|
||||
data: "7", |
|
||||
type: "" |
|
||||
}, |
|
||||
{ |
|
||||
name: "极限锻炼", |
|
||||
data: "16", |
|
||||
type: "" |
|
||||
}, |
|
||||
], |
|
||||
speedRank: [{ |
|
||||
name: "距离", |
|
||||
data: "5", |
|
||||
unit: "公里" |
|
||||
}, |
|
||||
{ |
|
||||
name: "时长", |
|
||||
data: "12", |
|
||||
unit: "分钟" |
|
||||
}, |
|
||||
{ |
|
||||
name: "平均配速", |
|
||||
data: "6\'05\"", |
|
||||
unit: "" |
|
||||
} |
|
||||
] |
|
||||
}; |
|
||||
}, |
|
||||
watch: { |
|
||||
|
|
||||
}, |
|
||||
methods: { |
|
||||
async getData() { |
|
||||
uni.showLoading(); |
|
||||
/*将钟点时间随机转成某一天的具体时间戳*/ |
|
||||
if (typeof heartRateData.series[0].data[0][0] == 'string') { |
|
||||
for (let i = 0; i < heartRateData.series.length; i++) { |
|
||||
heartRateData.series[i].data.map(x => { |
|
||||
x[0] = "2018/08/08 " + x[0]; |
|
||||
x[0] = this.tranTimestamp(x[0]); |
|
||||
return x[0]; |
|
||||
}) |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
if (typeof speedAndRateData.series[0].data[0][0] == 'string') { |
|
||||
for (let i = 0; i < speedAndRateData.series.length; i++) { |
|
||||
speedAndRateData.series[i].data.map(x => { |
|
||||
x[0] = "2018/08/08 " + x[0]; |
|
||||
x[0] = this.tranTimestamp(x[0]); |
|
||||
return x[0]; |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
this.heartRateData = heartRateData; |
|
||||
this.heartRateRangeData = heartRateRangeData; |
|
||||
this.speedRankData = speedRankData; |
|
||||
this.speedAndRateData = speedAndRateData; |
|
||||
this.delayload = true; |
|
||||
uni.hideLoading(); |
|
||||
}, |
|
||||
tranTimestamp(date) { |
|
||||
return new Date(date).getTime() |
|
||||
}, |
|
||||
gotoBack() { |
|
||||
Common.navigateBack("/index/index"); |
|
||||
}, |
|
||||
|
|
||||
}, |
|
||||
onReady() { |
|
||||
//#ifndef H5 |
|
||||
uni.showShareMenu(); |
|
||||
//#endif |
|
||||
this.getData() |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style scoped lang="scss"> |
|
||||
.body { |
|
||||
height: 100%; |
|
||||
background-color: #1C191F; |
|
||||
margin: 0; |
|
||||
color: #fff; |
|
||||
padding: 80rpx 20rpx 0 20rpx; |
|
||||
width: 100%; |
|
||||
box-sizing: border-box; |
|
||||
padding-bottom: 50rpx; |
|
||||
|
|
||||
.box_view { |
|
||||
width: 100%; |
|
||||
padding: 20rpx; |
|
||||
position: relative; |
|
||||
background-color: #312C34; |
|
||||
color: #FFFFFF; |
|
||||
box-sizing: border-box; |
|
||||
border-radius: 20rpx; |
|
||||
overflow: hidden; |
|
||||
margin-top: 30rpx; |
|
||||
} |
|
||||
|
|
||||
.speed_rank_view { |
|
||||
.top { |
|
||||
width: 100%; |
|
||||
|
|
||||
&:after { |
|
||||
content: ""; |
|
||||
clear: both; |
|
||||
display: block; |
|
||||
} |
|
||||
|
|
||||
.item { |
|
||||
float: left; |
|
||||
width: 33%; |
|
||||
box-sizing: border-box; |
|
||||
padding: 30rpx 20rpx; |
|
||||
text-align: left; |
|
||||
|
|
||||
.name { |
|
||||
font-size: 26rpx; |
|
||||
} |
|
||||
|
|
||||
.data { |
|
||||
font-size: 40rpx; |
|
||||
margin-top: 10rpx; |
|
||||
|
|
||||
.unit { |
|
||||
font-size: 24rpx; |
|
||||
margin-left: 14rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.sport_analysis_view { |
|
||||
width: 100%; |
|
||||
padding: 20rpx; |
|
||||
position: relative; |
|
||||
background-color: #312C34; |
|
||||
color: #FFFFFF; |
|
||||
box-sizing: border-box; |
|
||||
border-radius: 20rpx; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.top { |
|
||||
width: 100%; |
|
||||
height: 120rpx; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
|
|
||||
.icon-feiji { |
|
||||
margin-top: 10rpx; |
|
||||
} |
|
||||
|
|
||||
.title { |
|
||||
margin-left: 10rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.middle { |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
font-size: 28rpx; |
|
||||
|
|
||||
.iconfont { |
|
||||
font-size: 28rpx; |
|
||||
margin-right: 10rpx; |
|
||||
margin-top: 4rpx; |
|
||||
} |
|
||||
|
|
||||
.left { |
|
||||
width: 50%; |
|
||||
height: 60rpx; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: flex-start; |
|
||||
} |
|
||||
|
|
||||
.right { |
|
||||
width: 50%; |
|
||||
height: 60rpx; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: flex-end; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.bottom { |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
font-size: 28rpx; |
|
||||
|
|
||||
.iconfont { |
|
||||
font-size: 28rpx; |
|
||||
margin-right: 10rpx; |
|
||||
margin-top: 4rpx; |
|
||||
} |
|
||||
|
|
||||
.left { |
|
||||
width: 50%; |
|
||||
height: 60rpx; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: flex-start; |
|
||||
|
|
||||
.icon-kongxinyuan { |
|
||||
color: #6FCEF7; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.right { |
|
||||
width: 50%; |
|
||||
height: 60rpx; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: flex-end; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.heart_rate_range { |
|
||||
width: 100%; |
|
||||
position: relative; |
|
||||
background-color: #312C34; |
|
||||
color: #FFFFFF; |
|
||||
box-sizing: border-box; |
|
||||
border-radius: 20rpx; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.top { |
|
||||
width: 100%; |
|
||||
|
|
||||
&:after { |
|
||||
content: ""; |
|
||||
clear: both; |
|
||||
display: block; |
|
||||
} |
|
||||
|
|
||||
.item { |
|
||||
float: left; |
|
||||
width: 33%; |
|
||||
box-sizing: border-box; |
|
||||
padding: 30rpx 20rpx; |
|
||||
text-align: center; |
|
||||
|
|
||||
.name { |
|
||||
font-size: 26rpx; |
|
||||
} |
|
||||
|
|
||||
.data { |
|
||||
font-size: 40rpx; |
|
||||
margin-top: 10rpx; |
|
||||
|
|
||||
.unit { |
|
||||
font-size: 24rpx; |
|
||||
margin-left: 14rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.heart_rate_chart { |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
width: 100%; |
|
||||
position: relative; |
|
||||
background-color: #312C34; |
|
||||
color: #FFFFFF; |
|
||||
box-sizing: border-box; |
|
||||
border-radius: 20rpx; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
.title_view { |
|
||||
display: flex; |
|
||||
width: 100%; |
|
||||
align-items: center; |
|
||||
height: 150rpx; |
|
||||
|
|
||||
.left { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
|
|
||||
.iconfont { |
|
||||
font-size: 40rpx !important; |
|
||||
} |
|
||||
|
|
||||
.title { |
|
||||
font-size: 34rpx; |
|
||||
margin-left: 20rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.heart_rate_view { |
|
||||
display: flex; |
|
||||
width: 100%; |
|
||||
justify-content: space-around; |
|
||||
align-items: center; |
|
||||
height: 150rpx; |
|
||||
|
|
||||
.left { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
|
|
||||
.icon-zhexiantu { |
|
||||
font-size: 26rpx; |
|
||||
} |
|
||||
|
|
||||
.title { |
|
||||
font-size: 34rpx; |
|
||||
margin-left: 20rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.right { |
|
||||
font-size: 22rpx; |
|
||||
padding: 10rpx 30rpx; |
|
||||
border-radius: 40rpx; |
|
||||
background-color: #342E39; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.consume_view { |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
width: 100%; |
|
||||
height: 190rpx; |
|
||||
position: relative; |
|
||||
margin-top: 100rpx; |
|
||||
background-color: #312C34; |
|
||||
color: #FFFFFF; |
|
||||
box-sizing: border-box; |
|
||||
border-radius: 10rpx; |
|
||||
|
|
||||
.consume_img { |
|
||||
width: 240rpx; |
|
||||
height: auto; |
|
||||
position: absolute; |
|
||||
top: -80rpx; |
|
||||
left: 20rpx; |
|
||||
} |
|
||||
|
|
||||
.consume_icon { |
|
||||
font-size: 220rpx; |
|
||||
position: absolute; |
|
||||
top: -80rpx; |
|
||||
left: 20rpx; |
|
||||
} |
|
||||
|
|
||||
.desc { |
|
||||
position: absolute; |
|
||||
right: 80rpx; |
|
||||
top: 20rpx; |
|
||||
|
|
||||
view { |
|
||||
padding: 10rpx 0; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
} |
|
||||
|
|
||||
.left { |
|
||||
font-size: 50rpx; |
|
||||
} |
|
||||
|
|
||||
.right { |
|
||||
font-size: 30rpx; |
|
||||
margin-left: 10rpx; |
|
||||
font-weight: 400; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.text-green { |
|
||||
color: #10A764; |
|
||||
} |
|
||||
|
|
||||
.text_gray { |
|
||||
color: #8E8B8B; |
|
||||
} |
|
||||
|
|
||||
.small_text { |
|
||||
font-size: 24rpx; |
|
||||
} |
|
||||
|
|
||||
.font-s-34 { |
|
||||
font-size: 34rpx; |
|
||||
} |
|
||||
|
|
||||
.font-s-36 { |
|
||||
font-size: 36rpx; |
|
||||
} |
|
||||
|
|
||||
.font-s-38 { |
|
||||
font-size: 38rpx; |
|
||||
} |
|
||||
|
|
||||
.font-s-40 { |
|
||||
font-size: 40rpx; |
|
||||
} |
|
||||
|
|
||||
.middle_text { |
|
||||
font-size: 36rpx; |
|
||||
} |
|
||||
|
|
||||
.text_wide_900 { |
|
||||
font-weight: 900; |
|
||||
} |
|
||||
|
|
||||
.text_wide_600 { |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
|
|
||||
.census_view { |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
justify-content: space-around; |
|
||||
|
|
||||
.left { |
|
||||
text-align: left; |
|
||||
|
|
||||
view { |
|
||||
padding: 10rpx 0; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.center { |
|
||||
text-align: center; |
|
||||
|
|
||||
view { |
|
||||
padding: 10rpx 0; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.right { |
|
||||
text-align: right; |
|
||||
|
|
||||
view { |
|
||||
padding: 10rpx 0; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.score_view { |
|
||||
width: 100%; |
|
||||
|
|
||||
.title { |
|
||||
color: #8E8B8B; |
|
||||
font-size: 24rpx; |
|
||||
} |
|
||||
|
|
||||
.detail { |
|
||||
height: 120rpx; |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
align-items: flex-end; |
|
||||
|
|
||||
.icon-up { |
|
||||
margin-left: 40rpx; |
|
||||
height: 54rpx; |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
|
|
||||
.socre { |
|
||||
font-size: 80rpx; |
|
||||
font-weight: 900; |
|
||||
} |
|
||||
|
|
||||
.up_socre { |
|
||||
color: #10A764; |
|
||||
height: 50rpx; |
|
||||
font-size: 24rpx; |
|
||||
font-weight: 600; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.head { |
|
||||
height: 140rpx; |
|
||||
line-height: 140rpx; |
|
||||
position: relative; |
|
||||
|
|
||||
.title { |
|
||||
font-size: 40rpx; |
|
||||
margin-left: 20rpx; |
|
||||
} |
|
||||
|
|
||||
.customer_img { |
|
||||
position: absolute; |
|
||||
bottom: 0rpx; |
|
||||
right: 20rpx; |
|
||||
width: 100rpx; |
|
||||
height: 100rpx; |
|
||||
margin: 0; |
|
||||
padding: 0; |
|
||||
background-size: 100% 100%; |
|
||||
border-radius: 100%; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
.img { |
|
||||
height: auto; |
|
||||
width: 100%; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.li_7 { |
|
||||
list-style-type: none; |
|
||||
} |
|
||||
|
|
||||
.nav { |
|
||||
position: fixed; |
|
||||
top: 50rpx; |
|
||||
left: 20rpx; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.consume_view:nth-child(even) { |
|
||||
margin-right: 4%; |
|
||||
} |
|
||||
|
|
||||
.consume_tip { |
|
||||
display: inline-block; |
|
||||
text-align: center; |
|
||||
width: 188rpx; |
|
||||
height: 30rpx; |
|
||||
line-height: 30rpx; |
|
||||
position: absolute; |
|
||||
top: 36rpx; |
|
||||
right: -44rpx; |
|
||||
z-index: 2; |
|
||||
overflow: hidden; |
|
||||
transform: rotate(45deg); |
|
||||
-ms-transform: rotate(45deg); |
|
||||
-moz-transform: rotate(45deg); |
|
||||
-webkit-transform: rotate(45deg); |
|
||||
-o-transform: rotate(45deg); |
|
||||
border: 1px dashed; |
|
||||
box-shadow: 0 0 0 3px #10A764, 0px 21px 5px -18px rgba(0, 0, 0, 0.6); |
|
||||
background: #10A764; |
|
||||
font-size: 16rpx; |
|
||||
} |
|
||||
|
|
||||
.wrap { |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
position: absolute; |
|
||||
top: -12rpx; |
|
||||
left: 12rpx; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
.wrap:before { |
|
||||
content: ""; |
|
||||
display: block; |
|
||||
border-radius: 8px 8px 0px 0px; |
|
||||
width: 80rpx; |
|
||||
height: 14rpx; |
|
||||
position: absolute; |
|
||||
right: 68rpx; |
|
||||
top: -1px; |
|
||||
background: #4D6530; |
|
||||
} |
|
||||
|
|
||||
.wrap:after { |
|
||||
content: ""; |
|
||||
display: block; |
|
||||
border-radius: 0px 8px 8px 0px; |
|
||||
width: 14rpx; |
|
||||
height: 80rpx; |
|
||||
position: absolute; |
|
||||
right: -1px; |
|
||||
top: 66rpx; |
|
||||
background: #4D6530; |
|
||||
}</style> |
|
||||
@ -1,170 +0,0 @@ |
|||||
let isReadyLogin = 1 |
|
||||
let loginFlag = 1 |
|
||||
export default { |
|
||||
//提示窗
|
|
||||
tipMsg: function (title, icon, time, mask,callback) { |
|
||||
title = title == undefined ? "系统繁忙" : title; |
|
||||
icon = icon == undefined ? "none" : icon; |
|
||||
time = time == undefined ? 1300 : time; |
|
||||
mask = mask == undefined ? true : mask; |
|
||||
uni.showToast({ |
|
||||
title: title, |
|
||||
icon: icon, |
|
||||
mask: mask, |
|
||||
duration: time, |
|
||||
success() { |
|
||||
if(callback){ |
|
||||
setTimeout(()=>{ |
|
||||
callback() |
|
||||
},time); |
|
||||
} |
|
||||
} |
|
||||
}) |
|
||||
}, |
|
||||
getTelephoneInfo(){ |
|
||||
return new Promise((resolve, reject) => { |
|
||||
var data = uni.getStorageSync("telephoneInfo"); |
|
||||
if(!data){ |
|
||||
// 获取右上角胶囊的位置信息
|
|
||||
//#ifndef H5
|
|
||||
let btn = wx.getMenuButtonBoundingClientRect(); |
|
||||
uni.getSystemInfo({ |
|
||||
success: e => { |
|
||||
let info = { |
|
||||
screenHeight:e.screenHeight, |
|
||||
statusBarHeight:e.statusBarHeight, |
|
||||
windowWidth:e.windowWidth, |
|
||||
top:btn.top |
|
||||
} |
|
||||
uni.setStorageSync("telephoneInfo",info); |
|
||||
resolve(info); |
|
||||
}, |
|
||||
fail: (err) => { |
|
||||
reject(err); |
|
||||
} |
|
||||
}) |
|
||||
//#endif
|
|
||||
}else{ |
|
||||
resolve(data); |
|
||||
} |
|
||||
}) |
|
||||
}, |
|
||||
// 获取当前年月日
|
|
||||
getNowDate(){ |
|
||||
let date = new Date; |
|
||||
let now = date.getFullYear() + "-" + (date.getMonth()+1) + "-" + date.getDate(); |
|
||||
return now; |
|
||||
}, |
|
||||
// 获取上个月的年月日
|
|
||||
getPreMonth(date) { |
|
||||
var arr = date.split('-'); |
|
||||
var year = arr[0]; //获取当前日期的年份
|
|
||||
var month = arr[1]; //获取当前日期的月份
|
|
||||
var day = arr[2]; //获取当前日期的日
|
|
||||
var days = new Date(year, month, 0); |
|
||||
days = days.getDate(); //获取当前日期中月的天数
|
|
||||
var year2 = year; |
|
||||
var month2 = parseInt(month) - 1; |
|
||||
if (month2 == 0) { |
|
||||
year2 = parseInt(year2) - 1; |
|
||||
month2 = 12; |
|
||||
} |
|
||||
var day2 = day; |
|
||||
var days2 = new Date(year2, month2, 0); |
|
||||
days2 = days2.getDate(); |
|
||||
if (day2 > days2) { |
|
||||
day2 = days2; |
|
||||
} |
|
||||
if (month2 < 10) { |
|
||||
month2 = '0' + month2; |
|
||||
} |
|
||||
var t2 = year2 + '-' + month2 + '-' + "01"; |
|
||||
return t2; |
|
||||
}, |
|
||||
//检测小程序更新
|
|
||||
checkUpdateVersion(){ |
|
||||
//新版本更新
|
|
||||
if (uni.canIUse('getUpdateManager')) { |
|
||||
//判断当前微信版本是否支持版本更新
|
|
||||
const updateManager = uni.getUpdateManager(); |
|
||||
updateManager.onCheckForUpdate(function (res) { |
|
||||
if (res.hasUpdate) { |
|
||||
// 请求完新版本信息的回调
|
|
||||
updateManager.onUpdateReady(function () { |
|
||||
uni.showModal({ |
|
||||
title: '更新提示', |
|
||||
content: '已更新版本,是否重启小程序?', |
|
||||
showCancel:false, |
|
||||
cancelColor:'#eeeeee', |
|
||||
confirmColor:'#40A2ED', |
|
||||
success: function (res) { |
|
||||
if (res.confirm) { |
|
||||
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
|
||||
updateManager.applyUpdate(); |
|
||||
} |
|
||||
}, |
|
||||
}); |
|
||||
}); |
|
||||
// 新的版本下载失败
|
|
||||
updateManager.onUpdateFailed(function () { |
|
||||
uni.showModal({ |
|
||||
title: '更新失败', |
|
||||
content: '请检查网络设置,若仍更新失败,重新搜索打开', |
|
||||
success(res) { |
|
||||
if (res.confirm) { |
|
||||
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
|
||||
updateManager.applyUpdate(); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
}); |
|
||||
} |
|
||||
}); |
|
||||
} else { |
|
||||
uni.showModal({ |
|
||||
// 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
|
|
||||
title: '提示', |
|
||||
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。', |
|
||||
}); |
|
||||
} |
|
||||
}, |
|
||||
/** |
|
||||
* @param {string} url 目标页面的路由 |
|
||||
* @param {Object} param 传递给目标页面的参数 |
|
||||
* @description 处理目标页面的参数,转成json字符串传递给param字段,在目标页面通过JSON.parse(options.param)接收 |
|
||||
*/ |
|
||||
navigateTo(url, param = {},flag) { |
|
||||
if(isReadyLogin<=0 && !flag){ |
|
||||
this.loginTip(); |
|
||||
}else{ |
|
||||
let part = ''; |
|
||||
for(var item in param){ |
|
||||
part += '&' + item + '=' + param[item]; |
|
||||
} |
|
||||
url = url + part.replace('&','?'); |
|
||||
uni.navigateTo({ |
|
||||
url: url, |
|
||||
fail:err=> { |
|
||||
this.tipMsg('页面正在火速开发中,敬请期待!'); |
|
||||
}, |
|
||||
}) |
|
||||
} |
|
||||
}, |
|
||||
navigateBack(url, param = {}) { |
|
||||
if (loginFlag <= 0) { |
|
||||
this.tipMsg("很抱歉,你没有权限!"); |
|
||||
} else { |
|
||||
let part = ''; |
|
||||
for (var item in param) { |
|
||||
part += '&' + item + '=' + param[item]; |
|
||||
} |
|
||||
url = "/pages" + url + part.replace('&', '?'); |
|
||||
uni.navigateBack({ |
|
||||
url: url, |
|
||||
fail: err => { |
|
||||
this.tipMsg('暂未开放该功能!'); |
|
||||
}, |
|
||||
}) |
|
||||
} |
|
||||
}, |
|
||||
} |
|
||||
@ -1,79 +0,0 @@ |
|||||
|
|
||||
const COLOR = [ |
|
||||
"#EE6A66", "#6BC588", "#FFC300", "#24ABFD" |
|
||||
]; |
|
||||
|
|
||||
var ISCANVAS2D = true; |
|
||||
|
|
||||
switch (uni.getSystemInfoSync().platform) { |
|
||||
case 'android': |
|
||||
ISCANVAS2D = true |
|
||||
break; |
|
||||
case 'ios': |
|
||||
ISCANVAS2D = true |
|
||||
break; |
|
||||
default: |
|
||||
ISCANVAS2D = false |
|
||||
break; |
|
||||
} |
|
||||
|
|
||||
const RESPOND = { |
|
||||
success: 0, |
|
||||
warn: 301, |
|
||||
error: 500, |
|
||||
}; |
|
||||
|
|
||||
const TIMEARRAY = [ |
|
||||
{ |
|
||||
text: '当天', |
|
||||
value: 'today' |
|
||||
}, |
|
||||
{ |
|
||||
text: '昨天', |
|
||||
value: 'yesterday' |
|
||||
}, |
|
||||
{ |
|
||||
text: '本周', |
|
||||
value: 'week' |
|
||||
}, |
|
||||
{ |
|
||||
text: '上周', |
|
||||
value: 'weeklast' |
|
||||
}, |
|
||||
{ |
|
||||
text: '本月', |
|
||||
value: 'month' |
|
||||
}, |
|
||||
{ |
|
||||
text: '上月', |
|
||||
value: 'monthlast' |
|
||||
}, |
|
||||
{ |
|
||||
text: '指定日期', |
|
||||
value: 'auto' |
|
||||
} |
|
||||
]; |
|
||||
const TABLIST = [ |
|
||||
{name:"企业微信",type:"WECHAT"}, |
|
||||
{name:"会员运营",type:"OPERATE"}, |
|
||||
{name:"会员健康",type:"GJJK"}, |
|
||||
{name:"会员服务",type:"SERVICE"}, |
|
||||
]; |
|
||||
|
|
||||
const CARD_MENU = [ |
|
||||
{title:"会员报表中心",author:"howcode",img:"https://s1.ax1x.com/2023/03/31/ppRp4iV.jpg",url:"/myPackageA/pages/main/index"}, |
|
||||
{title:"智慧教育报表中心",author:"howcode",img:"https://s1.ax1x.com/2023/03/31/ppRp5GT.jpg",url:"/myPackageA/pages/school/index"}, |
|
||||
{title:"差旅报表中心",author:"秋云",img:"https://s1.ax1x.com/2023/03/31/ppRpfI0.jpg",url:""}, |
|
||||
{title:"运动报表中心",author:"howcode",img:"https://s1.ax1x.com/2023/03/31/ppRpWaq.jpg",url:"/myPackageA/pages/sport/index"}, |
|
||||
{title:"财务报表中心",author:"howcode",img:"https://s1.ax1x.com/2023/03/31/ppRpozF.jpg",url:"/myPackageA/pages/finance/index"}, |
|
||||
] |
|
||||
|
|
||||
|
|
||||
export default { |
|
||||
COLOR, |
|
||||
TIMEARRAY, |
|
||||
TABLIST, |
|
||||
RESPOND, |
|
||||
ISCANVAS2D, |
|
||||
CARD_MENU |
|
||||
} |
|
||||
@ -1,68 +0,0 @@ |
|||||
{ |
|
||||
"expend":{ |
|
||||
"categories": [ |
|
||||
"1月", |
|
||||
"2月", |
|
||||
"2月", |
|
||||
"4月", |
|
||||
"5月" |
|
||||
], |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "支出情况", |
|
||||
"data": [1201,2501.5,985,1760,2013.85], |
|
||||
"type": "line", |
|
||||
"style": "curve", |
|
||||
"color": "#4ECDB6", |
|
||||
"unit":"" |
|
||||
} |
|
||||
], |
|
||||
"yAxis":[ |
|
||||
{"calibration":true,"position":"left","title":"单位/元","titleFontSize":12,"unit":"","tofix":0,"min":0,"disableGrid":true} |
|
||||
] |
|
||||
}, |
|
||||
"income":{ |
|
||||
"categories": [ |
|
||||
"1月", |
|
||||
"2月", |
|
||||
"2月", |
|
||||
"4月", |
|
||||
"5月" |
|
||||
], |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "收入情况", |
|
||||
"data": [1601,1840.5,1900,1760,1500.85], |
|
||||
"type": "line", |
|
||||
"style": "curve", |
|
||||
"color": "#4ECDB6", |
|
||||
"unit":"" |
|
||||
} |
|
||||
], |
|
||||
"yAxis":[ |
|
||||
{"calibration":true,"position":"left","title":"单位/元","titleFontSize":12,"unit":"","tofix":0,"min":0,"disableGrid":true} |
|
||||
] |
|
||||
}, |
|
||||
"remaining":{ |
|
||||
"categories": [ |
|
||||
"1月", |
|
||||
"2月", |
|
||||
"2月", |
|
||||
"4月", |
|
||||
"5月" |
|
||||
], |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "结余情况", |
|
||||
"data": [815,712.5,378,450,600.85], |
|
||||
"type": "line", |
|
||||
"style": "curve", |
|
||||
"color": "#4ECDB6", |
|
||||
"unit":"" |
|
||||
} |
|
||||
], |
|
||||
"yAxis":[ |
|
||||
{"calibration":true,"position":"left","title":"单位/元","titleFontSize":12,"unit":"","tofix":0,"min":0,"disableGrid":true} |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
@ -1,33 +0,0 @@ |
|||||
{ |
|
||||
"series": [ |
|
||||
{ |
|
||||
"data":[ |
|
||||
{ |
|
||||
"name": "住房相关", |
|
||||
"value": 3200, |
|
||||
"color":"#4DCCB3" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "食品酒水", |
|
||||
"value": 1020, |
|
||||
"color":"#5A77EC" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "娱乐休闲", |
|
||||
"value": 500, |
|
||||
"color":"#4E94EC" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "交流通讯", |
|
||||
"value": 214.5, |
|
||||
"color":"#4FD4EB" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "其他", |
|
||||
"value": 320.13, |
|
||||
"color":"#B5ED21" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,26 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"name":"课题研究", |
|
||||
"num":500, |
|
||||
"width":"", |
|
||||
"background":"#FFBE68" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"论文发布", |
|
||||
"num":300, |
|
||||
"width":"", |
|
||||
"background":"#0FEBE1" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"实践研究", |
|
||||
"num":455, |
|
||||
"width":"", |
|
||||
"background":"#BF8DFC" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"评教", |
|
||||
"num":601, |
|
||||
"width":"", |
|
||||
"background":"#FF859C" |
|
||||
} |
|
||||
] |
|
||||
@ -1,28 +0,0 @@ |
|||||
{ |
|
||||
"series": [ |
|
||||
{ |
|
||||
"data": [ |
|
||||
{ |
|
||||
"name": "本科", |
|
||||
"value": 168, |
|
||||
"color": "#FFBF31" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "大专", |
|
||||
"value": 144, |
|
||||
"color": "#3CEFC4" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "博士", |
|
||||
"value": 123, |
|
||||
"color": "#FFA9B3" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "硕士", |
|
||||
"value": 96, |
|
||||
"color": "#3CBBFF" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,27 +0,0 @@ |
|||||
{ |
|
||||
"categories":["语文","数学","英语","物理","化学","生物"], |
|
||||
"series":[ |
|
||||
{ |
|
||||
"name":"一班", |
|
||||
"area":[123.45,234,192.5,245], |
|
||||
"color":"#1890ff", |
|
||||
"data":[90,110,165,195,187,172], |
|
||||
"index":0, |
|
||||
"legendShape":"circle", |
|
||||
"pointShape":"", |
|
||||
"show": true, |
|
||||
"type": "radar" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"二班", |
|
||||
"area":[192.5,234,261.55,245], |
|
||||
"color":"#2fc25b", |
|
||||
"data":[190,210,105,35,27,102], |
|
||||
"index":0, |
|
||||
"legendShape":"circle", |
|
||||
"pointShape":"", |
|
||||
"show": true, |
|
||||
"type": "radar" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,29 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1", |
|
||||
"2", |
|
||||
"2", |
|
||||
"4", |
|
||||
"5", |
|
||||
"6", |
|
||||
"7", |
|
||||
"8", |
|
||||
"9", |
|
||||
"10", |
|
||||
"11", |
|
||||
"12" |
|
||||
], |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "图书借阅人数", |
|
||||
"data": [6,8,9,8.2,7.5,9,10.3,8,12,6.2,7.2,4.5], |
|
||||
"type": "line", |
|
||||
"style": "curve", |
|
||||
"color": "#A800FB", |
|
||||
"unit":"" |
|
||||
} |
|
||||
], |
|
||||
"yAxis":[ |
|
||||
{"calibration":true,"position":"left","title":"单位/千","titleFontSize":12,"unit":"","tofix":0,"min":0,"max":20,"disableGrid":true} |
|
||||
] |
|
||||
} |
|
||||
@ -1,80 +0,0 @@ |
|||||
{ |
|
||||
"series": [{ |
|
||||
"name": "激活放松", |
|
||||
"color": "#FDEC9F", |
|
||||
"data": [ |
|
||||
["17:24", 75], |
|
||||
["17:26", 83], |
|
||||
["17:28", 88], |
|
||||
["17:30", 92] |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"name": "动态热身", |
|
||||
"color": "#FBCD2B", |
|
||||
"data": [ |
|
||||
["17:30", 92], |
|
||||
["17:32", 96], |
|
||||
["17:34", 94], |
|
||||
["17:36", 93.5], |
|
||||
["17:38", 94.6], |
|
||||
["17:40", 98] |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"name": "糖分消耗", |
|
||||
"color": "#FC9E83", |
|
||||
"data": [ |
|
||||
["17:40", 98], |
|
||||
["17:42", 100], |
|
||||
["17:44", 104], |
|
||||
["17:46", 113], |
|
||||
["17:48", 142] |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"name": "脂肪燃烧", |
|
||||
"color": "#EF6DCF", |
|
||||
"data": [ |
|
||||
["17:48", 142], |
|
||||
["17:50", 130], |
|
||||
["17:52", 134], |
|
||||
["17:54", 150], |
|
||||
["17:56", 148], |
|
||||
["17:58", 142], |
|
||||
["18:00", 132], |
|
||||
["18:02", 136], |
|
||||
["18:04", 136.5] |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"name": "心肺训练", |
|
||||
"color": "#BC38E5", |
|
||||
"data": [ |
|
||||
["18:04", 136.5], |
|
||||
["18:06", 140], |
|
||||
["18:08", 135], |
|
||||
["18:10", 130], |
|
||||
["18:12", 124], |
|
||||
["18:14", 120], |
|
||||
["18:16", 118], |
|
||||
["18:18", 116.5], |
|
||||
["18:20", 112] |
|
||||
] |
|
||||
}, { |
|
||||
"name": "极限锻炼", |
|
||||
"color": "#8908FA", |
|
||||
"data": [ |
|
||||
["18:20", 112], |
|
||||
["18:22", 123], |
|
||||
["18:24", 130], |
|
||||
["18:26", 138], |
|
||||
["18:28", 116], |
|
||||
["18:30", 123], |
|
||||
["18:32", 128], |
|
||||
["18:34", 126], |
|
||||
["18:36", 137] |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,38 +0,0 @@ |
|||||
{ |
|
||||
"series": [ |
|
||||
{ |
|
||||
"data": [ |
|
||||
{ |
|
||||
"name": "激活放松", |
|
||||
"value": 5, |
|
||||
"color": "#FDEC9F" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "动态热身", |
|
||||
"value": 13, |
|
||||
"color": "#FBCD2B" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "糖分消耗", |
|
||||
"value": 8, |
|
||||
"color": "#FC9E83" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "脂肪燃烧", |
|
||||
"value": 24, |
|
||||
"color": "#EF6DCF" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "心肺训练", |
|
||||
"value": 7, |
|
||||
"color": "#BC38E5" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "极限锻炼", |
|
||||
"value": 16, |
|
||||
"color": "#8908FA" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,22 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1", |
|
||||
"2", |
|
||||
"3", |
|
||||
"4", |
|
||||
"5" |
|
||||
], |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "公里配速", |
|
||||
"data": [ |
|
||||
5.09, |
|
||||
6.18, |
|
||||
6.38, |
|
||||
7.15, |
|
||||
9.05 |
|
||||
], |
|
||||
"color":"#FFD597" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,174 +0,0 @@ |
|||||
{ |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "速度", |
|
||||
"color": "#1C9862", |
|
||||
"index":0, |
|
||||
"data": [ |
|
||||
[ |
|
||||
"17:24", |
|
||||
0 |
|
||||
], |
|
||||
[ |
|
||||
"17:26", |
|
||||
1 |
|
||||
], |
|
||||
[ |
|
||||
"17:28", |
|
||||
1.2 |
|
||||
], |
|
||||
[ |
|
||||
"17:30", |
|
||||
1.6 |
|
||||
], |
|
||||
[ |
|
||||
"17:32", |
|
||||
1.8 |
|
||||
], |
|
||||
[ |
|
||||
"17:34", |
|
||||
2 |
|
||||
], |
|
||||
[ |
|
||||
"17:36", |
|
||||
4 |
|
||||
], |
|
||||
[ |
|
||||
"17:38", |
|
||||
6.5 |
|
||||
], |
|
||||
[ |
|
||||
"17:40", |
|
||||
10 |
|
||||
], |
|
||||
[ |
|
||||
"17:42", |
|
||||
13.4 |
|
||||
], |
|
||||
[ |
|
||||
"17:44", |
|
||||
13 |
|
||||
], |
|
||||
[ |
|
||||
"17:46", |
|
||||
12.6 |
|
||||
], |
|
||||
[ |
|
||||
"17:48", |
|
||||
12.2 |
|
||||
], |
|
||||
[ |
|
||||
"17:50", |
|
||||
14 |
|
||||
], |
|
||||
[ |
|
||||
"17:52", |
|
||||
16.8 |
|
||||
], |
|
||||
[ |
|
||||
"17:54", |
|
||||
20 |
|
||||
], |
|
||||
[ |
|
||||
"17:56", |
|
||||
25 |
|
||||
], |
|
||||
[ |
|
||||
"17:58", |
|
||||
23 |
|
||||
], |
|
||||
[ |
|
||||
"18:00", |
|
||||
16 |
|
||||
] |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"name": "心率", |
|
||||
"index":1, |
|
||||
"color": "#FBCD2B", |
|
||||
"data": [ |
|
||||
[ |
|
||||
"17:24", |
|
||||
72 |
|
||||
], |
|
||||
[ |
|
||||
"17:26", |
|
||||
73 |
|
||||
], |
|
||||
[ |
|
||||
"17:28", |
|
||||
73.5 |
|
||||
], |
|
||||
[ |
|
||||
"17:30", |
|
||||
74 |
|
||||
], |
|
||||
[ |
|
||||
"17:32", |
|
||||
76.5 |
|
||||
], |
|
||||
[ |
|
||||
"17:34", |
|
||||
78 |
|
||||
], |
|
||||
[ |
|
||||
"17:36", |
|
||||
80 |
|
||||
], |
|
||||
[ |
|
||||
"17:38", |
|
||||
76.3 |
|
||||
], |
|
||||
[ |
|
||||
"17:40", |
|
||||
75 |
|
||||
], |
|
||||
[ |
|
||||
"17:42", |
|
||||
86 |
|
||||
], |
|
||||
[ |
|
||||
"17:44", |
|
||||
84 |
|
||||
], |
|
||||
[ |
|
||||
"17:46", |
|
||||
90 |
|
||||
], |
|
||||
[ |
|
||||
"17:48", |
|
||||
100 |
|
||||
], |
|
||||
[ |
|
||||
"17:50", |
|
||||
112 |
|
||||
], |
|
||||
[ |
|
||||
"17:52", |
|
||||
125 |
|
||||
], |
|
||||
[ |
|
||||
"17:54", |
|
||||
117 |
|
||||
], |
|
||||
[ |
|
||||
"17:56", |
|
||||
110 |
|
||||
], |
|
||||
[ |
|
||||
"17:58", |
|
||||
108 |
|
||||
], |
|
||||
[ |
|
||||
"18:00", |
|
||||
104 |
|
||||
] |
|
||||
] |
|
||||
} |
|
||||
], |
|
||||
"yAxis":[ |
|
||||
{"calibration":true,"position":"left","title":"","titleFontSize":12,"unit":"","tofix":0,"min":0,"max":25,"disableGrid":true}, |
|
||||
{"calibration":true,"position":"right","title":"","titleFontSize":12,"unit":"","tofix":0,"min":0,"disableGrid":true} |
|
||||
] |
|
||||
} |
|
||||
@ -1,21 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"expect": "", |
|
||||
"now": "", |
|
||||
"name": "时间进度", |
|
||||
"value": "60.12" |
|
||||
}, |
|
||||
{ |
|
||||
"expect": "30000", |
|
||||
"now": "36000", |
|
||||
"dataType": "1", |
|
||||
"name": "会员拉新", |
|
||||
"value": "120" |
|
||||
}, |
|
||||
{ |
|
||||
"expect": "", |
|
||||
"now": "", |
|
||||
"name": "扫码渗透率", |
|
||||
"value": "35" |
|
||||
} |
|
||||
] |
|
||||
@ -1,34 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"1800","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"日均新增目标","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"1960","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"当日新增会员","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"36050","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"本月新增会员","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"3%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"日均环比","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
@ -1,74 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1月11", |
|
||||
"1月12", |
|
||||
"1月11", |
|
||||
"1月14", |
|
||||
"1月15" |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "新增会员数", |
|
||||
"data": [{ |
|
||||
"value": 5, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": -3, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 3.5, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 10, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 2.8, |
|
||||
"color": "#24ABFD" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#24ABFD", |
|
||||
"unit": "", |
|
||||
"textNoShow": true |
|
||||
}, |
|
||||
{ |
|
||||
"name": "当日达成率", |
|
||||
"data": [ |
|
||||
101, |
|
||||
91, |
|
||||
97, |
|
||||
131, |
|
||||
109 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"addPoint": true, |
|
||||
"color": "#DF297D", |
|
||||
"unit": "%", |
|
||||
"index": 1 |
|
||||
}, |
|
||||
{ |
|
||||
"name": "日均达成率", |
|
||||
"data": [ |
|
||||
102, |
|
||||
92, |
|
||||
96, |
|
||||
115, |
|
||||
105 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"color": "#24ABFD", |
|
||||
"unit": "%", |
|
||||
"index": 1 |
|
||||
} |
|
||||
], |
|
||||
"yAxis": [{ |
|
||||
"max": 20, |
|
||||
"min": 0 |
|
||||
}, { |
|
||||
"max": 200, |
|
||||
"min": 0 |
|
||||
}] |
|
||||
} |
|
||||
@ -1,26 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"42%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"当日扫码率","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"37%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"累计扫码率","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":2, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"环比增长","value":"3.2%","colortext":"#fff","colorvalue":"#fff","size":"24rpx"}, |
|
||||
{"text":"同比增长","value":"1.1%","colortext":"#fff","colorvalue":"#fff","size":"24rpx"} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
@ -1,57 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1月11", |
|
||||
"1月12", |
|
||||
"1月13", |
|
||||
"1月14", |
|
||||
"1月15" |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "当天扫码率", |
|
||||
"data": [ |
|
||||
39, |
|
||||
34, |
|
||||
36, |
|
||||
45, |
|
||||
38 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"addPoint": true, |
|
||||
"color": "#24ABFD", |
|
||||
"unit": "%" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "累计扫码率", |
|
||||
"data": [ |
|
||||
32, |
|
||||
30, |
|
||||
31, |
|
||||
37, |
|
||||
35 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"addPoint": true, |
|
||||
"color": "#DF297D", |
|
||||
"unit": "%" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "目标扫码率", |
|
||||
"data": [ |
|
||||
40, |
|
||||
40, |
|
||||
40, |
|
||||
40, |
|
||||
40 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"color": "#FF9900", |
|
||||
"textNoShow": true, |
|
||||
"unit": "" |
|
||||
} |
|
||||
|
|
||||
], |
|
||||
"yAxis": [{ |
|
||||
"max": 60, |
|
||||
"min": 0 |
|
||||
}] |
|
||||
} |
|
||||
@ -1,12 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"kind":3, |
|
||||
"background":["#B678FD","#4A64F9"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"38%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"小程序购买活跃会员占比","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"同比","value":"2.5%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"环比","value":"3.2%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
@ -1,89 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1月11", |
|
||||
"1月12", |
|
||||
"1月11", |
|
||||
"1月14", |
|
||||
"1月15" |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "新增会员数", |
|
||||
"data": [{ |
|
||||
"value": 5, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": -3, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 3.5, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 10, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 2.8, |
|
||||
"color": "#24ABFD" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#24ABFD", |
|
||||
"unit": "", |
|
||||
"textNoShow": true |
|
||||
}, |
|
||||
{ |
|
||||
"name": "当日达成率", |
|
||||
"data": [ |
|
||||
101, |
|
||||
91, |
|
||||
97, |
|
||||
131, |
|
||||
109 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"addPoint": true, |
|
||||
"color": "#DF297D", |
|
||||
"unit": "%", |
|
||||
"index": 1 |
|
||||
}, |
|
||||
{ |
|
||||
"name": "日均达成率", |
|
||||
"data": [ |
|
||||
102, |
|
||||
92, |
|
||||
96, |
|
||||
115, |
|
||||
105 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"style": "curve", |
|
||||
"color": "#ff9900", |
|
||||
"unit": "%", |
|
||||
"index": 1 |
|
||||
}, |
|
||||
{ |
|
||||
"name": "日均达成率", |
|
||||
"data": [ |
|
||||
102, |
|
||||
92, |
|
||||
96, |
|
||||
115, |
|
||||
105 |
|
||||
], |
|
||||
"type": "area", |
|
||||
"color": "#ff9900", |
|
||||
"unit": "%", |
|
||||
"index": 1 |
|
||||
} |
|
||||
], |
|
||||
"yAxis": [{ |
|
||||
"max": 20, |
|
||||
"min": 0 |
|
||||
}, { |
|
||||
"max": 200, |
|
||||
"min": 0 |
|
||||
}] |
|
||||
} |
|
||||
@ -1,22 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"expect": "", |
|
||||
"now": "", |
|
||||
"name": "时间进度", |
|
||||
"value": "50.88" |
|
||||
}, |
|
||||
{ |
|
||||
"expect": "54800", |
|
||||
"now": "51000", |
|
||||
"dataType": "1", |
|
||||
"name": "新开会员", |
|
||||
"value": "93.07" |
|
||||
}, |
|
||||
{ |
|
||||
"expect": "30000", |
|
||||
"now": "25600", |
|
||||
"dataType": "1", |
|
||||
"name": "新增消费会员", |
|
||||
"value": "85.33" |
|
||||
} |
|
||||
] |
|
||||
@ -1,35 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"kind":5, |
|
||||
"background":["#F77E89","#F7953B"], |
|
||||
"content":[ |
|
||||
{"text":"扫一扫","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"63%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"环比","value":"81.5%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"同比","value":"-81.3%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"平均参考水平","value":"85%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":5, |
|
||||
"background":["#F77E89","#F7953B"], |
|
||||
"content":[ |
|
||||
{"text":"二维码识别","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"13%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"环比","value":"2%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"同比","value":"-0.8%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"平均参考水平","value":"80%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":5, |
|
||||
"background":["#F77E89","#F7953B"], |
|
||||
"content":[ |
|
||||
{"text":"最近使用","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"21%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"环比","value":"1%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"同比","value":"-0.8%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"平均参考水平","value":"80%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
@ -1,35 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"kind":5, |
|
||||
"background":["#F77E89","#F7953B"], |
|
||||
"content":[ |
|
||||
{"text":"会员销售占比","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"80%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"环比","value":"81.5%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"同比","value":"-81.3%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"平均参考水平","value":"85%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":5, |
|
||||
"background":["#F77E89","#F7953B"], |
|
||||
"content":[ |
|
||||
{"text":"会员客流占比","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"79%","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"环比","value":"2%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"同比","value":"-0.8%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"平均参考水平","value":"80%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":5, |
|
||||
"background":["#F77E89","#F7953B"], |
|
||||
"content":[ |
|
||||
{"text":"会员客单价","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"79元","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"环比","value":"1%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"同比","value":"-0.8%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"}, |
|
||||
{"text":"平均参考水平","value":"80%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
@ -1,61 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1周", |
|
||||
"2周", |
|
||||
"3周", |
|
||||
"4周", |
|
||||
"5周" |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "同比增长率", |
|
||||
"data": [{ |
|
||||
"value": 5, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": -3, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 3.5, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 10, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 2.8, |
|
||||
"color": "#24ABFD" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#24ABFD", |
|
||||
"index": 1, |
|
||||
"unit": "%" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "消费金额", |
|
||||
"data": [ |
|
||||
1850, |
|
||||
1660, |
|
||||
1760, |
|
||||
2360, |
|
||||
1970 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"addPoint": true, |
|
||||
"color": "#DF297D", |
|
||||
"unit": "" |
|
||||
} |
|
||||
], |
|
||||
"target": 1800, |
|
||||
"yAxis": [{ |
|
||||
"max": 3000, |
|
||||
"min": 0 |
|
||||
}, { |
|
||||
"max": 20, |
|
||||
"min": 0 |
|
||||
}], |
|
||||
"targetAdd": "9%" |
|
||||
} |
|
||||
@ -1,88 +0,0 @@ |
|||||
{ |
|
||||
"headers":[ |
|
||||
{ |
|
||||
"label": "最近活跃时间", |
|
||||
"key": "col1" |
|
||||
}, { |
|
||||
"label": "人数", |
|
||||
"key": "col2" |
|
||||
}, { |
|
||||
"label": "人数占比", |
|
||||
"key": "col3" |
|
||||
}, { |
|
||||
"label": "活跃会员环比", |
|
||||
"key": "col4" |
|
||||
}, { |
|
||||
"label": "活跃消费人数占比", |
|
||||
"key": "col5" |
|
||||
} |
|
||||
], |
|
||||
"contents":[ |
|
||||
{ |
|
||||
"col1": "0-30天", |
|
||||
"col2": "15350", |
|
||||
"col3": "45", |
|
||||
"col4": "9.5", |
|
||||
"col5": "29" |
|
||||
}, { |
|
||||
"col1": "30-60天", |
|
||||
"col2": "15350", |
|
||||
"col3": "13", |
|
||||
"col4": "-2.5", |
|
||||
"col5": "-25" |
|
||||
}, { |
|
||||
"col1": "60-90天", |
|
||||
"col2": "15371", |
|
||||
"col3": "15", |
|
||||
"col4": "-5.2", |
|
||||
"col5": "63" |
|
||||
}, { |
|
||||
"col1": "90-120天", |
|
||||
"col2": "12340", |
|
||||
"col3": "12", |
|
||||
"col4": "2.9", |
|
||||
"col5": "-12" |
|
||||
}, { |
|
||||
"col1": "120-180天", |
|
||||
"col2": "12360", |
|
||||
"col3": "17", |
|
||||
"col4": "3.5", |
|
||||
"col5": "11" |
|
||||
} |
|
||||
], |
|
||||
"sortCol":[ |
|
||||
{ |
|
||||
"key": "col1", |
|
||||
"isNumber": false |
|
||||
}, { |
|
||||
"key": "col2", |
|
||||
"isNumber": true |
|
||||
}, |
|
||||
{ |
|
||||
"key": "col3", |
|
||||
"isNumber": true |
|
||||
}, |
|
||||
{ |
|
||||
"key": "col4", |
|
||||
"isNumber": true |
|
||||
}, |
|
||||
{ |
|
||||
"key": "col5", |
|
||||
"isNumber": true |
|
||||
} |
|
||||
], |
|
||||
"computedCol":["col2","col3","col4","col5"], |
|
||||
"formatCol":[{ |
|
||||
"key": "col3", |
|
||||
"template": "#col3#%", |
|
||||
"bottomComputedFormat": true |
|
||||
}, { |
|
||||
"key": "col4", |
|
||||
"template": "#col4#%", |
|
||||
"bottomComputedFormat": true |
|
||||
}, { |
|
||||
"key": "col5", |
|
||||
"template": "#col5#%", |
|
||||
"bottomComputedFormat": true |
|
||||
}] |
|
||||
} |
|
||||
@ -1,25 +0,0 @@ |
|||||
[{ |
|
||||
"series": [{ |
|
||||
"color": "#24ABFD", |
|
||||
"data": 0.18, |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "当前脱落率", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar" |
|
||||
}] |
|
||||
}, |
|
||||
{ |
|
||||
"series": [{ |
|
||||
"color": "#F04864", |
|
||||
"data": 0.25, |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "脱落率警示线", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar" |
|
||||
}] |
|
||||
} |
|
||||
] |
|
||||
@ -1,36 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"高血压", |
|
||||
"糖尿病", |
|
||||
"痛风", |
|
||||
"血脂", |
|
||||
"尿酸" |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "今周脱落率", |
|
||||
"data": [{ |
|
||||
"value": 6, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 3.2, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 5.5, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 8, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 6, |
|
||||
"color": "#24ABFD" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#24ABFD", |
|
||||
"unit": "%" |
|
||||
}] |
|
||||
} |
|
||||
@ -1,26 +0,0 @@ |
|||||
[{ |
|
||||
"series": [{ |
|
||||
"color": "#24ABFD", |
|
||||
"data": 0.75, |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "当前脱落率", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar" |
|
||||
}] |
|
||||
}, |
|
||||
{ |
|
||||
"series": [{ |
|
||||
"color": "#F04864", |
|
||||
"data": 0.33, |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "脱落率警示线", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar" |
|
||||
}] |
|
||||
} |
|
||||
] |
|
||||
|
|
||||
@ -1,62 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"series": [{ |
|
||||
"color": "#fff", |
|
||||
"data": 0.224, |
|
||||
"precent":"22.4%", |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "B2C销售额", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar", |
|
||||
"value":"12786", |
|
||||
"backgroundColor":"#00AEF9" |
|
||||
}] |
|
||||
}, |
|
||||
{ |
|
||||
"series": [{ |
|
||||
"color": "#fff", |
|
||||
"data": 0.3717, |
|
||||
"precent":"37.17%", |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "B2C毛利率", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar", |
|
||||
"value":"1096", |
|
||||
"backgroundColor":"#F55676" |
|
||||
}] |
|
||||
}, |
|
||||
{ |
|
||||
"series": [{ |
|
||||
"color": "#fff", |
|
||||
"data": 0.0017, |
|
||||
"precent":"0.17%", |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "O2O销售额", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar", |
|
||||
"value":"147604", |
|
||||
"backgroundColor":"#FAB215" |
|
||||
}] |
|
||||
}, |
|
||||
{ |
|
||||
"series": [{ |
|
||||
"color": "#fff", |
|
||||
"data": 0.6321, |
|
||||
"precent":"63.21%", |
|
||||
"index": 0, |
|
||||
"legendShape": "circle", |
|
||||
"name": "O2O毛利率", |
|
||||
"pointShape": "circle", |
|
||||
"show": true, |
|
||||
"type": "arcbar", |
|
||||
"value":"173", |
|
||||
"backgroundColor":"#2EC693" |
|
||||
}] |
|
||||
} |
|
||||
] |
|
||||
@ -1,29 +0,0 @@ |
|||||
{ |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "任务栏最近使用", |
|
||||
"data": 500, |
|
||||
"color":"#2fc25b" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "最近使用小程序列表", |
|
||||
"data": 623, |
|
||||
"color":"#facc14" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "手机系统", |
|
||||
"data": 123, |
|
||||
"color":"#f04864" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "任务栏我的小程序", |
|
||||
"data": 96, |
|
||||
"color":"#8543e0" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "其他", |
|
||||
"data": 423, |
|
||||
"color":"#51c2d5" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,36 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"周一",
"周二",
"周三",
"周四",
"周五", |
|
||||
"周六", |
|
||||
"周日" |
|
||||
], |
|
||||
"series": [ |
|
||||
{ |
|
||||
"name": "老会员",
"data": [
1850,
1660,
1760,
2360,
1560,
1970,
2570
],
"type": "line", |
|
||||
"style": "curve", |
|
||||
"addPoint": true,
"color": "#DF297D", |
|
||||
"unit":"" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "新会员", |
|
||||
"data": [ |
|
||||
450, |
|
||||
260, |
|
||||
360, |
|
||||
560, |
|
||||
460, |
|
||||
170, |
|
||||
570 |
|
||||
], |
|
||||
"type": "line", |
|
||||
"style": "curve", |
|
||||
"addPoint": true, |
|
||||
"color": "#ff9900", |
|
||||
"unit":"" |
|
||||
} |
|
||||
], |
|
||||
"yAxis":[ |
|
||||
{"calibration":true,"position":"left","min":0,"max":3000,"title":"","titleFontSize":12,"unit":"万","tofix":0} |
|
||||
], |
|
||||
"targetAdd":"9%" |
|
||||
} |
|
||||
@ -1,32 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"kind":4, |
|
||||
"background":["#0081ff","#1cbbb4"], |
|
||||
"content":[ |
|
||||
{"text":"已评价数","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"161","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"增长","value":"","colortext":"#fff","colorvalue":"","size":"20rpx"}, |
|
||||
{"text":"up","value":"325","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":4, |
|
||||
"background":["#0081ff","#1cbbb4"], |
|
||||
"content":[ |
|
||||
{"text":"平均分","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"82","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"增长","value":"","colortext":"#fff","colorvalue":"","size":"20rpx"}, |
|
||||
{"text":"up","value":"0.7","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":4, |
|
||||
"background":["#0081ff","#1cbbb4"], |
|
||||
"content":[ |
|
||||
{"text":"好评率","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"}, |
|
||||
{"text":"","value":"161","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"增长","value":"","colortext":"#fff","colorvalue":"","size":"20rpx"}, |
|
||||
{"text":"down","value":"1.2%","colortext":"#fff","colorvalue":"#fff","size":"20rpx"} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
@ -1,32 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"name":"华东", |
|
||||
"num":50000, |
|
||||
"width":"", |
|
||||
"background":"#FFBE68" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"华南", |
|
||||
"num":30000, |
|
||||
"width":"", |
|
||||
"background":"#0FEBE1" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"华北", |
|
||||
"num":45500, |
|
||||
"width":"", |
|
||||
"background":"#BF8DFC" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"西北", |
|
||||
"num":60120, |
|
||||
"width":"", |
|
||||
"background":"#FF859C" |
|
||||
}, |
|
||||
{ |
|
||||
"name":"西南", |
|
||||
"num":26020, |
|
||||
"width":"", |
|
||||
"background":"#51ADCF" |
|
||||
} |
|
||||
] |
|
||||
@ -1,22 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"expect": "", |
|
||||
"now": "", |
|
||||
"name": "时间进度", |
|
||||
"value": "37.88" |
|
||||
}, |
|
||||
{ |
|
||||
"expect": "224.64", |
|
||||
"now": "53.96", |
|
||||
"dataType": "1", |
|
||||
"name": "微好友拉新", |
|
||||
"value": "24.02" |
|
||||
}, |
|
||||
{ |
|
||||
"expect": "80.17", |
|
||||
"now": "18.82", |
|
||||
"dataType": "1", |
|
||||
"name": "微客群拉新", |
|
||||
"value": "23.48" |
|
||||
} |
|
||||
] |
|
||||
@ -1,50 +0,0 @@ |
|||||
[ |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#3EB2F5","#9374F7"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"5860","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"新增微好友","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#3EB2F5","#9374F7"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"3605","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"新增小程序会员","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#3EB2F5","#9374F7"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"5860","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"删除/拉黑的微好友","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#3EB2F5","#9374F7"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"605","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"单聊总数","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#3EB2F5","#9374F7"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"641","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"发送消息数","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
}, |
|
||||
{ |
|
||||
"kind":1, |
|
||||
"background":["#3EB2F5","#9374F7"], |
|
||||
"content":[ |
|
||||
{"text":"","value":"35分钟","colortext":"","colorvalue":"#fff","size":"44rpx"}, |
|
||||
{"text":"平均首次回复时长","value":"","colortext":"#fff","colorvalue":"","size":"24rpx"} |
|
||||
] |
|
||||
} |
|
||||
] |
|
||||
@ -1,33 +0,0 @@ |
|||||
[{ |
|
||||
"categories": [{ |
|
||||
"value": 0.2, |
|
||||
"color": "#1890ff" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 0.8, |
|
||||
"color": "#1890ff" |
|
||||
} |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "新增小程序会员占比", |
|
||||
"data": 0.21, |
|
||||
"color": "#24ABFD" |
|
||||
}] |
|
||||
}, |
|
||||
{ |
|
||||
"categories": [{ |
|
||||
"value": 0.2, |
|
||||
"color": "#1890ff" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 0.8, |
|
||||
"color": "#1890ff" |
|
||||
} |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "已回复单聊占比", |
|
||||
"data": 0.65, |
|
||||
"color": "#24ABFD" |
|
||||
}] |
|
||||
} |
|
||||
] |
|
||||
@ -1,82 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1月11", |
|
||||
"1月12", |
|
||||
"1月13", |
|
||||
"1月14", |
|
||||
"1月15", |
|
||||
"1月16", |
|
||||
"1月17" |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "新增微好友数", |
|
||||
"data": [{ |
|
||||
"value": 1800, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1300, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1580, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1600, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1600, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1600, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1300, |
|
||||
"color": "#24ABFD" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#24ABFD", |
|
||||
"unit": "" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "新增小程序会员数", |
|
||||
"data": [{ |
|
||||
"value": 1580, |
|
||||
"color": "#6BC588" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 850, |
|
||||
"color": "#6BC588" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1100, |
|
||||
"color": "#6BC588" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1400, |
|
||||
"color": "#6BC588" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1200, |
|
||||
"color": "#6BC588" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 980, |
|
||||
"color": "#6BC588" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 560, |
|
||||
"color": "#6BC588" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#6BC588", |
|
||||
"unit": "" |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,92 +0,0 @@ |
|||||
{ |
|
||||
"categories": [ |
|
||||
"1月11", |
|
||||
"1月12", |
|
||||
"1月13", |
|
||||
"1月14", |
|
||||
"1月15", |
|
||||
"1月16", |
|
||||
"1月17" |
|
||||
], |
|
||||
"series": [{ |
|
||||
"name": "新增微好友数", |
|
||||
"data": [{ |
|
||||
"value": 1400, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1300, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1000, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1500, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1580, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1700, |
|
||||
"color": "#24ABFD" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 1500, |
|
||||
"color": "#24ABFD" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#24ABFD", |
|
||||
"unit": "" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "新增小程序会员数", |
|
||||
"data": [{ |
|
||||
"value": 400, |
|
||||
"color": "#FB8F82" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 700, |
|
||||
"color": "#FB8F82" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 500, |
|
||||
"color": "#FB8F82" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 300, |
|
||||
"color": "#FB8F82" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 400, |
|
||||
"color": "#FB8F82" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 350, |
|
||||
"color": "#FB8F82" |
|
||||
}, |
|
||||
{ |
|
||||
"value": 400, |
|
||||
"color": "#FB8F82" |
|
||||
} |
|
||||
], |
|
||||
"type": "column", |
|
||||
"color": "#FB8F82", |
|
||||
"unit": "" |
|
||||
} |
|
||||
], |
|
||||
"yAxis": [{ |
|
||||
"calibration": true, |
|
||||
"position": "left", |
|
||||
"title": "", |
|
||||
"titleFontSize": 12, |
|
||||
"unit": "", |
|
||||
"tofix": 0, |
|
||||
"min": 0, |
|
||||
"max": 2500 |
|
||||
}] |
|
||||
} |
|
||||
@ -1,57 +0,0 @@ |
|||||
{ |
|
||||
"headers":[ |
|
||||
{ |
|
||||
"label": "活动名称", |
|
||||
"key": "col1" |
|
||||
}, { |
|
||||
"label": "员工总任务", |
|
||||
"key": "col2" |
|
||||
}, { |
|
||||
"label": "员工完成数", |
|
||||
"key": "col3" |
|
||||
}, { |
|
||||
"label": "完成率", |
|
||||
"key": "col4" |
|
||||
} |
|
||||
], |
|
||||
"contents":[ |
|
||||
{ |
|
||||
"col1": "周末秒杀", |
|
||||
"col2": "450", |
|
||||
"col3": "420", |
|
||||
"col4": "99%" |
|
||||
}, { |
|
||||
"col1": "摇号活动", |
|
||||
"col2": "430", |
|
||||
"col3": "1390", |
|
||||
"col4": "90%" |
|
||||
}, { |
|
||||
"col1": "早间问候", |
|
||||
"col2": "450", |
|
||||
"col3": "430", |
|
||||
"col4": "95%" |
|
||||
}, { |
|
||||
"col1": "汇总", |
|
||||
"col2": "1330", |
|
||||
"col3": "1240", |
|
||||
"col4": "93%" |
|
||||
} |
|
||||
], |
|
||||
"sortCol":[ |
|
||||
{ |
|
||||
"key": "col1", |
|
||||
"isNumber": false |
|
||||
}, { |
|
||||
"key": "col2", |
|
||||
"isNumber": true |
|
||||
}, |
|
||||
{ |
|
||||
"key": "col3", |
|
||||
"isNumber": true |
|
||||
}, |
|
||||
{ |
|
||||
"key": "col4", |
|
||||
"isNumber": true |
|
||||
} |
|
||||
] |
|
||||
} |
|
||||
@ -1,901 +0,0 @@ |
|||||
/*! |
|
||||
author:kooboy_li@163.com |
|
||||
MIT licensed |
|
||||
*/ |
|
||||
|
|
||||
let base = 19968, |
|
||||
middle = (40896 - base) / 2; |
|
||||
let EMPTY = ''; |
|
||||
let COMA = ','; |
|
||||
let chars = (() => { |
|
||||
let a = []; |
|
||||
for (let i = 33; i < 127; i++) { |
|
||||
if (i != 34 && i != 92 && i != 45) { |
|
||||
a.push(String.fromCharCode(i)); |
|
||||
} |
|
||||
} |
|
||||
return a.join(EMPTY); |
|
||||
})(); |
|
||||
let SDB = { |
|
||||
"a": { |
|
||||
"yi": "!]#R$!$q(3(p)[*2*g+6+d.C.q0[0w1L2<717l8B8E9?:8;V;[;e;{<)<+<S<]=9>.>4??@~A`BbC:CGC^CiDMDjDkF!H/H;JaL?M.M2MoNCN|OgO|P$P)PBPyQ~R%R.S.T;T<TBTqT|UQUXU}V[WCXgYCYDY_YdYuZ9Zs];]j]p]q^.^@^S^w^x_,_T`H`J`ga)a8aQb9budJddgoh9hqi2itj&jEjRj]jzk>k^l$l<mLmdnDoEoMoQoop3p5pWp`qSr.u'uLv]wIxXy_y~{z}`~r-$=-$X-$Y-%!-%0-%j-&^-&s-'t-(<-)2-*n-+6-+f-/M-/N-0.-2|-3u-4b-4c-4m-5E-5N-5Z-5l-6&-6+-7*-70-73-8F-8R-8g-:*-:5", |
|
||||
"ding": "!2%%&_&x'u=:=h@NC`H?LQNkQ3Xo^Gn?osrUsNvAwKxKy9-!T-$6-$v-%O-&b-(+-9%-9(", |
|
||||
"zheng": "!S#(#D/]031$456+=L?OIzYM[']I^g_.eUl}m~qJsHulwuxU-!?-,d-3D", |
|
||||
"kao": "<dLWr5x7-!J-,7-/Y-/s-2'", |
|
||||
"qiao": "#+$4&.&1'7'Y'z($(),B,{0c7y8<:H<8<YE{F0GdKYMCZP]Y_8_zd.d/d{e5fGfHfUmKmrmvp#t>t?uJv$vMyE|R}a-!}-#&-#8-#L-#b-$Q-%?-+q-,6-,8", |
|
||||
"yu": "#V$l%S&9&I('(7(=)))m*#*$*B+2+F+v,0,b,i.W0.1F232L2a3(384>6P8n;';i;y<1>(>)>]@iB<B?BDBEC'C*CoCpELE^HIHJHTIpJIJ`KXL&L1LxMbMqNXNqPdPsQ<RFT?U(URV7WnX:Z?ZT[6[H]!]~_7_J_``Za#eXg;h#hVhuiyj!j#k9kDkMl#lClUlmmUnFoAp(pzqnrSsSt0vJwszp{_|N}!}$}I}t~(~,~.~w-$D-$]-%^-&j-';-'k-(3-(H-(v-*1-*Z-+#-+d-+{-.1-.2-.<-.K-.[-.e-/d-0=-0P-1:-1m-39-3`-3b-3e-41-5e-5}-6/-6;-6p-7:-7Z-:(-:2-:F", |
|
||||
"qi": "!8%&%>&X&m&s'2'X'd'f(9(c(i(j)@)l+'+M.).+1y1{2=3K4c6&6'6)606<6B6`9`9{:a<g>`?`AgCLCuD%D2F2GyH&H1I;K~LkLuM&MYO0O3O9P8PbPcQqR5S2SCU0U~V%XYY&Z}[G^P`7cUc}dEeNgOj$j)l?m:n4p,sOuRv.y'{/|i}1~P-$B-%Y-)|-)}-*K-+G-+H-,m-.@-.M-/|-0y-2D-2c-4W-4`-4h-7a-7p-9c-9i", |
|
||||
"shang": ")Y6V9cJvR8UqXJXa])asbQc,s,uSvz-#+-.;", |
|
||||
"xia": "#Y#w&,&;'''I)1.u/j7=:[<'B[ByCtL'NmNyQOR([0`(cLh[iRkVt/t_u4uezFzM|W|{~d-&)-*4-.}-0a-5;-8S", |
|
||||
"han": "#,.m/h:l<P>MFrGXJqNrOUPCPqPrQ|]@`+`2h1lBlZnXp*r;rWrkz9{4{B}x-#c-#y-$;-$l-$y-%Q-%n-(i-(x-)i-/!-3*-5B-9V", |
|
||||
"wan": "#=$0&o.]0F4@5X5b6*628u9p<K?e?h@IChFqG!G7H2HHJzL=O5Q'RQ`;a:b<bGeHh&h)rMr^s'slu!-$E-%V", |
|
||||
"mo": "!`#$#&#y$%%P'e(T*N3v5$517`8R=6?XA5E6FZF~JLM;MgP+RTRcU6]'](_j`s`x`y`za+qkuDyR|G-!e-'g-($-(U-*R-+k-,(-.U-.k-.{-8/-80-8K-8L", |
|
||||
"zhang": "#~(#.:2o3N>k@,JhR`b$b`knmtujz'z0}<-#+-'I-*Q-16-7m", |
|
||||
"san": "3T3q3w3x7~uJuwzA-'n-([-,s", |
|
||||
"ji": "#r%''l'y)3)d)o*Z+'+9+G+M+T+Z+^+g+x._.c/R090d1S1W2;43484J4R5C5w6)6C6`7f7s878H8t8w9J9X9Z9{;8;<;B;C=(=2>6?YA$B+CHD0D8DbE:EQF2I*I|JEJnKKL)L:LkLzMdN'N5N:NiQ6QyRrUWVcVnWPWQWtX6XEXYXuY(ZAZ|[/]O]e^F^J^U^~`)b#b0c*ckc}dee!e$e9e>eyf+fXfrg)hFhriMjZlrqmr)sRt%uov3vevw|@};}N}g~!~+~F~{-!&-!u-#N-$%-&a-'u-(,-*x-+]-,W-.?-.V-._-.d-.g-/+-0$-0H-1%-1/-10-1^-1o-2/-2@-3'-4)-4o-5>-5H-5U-6,-6J-7/-7P-9e-9g-9h-9i-9j-:l", |
|
||||
"bu": "0$192,FKJgT=UYZ^e+hhjmm8mFoGpGp}sjw]w{-'7-'E-/m-3#-4.-6=", |
|
||||
"fou": "4I:L:O:Q~1-3:", |
|
||||
"mian": "!G!d#4$U$W$]3Y5X6A6_6o9g9w@qB/CkG!H_Q;-!L-!M-!P-/_-7y-7z-8'-8,-8q-8r", |
|
||||
"gai": "):5=5LD,ErI!J1Z'_/`TaYaac!lnpcw[|O}1", |
|
||||
"chou": "!+#n$N+0/y0}2:4e5/6#9jB*B.GNLfUmZ+^3^5_4e%e4fWkan]nbo.o6oU}u~$~*-.X-/>", |
|
||||
"zhuan": "%H'S'V.K0k1B1H1r2?7Z<r@RA7IDRsVk[J]Tb3b<c8gThai'mp-%+-%u-'p-(]-14", |
|
||||
"qie": "%>+7+f,8.#.|0K0p2O>#DNE1P.ccd]eMlpt8y>-0&", |
|
||||
"ju": "!Z$L$w%R*W,c,l/e1~3&3J8#:t=#=`=k@FBGC0DlD}FeGAIaIkJbMrN[OVP`RDTlU|W>Y`[$^Z`Ua*ccc{dWd]dae#e@eFeff8fSg*g<guh~l'lXmIoOq(rps%vXw_x|y;zb|m}o-#/-#:-&4-&Q-)<-)?-)d-*z-+0-/.-/:-3[-48-4S-4k-5.-9H-9K-9x-:@", |
|
||||
"pi": "#M%D'C(5(6)L*F*K+;.n1C4M8}:y;/;2;A<,<{>a@'@2@KA%C|DQO+O]O^PvR!REScU'UfZw]m`l`na'i[l_m;p<pYpyqCqyr*s1s;trx4{8|*|=|p}F-!!-#,-)@-,H-.p-/#-/3-2#-3>-4F-6'-63-91", |
|
||||
"shi": "!E!Q!e#?$p%$&+'$([(](q*^.&/5/n0[1w204z<gBNBQG)I:ISIUJ3NlN{Q>QQR9VYW2W@W^X2XNYxY{ZI[:[<[v]X^l^{^}_p`DaDbmgqi8ixjdk!kNkpl(lkntoMo^ocoeofp5ppq%q&q*q4qbr=t9x/-&^-&_-&}-'<-'@-(*-(8-)!-)H-+,-/<-0?-0d-0o-0p-2:-2O-3+-38-57-6M-9C-9E", |
|
||||
"qiu": "*6*7+a0r3k4D5]6j>7CaCeF`HEJXMhNgNjONP;QMQ_RfSWUUX?XUXqXrajc$d'jpjskXl]n@o.oup:r?-#5-#6-$8-/'-/k-0W-0X-1,-2Z-4v-7&-9U-:Y-:Z-:]", |
|
||||
"bing": "!n)F*4+/,>.75@DsOcZ7l`puqar||>-!:-!q-#,-#G-''-'C-(D-/O", |
|
||||
"ye": "$>$E(0,a6g=;@?HfSb[]_]lUlfn(oip=rmtDtTtevTx?-!O-!R-$5-%N-'F-'e-(T-*o-4Y-61", |
|
||||
"cong": "$'&Y1>8==g=l=p=vDIE=I2JUK0LsRZZk]$a}a~sKtBuKu_-*)-*V-+Y", |
|
||||
"dong": "&&.r0b5D?7?C@JD|G;I#KwQ([&jV~^-)T-/=-0)-4g-5/-6T-9,", |
|
||||
"si": "'?(b)^)g)p*+.</#40415O6i8l9~;.<|<}>+>0KxL+NLP7PiQnReS&W_`tp1pvp{qTqnr8r`tIuzyB-&6-&R-&^-&c-&s-&{-(:-)L-)q-*8-+.-0.-5j-6`-9N-:o", |
|
||||
"cheng": "#0$,$P&W*O*[*w+A+{,O,v/l5[7#:`?}FQOoS(UKZV_#cHcJk#m$nhrxtkuxv@vWx=xB|2-!A-$h-'w-)o-*>-+B-/u", |
|
||||
"diu": "r2xL-&&", |
|
||||
"liang": "3A3D3{6K@0CRF{Q%Up[,_Oe1h!h2hCiBiHojss-!=-)h-.J-.O", |
|
||||
"you": "(r)O*I7o8W;L;f=5=M>VDKFoFsFwG/KaOOOSPSQLY8ZN_;`qh%hMjWjnk6kPlYmEn3n>ncodp~r3x&x<-),-.y-/1-1p-1z-7N-8P-9D", |
|
||||
"yan": "##%F%L&%&F&T&v(Z,j/u1?2$5t7V;!;h?<@@AsCVCYCZD3FmGpH.JlN_PVQAT$UxV9WUX/XkXmXnY?Z3[U^1^C^E_e_~`B`C`RbDbPc;g/g7kIm#mNmsn5nHnsnyoPoVo`x+z7zkzmzn{A{`{e|}}2}b-%'-%,-%B-%v-'0-(#-)~-*$-*F-*j-*s-+C-.4-.H-.Y-0V-3$-3*-3B-3n-5#-5G-5u-7K-7r-8T-8W-8_-8`-8a-8d-8j-9L-9Q-9w-:1-:N", |
|
||||
"sang": "'EVNts-%2-%{", |
|
||||
"gun": "#<&#'U6F6z9dJ>JpTFTwUu]4h<iF-/2-/g-2<", |
|
||||
"jiu": "+E,*42464]8mB:BCBHBMH7cQnGz){Z-#}-#~-,l-./-01-3!-5w-6I-79-7c-:$", |
|
||||
"ge": "&!/30*4?8r>:?B@}AbB3BwECHxJ1NwOrP'U9UPXM[X[hhLhmq`tetlu.xSyUzTzU{W}4-!S-!s-#F-#`-#j-%f-(A-*%-+t-.3-/K-/U-1u-3T-3z-6g", |
|
||||
"ya": "#B%C&{'I*{,a.g=UDEKqO;T1WEWGY.^[g=i!j4lUp=s=v7x;}f-3C-3c-4U-6O-6V-9o-:;", |
|
||||
"pan": "!&!>!?!H!o'L'x2A76=F>R?$AIH<IrRoT{WBY[d[e{f0rvtpw=zx-#E-$J-4D", |
|
||||
"zhong": "#%(n*8+>+m/V2T4{6b99>j@`BnEkK*O:OBP^R2RKSzTKTNTO[@e^f>ohparHtQv5wbyF-3_-9@", |
|
||||
"jie": "#S%@&{(.*d+=.G0e4J5,599D;k=(@/CfD,G#G`J[LzOFP&P:PTQ=SKSQSqT/TITPTlU4U7UPVQXOXSX}Z%ZWZh]/^K^~_5ckdve=j^qGtNtXz,|1}.-!m-!u-$U-%c-&v-+i-.l-/@-2&-4{-5$", |
|
||||
"feng": "!@%N'40m5v7R:3C$FdHnN.PFSaWI[R^c`?b.c5k'n+n;r[u5uXxs-!$-!4-&%-&J-&L-(w-3(-3,-3F-8)", |
|
||||
"guan": "!'$b$j$k(W)B,Y/f0E6:9&:]:gBVFqIEWSW{X+X.a?bifMh?kmsUu>w7zOzS{,{2}{-'K-(N-0q-1N-1j-2e-2z-6D-7A", |
|
||||
"kuang": "!Y!z$Y%1%r%w(G+}/O/z5'538V8vZ<ZG^y_=aNbpgHgRgXg`j+lHlhn/qUrevy-4>-8>", |
|
||||
"chuan": ",40jA7BYB`BhBxEvale[hIkJp%wQ-5+", |
|
||||
"chan": "&6'W)K)q1N6D7$8*8A8[8_:6;xCODJIHKQQ2RGR_R{S1UeW!W`X3ZMZy]B^+^7_N_bfbi|n2n6o@rTr]uWw3xYz%ze{7{g-#Q-%D-%~-(%-(S-+Z", |
|
||||
"lin": "$B&['t0:393O5{8!<WA?B%GsKEMOaWb{fEf]fgfxhlh}iVk{lgn$utzg|9}C~[-*a-1G-2t-7_-7n", |
|
||||
"zhuo": "#'&Q)a+l,%,V,]102E2`8?:J;&=NE.HtJ:L|SJSsZx[+]6_Fd!nArfvLvOy|-4J-5d-:x", |
|
||||
"zhu": "!a$6$h%^%v'f)!)/*h,@.4.S.T.[.w/P/o0]0n141=1a4n4q5.9+:s;W<EBrD/DVDpE_EmFYHtJQKZMMO`O{QTS>S]SrU;V<YLYoZ;[S_$_B`[aCbhdVdjfRggjMjrk1ljq6q{r}vbwExIx`|x-&r-(~-)=-)]-+2-/H-0E-11-3s-6(-7T-7V-8x", |
|
||||
"ba": "%#.a3#:y;2;N<z>sD5E4GTO$WNYk`LdDdNgjozp?wr~~-!a-&.-.D-.`-/&-/0-1t-1v-1}-9=", |
|
||||
"dan": "!K%$%5)r,S0N1h4V8A=A=B=H=~>q@9ATAVH*JDOkPUTLV?VoXGX~ZK_'a|bBc3f{mHn&nKn~~t-$I-'G-'s-)*-)a-,C-3Z-8H-8b-8i", |
|
||||
"wei": "#o$M%}&0'#'D'M6/6p6r7+8y9f;6>n@gC+D!DOE+FCGBH)I&I(I4INJ]K$KJL7LdMDN0PwQ$QDQHR?T3T6V`WkX$Z)[#[^^*^4_I_^e;fefig@hbj>k<k[m}nvs~t4uGzz{G}&}'}7}Y~n-!#-#Z-#a-#i-#q-#v-#z-$T-&7-'J-'X-'z-+a-+b-+c-.P-/,-/F-/P-0N-0O-2(-2W-2p", |
|
||||
"jing": "#C*?*u,2.8.9.A.E.P.R042v3F3Q5(5q6!9@=_>g?:?k@<E;EtExFiG8HlS/Z`]ge(jTjwrhuYyi|+-!=-!@-!C-!D-!F-$N-$m-%b-*m-03-2M-4:-4a-4d-7e-7o-9I", |
|
||||
"li": "!!!0#A#E%7%_%m%q'|(K(L(Q(^)u)y*%*H,&.$.J.{/c1.1:2Z3$303G3b4)5}7T8Q8g:7;4@*C%DPDbEEF%FDFWF[GUI[I`JFKIM1MKN4OWOnP#PNPlQaR[S*S:STSVS_ULU_VWXhYY]&^,`9`}cPdbf`hzh{i5jDk+l7l;m6n=oBoNogokqAqururzs3tludvuxjyU}V}W}X~&~8-!+-!5-*}-+A-,^-.3-/p-/v-07-1W-1b-1k-26-29-2x-2~-3Q-4X-5I-6F-6l-7f-7k-8A-8Z", |
|
||||
"pie": "$2DmW]u~", |
|
||||
"fu": "%8%[(u(v)U)j*k*o+:.'/$///_0$0=1j3C3d4a4j4u5B5k5p6q7B8L939<:0:o:}<&>N?#@!@D@E@nA3C!CWC}D*DFE'E,E]EpFFF|GKHKHjJXKsNSODOGOXOwPIPMQEQIQWTETsTvU.V(V6ViW+WKWMXpYS[C^H`Va4a{b4bXc(c7cRd=dZegh*hPhRiAiLlIm(m*mmnQowo|pFq<q@t#t5{s{t|?-#]-#x-$`-&(-&.-(n-)F-+/-,P-.5-/)-/8-/X-0^-1|-2[-2}-3%-34-3N-4H-4}-7x-7{-8#-8*-8o-8p", |
|
||||
"nai": "<p<q?L@=CcH4R'VHj[o}sk-9'", |
|
||||
"wu": "$A%*&l)+,D,o0a2tAMB]D#D<EPFSKvMVPLQzS#Z>ZYZZ]U_6_9d9fYj6j~lWm)mep)rQrbrctvwkxc{y|U}6~?~C~`~m-!Z-*'-+R-/j-0j-3i-4/-4@-5,-5f-6j-6s-7)-9G-9W-9X", |
|
||||
"tuo": "%U%V&z0L2J4v?{@$F_H6MUTbT~Y'Yc^QdHdQnVq+r`x1{{|;|<-&d-(.-(z-({-)1-)J-)K-*:-*e-*p-+$-+3-.b-/%-/[-0b-3O-4,-6_-8}-9$-9?", |
|
||||
"zhe": "#'%+%E'P2f2|<f=VHtJ~NoP4PKR9RRRSU%VXW<Yq]*]:^%^0_ucKe`h(h0hei@iUj:j{kurAtMy!-({-/f-5W-75", |
|
||||
"ma": "#X%3'8(e)h;0GsK?N}R+RTRUkku/z2-(u-)N-+!-+9-,r-0n-5P-8.-80", |
|
||||
"me": "-8/-80", |
|
||||
"yao": "!T$R'T(g,3,:,=,F,I,J,e,f/C0^4<7o8Q8s<a>_@eB>CADvFAI0I>J:L]M:M~TgWHWfY/Ya[|[}^6_ngmi6k`kll*l9r!tdwhxRzv}!-!j-%=-&9-&T-'(-'=-*&-0u-1I-2f-3;-3]-5F-5Y-7+-9T-:%", |
|
||||
"zhi": "!7!t$s%=(J(i(k(s(y)2)I)Z*2*>*A*T*^*c+(+)+J+Y,G/k4Q4b5T5W5s6~7^7|9(98;(<0=E=Q=b=}>L>|?+?QA<AJB1B2B5B6CzD$D?E8GeM7N/O3P1P]R@RhTQTTTxTyU{W.WgXCX[XcY9ZB^l`@`A`haAb!b=bbbwdAdYdueTeWf,f_fag6glg}i1i:jDlqm6neoyqrr=r_vsxAy3|)|Z}R}[}j-)!-))-)Q-*?-*L-*Y-+O-0:-31-3S-3m-5+-5^-6a-8m-8y", |
|
||||
"zha": "!l%Q0>4^4g=0D{OPOZX]Yb[(]G]W^ng=o;t*xHzI{N~J-&t-/9-/a-1{-22-9]-9`", |
|
||||
"hu": "(1(~.j0Z1M3!3^545r757G?0AMCtCxD<E$GxI+K%K;NGNHNPNWQ^R)T2X`Xd]<]x^^``gVi3mqo)snt+tK}Z}q~B-$4-$k-'O-,j-.s-0<-0c-1`-2v-32-4?-4x-5)-52-5?-65-6n-7!-7?", |
|
||||
"fa": "#k%O/'/N:q;*;3EeKkLvo1oKstzV{V-,F-,J", |
|
||||
"le": "%f.U1_>5C_{u-$*-'1-(A-1!-1d-2i", |
|
||||
"yue": "$S%!(a){0^0|242S2_373H4<8sAlM{O,O.ZaZc_>cid2dCdFfZgApDqBw2whw}zczd{[-,V-6:-6B-8Y-:^-:m", |
|
||||
"lao": "&)'n,71s3<5>9M<b<c=&=3F'HYP3Rvg.g4hin`oDr(v/x8xa-%8-,9-/W", |
|
||||
"yin": "&#&j'a)Q*a,^/B2{5G6{7V?3DJEGEcF=FHIRK4K8MuO2RLRzU=Y$Y*Y2Zu[M^9cXczh'monipNp]qer/xFx^z{{||/|l|w|~}0}@}Q~W~f~p-!b-!r-$&-$2-&m-&q-(6-)^-+:-/I-5h-9p-:!-:?-:E", |
|
||||
"ping": "%b&'.H0W1Q:T=f>~CXE%F$H(JWMaOQP%Yg^jgrh>mAqa-$^-(w-/(-1w", |
|
||||
"pang": "!o'A1+=/>R?$?=A/B|QmWsd@jf~6~|-0k-2g-:K-:M", |
|
||||
"guai": "0,;%", |
|
||||
"sheng": "!D!^...t7*7q859e=[=x?*E(KM]^aMb1q2t2|#|Y|u-4_-9B", |
|
||||
"hao": "*:.,25<x=ZEMJ$L3L5LWLtNYO<SG[0]z`Y`ym,mhu#y]-%>-%|-0i", |
|
||||
"mie": "!`(D1G1dJxL>SNS~W]vt-1e-3M", |
|
||||
"nie": "1&294(4,=G=|B)B0E!GDMlSX^=e)e?eAezforAs$sJu*vfw9wByVyY{&|c}(-%L-%x-:#", |
|
||||
"xi": "!>#6$3$d%/&(&g'J's(!)P)n*l+7,,,n313z434i5j6H7?7W81878g979U;V;n<2<5<6>c>d@>A6BABBB}FUG]HeI9IbIwJ+JVKzL2NdPjQoQqRYRqSiT!U)UzW9WFWiWlX7XfXjXlZH[K[m]5]F_@`.`/`W`_a(cCcGcfcwesf)fulGlplwm&m4m_n:oIokp2p7pbqLqMqvsYu+ufv&w6wSxJy,z[{5{b}9}?}P}U~#~2~q-!%-&?-'2-'`-'r-(1-(C-*C-*O-*{-.)-/x-0_-1+-1J-2X-2q-46-6*-8I-9O", |
|
||||
"xiang": "!;)*+50U5Q6Y8b9u:U;E;J<4APC{HGHvL<N~RbS4T.VgVsZ(_0`PdqmGmYmZmfqiq|v(w4z&zXzt|H-$3-$9-%R-&g-'+-'{-(&-(?-(b-*w-+_-/C-/~-1<-1L-1g-23-7g", |
|
||||
"shu": "*V*x.0.D2B4#4K5%5^6s9/;,@[BPF(GuIBIeK7LUL`MLNePDShT*UHW'W0`=bOc+e%e0gIhOiOjQmSqIs_u[|I}!~Y-/A-1Z-1a-4G-4p-8@-98-99-:e", |
|
||||
"dou": "$#,[,}1E@#FEKCOI_E`5jym%mMnMpCrIwpzH{.{~|]-'9-(F-.%-.&-.*-.,-..", |
|
||||
"nang": "Sd-(&-()-(^-9b", |
|
||||
"jia": "+L/23l=!?)?u@jF+FuI.P5P>TaU4UI`]a$a]bxdRjGl{m/q#qOrXu,x$x>y`-$a-$e-%c-%d-)B-+5-3J-3q-4(-7i", |
|
||||
"mao": "!M#i$i*:/66e:u<eDDE/E2E3HVJOQ9QNRXT}WY`|a&aSbrgPmkn!nJq>qcsVx,y%-,B-,O-4|", |
|
||||
"mai": "?W?XF>K^LgS{aKaxj(l+~g~h-!'-5{-7t-7u", |
|
||||
"luan": ";D?dAzA{L=NDW~o{r7w@-4'-6G-6h-:y", |
|
||||
"ru": "/M7F8G:1>AEgIYJ6KlLhQJSHU:VGW,inlEm`oSr+x_-%E-&!-1]-3)-3K-3x", |
|
||||
"xue": "$?,(A=C@E@IGLKStTnXd[p_[coe,hdibig~/-!_-#M-18-2k-6%-6^", |
|
||||
"sha": "%4&G052u4O8F8~<<<CFaG`H+K<U]t}xPzazi~S-,[-.h-/q-/r-2=", |
|
||||
"na": "*0.u.x4E9#>WIYIuTJU!Zt`m`pgNlNlypHu7wcyZ~0-!d-.x", |
|
||||
"qian": "'K.(/~0A0t1'2*2D2R2p6+7[8J8q:G;h>b@vA~CnD(EIElF:I%IjK>KLNNO&O8P}VR[*[u]u_q`!`&gSh;i~kjk~p9pEpOq;q?r6sPtYukvqwPwgwtwvx+{x-#U-$z-*+-*/-*=-+U-,y-,z-0x-37-4M-6z-8G-8M", |
|
||||
"suo": "#*1Z1^4Z797U:?;cFaFbJ7P{VJcuk)tatju3u9xi-/b", |
|
||||
"gan": "!3%)*1*t.Y/x1*1}3%4s91>GCmE#T>Y^bJbTcAcTcti}nE-+e-.Q-1T-2w-3*-:i", |
|
||||
"gui": "!q#o$.$C%x%})0)s,E/?1K1T?NERJ;N%P/R*RpU<V{WVX0XPZ!_*aHbod<dng>gEi#lilxuyvlzY{P|M~#-#K-*;-.7-.:-.=-/S-1F-1U-2%-2r-34-:Y-:]", |
|
||||
"jue": "$Z$l$o%6,%525S8#9NA^D=KiKtNnO6RwRxU!WWWbX%X5X>XBXZXiY4Zj]N^f_}a0c[chd<fCfDfwpKv)v:wCyo-)0-,$-2r-3<-3=-5g", |
|
||||
"liao": "$:,A,m,x1g7n8%:@:C=OA#ADJcM(RnRv`1b8f$fJizl&mnopv,wNypz.-&@-&G-,)-5t-77", |
|
||||
"er": "3><m<p=8=T?HEyLoS|U8Z6aBaGbjd3gshtjJl2q_x9|L}M-'/-(=-)Y-,Q-,R-/D-2)-3j-6b", |
|
||||
"chu": "$e%s(/)M.%.)114y9=<~=%A_DCG=IdIoMMNOPQS'XRXe[/`E`Oa,cmf=fTfcmaq3rnxlzW|`}p}|-59-8O-9|-:)-:9", |
|
||||
"kui": "#f#o$C'D,Z,p0v1m22=m=o=s={?NAFI6IJKnLyN1N;NbQY[edpf*fvk;mXt;tJ{0}7-$A-$d-%6-'a-'o-(P-(`-*6-+P-.B", |
|
||||
"yun": "!F'N*;/`/|0y4T6z7!7<7C8z9|<y=?@_D@FLG7IAIVIyK_K|L#L0MIM`QcV@a3b)b@bYc=j1kQm!m7mVmgnRo0o8pVrO|'|d}5~7~i-#?-#g-#n-#{-$(-$/-'N-(p-)'-:'-:0", |
|
||||
"sui": "!q#G#J%G&f)$)t+R+h+p5m7>7h7x8D9V:4AQCyFOFPNxV}Zm]c_QazkFkHl.uqv!vF}*}/}G}H}w-#$-#r-+|-,/", |
|
||||
"gen": "CQEHdc", |
|
||||
"xie": "';(f*&3c4k5+595I5h6g6v7&8>8T92:B:M<3>l?T?V?ZA&LRLTM0Q7QKS+S@SBStTRV*V^W4XKXOXS[B[y^<_Z_mflfnl,lU-!i-!v-#1-#D-#h-$#-%c-/S-2%-9Z-9q-9t-9~-:b", |
|
||||
"zhai": "%X)3,92q<?a@b]q=-9c-9d-9i", |
|
||||
"tou": "4G6sMyjqrItA-$b-&r-+h-8;", |
|
||||
"wang": "!664:h:i:j:k:mFvGmO>P*Q,Znh5iGj+jM-.N", |
|
||||
"kang": "%<+U2v3tg1lJpgugwmz={L-17", |
|
||||
"da": "!W.u/(/S84;H=<EsF*LHS0VCYldzi{j0j7j;k?kZt]tqvZ-!g-!|-#R-:S-:U", |
|
||||
"jiao": "$y$}'~+k,A,K.`/I1o5;8?8]9O:J?E?j@hA9AKB(CaEZE[KTM5NZP!RkR|WWWbX%X5X>Xs]Q]fa`d0dhe3gvh_hfi;i?lvnkoHo]p#q]v*xW-'%-(B-*h-+;-/Q-1>-20-3|-5k-5s-78-:a", |
|
||||
"hai": "5L?Aj9l/lnnro<-'!-'~-)Z-)b-+>-+p", |
|
||||
"heng": "?J?mMZT9vc-3o-4$-6e", |
|
||||
"peng": "%c&'&S'+'Z+,.V1+1@5@8P>~AACgE%FdJRMkRiRjU3eSgbh:s9v{zL-$+-$0-):-*A-,X-,b-,q-4K-6y", |
|
||||
"mu": "!1#N%]+V7`7n:@?.C5DeF~G%O=e/qKqPx!~3~G-#9", |
|
||||
"ting": "/s5l<t=j=z>%>&?qC)FnI7PWQ8ZJ[El=rUxKz`~K-!~-$g-%e-9F", |
|
||||
"qin": "$j$k*'*Q.d5c=>>MD1DAGZG^GkMRO8Q}RJS7TVWJWrZQc]pXpkriwix{}c-!]-$~-)f-+E-/c-33-4L", |
|
||||
"qing": "&/&Z'i046+60:ZDaHzQ#Wr[%]%_Agph+i7m<s4vi-!;-!<-!B-$7-%P-/}-2B-8X", |
|
||||
"bo": "%h&^'x(B(U*L+l081c2%2,3~4m:S>;>t?fA!BuC,DrGWH=I'J{L4MmO^U+U,U6VrW5ZL[d]Rd8d_eKf@m3pxq5qFrVtow0wxw|x(yT-'4-'^-(E-(V-(d-(g-).-)[-*^-+)-+~-,$-/0-1=-1}-42-6k", |
|
||||
"lian": "'K+D2+2P2V6w7b8k94;s<T=Y=n=q=t=u@+AZAcG(G,HLJTKDLELOMsMtQtS=U`UaVUW#We]0f2j?k(n0oPsZsyt`u@vKxfy}-,n-0U-0}-27", |
|
||||
"duo": "&U5|:!BtU0Uncrdfdid~eYg!g#g5plvUx5|E|J}*}3}S-&~-(;-(z-)1-,i-4]", |
|
||||
"men": "#{$*+XGRNEsuwVz1z6{>{M-#!", |
|
||||
"ren": "(o*,*e+#4A4U5)5y8x9$>?@AD)E}FGGDTUU2Y!ZC^I^Vg&gFi&p/p;pRqp-!W-![-#[-#w-&i-'#-(2-.^-3{", |
|
||||
"shen": "!U![$8$r$u%j)#)9,12e2g3T3U3q3w4l96:p:~>i>m?t@BFkHwH}JGK!LCPGPHUNX)Y1YHZ*[2^)_%_L_S_VfylPqRrj-$W-)W-.m-/z-0@-0|-1)-2N-4A-8b", |
|
||||
"ze": "#R#}$n(+*p/,0J1I=0BsKAS?Vz[(].a@b7b]c:jO-&t-6.-9s-:,", |
|
||||
"jin": "!#$j$k%M)8)G.U.m/J4W4`6L70:/B6F&F;GcGkJYM!TWW%WzX<X@]9_sb&bIc#j2j<k8olomp>sTwGy2-!^-'m-(Y-)$-7D-88-::", |
|
||||
"pu": "$5*k+j0$8LBTBUFXGGGaH~IsIt[D]]_|bEfInprtupv=xbyqyu|[-/m", |
|
||||
"reng": "(_DGiu|z", |
|
||||
"zong": "&Y'h+?3P3]4$5z6E6Q6n6x7(7M7X7e7t9%9n<J@MI=J=QU`eePeRf1t!v_-)z-*5-+K-,`-,f-.8-09-0G", |
|
||||
"lun": "&n'k*|6:9&='@4D:GLPk[1^`eBhAi)s.|k-04", |
|
||||
"cang": "15B$BpC<DUI~M#R3b/w8-50-6P", |
|
||||
"zi": "!i!j%()R*/*X*b+E/)2l354F4d6I6W8O9s<u>z?!?MB'CwE5E7ENE`F4GHHuJbL;NsXHYOYP[I_caFa[bzb~cZcpd(h3hQiJmbp&pmsGtRtuy=yO-$s-$t-,I-/{-0r-2P-4e-9)-9f-9i-9u-:D", |
|
||||
"zai": "#^7HGHb+g|i9n^", |
|
||||
"ta": "(d)i2~VAZr]wdBe7etfFfOfpkdkiq+sBt]tex1{'{5{;{={R{o-!s-#*-#B-/?-0t-2d", |
|
||||
"xian": "!:!O#5$<&#(F(h)X*3+D/D0V2k3B4%4|5A5c5t6,6]7J7r8Z8c8q90:%;];d;h?&@oAnA~B;BvDSDwFzG,LOM'M*MpOKO_O}PJT+T0V_W:WRX,ZXZo[O]d`>awbKb^cYdgd}f;fhgBhHnfo'oPqvr#r$rFrqs<sps{uww'xJxMy4zBzC{H|K|a|e|s|v}J~v-#T-$!-$$-%.-%H-'D-(M-(o-/T-1l-21-55-5x-5y-6$-6q-7G-7h-8$-9P", |
|
||||
"cha": "'0*049B=C9CjD}EYEdTAYyY}_1enr't7t[vryDz!-!U-'Z-(O", |
|
||||
"hong": "&*&8.*.>0o334=4P4f5i8o8{;z<!<==CDyF?HoHpL*LXNtXtXy^L`'`*`,gUhNhwi+p[q[rGrYt:z?zXzrzt{I~U~e-!n-.(-.a-3v-6i-8<-8?", |
|
||||
"tong": "!r$@%o&>*]+m.?/Q/i345D5N5`9PA@EjJPO1T,Z,cFj|ndq:qYqjxC-')-/L-2*", |
|
||||
"dai": "0,1n4x7%9AC?OMQ]TdW=Yd^xa7aLbqdff'gCgLg[i%jIk4p0~z-!0-)E-/>-3I-8N-8e", |
|
||||
"ling": "%d)D*M++.5/+4p6@9];K;U<.=KBqD[GiJJJmL%M|OiT(TcUjYVdLgZh/n8oWpts0x)zN|q~;~O~]~a~c-!2-$L-%`-)C-/$-05-2C-3L-6Y-7E-7q-9z-9{-:A-:T", |
|
||||
"chao": "!k,h,r2u6?9b;5<wXDY=]?cdh`mlpSwa-7w-8v-9#", |
|
||||
"chang": ">J@mA+DTGMH!UlUqZfs&sWy+z'z(z0zh{1{a-#d-.0-02-1X-2H-2T-92-:d", |
|
||||
"sa": "8g?^HDK{LYY@fnpQuwwS}A-!c-!s-&,-&P-)&", |
|
||||
"fan": "%0(M/1/40i2A2d6R7i8$;o<[AIBcBfE0KNLPM>N!SOVqXva=bcf<gEg_hThkj5p'v#v?wT-&=-&Z-&n-&o-(5-1E-5r", |
|
||||
"miao": "!J#m*=.10s6e6u7n9z:@D`M$l3-4s-6u", |
|
||||
"yang": "!R#!(C)Y*R4t;E;J;P?5OxQ/YX[T_0gahGqDswt,wX{}|.|y~:~}-!p-&8-&M-&k-',-)G-0]-3a-3t-62-6X", |
|
||||
"ang": ">Xo:-+g", |
|
||||
"wo": "#l&A,R,_6}>I@OAlB!G*HQLgP[Qbe:-(p-:4-:I-:L", |
|
||||
"jian": "!%#9#`$<$D$I&N&b','r'}(&(<(X+D.p/9/g0#0/0Q181k262I3_5U6Z788(899v:9<F>$>S@fB4BoCICSCTETE~G<GrHiI{K5K]L!LVLwN=RGSEU5UcVjVlWAWRW}X#X,YT[.[F[c],][]}^!_Y_v`K`Racaybkc|d?dKdye8ecephvp/p;qXrMrZs(tFtHu!ubv4vDvNvovpw.w1w5xwy:zCzD{J}d-!V-#;-#>-#O-#X-'A-'S-(7-(k-,h-0Y-0`-0h-1(-28-2h-37-40-4R-5@-71-7F-7I-7J-7W", |
|
||||
"fen": "#|%A*9./2x3=3r4S9';M;q;~ARD4IxKmO?O@TGY,`^`ff|hjnOpUvY}K~5-'W-'}-(c-(r-.w-1M-2Q-35-85-8n-9.-9:", |
|
||||
"bin": "%A8I::A)AiNc`X`cahailKvjya~l-$p-%G-%k-,'-,1-,E-,_-,p-.!", |
|
||||
"di": "!u#/%W')'.'{)<)_*U.v/*1=2c4+6c:);X<?=b>;@WDXD_FMG9G_ICJMJrJwJ|M6Q+QVR<TtX*X8XIYW[:[A^q_f`dcee_f/gYjKjtjukLkekwldp0qNuIyj|5}#-!X-#=-$H-(y-+n-,>-0>-69", |
|
||||
"fang": "!I!n(l4Y9*>TBjD;O!Y;^ed@lLp@siwn|,-,?-.v-1s-3E-51", |
|
||||
"pei": ">Q?(JBSwUrUsauc2hyiPnBn{s5y7|%|f~M-)#", |
|
||||
"diao": "$#&a,C,k.B1]5FJML|NhOaXxZ8Zv_M`ro~p_r!r:s*s[vawUxExR}v~D-.c-//-0%-2L-2{-3&-4O-9>", |
|
||||
"dun": "!<!A%J'3(%Pxd;eZf?fKfVjikGkvpLw`-$G-%X-*c", |
|
||||
"wen": "+C+`+z4B4C5X7!7<839)9|=d>^?gD'G!O'O(R/RO`ahShWiNu6zlzqzw{<{D{Q{c~4-#?-#{-%(-'f-)(-)4-.r-0g-0z-2V-36-3G-9<", |
|
||||
"xin": "!=(F?zBID7FkLZSyVtY3Y<gBiWlOo[pIrNv1w,xtyn{w-%/-(q-(t-)$", |
|
||||
"ai": "$F$|%l%~&e'M(:5=CbKGL6MN[K]k]{b2g(r9tWv^yK}1}8~s-!.-!3-'U-(m-1[-3l", |
|
||||
"xiu": "**3h5g7u8,9T;Y?i?yB*B7DuQ{ToV0V1`ur%rBtSu=u^uvxp-&K-'l-(X-,@-,U-/Z-13-3}-6d-9^", |
|
||||
"xu": "!$!*!4!Z#j$l%;)W+@+H3[5K5e5x6T6X6s7)8X9[9_=X=e?4D/IeJ)JXJfKrLxM/NQNTNUO[P$Q:UDX|YBYJYs[8[Z]C^^_3_ia^lUmwnLo*qovn~E-$<-$>-%T-%U-*[-,w-.G-.W-1_", |
|
||||
"tang": "$f'@)f0{3V3j3o;l=)@zA4J4LJQSR$RAcMc~eef&g+m]o=tiu)uTv'wDx[yWyd{1}:-#I-']-'h-5:-96", |
|
||||
"huo": "!V$S$^(*)>)S*Y*_*`+|,W10=$=4AuCJG.IhMTSI[g`0a<bacnlTpesrvhwoy6yyz5}y~R-!,-#S-*0", |
|
||||
"hui": "#J#[$G)N*i+s1;5R8.869I9}<9<:<L<^CxEbF1K2KeL8L9MFN,NuO7OtOuPZR*RyT_V:Z$Z2Z_[L]S]n^#^X_!_<`FaXbyh4iEjUk*qouqvI{6{j}3}S-!Q-$c-%C-%l-'R-/V-1#-81", |
|
||||
"kuai": "/w3}?]AWIJIql|n*-)0-1P-2.", |
|
||||
"cui": "'g,w2z3L4[697>:4<%<@?R?U@.AEANAhG{THVmd#uQ}Y-$|", |
|
||||
"che": "$;%I&?&@=JFjP@g<h~jA-$M", |
|
||||
"chen": "#t&M&t'`*[+A+{5{>FA}EKFRFcK:LmRBTDW6Y7Zz[Q[o^;_V`$arb;c`cad>dKeagKimjHmDo@pAt(|C|o~H-5T-7]-9l-9m-:=", |
|
||||
"xun": "!x$Q*p,^4;8MAjEnF:KLKSL[LaMcRzS%XwY#Y)Yt^R^T_+j%jajlkclsmzoTv`-%A-(}-)U-+%-1?-1H-24-5A", |
|
||||
"chi": "!]!y$).X.y/A0+02133,5W<#<$<D<H<|=@>>?2?D@SE9E|GeO%OHORR;U/U0UkVMYFZ9Zq[t`8aRcBc^d+dfeGj@jBkKkfkrkyl7q7q^qusx~9-&l-(4-(|-+&-.R-3Y-4!-4r-4w-4y-5]-6Z-8(-8C-9k-9v-:<", |
|
||||
"xuan": "!m!x#d$['5)k0R5?7J7d7w9K<G<_HMHNJ8K#L/MQMfPEQ?S<T)U$[;[W]_^&_abRgDi$jkl!q,ratLu?x0yl-#'-&2-)U-)k-0f", |
|
||||
"nu": "%a/.?;-)>-+4", |
|
||||
"bai": "+&.;3;3M51L^W3b:b_-#k", |
|
||||
"gu": "!/$J'B)A*~+P.z010?0u3g75:r:v;Q>K@(AfE)G>GhJ,LSOdOjSeXFYR^h`%a]bxgdgehYi,iXk,nYprpws]wwy.}h-%@-%W-'Y-(Q-+`-/;-0'-2I-3^-5?-6S-7%-9*-9+", |
|
||||
"ni": "!h#P*G2m73=i>$>}@pABA{DqLpOLP.Q!XXZt`~d`h.jhmCpnx3}L~X-(e-0,-2J-7`-:+", |
|
||||
"ban": "*E2s5!9;>PBgBkQ*QvVKd[iciipPqEwfzx|$-!h-$F-%Z-.n-35", |
|
||||
"zhou": "!+#U$x&y062.2@2C3+384:777o8p9:<B>B>o?#B^F@GoI$LfY][a]y^r_4_Manc0gkg{h,i0i<k7m>nCqg~Q-);-)`-)t-*r-+[-0(-3~-6f", |
|
||||
"qu": "$L'o(}.2.F/@2U3?4o5#<1<U<~>u?/AxDlG:HhKbM}O[OfOpQdRDRlSkSpT'T:U&WxX!X&X=YeYjZj^tcjcld%d*fqf}g2gWw<zfzu{i|4-)3-)5-*W-+'-,S-.~-1'-1;-3W-4l-6E-6[-7}-7~-8&-8+-8U-8u-9A-:/-:H", |
|
||||
"ci": "'=(A)%353a5579ESEUG6L;OsQpS3Yp^saqc.c_dSiYiZiaij}m-&y-'*-+l-,%-/+-3V-5C-5D-7'-:6", |
|
||||
"beng": "(l5@657k9iGnO*dtf3jYk2uiygz>-#)", |
|
||||
"ga": "g=onsfwH-.A", |
|
||||
"dian": "&p'v,j1iIiKRPXdXeVewq!x%|8~@-!E-%3-%4-%z-*g-8Q-:8", |
|
||||
"tian": "!:#;'1'H,j4w6D>v@:BRBXGvWmX9atnTr#rFsXx%xM{%{n-!>-!G-'$-3f-5J-5S-8:", |
|
||||
"bi": "#L#M'!(w)L*@*C+;.n.o/E/Y0(0)1/1<2r2y4M4m6>7Q8@8};7<,=a>a>r@lA[BlC|E*F.FJG~H:J<JdKHLLPPR!TiUfVhW$W)X^Yh^v`<a!aEaUbMblc/d|e~fPfQi[kBl)l^mjmym{q1truFvQx2z8z9z:zP{B{C|V-#,-#G-#p-&u-'j-(f-)I-*X-+x-,N-.T-/*-0Z-2S-45-4}-5b-5n-8~-9S", |
|
||||
"zhao": "#'$K.e00:V;#;?>*>1>2GdYf^ucScxorp<q.t6wL-)8-/G-3&", |
|
||||
"shao": "#+*y/r4r6%9>C&CqD^FyHSK}Tjh$la-#&-$)-,Z-/`", |
|
||||
"zuo": "(|*S+!+n/,/p4*7{?'D{F^H`HaJ?Th[(nWp||7-&t", |
|
||||
"ti": "!g#e')'?)Z)|*v/8285f6|9Y9y:{DXF!KgLIUzV&V'[qd)d2eJemexf~g8jxk=kLo&rDt)xy-%$-%r-*2-+m-,0-,L-,]-,a-/^-0B-2U-4;-4w-4y-5L-5M-5i-6r", |
|
||||
"zhan": "$H&b.33*6=9oGQLMN2N`NaOeWyYQZ/]h]l^B`#cghUhgiSl0n|zK~V-%~-&*-&N-&e-'|-*b-*l-.Z-1S-2y-37-60-7=-8i-:h", |
|
||||
"he": "&c()*(0z2i3@4?8r<N<ODdFIGFGzJ1R(SMTmV2WOYGYIYw[z^i`x`yaTbtcIloovq0vgzRzU{){X{m}Z-!7-!8-!9-#7-$P-%f-'&-(@-.|-1u-5$-52-58-6?-7#-72-7v-9n-:>-:`", |
|
||||
"she": "'y(`BJBKBLJuNpOgP(S5Y>^dagakc'cDg~{!{^-#h-)u-7l", |
|
||||
"die": "!g!t&w5M9G<k<l>pB5C6D~PmQ`R@V,V]YU[7_WcbdOdXdreigojNz+-#1-0S-2R-3d", |
|
||||
"gou": "/01%2)3g6t:&<h<i<jD>DhO[U#VBWwX;YNY~_(`ob5bgk_pMqHwl}k-#A-#m", |
|
||||
"kou": "!P!Z#r$$,P.2/W1OD+K=KFp$-5K", |
|
||||
"ning": "$P=R>!DpLevm-,~-64", |
|
||||
"yong": "%p&>A]DcIPP=Yre2e]l@mJmio9rHuVyh}n}~-%*-%s-'x-/y-0w-15-2A-2o-5`", |
|
||||
"wa": "%K,),?,E,`=N@r@xOyTuW1lc-#W-#^-#t-8w", |
|
||||
"ka": "?8U@qV", |
|
||||
"bao": ",<.~6h?,DgGYHcK`L4MJN^OJTeUdV4V5Vf`ib*d8q/w%x.zs~>-!6-&x-&|-(9-)/-+j-,M-/7-1~-3/-3A-6Q-9r-:B", |
|
||||
"huai": "=7N3N8VDVSeE-:f", |
|
||||
"ming": "!C!w#zEDJ'R,WuZ0m^n_q}xT-3.-6L", |
|
||||
"hen": "Y|-!y", |
|
||||
"quan": "$b%u/K0B5<6$7:9mEqI3NAP|SlXLZ#_)dkeIgzi=o5qxv%xO{#-#_-%M-&$-)V-*3-,e-0L-2^-9}", |
|
||||
"tiao": "!~(t),,J,g/!3/4.5F=S?PCdD^H0J@JMJNPnWdZ8Zv_McqdwjCr!rdtyxR-#%-,G-/o-1&-2;-9y-:C", |
|
||||
"xing": "!D#Z&$0Y0g6J@YApBFEuF7FhHrP9T#XVX_[_lMluo+pBqZqwrhwZx6|D|S-'V-(/-)p-+D-/5-0D", |
|
||||
"kan": "!N$=$g%?'^.QG&T%h8ho{4{q-%)-.+-:R-:X", |
|
||||
"lai": "#8#F/X0%2/2MG'H%MSW7Zqaob,c&c4k.mBsgxd-$q-$w-)y-0*-4B-4f-8%", |
|
||||
"kua": "50?>B~Z=d9dlq~-+s", |
|
||||
"gong": "'91*44474=8o;z>[OBXQXba6bZfzg$gtrG-!z-,T-:L-:Q-:W-:u", |
|
||||
"mi": "!s#p$A(w)')w*C1d2b2}3p407c;>;F?bClH{J#K'K/L}N#N6PaU*WZW[WcX1Z.[j[l_g_rjXo4oXoYo_r,z/-!K-66-7X-7Y-7j-82-9&", |
|
||||
"an": "!(!.;)?I@XEzGlHWHgJSUxZS[N_d`k`{r1s:x]zy}+~=-!w-!x-$1-(l-/E-4I-4u-6v-8c", |
|
||||
"lu": "!)#Q$_%|&L&d'])E)J*}+[+o071X1v2!2#2G2H3I6S8^9q:f?9A,AtBmBzCFCMCND.G@JcJeJtKcM[N<NINVR>SYXh[~aVb|d$dseCf#gxh^h|i/i>iTk5nwpis2sascu8uMumvGw&w+yr|A|t~x-%J-%_-)+-)r-*N-,3-.q-.t-00-1i-1r-1y-3w-4E-4P-6!-6>-6U-7;-7C-7M-7b-8l", |
|
||||
"mou": "!|7n:@Oq[[_Ue6t=-#9-3y-8!", |
|
||||
"cun": ".N2nA>lS", |
|
||||
"lv": "$()(*r+~0`5Z5~6S7_7j9q:*@wA(A8A;HkM,NKV=VZm'rJw#xDz_{T-*u-+*-5a", |
|
||||
"zhen": "!X!b!c!}%Y'%)5)T)b+I.A0X264N4w5Y7D7L9,:2=I?%B9H5I5IWJ&LnTpUSWaYKZb^pa2afbWc%g^hZi4iqkOnNoxq$r~s`tOu$u%wJyS|0|_~L-)D-,o-1f-3@-6R-8d", |
|
||||
"ce": "/%/U/^/t0G1W36F/H3HPJA", |
|
||||
"chai": ")&>HCjEJNzS9T[Xz`jp4wY", |
|
||||
"nong": ")v*j+q8C?cAXL,V~]iioipoL-,{-9a", |
|
||||
"hou": "#c$t0q3Z<M<UEVHq`MjgltmWq|t@-'T-+r-/B-0C-1O-2!-2,-9Y", |
|
||||
"jiong": ",M4~5uB#B&MeMjVIjFjjqi-$}-%h-)6-)X", |
|
||||
"tui": "+y=N@tJ^MAM^P?PYQkVL^.eof7jb}D-$n-$o-$r-%m-)l-+u-.L", |
|
||||
"nan": "@^G$HOQe[PcEk]}_~'", |
|
||||
"xiao": "#+&4&:+i,N.l/q0!0O0c1(1b1u5a9R<;>@AGFyHCKyL2LtNBNMP<RPR^S!S[Y5YzZUZl[ke*jom9r@xh~I-&3-*`-+8-+q-,!-,+-.I-3X-3p-5Q-6W", |
|
||||
"bian": "%`&}+8,;/=0S2A2W3W6k6y:$:+B/C4DLHUL{QBV+WTW}[5^/aJbfi^idieifihikiliviwkSl4l5oatPzO-##-#<-0I-0J-2`-3R-5&", |
|
||||
"pian": "0l6y:$<I?K@5WX[9_haIaZdtejsq-)O-)v-*(-**-+?-+N-+w-.z-5&", |
|
||||
"cu": "1P3)7S?xK)XAZDcjcvd%d*eOehf%fAfBo$-%<-7O-7R-7T-7s-8t", |
|
||||
"e": "#3%:%B%Z%y'<(9@bDRF}HXKfO#PBQ)WpY+ZF[?]L^2^___`NgMgii(j8kRkUl%mRpJpjrrt&w*xoyCzn{f|!|3|:-$?-$R-$S-%%-%&-%t-%w-'6-'L-(G-)n-.f-0[-0v-1h-2Y-4&-4<-4=-4z-6o-7$-9[-:3", |
|
||||
"guang": "%w?@B#B&EWgwj}r0-89", |
|
||||
"ku": "%,&5*D,@,T5:9E>{DoU1UbVTdPllnm-+o-/R-:p", |
|
||||
"jun": "&].=/`0<0CFlGCI1O/PeTXWhaeg?m1p^qfr&t'wj|Q}^}l-$j-'8-(J-)m-+F-/]-2?-43-44-47-7U-7^-7d-:Y-:]", |
|
||||
"zu": "(x*J+10H4}95GqHbIkYm^kd6eLtdu2u;yk|6-!f", |
|
||||
"hun": "!F#O#W#]F6I8JyXT[=_2hczo{d-'>-(L-.C-9J", |
|
||||
"su": "';+1+3+],X1U3.324X7K7U:?>,>/@{DWFwJsM+M]MiXWYE[r^o_lcyf(k$khksnZrR-':-*_-+L-/i-1@-5p-6~", |
|
||||
"pai": "0'1z1|IOhBjLtV", |
|
||||
"biao": "'c,!1D@3A,A1AoJoM=T@UoVa[3]#b?seuZw$ycz#-&&-&+-&5-&D-&E-&F-&H-&O-&W-&X-*~-+@-+W-,;-2j-7Q", |
|
||||
"fei": "%[//1!6M9a<A>O>e>r>z>{@GDFGjH$KhP_PuRuUtZp_GaObsvEyP|g~T-!/-!H-!I-&Y-&[-&]-'H-(j-*!-*,-0+-2F-9;", |
|
||||
"bei": "&i&r)`0'3f>wA[DfJ9M8PAU'V;ZLZwa1bVgch@iDlbm5mQqWrPv[wd|=-!l-#,-#C-+k-4N-6x", |
|
||||
"dao": ")=)H)x+B+K005F8h<B<`B_C7GwR7T4T7Umeqg9iwkYoq|b}=}O-.]-1n", |
|
||||
"tan": "'/6D8A:_:eBOBSGtM@TkW(WJZ~]Z]a_R_xa.a>bdm?n~o,oJqQsMx#y8-$x", |
|
||||
"chui": "&U0D@8GPsFtny0|n-$u-:_", |
|
||||
"kong": "%.&V,/0@;gg,sA-#(-4[", |
|
||||
"juan": "!{#2#H5J5V7Z9S:|;=?w@7AaG[K3SfUM^&mTrZras6u0vHy5yXzt}^}l-#'-&k-'.-6m-:w", |
|
||||
"luo": "%T&!&='n/>0M2]5>8f9M:n;@@)@UAwF8H9HYJ5N9OrRHS6UvW~X'Z1dbf`g'kAl:uEw>y/yf}s-$f-('-)_-*P-*k-+=-+X-/K-4#-6)", |
|
||||
"song": "&P.@===yGOY0Z]^b_?jcu1-$@-%[-'[-)e-,c", |
|
||||
"leng": "#>&h++L@eD", |
|
||||
"ben": "/&<(DxRuaUblk/sIy&", |
|
||||
"cai": "#T677P8aGSK+U>a5b[dxeQob", |
|
||||
"ying": "!R$v&C&|(P)c+_2K2^6U7/8`9^:>:X:Y:c=?A:ASDzEAF7F9G0G1H@HAHBHZJKLqMwOmQ0QPQiR0S8SgVPWv[i]M]|adbHc@g:j/m2twv8vky?~_-##-$.-$i-%g-%o-%p-1V-3g-4q-5*-53-5o-5~-67-6C-74-7>", |
|
||||
"ruan": "&u(>6^<o@QgQhDi*|(", |
|
||||
"chun": "#_0_4L8|>U?sA7C~G3G}HRITJZQgSUb(hKn}o/sL|T-0#-0Q-4i-4~-6{", |
|
||||
"ruo": "0P1#DnI}mP-0e-0{-5<", |
|
||||
"dang": "!,#s%2'((2/[1f2&CDF3GbKuN(S)UCW&]b^A_kd&kEvWxB{9~A-8[", |
|
||||
"huang": "'w+e0f1q7O>=C1F#H|Q@RtSuYv[V[f_Xd,kWt3txu}yI},-$,-'P-*.-0T-1A-2]-5q-86-87", |
|
||||
"duan": "${'&.I1`2X6a:#<r@kI/V/fdt.tGyG", |
|
||||
"ou": "*$=*@VA*KPM)MG]3^Yu:-3H-5[-6N", |
|
||||
"zan": ")},'1A1t1x3`W?^'^?apbCc<d4d5e}n1n7n<smuaubv2v<-((-4C", |
|
||||
"za": "%k4^4gAvA|Vpj*q8}r}}~)-$'-.u", |
|
||||
"lou": "$(0x1V=+=1C>IMK(QfRI]1a*g3kxu]yN|F~x-#J-+}-,*-5a", |
|
||||
"sou": "#v2BC;IQJ(L_M?Qum[o3t~uAyH-&:-&<-&S-'c-(R-*<", |
|
||||
"yuan": "!9!f)V.i0F6f7':.;m>CD3DYE?I?I_InLGLdO5PRPzQFQXQrT&TYUiUuV3VF[xa3bYh]iQj=k@kgl8lRnPphs'u(|^-%1-)9-*G-.o-30-3U-4V-5%-54-6K-6]-6}-8s-9!-90-95", |
|
||||
"rong": "+Q+S5E7@9C;^>FEFEfF5J/QhQwQxSDVEghthyb-)R", |
|
||||
"jiang": "(43u3|5P8:9L:F<>=.A2EaH^ILK.LAQjRM[w]=^W`6ngo>oF|H-#P-%5-12-2_", |
|
||||
"bang": "&<'A+%5_749B@uC8IcO!O*OvPt[s_olQlVt^y^-#3-,#", |
|
||||
"shan": "#:'m)K)q+W.s7g7}:D;p;r?pALATBaD&DtR}S,TCWjY%[b]r^ObFc?cVd^gGlAn#p!qtvBwRz4z5z;{@|P|X-'q-*J-+V-/l-1C-1D-2s-2y", |
|
||||
"que": "&5&E&g'6'7(1(N:P:RI]O6c}z}{*{l{p}a-4Q-6t", |
|
||||
"nuo": "+<+u3e3y4&<oU/U0[Y_DelkCt<y#}_~'", |
|
||||
"can": "+W1A3ELBO4Q.SjSn]2uJ-&`-'3-*T-+M-8^-8f", |
|
||||
"lei": "$X'F'b(,(H(I)7)~2j4h5H7Y8S8Y8j:=:d;t<s>5JiKWL.M4N*N+N7N@SPZ:^(^zhxnoqls?vPvvw:yz~<-!*-$O-$_-%7-%}-1Y-6<-9R", |
|
||||
"zao": ",y,~1R3sC#LlMPOC]`d1f4fNk%ktoCwA", |
|
||||
"cao": "3m>9C=C[EwJ_R:VbV|n)uc-*D-94", |
|
||||
"ao": "!T'Y<Q<V<Z=wC]DBK&R=T]Vy]7]8g]kom9uBuMuNz*}>}I-*S-+S-0~-2b-5X-8{", |
|
||||
"cou": "@ThJiK", |
|
||||
"chuang": "'_,H,L,q{+{E", |
|
||||
"piao": "$+).1D7a:;<RF|LiRCo?{3-%9-&A-&B-&V-*U-+W-.S-1.", |
|
||||
"man": "#{$*$c5X7]:<JkJzN)P2R6R]SoVw]>_tmuuCuUye-#!-%;-%y-'i-(Z-,t-,u-1*-2m", |
|
||||
"zun": "8':^U5]Pk|qqv+-1B-2u-4n-5|", |
|
||||
"deng": "$7'q.M/H1pCCW|`:f9l>mxv6yx}E", |
|
||||
"tie": "=VH8OhaPbndXq'qzv>vRx'-&z-'Q-*i", |
|
||||
"seng": "-,v", |
|
||||
"zhuang": "3:3nF)F]UBUZ", |
|
||||
"min": "!B%9&`.}/<1l6O6d:,:wDiSSb'pqs7tEzEzZ{K{S-1$-2n-3P-8q-8r", |
|
||||
"sai": "2'@cb6c9-%#-0_-2X", |
|
||||
"tai": "0+27>h>yB8BeD]GeLjdIl[nSpfw^-&/-)E-+7-/6-2$", |
|
||||
"lan": "17212Q4/8K8i9x;+I<JCL~N$N&VVVxW*W;WDWoX(X4]K^:_{fknxw/wFytz~{h-#Y-%K", |
|
||||
"meng": "$/$T$`(?C.CKFgH'IZKONvPgQZRaSFn'n,rKsby<~?~k-!(-!)-%F-(!-,O-/t-08-68-7@-8q-8r-8z", |
|
||||
"qiong": "#@#x,+,.,d,|/:/FB{EBM%MBP,P0cWdolFqs", |
|
||||
"lie": "5}=]?oEOOzU?csf^j`-&0-,x-.#-/J-1c-3r", |
|
||||
"teng": "2>2F7I@sAHM9N?R1Z@[`l1~u-)S-*B-*v-0s-97", |
|
||||
"long": "!p$a%n&=(R(S,u.!.6/;1*162N=P>'?6E<MxS^S`W8`4bSffu`w)|B}%}T~y-!1-*t-6@-:J-:O-:P-:V", |
|
||||
"rang": ")z+t,$8bMn]s^8^Nfm-.$", |
|
||||
"xiong": "?F?GCrY:YiZ4^a^mb'}e", |
|
||||
"chong": "*86b;:;|B@CBEhNfQRS$T5V)f!ohqhxZ||", |
|
||||
"dui": "&k'O(m5nLb]H]vhsj_v0v9ys{v|j})-$[-3h", |
|
||||
"rui": "#h.h6N8+D6E(KUKVKpMWMXO)P~r<rwuqxx", |
|
||||
"ke": "#u%T&5&~'B'Q(*(;*<+.,U,r6[9t<7C3DdHFLFOTQ5S}TmZi_Hd:gni.o2psqds/wyxQy)zM-$Z-${-%i-%q-){-+I-+y", |
|
||||
"tu": "*)*.*x,6/a@dFNG+GVHsIfcbe&j,jvnjp6porIs!s}wO-(h-)j-4*-49-4T-5!-5O-5z-9M", |
|
||||
"nei": "?~@;lNsE-'5-(I-/e-0!", |
|
||||
"liu": "&B&d'>'[,A6;9l;1;;</IgJ*MERWUTe|kbs#tctzuHu{xuy[ym~%~j-&>-&@-&C-&U-'b-(W-)M-)c-*@-*d-+T-.9-0m-5=-5_-7.-76-7[", |
|
||||
"shou": "6.9h@yC2uA-(_-:s", |
|
||||
"ran": "7v>ZDZIFOEOYTST`Tz-,A-,K", |
|
||||
"gang": "%.&q/{639!:N:W:x>Ep+s)ttwe", |
|
||||
"gua": "506}:z;%>xU<V#Z5[>^|cnedr#rFxM-&'-&1-*9-3k-6c", |
|
||||
"zui": "#G)C+15&8d;$KjRdXHi]nInqo!s$s8", |
|
||||
"qia": "%{'I?1HyU4dUnU-!{-+z", |
|
||||
"mei": "!L!_#)#a({)]+X0h3p;I;T?S?r@PE&FfI@QGTZdMg0mOnlrKtUtZyMyQ~N-#^-.>-.F-5(-7(-8V-8h", |
|
||||
"zhun": "+$,56(>UT8YAZ{_Pj.", |
|
||||
"du": "#K#b*f.T.^1,>DCsFBR&SZSmUyWqZd^$^D_E`3b%bNc)mMo(sDs|v}yL{!{^-!Y-#V-#s-#u-*E-,,-8]-8k", |
|
||||
"kai": "II`7gysvtbt{vCxGxvy@z<{({U-&;", |
|
||||
"hua": "%;&K'B3S8/BWD9D:GgIKK[MzR#XKZ&Ze[4[>]A]o_&`0p(p)rbsdunxN-*]-+<-5m-8=", |
|
||||
"bie": "FTNFObRmVuf6-19-2l-8|-:[", |
|
||||
"pao": "%e(@(O,!?|H>M=TeTfV>dDdTgfq/x.-!N-!o-7Q-7S-7|", |
|
||||
"geng": "56575d6m7,9Q;j;u<v=DFVGfavc1m0-%b-+v-/h-25-4j-6|", |
|
||||
"shua": "<nZR", |
|
||||
"cuo": "#1$z'G79?nFpFtImJ2J}NR[(erk0kzn7o7rEs^t[xqy$-7H-7L", |
|
||||
"la": "%_'R<*@>AbArG?HYM3PfQ4Q[SRi_i`l6v|z$-#0-,k-0F", |
|
||||
"pou": "0$UO", |
|
||||
"tuan": "1H4'V8a%u<-5V-6#", |
|
||||
"zuan": "1B2Y808N8U8e:Kb3fjftq)vxw?w~", |
|
||||
"keng": "%t&3&RZOr>t1uOxg|&", |
|
||||
"gao": "#R#g)4)6)e*m+N+O/v0~3i7E:5;O;TA'B,GILrMHZ[_:m+ryu#xny]-#o-'_-,4-,5-5R-5v-93", |
|
||||
"lang": "&7*n/dC(F{IXJ.JHPOQlZEg%lzl~m.rLu&xzz^{]-)h", |
|
||||
"weng": "#q:b;}=rJ0L(Qstg-56-7,-9_", |
|
||||
"tao": ")?58617A7N9W9kG|PoUhX{Yn[{^MdwhXjPjenzs+|r-!k-!t-#@-#l-#|-&w-'d-'y-)P-)x-9/", |
|
||||
"nao": "%z&q'*?a@&@ZAkP6R~YZ]Ju|x@zJ{O-.'", |
|
||||
"zang": ";S?_AmAyB$I,K@M#abambLbUb}rC-)A-++-,.", |
|
||||
"suan": "(z.b/m0;1BI^nn", |
|
||||
"nian": "':*5*P1Y3*C/K6evf5f[h=iCiS-/4-0;-1x-2K-4%-8B", |
|
||||
"shuai": "7>:4RNTH", |
|
||||
"mang": "!5!6&<&D.ZCvEXEiG4G5M_OvRaSAlDp.rsx:-)g", |
|
||||
"rou": "*!2w3X>3?l@aHdQC]tekhEt$-#2-#f-*7-0R-4t", |
|
||||
"cen": "+W.m1A", |
|
||||
"shuang": "(V7;CPuh}z~b-*M-*y-+^-5c-6A-7B", |
|
||||
"po": "%g%i/70I3'7i<,IlK,jLn%n[o1oKotq9uswMwz|=-$K-%a-)7-,N-.E", |
|
||||
"a": "@@s@x}|:", |
|
||||
"tun": "AYAeC~OlVL`G`IgJ~Z-&h-(0-.j-1q-8J", |
|
||||
"hang": ".k/T5*9HBiDHOAT#UAa9j3lJ-$C-%]-.i", |
|
||||
"shun": "!x$&$1$9BZKo-$:-%S-,g", |
|
||||
"ne": "!vY6^]", |
|
||||
"chuo": "'j0^6?8&9bd!e'e<h6iIirisk:narfu;w!-'B-:&-:G", |
|
||||
"wai": ".O-%:", |
|
||||
"guo": "$Y1K3R68=W=c@6@LA.GJK9N]Q&Q1RVUwV!h7j'kTm=pZszvVxm-'?-(K-(a", |
|
||||
"qiang": "%.157p82;G;R;Z;a;g;w@HCEJjKBLDMvPhVd[ndGeuf.tkuPurx~yAyw-50", |
|
||||
"pen": "<XHm", |
|
||||
"pin": "$V%A(8+w=^LcMaSLa;be-%I-%k-&#-(s-*q", |
|
||||
"ha": "4_NyP'QOqdxQ", |
|
||||
"o": "/}", |
|
||||
"huan": "#.#x4!565b6l8;:(:I;b><EoH#H,I_M<^>`Q`b`va/hpj9k3l/lsn9tCvSyJy{{:{r}i}{-*|-,|-/n-0A-0K-2>-3?-4+-7<", |
|
||||
"ken": "&#>8>Y>fUFV$`S`wsh-:?-:E", |
|
||||
"chuai": "A0ACeb", |
|
||||
"pa": "/b<zBdDrI)Trd7wr", |
|
||||
"se": "+b+r,#3688CULD]Ehnr4tauuxVz[{5~2-&I", |
|
||||
"re": "Dn", |
|
||||
"sun": ".f/L0T1rF<J%L$LNt|}]-&f-&p-5A", |
|
||||
"hei": "-8D-8E", |
|
||||
"de": "OMsoy(", |
|
||||
"kuo": "*Y*_/GH[H]O~r#rFxMz|{k~o-#.-#H-#e-$V-,V-,}", |
|
||||
"ceng": ".Lf:-*f", |
|
||||
"ca": "(E(Ykq", |
|
||||
"zeng": "$~'p.L5z7H7z9n:E;9]DbAc>m|roxk-.6-1K", |
|
||||
"nin": "?[", |
|
||||
"kun": "#7&H);*s+*5oGEPpUEUJUgV.`wo%sCy*z]zj{Y-)w-,<-,=-,D-0/-2G-4^-5'-6w", |
|
||||
"qun": "0<;_;`UVU^e.k&-7U", |
|
||||
"ri": "TMp/p;pd-)%-+(", |
|
||||
"lve": "+4rgrlxr", |
|
||||
"zhui": "&U((.h66729r:'@C@|[!b>c6j_o#s>sQvdy1})}Y-)s-+J-4Z", |
|
||||
"sao": "$O7m8<:A:HAdR4-&<-*#-*I-+Q-,:-0l-1R-2a", |
|
||||
"en": "J!", |
|
||||
"zou": "0&6GG=[)_CcNcOlem@mcn.|h-*H-+1-/w-06-2E-83-:.-:7-:n", |
|
||||
"nv": "2h=TSvSxp8wW", |
|
||||
"nuan": "-'M", |
|
||||
"shuo": "$m&+'$0cIvZaZc_>qttmv~x*", |
|
||||
"niu": "4H9.FxpTwq-!`", |
|
||||
"rao": "+i8)9FF,KdVvk}}B-'v-(>", |
|
||||
"niang": "nuoRoZ", |
|
||||
"shui": "#I)7*q*z@1U[ZaZcZg_>_KzG", |
|
||||
"nve": "&ONJ", |
|
||||
"niao": "@%E>K1T^UGVO-2{-6H", |
|
||||
"kuan": ",s,tAqw(-,&-,2", |
|
||||
"cuan": ",',Q,s,t,z1)1[fLfsrZw;yv", |
|
||||
"te": "?vRgr{xe", |
|
||||
"zen": "]V_y", |
|
||||
"zei": "S;a_bv-0M-1Q-2+", |
|
||||
"zhua": "2(AU-,Y", |
|
||||
"shuan": "5<@]z3{?", |
|
||||
"zhuai": "#1dmi'", |
|
||||
"nou": ";v=,tfv;", |
|
||||
"shai": "/Z121J1e2[[K", |
|
||||
"sen": "Ve", |
|
||||
"run": "$1AOz@zQ{F", |
|
||||
"ei": "ZH_@", |
|
||||
"gei": "5C9J", |
|
||||
"miu": "7n:@]+_w", |
|
||||
"neng": "?LR'", |
|
||||
"fiao": "WL", |
|
||||
"shei": "Zg", |
|
||||
"zhei": "j:", |
|
||||
"nun": "-84" |
|
||||
}, |
|
||||
"m": { |
|
||||
"yi": "-:~-:<-:;-:4-:3-:#-:!-9~-9T-92-8u-8R-8N-8I-8+-8(-7O-7M-74-6l-6c-6L-5z-5)-40-2U-2Q-2>-11-0o-/_-..-,o-,B-,3-+q-+[-+<-)X-(o-(5-'w-'k-'=-'#-&6-$'-!?~=}E}1|x{Zz|zzxix6x.x%wKw,v%uPs_rurorEr8r)pppdpXojoioVnxn<mLm=l1j{jvjkj/j(i^i]i6h6gYg0g)g&g%fbf2f1f0f/etepd~dpd;c~c`c@bhbbbTaE_T_>_,^g]|]{]`]/[!Z=Y5XVVTTgT_T7T1SxSsR~RyR;QwQ0Q!PDP6NbN^N,MZMSLXLIL6L$J9I}IUIIHMG?EaEHE4D!CwCFBkBTBEB9B5@2?Y?K?I>K>H>'=a=R;m:~:48c8!7,5g4q3&2}2Y1j1f1`1M1/1'0t.O.K,_,,*x*f(c'G&.&&%b%Y%G%$$b$6$/#x#T!9", |
|
||||
"ding": "-:}-8q-)?-%!vipfkGiydzY2Ik6u+B&^&[%_", |
|
||||
"zheng": "-:}-9O-7L-0#{1{,yjuvsRm*lNlIi;eheZe8e4e3d/`x_v]3[+ZSY8Y2XlVFTYT#Q1C@A!4W3w07.),]%*#C", |
|
||||
"kao": "-:|n{k][#TbL>>R3p/,", |
|
||||
"qiao": "-:|-:(-6A-5v-4=-3(-2[-.@-,2-$H-$5-!q-!=y/y$xkx4rSm+m!k]k%j:iSi(hqbvaT_wVuV6V$T%KgGaF^FKFGEpDSBCBBB;8<2b1C1>.}#e", |
|
||||
"yu": "-:|-:p-9^-9P-9J-9H-80-7t-75-6'-5g-5b-5H-4U-3F-2l-20-1F-+K-)O-)+-(J-%a-$p-$K-$9-!7}]}W}5{7zizNzEvyvwv9v3tytjtetcsqsos@rsq|pyp+p%oQn6m%l8kyklk8jfgvguf%eGdWbtb(aLaKa:`1_1^:]e]d]KZOZ!YmXiTDS`SUS7RpQyNvLAKsJKJJJ;IAH|HmHVDVD:D*D#D!CrC[CDC,B*@K=Q<><<<1;h;_:v9G908=7M7I7A535#2{2R1b1:1(0;/q.(.&,1+G+9+7)n)h)F))(+&*%!$M$D$=#V!A!0", |
|
||||
"qi": "-:{-:r-9{-9E-9;-99-82-8$-5f-5(-3D-2{-1:-0G-.j-(Y-(A-(.-'v-'C-&%-%m-%I-%F-%E-%:-$D-#N-!Z-!B}$zvyHwbw;w1u~t[tFn;n3n$m~l^kkiBg/dpdTcKb<aBa&`3`2`'_b_)^K]OYRY@X?W1TgT1SkSjS1RxQ4PbO@N]MyMCL]LZKhKOJ~JcJ]J[J>J4GyGJE<E,CyCkCjC<AEABA6@a@7@$?+>W<Y<N;5;49h9*6f4x3D,m+N+8)a)](`'4&V&1%K!C", |
|
||||
"shang": "-:z-:t-7k-3C-%S{p{*y:oAo@c8aA`@]}Q^G.BxBZ@P:h9>8l1T", |
|
||||
"xia": "-:y-:s-9u-6I-5e-3w-+T-*+-(v-'m-%n-!!}({Mwtwpm/logkeB_3YST)P~M<Jm4X3z2i.L.,,}*C)1%V%J$8", |
|
||||
"han": "-:x-8S-7J-3>-1A-/j-/i-*P-*J-(^-&C-&9-$k}[{Xtrrbp,n8lJl%dqbm_c_L]cZ(VLV%T]R_R^QRQQPOK9IJCH@l@^@?=k=Z=?<l8k7X6'3I3@1Z01.g,t**&{!p", |
|
||||
"wan": "-:w-:E-5=-/S-.f-+)-+&-&1{0z*x=wlwkv6tJt3ptpen%iGf_f?d[b.b,]1Z9Y|YmY=QOQDQ@Q,NVNNK1J%G9B2@h<m:X7}7<5:3]+&)t)Z%z!n!7", |
|
||||
"mo": "-:w-:5-0z-.(-#S-!l~j~b}!yQy#v!r_rMr$qno}o?iji_hR_(^d[cVzVkVjUHTyR$O4M[FrFMC$C#B~?~?o?e8m640`.8,%#m!x", |
|
||||
"zhang": "-:v-8k-8]-8L-3=-1byErnkDimiIh}hsfnfmfXey`Q]hYEPRNeFt<y<p8Z8Y,$(V$`#}#u", |
|
||||
"san": "-:u-8d-7q-5p-3c-*Q-)m-)l-)k-)j-)ix:iHg#T5AeAdAZ7s/%", |
|
||||
"ji": "-:r-:O-:<-9p-99-8x-8w-8'-8$-6t-4W-41-2w-1:-12-10-0*-/l-/^-/W-/#-.d-.^-.0-,9-*z-*`-*U-)d-)P-)0-)#-'6-&c-%s-%d-$V-#x-!{~z|~|f|.zxz?z(z'xlw;v^vJuZuLs$qAp=p;oJnfnEn(l$l#kRjsj0iBhYh!gEf=f<eseMdxdaczbAb*a!_K_)^k^F^C]@ZRYCXHW1V`VBV$UtU^TgT1RnRmRlP]P[PCOAO@O$N9N5K,JNI*HrHhGoGTFfF3ExEXEPE8E'D[BdB:@O@B>y>]=x<`;t;(9.9(857&6{6d5m3D/;.j+?(>(!&8%{%t%4$X$,#H#>#'!w", |
|
||||
"bu": "-:q-7F-,M-*w-*t-(d-'K-&D{B{?{6zPtOm#izh'gfd,bi[rY}Y{YfQHM,C>C;C:'=", |
|
||||
"fou": "-:q-(cvCBj4H", |
|
||||
"mian": "-:o-42-1d-0w-,S-,H-$`tktQsZqpq#aDNWJ^E=D~@p?|;k;,7G/o", |
|
||||
"gai": "-:n-9w-6e-+u-+t|'uYm@dy^AW%T`QYNaHZGNGM:M8|'{&6!,", |
|
||||
"chou": "-:m-:l-8m-5_-4=-2A-(m~{t/r!iKhld$b3aS_%[_Y%W~N?N=LJJkI|E?B_0h/O.s.p&3&!%l#v!m", |
|
||||
"zhuan": "-:k-7o-3G-3+-2y-.I-)n-%+~EzRyPreq<oXoRc0V28t5%)5(f'.", |
|
||||
"qie": "-:j-7Q-/`-+P-*@-#uw1u{iCcpbkaia8`fZoOZL]I~>;<`,E%g#(", |
|
||||
"ju": "-:j-:?-9m-7n-62-5`-5S-4x-4j-2l-19-0%-.Z-.:-,.-+n-)H-'d-$|{/ztx_uct_tNt$o{nvnqnOnMmqmil`jYj9j7g+e%d<d3d(an`}_E^j];[I[C[;Z^Z@YdY$XMUdUVR3M^M9KxJyI{IzIrHSHDF:EcDPDCC8AqAi?b?L?(>:<g<I;[:o7)4L3o3<30/4/..P.A*e)m%5", |
|
||||
"pi": "-:i-8@-7|-7P-2Z-.R-.9-+>-(h-(c-%5-!.-!,~|~X}2|L{2xhvCs<rwnumblFk7hWcibx_U]G[q[eXcUgS+OXN3N2HPB&B%<@8>7*6e4n2x.Q.G,n)Q'(%k%h%@$p#R!U", |
|
||||
"shi": "-:h-:g-9q-9l-9N-9M-8t-8_-7R-6k-6]-1X-0m-,^-,:-+_-+6-++-*>-);-()-'{-',-%.-#t-#7-!W-!>{>z|y{x<wQvqunu<r4pbpap[pVpMp*oun~ninhm;m7l0l/kQi{iuiQg!f}f|eCdodTc_c[aU^*[.ZyXYS6RXRUQ{QzQhMWLxLrLlL5HiH[H,ELBiAJ>n=}:{:s:W:5:'9v7C7?6n4=4%28.3.+.#,0)$&3$}", |
|
||||
"qiu": "-:f-:^-8m-6#-)u-)9-&+~*|FyTsQl4j2j1cFc&]rWkO%KIHeF8BpAn@s@b?J=o;^:l:k:j2D/T.k+D*'([!P!(", |
|
||||
"bing": "-:e-:W-8h-8b-6u-5B-4T-3Y-1;-0a-0[{mp1ngnZhbhah&cm[vY,W5R0QpN/MQLQLLJnJbGXE:@~4E)r%,", |
|
||||
"ye": "-:d-9z-9.-9&-4e-2_-0U-)7-(u-'%-$W-#,-!]{:zIxqxdwgoVm$jxjw[hZzZ!YyY;X:X6UhUcUUUSURQUPxP@P?P,OmOkMYMXIQHsHpCXBh>i<o8q7w753l3M2N1H0M0,0)).(T'b$V!a", |
|
||||
"cong": "-:c-8f-+r-)K}w}ptPq6eUeTeReJdZcnbUbIa3`^`.PTMxJ`HyG2FgF[D?<G9!8v8L8D8#5V3+1n0H)X(e(a", |
|
||||
"dong": "-:b-6R-4n-3,-0`-0P-0>-,u-,G-,/-'I|/{)y&u^tXr*mSm>lKl?eNc3_H^LZhX<QrNILfJGA8A+>L<j:n4#18.0", |
|
||||
"si": "-:a-9B-7T-7R-7N-6H-5f-5X-4,-3y-2+-1[-03-*#-)x-)5-'F-#m-!u-!M~)ugtdsJqDoaj.gUd%cHa2VMSDNOMeL{J~I/H!C'@X?O?8?*>^>J=,7[6?1</R", |
|
||||
"cheng": "-:`-:%-:$-68-4_-2z-0K-0C-(@{H{A{,zYz#ywu*pSlth%eZb^al`(_v^t^U]A[zZFYPXDWQW,VRVQVFQJQ)N}MnLtJPJ@IyF=F<F9EeETA!?0>e=_=G<8:?7f7d6/05/f*6*2)c%x!'", |
|
||||
"diu": "-:_-:[", |
|
||||
"liang": "-:]-:Y-9)-5x-5[-5>-5%-1G-0B-&J-%y-%7-$Ly2bWY7Q*KJIwG%<e:_", |
|
||||
"you": "-:Z-9#-7w-7=-7'-6X-4;-2*-0t-*p-)f-)c-):-'~-&u-&>~n}bvRuAq=pZo8o6m1lyh[hZh(d]d$c|cqbY`,^xXkTaS4OVM;LAKGK=H{GFD}DJ@8@(?V?>=g;C:b976B/j/i/O.b.D,?,>+Z+Q&g&d%O%!", |
|
||||
"yan": "-:X-9d-5]-4]-4O-3;-1u-1Z-1Y-.a-.[-+:-*O-*F-*/-*$-){-)z-'%-&=-&2-%'-$N-$G-!L~~~a~Q~5{GzAydy7xLx@wMw>vPv>uFu@titfrgr?r9qwqfqWpKmhlEl'kuktk0jUjKjJjIjGg<g*f'f&c$a7_5^~^8]w]?Y3Y'XhXPT3R8QZQ.P`P/O}OrJsJ<IFIEI5FeF'E^E.D`D3C_BhBG@,?P>M<V<&;K;D:i:H9R8y8S5O5I56544k4j3u3X3J3B3?3!2~2U1t1E140Q/U,w,g,d*Q*()V'$!3", |
|
||||
"sang": "-:V-$J-#}WgK{KzGV", |
|
||||
"gun": "-:Ub6JY9W93", |
|
||||
"jiu": "-:T-:8-:7-9|-9v-5A-2p-.H-+|-+e-+]-+A-*(-'U-$wvdo(gogdgc`IZ2XkXBXAW9TGRhO#NTM+LsKwFxD;BW@v@Q5$/b+:%X", |
|
||||
"ge": "-:S-9Q-8R-7!-6|-59-.O-+l-)(-)$-(e-(D-'4-&Y-&?-#s-#`-#J}6yhfLaO^^^R^=]_ZkX*WHULTML4GsE!CW9l9`/T.f,C+k%Y!,", |
|
||||
"ya": "-:R-9>-9<-9:-7m-5K-0W-.$-*H-*G-*A-*?-(s-(H-&n-&'-%;}L}@}9{j{5zbxTuBu3t%q2n,lVlUhKh?[`[ZZZY:XLN'KlIsIFA0A,<r9,8//g.^,[,E+/)}'b%h%J$x$K", |
|
||||
"pan": "-:Q-0S-/B-)R|Ys3i1[O[AW]U=MMGu?t>}>k:c9s84684l0$/w&C&/&,!*", |
|
||||
"zhong": "-:P-8A-83-7x-4Z-0j-/C-$Tz8ysx$vMvHs^o)i)eqe0dddYS`MKC2@=?G4w2k.T$F!>", |
|
||||
"jie": "-:N-8i-8<-5$-4~-4W-4!-3j-2]-/@-/?-/)-,r-,a-*j-*i-(e-&c-%d-%H-$m-$8-#q~zzKz7vevOuit>sasVsCs(qSpIoJnpnln*m|lCkvkbjrjqjgjbhihIeEbr^S^;]_[,YZY+X{XwX?W_UmUOUJS9RINXNJL0KxKoI~I1HqHgHfH8EOB,>j>;:z9b882?/'.6+0)H)8&K&J%g%]%M%##D!~", |
|
||||
"feng": "-:M-8:-5L-4N-2Y-0]-0&-0!-/{-/y-%p{Rz9z5w}w9v7odoYl}l|l5W4MkKPI.E[?m?h=S;Y;#:R8e5Z4i3V3*2g1h/1,O)u%C$B", |
|
||||
"guan": "-:L-58-1=-0l-*vphb@b?af`LXqW*SRJ+G*D(B2>w<v<W8G5Q0E)W(4'e$_$0#Y", |
|
||||
"kuang": "-:L-22-0V-,b-+V-+N-*v-&o}&xNwFm_dJcW^z^y]>RWQkP#L)?N>=0X.X.U", |
|
||||
"chuan": "-:K-7o-3G-2t-.K-$]}Tz3jFjDPMIRIDCbA?@i,H+<)7", |
|
||||
"chan": "-:J-91-2y-2R-1~-1/-/:-.k-.J-.*-*~-%$-$F-!n~P~@xBszr>q3l>kJkCkBjXh{hpgWdu^r^lXsX+W;VqVhU#S9RYJsJXDEB#=v:^967o7n71655d5B2V1I,#&v&u", |
|
||||
"lin": "-:I-9U-2g-0e-00-0/-)v-(l-%PxDlbk,gIgHc=bob)_=_6[MVGS?Q+PGN!FIEmED<U7j7H5h3819+u)S(I'+%o$Z#M#K", |
|
||||
"zhuo": "-:H-4t-.`-.<-+#-)X-%U-%T-!G}+y@v,tYeu[BZ,Y~V3UxU[StSHSESBSAS>Q>L#JuJfJ3J,IoGcDh@j=|=h<b<J7%6S5[4}4N3_3#1>.h)e)N", |
|
||||
"zhu": "-:G-:B-9]-7d-7G-7?-6Z-.&-,t-,n-#T-!z~4|=xpx3qVq!ploNnWnIl*i>[[[WT&StS;OqO1O0O.N>M#LzLFGWFmF,DhDbD^D0BH?&>Q;b7t7Z6s5x5>4V4A3y2^2@1+0x0?,K*K%B$J", |
|
||||
"ba": "-:F-8l-7`-1E-)^-)@-(b-&M-&I|_{[x>wCv0mumIj,fq]o]I]6]#[GZ)O+M'D,5?4R0+.m+@%N#/#!", |
|
||||
"dan": "-:D-8~-7{-7H-2r-2J-/V-,,-+G-*~-*{-'f-&2-%C-%B-$v-$F-!m-!b~[vTsjiofTfOfEb$aga>_q_P]4[VXuV@V?UjRiM/BeBSA*@)>r<?7.1I.@+#'O''%f%:$H#`#N!F", |
|
||||
"wei": "-:C-8{-7p-7e-7A-4s-4V-4Q-3~-2x-2$-*h-*b-*O-)O-'q-%q-%k-$s-$S-$@~.}o}m}S}7y1xJueu7u$snsUsHoqoQnxn_m9m2lHl7kskZk=jljTiniEi9gme=e:avaPaM`?_JYnYUXbX1VEV1S^PuO5L*JqIOINHkD@?g>c>C=n=$;S;N;0:N:08?837i6R6G5|4]4>4$2]2O2F1]0u02/$.r,[,P,I*~)h);'f&H%!$N#X#U", |
|
||||
"jing": "-:A-9C-9+-9'-5r-5%-3A-2O-1N-0K-0C-/9-.~-,y-,k-,[|i|g|cyIvQt:t8t+pojAh|fdfZeeeWb/___NUoT+S&S%Q:Q3PIP0KZJpEvBsBn@I@H>m>%=><87]6#,r,'(^(B(<%($u", |
|
||||
"li": "-:@-6_-5u-5k-5Z-3s-2&-1z-08-/Q-/=-.o-.G-.'-.%-,l-,&-*L-*I-*:-*.-*!-)|-)Z-)X-(z-(2-&U-&0-%g-$C~g~`~A~>|`yrxEu+tat#rjqYq,nAmkm5m.lzjag@b]bXbRbB`l^&]q]gWYU@U3TsTlSpP_P>P%O&NmN^MqMSLnLcLYLUK!JoJdJMG1ECDuDjD_D8D.C/C+?k?[?Z=Y=U=/:/8z7@6C6$5H0a0U/>/=/#.z,~,u*V*$)z(t(_'x'u'l'W%R%F$l#P#A!Y", |
|
||||
"pie": "-:>rVV]V[PHAD8>", |
|
||||
"fu": "-:=-9c-8[-8#-7z-73-5y-5m-5j-5U-46-3v-0d-/|-/J-.R-+h-(=-(6-'[-'S-&E-!s|<|!{]wvwWvVvRuru'tDt,sbr5qJq/pmp3oWmgmFi~ifi7hzh;fwfkeje?c{ct^w]l]J]&]%[Y[QZ+YfV7S}SLS)ORN+M]MGM)M'L1KWJ2IYIPHKA:>~>Y=W<w9c7T4S3d3/0.+2*t*!()&m&b&N&G&@#h!)", |
|
||||
"nai": "-::-6v-4iw:vhv)qxq(g6WVV{M$AC;<%`", |
|
||||
"wu": "-:9-:1-9D-97-8>-8%-6;-5|-4k-2k-2:-1q-.T-,|-,C-+y-+/-*V-(U-(T-(J-(?-(+-&)-%K-#v}4|^zLykxvvxv4u%tjthsurTownkn9n+lmkzk_j6hFgQfudbd`d@c'b[bZbKat_]^[]e]d]]Z4WGTTS7RoROQENvNtNoM&K#FLCVC=B3@[@Z@S?{>T>*=V;^:,874(3C322*1w/V/A+3*4*3(|(P')$h", |
|
||||
"tuo": "-:6-8X-77-6h-6.-'a-'G-%[-%$|Sz;v8sNrRmck'gzet]i]`[H[F[EZMYuV1NgN^MTM8ITI+GbFBF0AvA_@d?`?_?^<k.K", |
|
||||
"zhe": "-:6-9[-*K-&L-%9-$o-#T~h{Er^bp`6]H]'W_ViQGQFNgM=JWFwC%=m<E", |
|
||||
"ma": "-:5-9Q-3o-(r-&!-$%-#4-#3vUs1rWqNhR[cVzNQH2:2/&.c,4+5(x$[$Z", |
|
||||
"me": "-:5~t~j~UhR6I", |
|
||||
"yao": "-:5-:,-8;-6D-5@-4?-3_-2q-+m-)&-'7-$b-$2{}zBwUvGu_svs=pro3o,n/m,l,k#j~h^e;e.cqcRa%[oX2WrW@VdV$PkP'NGN#LuI;HBH9G5C!BA:B9J444&1|0f0(.E,;+r*D(~(l%S$%!t", |
|
||||
"zhi": "-:2-9Y-6f-5^-5C-4|-4d-44-3y-2,-/}-/0-.U-.+-,v-*e-*>-)C-(W-'v-'8|||{|T|:z~z{yFy@x$v%uNtsrGp&m7l0j+iridiahyh5h3ggf5eYeKe4e3dmdUcU`6`*_$^{^E]Y]F]E[u[HZtZpZ]Y{XvWpWVW2V{VvVtUKUJU>TjSMRwRgQ`Q/NOMyMcM2LqLhL6K~K7JjIuI]I*H+GHF_D|DnCAC6BiAJ@t@O@N?v?T?3>V>3<L<!9e9S9B8}8@7~6>4`1_/9,x,^(R'w'[&3%c%;%7${$z$k$E", |
|
||||
"zha": "-:0-48-.N-.=-*C-(w-'X-'?-&K-$j-$O-$Aw/pNd6]s[m[XZdX4WIW#O2M7M1M0LvLlI?H4Fv;X:67u5#4@2N/p&d%.!M!H", |
|
||||
"hu": "-:/-:'-9j-9F-5E-0Z-+U-+L-'h-'W-%n-%Z-$_-$4-$1-#>-#2~k}v|;x1x0x,uGt4sEr]r[oxm[iphxfxfgdFd*d)cGa{^V^6^4^3^/^.^,^']y]9[xWWW$SXRFR<OjN(L8I%I$GEGCCR@9@&?f?7=t<.<+;$9E99986Y5s483S2;1a.J,S)b)+']'['I", |
|
||||
"fa": "-:.-8!-6y-3Z-0R-)]|A{vy)uwm4fKL@FO?X?:=z5R*[)L%8#.#+", |
|
||||
"le": "-:,-9R-8r-,J-)2-#1d}]qH`G5@z??/b+A", |
|
||||
"yue": "-:,-1g-1e-1`-/P-&j-&@-%A-!DvAqrn1m^jec,bubS^]]g]8Y_U@OpOoOWN8LcH`G5FTDj?'5e0J+*", |
|
||||
"lao": "-:,-6~-3!-,j-,i-,>-'$-&N-%z-#p-!}uSr`ljk/cY_f_eYtVZO:L=G5F!=O='8%7a3{/^./*<$f#c", |
|
||||
"yin": "-:+-7}-6^-0t-0;-*c-(j-(V-%o-$d-!T-!+~l~+~$}`}$|&{w{YzXz:w_u=t0t&p:n}lnlLl<jdg^g>fya@`i`B_u_t_0SMO[L:KKEkE@E1DKCwC_BYBGA5>l>d>U<5;~:}:i9}9V6^6]4).],|,j*I(U$7#k#_#:", |
|
||||
"ping": "-:*-5i-0]-/z-/s-'u|Qz1u/ngnZmTi[iJi4heh&`0_zMfEU?6>6=A<D3)*v'F';&_", |
|
||||
"pang": "-:)-*B-#ww}r|o2h9h*ere<S2@<?y9p4i", |
|
||||
"guai": "-:&-)_wVcuc>[KMbLw", |
|
||||
"sheng": "-:%-:$-4H-.X-.Q-,?-+0-(9}=x{x7u*k}_VS[RGQJQIOeMuIyG~E{BzBF?%;k;@:q7G2u/M.N*h)i&y&s&`!'", |
|
||||
"hao": "-:!-65-3k-2)-)6-'j-&_-#k-!t-!Y-!#~xxRvacOblRDR'QBPePaPWP7J!A~Ao=]<Q9j9U7S6c5N5@,/,)+}!y!q!h!f!c!_", |
|
||||
"mie": "-9}-),-':-&Hq7hk^uWeDr9m64504!", |
|
||||
"nie": "-9}-%*-#e-!O~m~D~5~2}#q'q&mFkTjujLivZ&YVY5X[WCVsT|T<MVG@DW=@:Z%+", |
|
||||
"xi": "-9y-6&-5l-3i-3#-1B-0,-+?-+*-*n-*R-(P-'x-'>-'6-&/-%]-$X-$:-!p-![~T~8y?xWwnw'tgs;rCr@nsncn`nRnHkgk9jpj`jZiqiOeceOe9djd_dEcscgcZcKc/bqbeb8ay`r`p_s_r^V^6^4^3]_]O]HW%R:QKQ9Q6PEOzNON)MdLZKSIdIGG{GUFkFRE|EjCzCuCmCMCJA4@e>X>S=f<[;i:+9h9)8p8/8,7N3e3R3K343&2Y2+2)2%1q1P1O1N0}0P/E/?/*.{.t.#+p*r)|(#'h$1!k", |
|
||||
"xiang": "-9x-9,-9(-6}-3*-1}-,4-,$-*0-(x-&r-%L~Ww~uXk5j)h7gqe'abQXP5LWH^F1DH;!8:*E'g'T", |
|
||||
"shu": "-9s-61-5g-55-54-1|-1F-)Y-'3yNyGu[tGq4oNoCnWnIg}gxdWchcgcIbt^X].Z.Z#Y>WBU9T'S|PvPtP*OhO1O0O.N[NBMtL`JtFuFYEpBuBKAaA`?c<O8[8H7m7Z6m5q3Q1k)f(i('%h%e%d#O", |
|
||||
"dou": "-9r-61-1T-1P-(~-(N-&&-%|])S]SPN&J}EwAm=d;n6<.$$v", |
|
||||
"nang": "-9o-1s~d~;~1_QWwU{TkOwD+<n5b5;", |
|
||||
"jia": "-9n-8<-7Q-6w-4X-3X-2]-,}-)S-&?-&4-#F|}{MwIwDsrs,pvpImei,e[eBd^cA^J^G]L[d[Z[,ZWZ8UhSYSVM`M_K/ILHNH:G^ENAz?H>&=L/3,E,B*n*d&f%0$8", |
|
||||
"mao": "-9k-1,-1(-0|-0z-*dzLwksLmOkzi?a=_?^(S/QvPrN4M@I'B!AcAW?9;F/Y/#,J)E#$", |
|
||||
"mai": "-9i-7I-,{-,*-*}-#${Kx5", |
|
||||
"luan": "-9h-9Y-9V-*^}C}Bvmu0qXq:q$m)jOZ[TvOuL2D69K5J59#4#3", |
|
||||
"ru": "-9f-6K-2C-1K-(N-#{-!$vkv[s7qyq)jciX]kZgUTP+NzL(E0@W>7;Q9u6b+^", |
|
||||
"xue": "-9e-.x-(Q-!9|Bxbq>q+mmmMjzf=ckT/SlKvFc?!>u9j7>5y1&.B%L%<", |
|
||||
"sha": "-9b-4c-3?-2H-/,-.t-*+-%t-%^-%H-%4-$R-$0iCgkZEZDW<N{NrK`H?FlCaC3BDAl?w6{2P,v$g", |
|
||||
"na": "-9a-1*-*|-(R-(8-&T-#_v=tx]0[LZxZgYWWL", |
|
||||
"qian": "-9`-9Z-9W-8T-8B-7l-7(-5q-4w-4^-3g-31-2<-/r-/[-.u-+4-)}-&4-#u}/}.zaySy4xZvgt7seqtq`q5n'n!k{kVdObgbLaN`f`<]Z]N[J[1ZCYLY=Y!X7WSVgVbVUU,U+U)O_NwJ_IbH3GiGPF%E7DzD'C~CeCZC7@]@M>$<%81806O5S4B2Z/J/B/2+%!l", |
|
||||
"suo": "-9_-9=-3]-&8-%x-$&-#j-#gu&s(as^$ZEZDW:PjKaJz:E9y+|)w)v)!(]", |
|
||||
"gan": "-9Z-8S-7J-5&-0=-/u-'c|Ro'o%o#o!hfh_dqa5U~T]T6R_NuMDKLH6FNEd@??;<:8f7_7/55+;*w'#%?!T", |
|
||||
"gui": "-9X-6q-3{-/(-/&-.7-.5-+Q-+J-+I-+F-*%}3{zv2u;s?rhrIp|k$jpj`iLhLh,gmf;cMVxVVTiThRCQ2O%M9L.KeIeI`GTGAG<G;FWEQE)DXDQC*@v;;:H4t,Q*A(r(D'q#X#0!|", |
|
||||
"jue": "-9S-50-3f-0X-/R-.?-+@-*,-)X-(Q-!a-!R-!9~I{PxbvAqRqQnLnJlPl@k$j}fmf>_k_Z^b]7Z`Y~Y9V^V;TnSgKTF7F6D[CvAG@:?!5P2|1d1>0S0G000/+z+M+)+'*](n(G%L$3", |
|
||||
"liao": "-9R-2|-!rrLovomo<o5o4nKkLk+k*g]gG`/_^W9VaV9S{SZPLO~FxFA8Q8%4f1;0V0R+q(H%[#g", |
|
||||
"er": "-9L-6v-6T-1r-1a-1_-/1-'B-%hoHoGoFmAg$f~NiLCLBK6FaAt>[>90%*F", |
|
||||
"chu": "-9K-5N-3d-3R-2K-2!-0$-/m-/Y-/I-,t-*)-!o{$x!s>n5hjgXcj`g_SWxW$VoTNS=NEIjI&HoHQF|E}EsESE#DsDdCzCG?@9r9q6x4N/+*+(,&;", |
|
||||
"kui": "-9I-3{-/4-+I-+F-$U-$;-!xwow4s/rBo*mQjVjHb]a.a,_y^BXgQdPyI2I0E&BV:S7x2l.q!/", |
|
||||
"yun": "-9G-7r-3q-1p-+}-+x-(0-&^-$^}xwEvsvEqOb}aca4a)`c]2[yRNQTP}MwHWF@BmBaA&A%@0=3=!:!7W2h2:202(2$1b.Y+(&P", |
|
||||
"sui": "-9A-5#-&F-#U{3wytvr1nwn4kpRqEWC1C0Ab=H9[7+6z5}2C1g0~(/'p", |
|
||||
"gen": "-9@-9?-&pX=X'L7", |
|
||||
"xie": "-9=-9!-7[-4J-4A-4/-39-1{-0s-0c-,w-,+-+'-+!-*k-*Z-)7-$(-!C~e{ry_wrw8w1u)sOq]opnenVnNm$jrgJeFcT`z`p_BZ~ZWZ8X9WnWMV*UiUFT}SWRePXMZLIK@JwI,HOH?H/FlC]?K>p>A;P9h7B695{5!4Q4P3b3E2,0w0s0O,C+k+e)8", |
|
||||
"zhai": "-9;-6B-4f-4*-3E-*K-*C-&c~zw{p{os[u[2YxW/UwU>SiSfH#EL#t", |
|
||||
"tou": "-98-4'-4&{$wNv'sqs@aK]*T0SQ", |
|
||||
"wang": "-97-8v-87-1JvYo7o1o0o/eoeiefe[dldJa}]>RTQ(OEODO=N1JD@J6;+E", |
|
||||
"kang": "-96-8)-+X}|rmkKg|dG`8]f](G=8_4d.a", |
|
||||
"da": "-95-.N-+f-'f-'R-&m-#~-!J{hxrw[v*d'ag_q]nWZVJ@f?}:<4Y0p&@&4$#", |
|
||||
"jiao": "-94-6n-6D-2q-2j-2I-.B-.6-,6-)B-(<-$H-#M-#K-#?-#(-!^-!=~IuUu1r=r6qcm+m(k1k%k!e.e+cJbl_~_i_KZjZTZ5X&W9VlVCV(ToTJT?T,SwSuSgSSQbPgP2LOIpG!>!:l:k9Y8w8<7b5[5C443,2b1>1*.9+l*X(5#e!v!^!V", |
|
||||
"hai": "-93-'V-'0-$#-#h~ey]vOq;pL[!A3=N3[,C", |
|
||||
"heng": "-90-&B-%QuJcXcLbaVKL/FiF&<|42*B", |
|
||||
"peng": "-90-5,-3J-.F-+o-!~zgyqyYfUe|cyc+`%[tZ?Z6YkXpWvW4OTKCJLIlIWGGFn?6<R<D8e8]7Y3Z1h$a!u", |
|
||||
"mu": "-9/-8H-/~-,=|Ey9usuSu%m<i&i!`[`Z[TPVPUO7O'I(FrFqB1AwApAX@#4h/a/_/X/L.S&U&Q&E&:&9&(", |
|
||||
"ting": "-9*-68-60-4C-*M-*7-(]}>t}sxk~hVhJh)gBg?g;dzZ<K]KHH~H(@u=6;]6u453`3^*.&^&[", |
|
||||
"qin": "-9%-64-1^-,8-(g-(f-&#-#f-!Q|w{Fshs.p.p(o~oyogkmkVk2k)hOgbdO`C_G_F]N]5YlX,X$V/UlS@R=J|E`Cg@3:$7'6(*J)R)M#l", |
|
||||
"qing": "-9%-4b-3<-2(-0A-.b-,O-*S-%1}V{1wfp7hQgwgeb4`9YLUpUoQ5PsJ'G/EME/DcBnBFA7A.A(<';w;B916X&x", |
|
||||
"bo": "-9$-8Q-7`-73-6,-2v-2f-.e-.]-,Y-*y-*w-&M-%#-!h~oxbq*k3ibeu`s^|[3ZJWyV=V5UgUfMFM'KYHKEVEUDFBj?E?,=e;};W:L2//l.?,9*q'`'^#2#1!Y!8", |
|
||||
"lian": "-8}-34-.;-+E-+D-#V-!XzUwAvusMrKr/iegjd&cS`F_{^fW.T=SrJhI#GiGSE7DfCHBlBP=%;6:C8j8A777$6p5p5l4<2f1y0z)x)3(X", |
|
||||
"duo": "-8|-8X-02-/2-/$-.c-.V-'`-&y-&e-$O~}~S{|{{z}z]xzxywiwhwHvtvlsNo+lOh1ae_oZrZqYJTET>T8T.O)O(NfN^MrMTMSM&KuIRAh?`?^&D$i", |
|
||||
"men": "-8{-8G-53d8bcbCaz_9_&]VYgS^PZIh@>3=1,+((W", |
|
||||
"ren": "-8z-8y-8s-8U-8F-88-/d-/cx;vSu`n:n2d|dwdv]XO,NiLPLMK6J7/]", |
|
||||
"shen": "-8t-7V-6i-6/-5d-1Q-)l-)k-)j-)i-(V-'i-&}z^u|u>ttsys.qmp_pHorn7lui(fp`t`b]b]4WPTFR4P9P3M:J7J(IHHRA9@+=D<0</;f;e9?671?*g&~&w&q&e$G#{", |
|
||||
"ze": "-8p-6B-4*-/M-.{-'X-%d-%2-%.-#9rcl:iAi#hU[~[2Z$UwRKR7G)C.@q?n?A>n:(9U7C5[!e", |
|
||||
"jin": "-8o-8j-8d-7}-6<-35-2^-2=-01-,y-,k-,[-*X-*'-%o-!F~y{Fzkz6y<xPvFt7rfr9q~p(nyj'j!gbb+`CWfSOQaQ_N7HEG8CTB[>E=q=M:I9$6~6g3h2M0i*Y)y)K(z(d(@(*", |
|
||||
"pu": "-8n-3$-+k-!S}^}O}<{BzPy(]p[rY{V0UvTeTdQ;PiPPP&O*M,FZE_AS=`:17k6T614r3a+v(C$m", |
|
||||
"reng": "-8g]m", |
|
||||
"zong": "-8f-5:-4y-43-3KzFpikxkrkNeJcdaraVY^XXX(W&Q|O>MxJQIKG28L8D8#3+1n1c0{,b,R%E#w", |
|
||||
"fo": "-8e-8;-73|IJl", |
|
||||
"lun": "-8c-7i-6S-4u}l}Y{.t*lSlRb9[{YMJa?j<6:3", |
|
||||
"cang": "-8a-89-7h-5;-3e-07-+OkeD<?i9n6J,**{(p", |
|
||||
"zi": "-8`-4m-17-.h-)%-(W-'t-'r-';-%@-#r-#cupuoudu9qTqNqMqHq1q.l;k[c;NnLKK8InH=Ez?s>W<];o:Y9g9_8a7;/G+J(!&Y&7", |
|
||||
"zai": "-8`-3V-2G-1!-&v}8pOl.]j]>L3>f;>:.4|4{3~&Y&7", |
|
||||
"ta": "-8^-6E-3^-#~-!&~Kz$yyy6vep}lc[HZXW`V&HCG}EqA[?}<c:<9w8^7(6w/`.3+d+V", |
|
||||
"xian": "-8Z-8Y-7b-7,-30-2m-2d-2b-1i-0O-)o-'c-'E-'*-&O-&2-%6-#u-#:{`{!ycxXv`v&uKu>u.t`tZs~r~rOrNr9q`pUo;o:nBmylxlhjthhgCfhf+dI_a_X_R_'ZPYQXsWnWiVhVXVSU6U'QlQNPKNFMhGiFFEtDRC~ArA@>S=E=7:]:C7Q6*574*0l.=,s,G+f+c+U+O*|*s*T*,'3$c#b#Z", |
|
||||
"cha": "-8X-6Q-4D-/,-.t-)e-$A-$$~s{yvbu?o|m}kqj3]a]OZ7Z.XZX5WJW1NsM0LvK?I?GjEB@k,<%s", |
|
||||
"hong": "-8W-)w-).-(X-(K-(;-&{-%}-$)~i{kvXu6pqpjn=j[fvfBa*``XeVNQ[@E?y?<>@=b=S;J;B:R8J7U5(3|31+>+4'T", |
|
||||
"tong": "-8V-7/-6R-4Z-2h-,/-(}-&|-#Z}o|/mNm>m3h:f(c%`P`)Z1Q]P<O<K|KUG+F+AV=P7l4C4#18.~.0+s%%$s", |
|
||||
"dai": "-8P-6G-3W-)g-(B-(4|3{(w[m`ikiViMiFg[edd!_/^1PAMJJCC)ByB+5c,2*y)?'!", |
|
||||
"ling": "-8O-7X-0?-/D-)G-(#}h|>wwuqtKqdmdmVlQjhekY<R)OQMRJeJ5DND)?/<77=5'4O0v0=.I*z){'H!z", |
|
||||
"chao": "-8M-8D-.B-.6-,6-(S-!yjQj?j>ffd9]<VlQiOBGFG!C{9+7z4g303#22/v", |
|
||||
"chang": "-8L-8J-7j-5D-5+-5!-3|-2~-26-1b-*P-)~-%i-#8~v}%z=yZtWrdo=iDgReLd>bDaxT:RBQtPcIiAT<T<P2t,`+6)^)4(h'B&z&R%w", |
|
||||
"sa": "-8K-+2W<VPU:Dw?'>X7s5L", |
|
||||
"fan": "-8E-0)-0(-0'-,1-+R-)a-!hy%v_tDr;r:iwhwdi_h]l[ARvRtNpMLKXJrJAG,FD@w@g?4955t5_3n2E15.l.[(A&O&/&,!.", |
|
||||
"miao": "-8D-,m-)v-$?vDscrPh>gtgSX^NP<#;A+K", |
|
||||
"yang": "-8C-7<-6{-3[-15-,f-,@-*g-'Z|J{xwTukswmrl6l3e`d4cEaA`m^}]T[lXRU<T*RVR2PmNRMHL9I7HvG`FpB|A=A2A'>z>`8N6A4y4D4.2B+6*O)4%Q$|$@#F", |
|
||||
"ang": "-8C-*gn.RLQoN0!5", |
|
||||
"wo": "-8?-4s-4L-*l-(/-'&-%q-$atCtBsfi8^TZYYbYSXKV#SRN8I>@1=#<m<h;V;U7!6`3.,N'|", |
|
||||
"jian": "-8=-6J-5W-5P-4g-4:-3g-2s-2i-2L-14-0L-0<-.q-._-.W-.P-.4-.3-./-.,~6~'|bzmzaz2xovfuRuQp4oDiHhcg8fNfHeDaq^Z^Q^<^9[8Z>YqXmXjX7WmV!UGU'R{PpO_MoM(LEK3JgIfIJICI)HEG]FhFCEKE2DLC&BMBLA]>a>$<z;l;a;&;%:Q8T7P6H625k5f5a2a1l1Q/u/Q/2,g+%*W)<)6!2", |
|
||||
"fen": "-86-3}-2n-/a-(`|v|q|]xuw7vpv;n&ithog,dDa0_gR>OYOSN.K&J*J)F)A>@66}5i4v391=16+{+.", |
|
||||
"bin": "-86-3S-2EpAe}W?UNShJnImGXE:B^BO@r9I6q6Q6M6,+.(j((", |
|
||||
"di": "-85-7@-5a-4F-3:-*D-'}-&t-&$-%R-%&-#O-!(}0|h|d|@{Q{L{8zMyFy;x|w?tqsmrimUkIjoi`hBg:fofjeld#`7]g[g[=YFX]XGW2TLT!R[NfN(MrM3KAK:JCHiG7AI=g<};T9f9=3F/K.V+=*5'1%c##", |
|
||||
"fang": "-84-4}-+^|r{Qzcv5er^%TZS:S(RER6N/@<<M/Z'P", |
|
||||
"pei": "-81-7$-5o-'lzyvZvCuCtOs_k7iid7[eU5S5S,M'LyJUAj?u=F<@.`*=)d", |
|
||||
"diao": "-8/-0@-/f-/G-)1-)!w$njfzfYe~]gYHI|@m)U#p!?", |
|
||||
"dun": "-8.-(a-!2}}|sy!x~x}hNdPb2_mVYV.T2HnF>@'8*4c1@/!+m", |
|
||||
"wen": "-8,-/X-(M-(C-(&-%Jy`vNf)dfde]:X.WRSmQsKNHWH)C$B`@>;z;R:*4s+1*8(}(&$;$.", |
|
||||
"xin": "-8*-7f-5d-5G-!3-!0~%v<r,qFgTe$e#dHawa>SCR9N@N%D$C^4a3$", |
|
||||
"ai": "-8&-2W-09-)h-'!-&q-&5-%Y-$'-#]-#E-!;{SzIyfxUtgtUrxr'kaa9_7_,ZNYaT&T$QqP^P.CxClB.:%9t6U3.03(k(;#]!s!j!]", |
|
||||
"xiu": "-7~-5c-5V-''-$/~|p@mfmPh2N~G09~9F8I4+*P*#(N", |
|
||||
"xu": "-7~-7Y-6Y-6!-49-0x-,F-,E-*Y-)T-)+-'p-$e-$Q-#7-!o-!W}7{Wy,x+v&uxspsArFhHeXckcKc:b(`g^YY4XMTKT@RbRZR!QcP{O^OOLGI9GfC|CtCiCOCKBw@5@4>?=t<>;+;):P9r998W8B433W2H0m+t*N*?&;%T", |
|
||||
"tang": "-7y-5+-4M-3l-3U-1v-.2-&.-${-#.|XzpyukdilaA^cW^V~OsJFH%F{F<@P<T:h:G8n5D3i23100A(u", |
|
||||
"huo": "-7v-6r-5T-.Y-.1-(p-'W-'D-$e-!%~V~Fw^vouWf.f,b'^OZ/Y4UPU4RkO|E9@%>/:f8U6y6Y6+525127+_#@", |
|
||||
"hui": "-7u-7#-2u-1{-+H-+.-'/-&j-$[-#=-!f-!U-!D~p~,~&}u}Fz]xztEsgr7q]onn?n>i*gmg7g5f6f4f3e,e*cDcCc<c(bfau`H_x^sZ|ZQX>VEQSQCP|PQO]KeIOI3GRF4EiEZEQDqBVB>B=B7@n?D>h>g=y;+:S9X897x796y6:5,5)3t3q3k2h0y0q+h*9)G(=(2$~$)", |
|
||||
"kuai": "-7u-6@-2M-/p-&f-!8}:|ez&y'jEgMdXUkRrO]Cq=y79.*+g(2", |
|
||||
"cui": "-7s-5?-3N-04-%I-%>y8lYlWkhdSbE`TV|IxH*GHAg<48P6a331g)p(b%I$L!d", |
|
||||
"che": "-7n-5`-4I-,%-'y-&*|?vln|nGene/]QY.XcVsV>V<7`3r3b3E0C", |
|
||||
"chen": "-7h-4_-3e-2'-#|~ZyWyAw]pGoBdRa>[aY]THS~QAP$L[K_K'J(HUG3D]@+@*2n05)l%P$?$$", |
|
||||
"xun": "-7g-6O-4.-,Q-,A-,)-,(-+5-'3-!k-!P~u|y{=yixYxAw#uHqKq9o`oOmEj@j&j#g=ebe>c]`uXUTfRcP(NqL_KbF`BvB@Au@Y>5=r=l8+7y6V583O2h1{1D130j0Y0Q.5+b*H(L&T", |
|
||||
"chi": "-7c-7M-6b-6P-5E-3@-,W-,K-+_-*]-)<-)3-))-(:-&W-$z-$I-#l-!g-!=|@|)yLw/vBs6n|fsf$eweve6cBc9`X`7_|_2]`[f[!ZvZ/W+TxTCSNNcMPM3G1ChC6C4BX@T?Y;:8g4~4;3U1K.O'A$Y$U$E$2#G", |
|
||||
"xuan": "-7b-2N-/.-)o-)'-'(-$Y-$Mz)wsv&sWrqr.p]f[cobMaQaI_I^nX_SyS'RAR,QeQ$Q#PNK@HxHwEf?#;I8d4M3x2e+L*s*)*&)B(Z'~%/#E#<", |
|
||||
"nu": "-7a-3r-,svjq?ilfed1Wo", |
|
||||
"bai": "-7`-6z-(1-&:hJ[?[>ZwYeX}WAUfUCTAMFLN,n'D#*#)", |
|
||||
"gu": "-7_-3T-2e-0F-)I-'s-'N-&<-&;-%G-#y-#@}gzfx#uhrUq@o&lXl=j5j4d*`~]_]9TSNaM.K<JIHFGzF$D{B<@K?R?=<X6P6./P/@$Q!L!G", |
|
||||
"ni": "-7^-7]-7.-4v-2>-27-+8-(%|Nzsznv/v)t<rkqkq0nznbnEcvb5`{_,]0[i[<Y5UQS$QuQ7PSMPJ&E6@y?)<=9x6o.F,l%b", |
|
||||
"ban": "-7Z-.!-+,|z|Yutn0d2]R]M[OW]W[T[ScSbRJOSN;MM:c/x*>'Y'R$*#[", |
|
||||
"zhou": "-7W-6M-2X-0{-'|-'z-'Q-'5-%X-$i-!G~{v.t/pgjCiceIY%QnQLQ<I|>8<S494'*S'9%W!R!I", |
|
||||
"qu": "-7U-7E-7+-/H-,q-+S-+=-+7-)t-)s-)W-'e|Vt^nnm{m]k?e%`&^0[^SzSIOnOOD=D4CzAL>)<3;[5U3G2o0D(K(8#9", |
|
||||
"ci": "-7T-7B-6m-47-17-/+-/'-'t-'r-%@|*q}j3h<`hN|MILHD&C??56Z*p*k'E'6%=!{", |
|
||||
"beng": "-7S-#w-#+{R{#zgyXw!lBkYX0>v)d)[',&k&j$a", |
|
||||
"ga": "-7Q-'M-#A-#/-!4wIwDoEo>o.RaOM+C", |
|
||||
"dian": "-7K-7:-3m-18-**~M|P{lyBxfw6v~t6t!kXj]jNjMh@ao^!YOTrTWT9I_GqG_FPF5B?<a9k764?*u)s&c&`%1$W$$#L#=#6", |
|
||||
"tian": "-7K-56-1>-(7-%`ylybwYvit=nodgc2b:Y#WPQ?LSB{?U<A<$;2)g(q(.&}&|&h&`&L&F$W", |
|
||||
"bi": "-7D-78-73-5F-45-+c-(h-']-&k-%?-#Y|jzVxgwLvnv:u}twt1r3qonrlFi|huhthPgLg'fRfQfJeme!crciaJaF[YT;SqS+OXO!MUM!K;I<HPB)B(B'B$A|Af?x?C:u9Z9D7q6e2`1p.%+y+x*`(:&W&V&G&5%^%H$T$S#'!o", |
|
||||
"zhao": "-7C-1k-)A-%X-%T-!y|#v+j*]B[@S!Q}P8OBM{J,E*?S6S4T2G0r0:09.7(m!F", |
|
||||
"shao": "-7C-,p-+~-*a-)A-&Vu,oIf^Z'R|NhM?K(7v3m2s17*m", |
|
||||
"zuo": "-7>-72-66-4E-'L-&,-#!|lmtmsj;h0d6YTV4R%M7M&)e", |
|
||||
"ti": "-7;-5N-5'-4R-/!-.n-*;-%H-$y-$3~w~rw?smsPnmnYnVl2foeCe6bnbjb#b!aU^)ZHY*X]XGU>OaONL$JxJCCQB]=0;T8O*5)A'r", |
|
||||
"zhan": "-7:-4>-2y-*s-!IrQnamRl>l)kCkBk.j|d+b0^M^?^5W|SJSGS0RsMjLiL<KmJ?HLFCDEAyAQAO?Q:|)q!F!4!$", |
|
||||
"he": "-79-,_-)$-(v-(/-'o-'Y-'W-'&-&R-%<-$Y-$W-$1-#d-!c-!!|,xVuyp6mJb&[jTROiOZMNL8I@CsA^?]<i;M7R3P2m2'2&0k0e.8,C#^!W!<!:!6!1!,", |
|
||||
"she": "-76-*E-*9w/v|oVfP`_`;^h]'ZyZbYjX:WEWCT|EEDACJ?@=<<f;s9Q5Y,W&*&)&$", |
|
||||
"die": "-74-)M-'>-&t-%H-$j{szSmDl/kIi3c}cPa`^IZbX:QwP!M2HsGUBcAK?I0*/}/n'_&#%q%j%i", |
|
||||
"gou": "-71-3p-0y-+z-)H-'p-%W|C{uwdwcuTs0mnfM[CX%VcN6M^Gm?q:925.C*o%2", |
|
||||
"kou": "-71-0f-.C-,g-)J-)DpCp8fId3]^[|VpTV9@", |
|
||||
"ning": "-70-6>-4a-29-0.-'H-!)r%q!p2p)p'p!ot[4UMM5F/E5?17J6k.<+a&i", |
|
||||
"yong": "-7*-5t-3M-,U-,T-'T-$t-$+-!:{Oz!yCxcrlkUg{gAe{ceb{bzapaC`w`n`:[6XTU}M4LaGQ@}>x=9:p947:5T/{/i&p&l%)#S#8", |
|
||||
"wa": "-7)-/n-,e-(/-'P-'&-&x-%h-%A-#y-#nu5tbt3sGnCije[ZaWUTq>.:;8h'V'D'>&A", |
|
||||
"ka": "-7&-*r-'O-'M-'4-$u{g", |
|
||||
"bao": "-7%-5h-21-/>-.e-.]-,!-+{-+s~ozPzOz@sBqBpcpMp$ohoee&d:[w[kPPP1P&M]614J2<0_.u.h*G", |
|
||||
"huai": "-7#-',|mx^xIe_dC_:^oGhDX<25z", |
|
||||
"ming": "-6x-0g-06-(|-'guEs&`aXxR@PhOFH<>0:7,8", |
|
||||
"hen": "-6s-&p-!3eac6[0.:$y", |
|
||||
"quan": "-6p-1H-/.-.#-,5-,#-%%}X}Q{4w5u:t;q[m?jRf`c0b_b%['Y`WKNxJ:I[H_GLFjD>?F>F:a5841/I/H/7.o.n.m.O)2&I%'", |
|
||||
"tiao": "-6o-%Xr#pWmjmWh4cRZfSQRdQjOLO'NYK.Fo", |
|
||||
"xing": "-6j-5.-1<-/U-&g|0{auft{t5qljAh`f*cxb>aZUYR/P4Nl>Z<u9d2d.N,L)@![", |
|
||||
"kan": "-6g-4G-0r-/r-/]-,D|n{!zGyDlkl)k{b7^D]ELRG]E2CeCc", |
|
||||
"lai": "-6d-5Y-5<-%_u!t2lil_h$eSeHU2NUJiJ0DT=&<)6r5v5r,i)k%R#P#J#?", |
|
||||
"kua": "-6a-'.{iwJuGcGZiQcI:", |
|
||||
"gong": "-6`-6N-1D-1?-,~-+g-+d-)w-%}-$)yepTpQj<j8i2g4f{c1a*``[)[(T^N`L?@V7U1u*R", |
|
||||
"mi": "-6[-0v-0n-0b-'9-#'yzqZpmpDp9m6i:i.hrfifafAcb^dVnU_TyTON2HIG$E6E+@L?{?Z?C>G<9;H9<8o6o6l5n5G1z0B,a+T'h", |
|
||||
"an": "-6W-5J-4<-2D-*P-*J-')-%e-$x{b{&z_sYpwn@n8mXm:hXg~ZnXNQ.PnL'L&A1>M.g*w$V", |
|
||||
"lu": "-6V-33-1C-.H-,N-,<-*q-*o-!N~q~_};|G|5yVyUxMtVmChGgZgFf9f8^7XzW)V)UzUAU/O{MpLeJ#G&FyEuDvDaARAM>s<K<;;p9:9'8.7L6@6)4p1m0T+W+H)Y(Q()'m&n!%", |
|
||||
"mou": "-6U-,c-)x-($-&azLcVTTMEKs/a", |
|
||||
"cun": "-6J-/Z-(~x'qLocdn[%Nj7^!O", |
|
||||
"lv": "-6F-63-4#-38-23-,'-*x-(t-(F-&G|+nTnSnPl(e^`A`5ZcZ*YwS.K*HTDsDoAYA)9M6D3A0]+I", |
|
||||
"zhen": "-6C-67-4)},ygybuMs*p5ndiUiRi<fc[nZlZGXWWOSTR*OJN$MhLVKjK_IHHuHLHAG_FVBb=~:y:$8$72,+*_*^({(q'8&Z&<%9", |
|
||||
"ce": "-6B-4*-1%-1#-*=-*2wZgrc!aY_jZ}TQLl={;O&8", |
|
||||
"chai": "-6?-2@-$h~?j3[UL}.i$'", |
|
||||
"nong": "-6=-2S-0p-&b-!Eg.ZmZAElDG=s7#0o#W", |
|
||||
"hou": "-6:-5*-*8-({-(L-(K-'p-$l|%zQi=e]>b._,A$C", |
|
||||
"jiong": "-69-3'-1.-1$-0}}z|K{;]~]}?M=J7e4t4I3c2T2S1W1.", |
|
||||
"tui": "-6.-6(-3&y'tmo$ftfodrY(F>24", |
|
||||
"nan": "-6+-*|-$r~'~#v=tzstrb^e[sXfPqN*M6H}:d29&a&?", |
|
||||
"xiao": "-6*-5v-5R-3a-.x-,d-'j-'1-&l-&P-$}-$1-#D-#?-#&-!|-!v~c~J~CuUtHqGpPpJoKlGh/fFcJ_iX;V:TPT/SoSnQVQ'P;MiMaLOK+DOCYCLBAB4>B===8<Z8E6!5+5*4,3L2&1L,o+r+o$t$o!i!b", |
|
||||
"bian": "-6)-+9-*u-)UwzmKg1eAdVaX^#]=XSR#@A@@4Z26/o,@+`+,':%8", |
|
||||
"pian": "-6)-4P}ysI^#I=Ht/y/0,@+`(j((", |
|
||||
"cu": "-6%-+$-!csFegd(_YEsB},X$I#z!H", |
|
||||
"e": "-6$-4K-2k-+j-*T-*N-(_-(E-(*-'A-')-&X-!j-!A}s{nzhzIzCv$uzuBtotUtTtSn]n)mGm'm&l+gnc'bOata?^+]DWsWdWNUbTMM}DZCEC(>M=5;9*7)`$V$O!r", |
|
||||
"guang": "-5~-2}-1h-'@{~uIhXhTgOZsVKL+>28)5/4b4_4^3s.d+Y*U", |
|
||||
"ku": "-5}-/3-&Q-$6~R}PzrhDh+gN]dZiZ5OPMgL!I%3N.>$9", |
|
||||
"jun": "-5{-2T-0q-(n-(G|u{NuHollq_;Z3U5TzQPKMJH@F=l6V3G1B*1&'!Q!K!J", |
|
||||
"zu": "-5w-5?-+1-+$-&S-%rlYlAd(S#M1Ix0'*e", |
|
||||
"hun": "-5s-4o}_t9t'o9dMaz`oYDR?Q~JYJRBf=u<d<(;=:t:`9{3O36*9)G", |
|
||||
"su": "-5n-3x-2c-$*~9}/{3y}y|wjs#p@a(a'_lVnKKJ2H;G(F~F8DYBo?2>>=4:&9z828&+F*L(F&r", |
|
||||
"lia": "-5[-5>", |
|
||||
"pai": "-5Q-&sg9eP[NY?JU?p>+;j;8/t.w,q", |
|
||||
"biao": "-5O-36-2/yJtIryi%f!VfNhLjFzEG<.9C66511o0c,k#|", |
|
||||
"fei": "-5M-.m-+M-*4-(i-%8w%vZt@t?nXh8gpgPbH]xSdQxQ%P:OPNLLxJVH5FOF)Di?W<C;x6K.`.H,p%3$]#a", |
|
||||
"bei": "-5I-57-4B-4%-3b-37-,Y-+a-+%-(1-&:w|qIh#bdbGajaR`$X3RMNLNKLyK^K5JUJSIq3:/S/).R,y*/)T!@", |
|
||||
"dao": "-52-/g-/e-/6-)E-#K-!5xSo_oLmvlvk;k:jiiKhld{b=YoYcWqUZO'JkIaGZEIE?AA3;0g'd!+!&", |
|
||||
"tan": "-51-3^-3/-2R-)4-%$-#P-#I-!n-!m|o|a|U{'xxxsxaxKtAfTfOfEdtcfb$_p_W_OY/W=UDTuR5PJP=HYF5EnCUAk:w9H7|7{7.5E4K1G(3$}$^#~#7", |
|
||||
"chui": "-5/-(O}T|9{Va|Y[WcKtJ6ItGl4o", |
|
||||
"kong": "-4{{+qPlfcNb;Y)Iv<n", |
|
||||
"juan": "-4z-,h-,P-,0-*[-((}X}Q{Iw<w5uVtut;jpj`j%iYf`byb%`4Z%Y`OGL%K@J:I[=2<^3M.!+j'C", |
|
||||
"luo": "-4r-1y-.|-'4-%(~<~/o^mHZ*YbW(U@U3U/T{TlOvI^D9>q>O>N;y8^6F3{/(,T+P*M#y#5!Y", |
|
||||
"song": "-4q-3I-0D-)'u8pulDk^kOgydYdAb`a3a$`D_MZ#XXW0N<N:MmM>K%J`HyEF<B9!6v", |
|
||||
"leng": "-4p-0T-%uzdz,lQa1J5I!", |
|
||||
"ben": "-4l-$E|q|pwSwPw.w(YXV8O3LQKXI4?B;|8]4v/8&=", |
|
||||
"cai": "-4h-4,-%N{%tLp?f#]t]qY0NkJZA},Y", |
|
||||
"ying": "-4`-3.-%1-$>-#*-!K~Oz%x#s{sXs9s%quqqq_q%kcj[jWhCgDexdha/_AVwV_U0U&R]R.Q:PwO?MHKpK]J{HvHdFbDMDI=_;E:U:K9d9O8K8F6j6i6N6=6&5~5o5j5M5A2w2r2_1x1)0b*:)*(y(S'i'5'%#j#;!B!;", |
|
||||
"ruan": "-4[zJxQsiVWOUE0):'}", |
|
||||
"chun": "-4Y-&7sda^RPR(PlOONDIBGrFQE(=T<,:[9N8u/6)C", |
|
||||
"ruo": "-4S-)[sskPf]Z:YUI8;y3'0^", |
|
||||
"dang": "-4M-2P-1V-/k-!1}*{fx]swpkl6kdf:aAZUUsTpKiEYD5@|8:7E5D*;(J(6'?%}", |
|
||||
"huang": "-4@-1L-/w-$PzDz.xtw&s[pEl9jBi0e@clcQa_a#`dXTQgQfPBOEHbH7D{@9:x9i8)4:2c2.1J0X+w)((E#i!}!g!Z", |
|
||||
"duan": "-4+-.Uz+s`SFS<IMBIB62j)0", |
|
||||
"ou": "-4(-+=-+7-(q-(K-(3-#;yTd?`EDpC}CSBJB8?l8s1Y'M'0", |
|
||||
"zan": "-4$-2.-1x-1o-'2-$c-!e~:p>[$XOVUU8U*TwR1Q&PYKrEy6E5K't'k'c", |
|
||||
"za": "-4$-+Z-'b-'X-'2-$c-!c~B~:~5i}]s[$NyKr?r?a", |
|
||||
"lou": "-4#-38-.}-$7-#ByMu4tRo{n[kjkEg_`5X)W'HaG#:O9&8~1i'2$5#o#n", |
|
||||
"sou": "-3z-0J-)Q-)N-#z-#R-#QgsghZ#YvWlW>W0V:U`UBJ/DgCn:#,5#s", |
|
||||
"yuan": "-3u-1n-1)-0h-.z-*3-*1-)y-(0-&^-$Y-!<}{}t}Z}R}N}M}D{t{_yawlv6v(sSs:s)qhpep<f[cwbyb,`qXoX8NNJ=HxH>H0ErDk@/<m<*;{;v;r;g:e:F:D5]04,M,6)/", |
|
||||
"rong": "-3t-3`-0u|ts8s'qzp~pFlwkokcjj^WX#WwOyLmHGH.H&GQAsAU9|6%3T1v0b.2)#", |
|
||||
"jiang": "-3p-2a-,7-+Y-+Wz/xew~w+vvvru]oToSkMfrfWfVfSfCVyVeKdGDEoDeBQ@U>P>#;L9A8M.|,&&B%y%n%m", |
|
||||
"bang": "-3n{^ypiNi5h~hme|Z?YrWvS2KEJTJSH@=j/m++", |
|
||||
"shan": "-3h-3)-2R-/F-/<-.a-.E-*~-$q-$F-#H}'{Gy+y*ulubr2nDj|i(f+]zZ;Y3XuXsWaVhV?UySvQ8NrL|LlIVFSEhCI@`7|7p7O5F4B2Z211~.4*b%U%1", |
|
||||
"que": "-3f-*_-*W{Pyty$lgbNa+`KX!T8T.JBH$@j4e0|)O#q!N", |
|
||||
"nuo": "-3Q-1w-$ftxa6_#_!ZLXnWoWbWLK0HJF2Am", |
|
||||
"can": "-3P-2F-)l-)k-)j-)i-$D-#H~:r(q3amah`W`V`U_[XsVqVhO_BtBg;/784z1!0L(9", |
|
||||
"lei": "-3O-24-1t-,J-)q-#1|(z0xOx?rrU|U;G'E]DyDxD/?$>I=+<F5X'z%u$)#Q", |
|
||||
"zao": "-3L-/h-&(-%w-$5-!@`JRfMsLkK>JO7F5&2>1#(](7#&#%", |
|
||||
"cao": "-3L-#GnGk@`v`k`^_DVAUqOgOfG:8x", |
|
||||
"ao": "-3H-/n-*&-#X-#W|H|4xnxkv}vyvwsDs2rZmxmakAjnga`O_@]I]![DVuUeTBM*K=?>9;7M741m1^0Z,!+~(Y", |
|
||||
"cou": "-3D-0:Hl;1", |
|
||||
"chuang": "-3B-/b-/K-/5-.s-.i-.L-$T-!dhvhMd=`|W7O<F+0#/r/k%D$+", |
|
||||
"piao": "-36-.D-,;-#Crteze7`]RuO*Br9/.v'Z!X", |
|
||||
"man": "-32{KyKujtlrpn^i'bc`M`=VrOdG9Fs:V9P928b7<701V,(", |
|
||||
"zun": "-3%-!ix}oPk&[%YzVILEFU5k", |
|
||||
"deng": "-2z-/t-!VxwrHk(_v^@E$7d6/5.1A(O#,", |
|
||||
"tie": "-2s-'yigd+", |
|
||||
"seng": "-2o", |
|
||||
"zhuang": "-2hx9x8x2w)vWv@tphvhShE^a^`^_VDKcKBG6:`8X3H.e.Z", |
|
||||
"min": "-2`-0Q-/E-,X-(&|1uumYl]dfded8bJaWaG`S_`[]YhTUTIT(RSRRPzAH>|;z;+:t8(+1*c)o)j)=$R!D", |
|
||||
"sai": "-2V-#b-#)-!/yod%a2XaAxAb", |
|
||||
"tai": "-2B-0_-)=}e|Mw[wXwOvzqvqCdodQdB`e[pU]SpR]MeE>@f@D@C>{:=4G4F1$*f", |
|
||||
"lan": "-2?-1@-)}-%P-!'~3|hx`xXt(qgqaqUmwkwhgb)_8_'^p[5X/UXU(TmSaS_PpLbHXDDD2D1=^9L8i7K6W5`5W5=5<46121%0n0d0I0@0>($'j", |
|
||||
"meng": "-2;-0k-,Lwaw`qEo2hnh*_._+^qXtUaP)O9K$F;EAANAF:A6h,Z+]'/&X#B!#", |
|
||||
"qiong": "-28-*fr.pza]`!K}F(3(3%2L1}*))J(G's'f", |
|
||||
"lie": "-25-0N-/O-,z-,w-,`-'<-&G{D{CuDjaj=djZeZ_YiUEL;JMA{>_=p403f2A1$0a0[.x,h,V+k+[", |
|
||||
"teng": "-2%i+9]8r1e%6%&", |
|
||||
"long": "-2#-'J-&]~^|7|6xHxGo2n=k6j_j^g.e([9U.QmOxO8LgKDGYDU>t:g9T9%5w0N*Z'n#f", |
|
||||
"rang": "-1}-,$~Nx[xC^mU$5b0K+S'X", |
|
||||
"xiong": "-1m-1j-/q-+v-+p-&zwsdLc?Sy@;>42w2r2#2!", |
|
||||
"chong": "-1l-0Y-#L{*p`oflelde0dc`+_dX<W8?z=K=98X0F*@%&", |
|
||||
"dui": "-1g-1e-1`-%L|$zlymobo]oMcc_n_m_*TET>T2NB6[6G5|5u$P", |
|
||||
"rui": "-1g-1e-1`-)LxFas]0M~KVF.@G)'&t", |
|
||||
"ke": "-1f-/*-.w-,]-,R-+;-)>-'o-'0-$!|Dzqx4u#p^oUmomIkvknjqc4bra<a;XJWsT4M%J1G|F}CcBCBBA/;u;G:>6U4U0!/N//*j%>$O", |
|
||||
"tu": "-1c-1]-0H-/o-(y-&3-%?}n}c}J}I}A}?zezZyvxipvnUlskikFh.gVeVc}bsZ.YYX@W2K?EL@R=C=::r7u(i$r$>", |
|
||||
"nei": "-1I-1*-&TtvA<A;=H", |
|
||||
"liu": "-1C-/N-.8~fy^s5qik`gl^vW9S4S*R}L~LpKnKQH'FHF#>(=w::8Q7V631r1[*a)~)%(v(?&S&>&%%r$(#d", |
|
||||
"shou": "-13-)`-)V-%l-!o{ox)x&pxo[]v]uYITcTN<t.1+n+X$e$&", |
|
||||
"ran": "-1+-1&-(!-##umsKMBF'2y1Z1F*i", |
|
||||
"gang": "-1'-0^-/L-.gzjz4mzmplT^a^`^_]fYKWDNZJEGe;L2z2v/W/:.a%Z", |
|
||||
"gua": "-0~-/8-.r-.S-.A-*m-)F-(/-'s-'&-%0|Ooz[/ZuY6LSK[C`2='a", |
|
||||
"zui": "-0i-*6-'d-#U-!w-!*k<jmQ=O`OGLDG[F]EgEbD@6a(%", |
|
||||
"qia": "-0M-+;-*r-'6})m0iZc.a<[j[7YAXJUhBq>,", |
|
||||
"mei": "-0I~j|vz>yRv#sks]sTs4r<p/l&k|e)[bZBU%S3R&M|LoKFHzHjGgDrBfB0B/?~?o?d=I;?;7;32Q2J11,=+$*0)D$w", |
|
||||
"zhun": "-0E-05-%L}5zwpnnFdPRQ<,:@", |
|
||||
"du": "-0+-.`-+B-)p-#0z<vKv1uTqjh1SsQ4PvN_IcDlBRBNB+=(;n;Z6</s/h/5.y..+i)I'y!E", |
|
||||
"kai": "-/x-/v-/%-.M-,I-#J{ey~w0n3kag2dEc#aB`y`r`GXCPfHfCxCu6U4m3}", |
|
||||
"hua": "-/T-.>-+b-+(-(_-(.-&h-#%{@wGuWs}s|rJrDlaWTV}V+NAMvKfIgGKFX9a7c,7&]&+%~", |
|
||||
"bie": "-/A-/;fGe2`#M'M!$!#I", |
|
||||
"pao": "-/>-+i-'^~o|2w=hA]$[P?.4J4H3d06.M'^%A!S", |
|
||||
"geng": "-/7-&A{TzHlrh=ZIOlK4IX=X2p&M", |
|
||||
"shua": "-//-%j", |
|
||||
"cuo": "-.y-.p-*5wukWkSh!ZKY&WuV4(o$j$'", |
|
||||
"kei": "-.woU", |
|
||||
"la": "-.v-%3-$n~L|8[RXFXEWnUEU2R`MOI6DT:T0['o$A", |
|
||||
"pou": "-.l-'_-&[{]twtO]+]&Z+YGJS/<", |
|
||||
"tuan": "-.I~!}~}K}HyPy&f7`>[}XIVmGLE;;.:m8t2[,F%v%p", |
|
||||
"zuan": "-.)XOTt", |
|
||||
"keng": "-,x-([|t|kvIZCXlVgBF/C", |
|
||||
"gao": "-,Z-(I-(>wRlpWjNHGxGwGdG>E~E3Dm,)!y!t", |
|
||||
"lang": "-,V-&J-$~{Jy[r{llgiSeOIOHO;KRHHG4Cp=[3Y,z*%(s", |
|
||||
"weng": "-,@-#oyxv{kfU!Pd9o'N'&", |
|
||||
"tao": "-+m-)E-'+-%DwPwMw*r}i/fl`j[oYBWXL,JkGtE?><=)<t<H9^6_(w", |
|
||||
"nao": "-+`-'n{cz[wqt.rzq8l{jyjSd0b~bPad_QZVW9VOKkFJ<J,D+Z+Q),", |
|
||||
"zang": "-+Oynw)g(/~", |
|
||||
"suan": "-+C,{$n", |
|
||||
"nian": "-+3-&i-%b{9uOhdg3dNbTa~[SYVVHV,U7HL=;<0:C2q", |
|
||||
"shuai": "-*xixiWW3+I&o", |
|
||||
"mang": "-*<-)*-&Zx(u(o2h*dkb|OENdNSAF@c=i8`/[/D.$$q", |
|
||||
"rou": "-)uslpsXdMAHc;d2K)>'v", |
|
||||
"cen": "-)l-)k-)j-)i{Un#kH@?=1", |
|
||||
"shuang": "-)byOqeq^`NDB>t8R5w5^0&", |
|
||||
"po": "-)8-&M-#6~]|ZvztMoZmlmZg9W]TXR+O*E%?E>q>o>D;*:J8;6F3v,9*l!`", |
|
||||
"a": "-(s-'o-%O-$0", |
|
||||
"tun": "-(k-(7-%L-!`}}|snFhNdP_mRQPFOC@x=335", |
|
||||
"hang": "-([{dwSvIj)dGS8NML/@.", |
|
||||
"shun": "-(ZHnF?", |
|
||||
"ne": "-(R-(8-(%-&T]0%a", |
|
||||
"chuo": "-(Q-&@-%=~Hu!t~t.ssqVa|^2Z}UuCC<q<J", |
|
||||
"wai": "-(/-'&-$gwml7C95z", |
|
||||
"guo": "-(/-'&-%)-$e-#<~.}r}k}f}d}a}U{<zTy>lMi@i$fDf@b1`Y_4XyW6TMMzJ$I:GOD{=#<W;U9#7!,c$<", |
|
||||
"qiang": "-(,-%f-%M-$.-#[y=y3xmrXr0k>gKfVfSfC^P^N^>[zWQW!VySKMlIvGkFdEJ:)8{4[1s/|/z,f,.*{(p%m", |
|
||||
"pen": "-('-$E-$=-!6CN;'6}'Q!=", |
|
||||
"pin": "-&~~Yuatnrvq{[AZ{H]@_/c+!)r", |
|
||||
"ha": "-&wvz", |
|
||||
"yo": "-&`-%c-$B", |
|
||||
"o": "-&X-$a-!H-!%", |
|
||||
"n": "-&)-#a", |
|
||||
"huan": "-%v-$Z-$Y~G}D{_zWw@w2r.q[pYp0okm8l!h]bVaH_I^iYpXQUnU1KyK2GBD%CPCB>1=c<~;c8V7D734/3>2I.[.;,3+R*})9(1'b$d$:", |
|
||||
"ken": "-%V{qxjc*_CX~*I", |
|
||||
"chuai": "-%=XIW}Ch", |
|
||||
"pa": "-%/vLisihd.]oX|NC@r8608)P#!", |
|
||||
"se": "-%,-$,yogK_<Z}VnUrLTGJC5C3>W<x;q7h7g6|6t60)p)&(0#r", |
|
||||
"re": "-$fa[YU;y3g1X", |
|
||||
"sun": "-$DqKq9]EYsW{WzW;H1Gv.',:", |
|
||||
"hei": "-#h-!l7r", |
|
||||
"dia": "-#^", |
|
||||
"de": "-#5}0hBeQe5e1c)bFakR[JW<_##", |
|
||||
"dei": "-#5eQ", |
|
||||
"kuo": "-!`g`]W[:[/ZsUI8U6L", |
|
||||
"ceng": "-!_ntnQk4OcObF*", |
|
||||
"ca": "~s~B[UUWU:", |
|
||||
"zeng": "~7y5y._}OcObF*1R(M'*", |
|
||||
"nin": "~(c^bQ[*", |
|
||||
"kun": "}q|Wzoz`x/x*t'l[lZbwZ0RHQMJv=B8C371U,e)_(g", |
|
||||
"qun": "}jwxpRl~iPCT", |
|
||||
"ri": "}iRjA=", |
|
||||
"lve": "}Go^Y1&2&0", |
|
||||
"zhui": "|[y0w#t]aaXIIt?s'<%|", |
|
||||
"sao": "zus+`k_D]UYNXrWtK(AP:8$4", |
|
||||
"en": "wBmBc5WF20", |
|
||||
"zou": "w3s>Y%X`W~J/J.Hl", |
|
||||
"nv": "vkc7OM@!", |
|
||||
"nuan": "vcPo;`:m2X2W", |
|
||||
"shuo": "v]a'WhT'S|OKGnCn>>470W+p", |
|
||||
"niu": "v?q=dKd0]S]![DN?@8@!4u/e/d.W", |
|
||||
"rao": "u2rA]PU?KkFJ", |
|
||||
"niang": "t|r&qb", |
|
||||
"shui": "t]iTZMYuA$A#@{=.=*", |
|
||||
"nve": "t)%S$%", |
|
||||
"nen": "sirarYc^", |
|
||||
"niao": "s!r+qsnwFq9x", |
|
||||
"kuan": "pBp#ooK)CoCfCd", |
|
||||
"cuan": "jPV'U*T~TwDtD7BU@o6E5K1S0<", |
|
||||
"te": "dsdr`R/F/9", |
|
||||
"zen": "d5VU", |
|
||||
"zei": "^H", |
|
||||
"den": "][]C", |
|
||||
"zhua": "],ZYV#ER0:09", |
|
||||
"shuan": "[&L^GL<s", |
|
||||
"zhuai": "Zz", |
|
||||
"nou": "WoGpE0+^", |
|
||||
"shai": "W<TsQWOt", |
|
||||
"sen": "J8ISGI", |
|
||||
"run": "FE<{8'", |
|
||||
"ei": "Cl", |
|
||||
"chua": "Ci" |
|
||||
} |
|
||||
}; |
|
||||
let DB = { |
|
||||
sToC: {}, |
|
||||
cToS: {} |
|
||||
}; |
|
||||
let sToC = DB.sToC, |
|
||||
cToS = DB.cToS, |
|
||||
ungroup = /-?.{2}/g, |
|
||||
rg = /^-/, |
|
||||
fromX = str => { |
|
||||
let result = 0, |
|
||||
temp = 1; |
|
||||
for (let idx = str.length; idx--;) { |
|
||||
result += temp * (chars.indexOf(str.charAt(idx))); |
|
||||
temp *= 91; |
|
||||
} |
|
||||
return result; |
|
||||
}, |
|
||||
fn = (a, f) => { |
|
||||
let p, gs, i, ch, num; |
|
||||
for (p in a) { |
|
||||
if (a.hasOwnProperty(p)) { |
|
||||
gs = a[p].match(ungroup); |
|
||||
for (i = 0; i < gs.length; i++) { |
|
||||
ch = gs[i].replace(rg, '#'); |
|
||||
num = fromX(ch); |
|
||||
ch = String.fromCharCode(base + middle + (f ? -num : num)); |
|
||||
if (sToC.hasOwnProperty(p)) { |
|
||||
sToC[p] += ch; |
|
||||
} else { |
|
||||
sToC[p] = ch; |
|
||||
} |
|
||||
if (cToS.hasOwnProperty(ch)) { |
|
||||
cToS[ch] += COMA + p; |
|
||||
} else { |
|
||||
cToS[ch] = p; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
}; |
|
||||
fn(SDB.m, 1); |
|
||||
fn(SDB.a); |
|
||||
SDB = null; |
|
||||
export default { |
|
||||
getSpell(chars, polyphone, spliter) { |
|
||||
let cToS = DB.cToS; |
|
||||
let res = [], |
|
||||
pp = typeof (polyphone) == 'function'; //判断polyphone是否是函数
|
|
||||
chars = String(chars).split(EMPTY); |
|
||||
for (let i = 0, ch, ss; i < chars.length; i++) { |
|
||||
ch = chars[i]; |
|
||||
if (cToS.hasOwnProperty(ch)) { |
|
||||
ss = cToS[ch]; |
|
||||
if (~ss.indexOf(COMA)) { |
|
||||
ss = ss.split(COMA); |
|
||||
ss = pp ? polyphone(ch, ss) : '[' + ss + ']'; |
|
||||
res.push(ss); |
|
||||
} else { |
|
||||
res.push(ss); |
|
||||
} |
|
||||
} else { |
|
||||
res.push(ch); |
|
||||
} |
|
||||
} |
|
||||
return res.join(spliter || COMA); |
|
||||
}, |
|
||||
getChars(spell) { |
|
||||
let sToC = DB.sToC; |
|
||||
if (sToC.hasOwnProperty(spell)) { |
|
||||
return sToC[spell].split(EMPTY); |
|
||||
} |
|
||||
return []; |
|
||||
} |
|
||||
}; |
|
||||
@ -1,23 +0,0 @@ |
|||||
@font-face {font-family: "iconfont"; |
|
||||
src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMoAAsAAAAABzAAAALaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDHAqBbIFSATYCJAMQCwoABCAFhG0HRhtCBsgOJUGS2IBhSABBPHyN/f7c3UVEk2hkSKLNE9NNSrBEgkhrJIYS7JuG/v7Pv7cbyBNUBB7u+/D8Cczd0qrAKui2UweV2+2Jz3M5bQIFMr+d5TbWojXpyo96AcZbAxpr0xYuoAS5pXYRBwav/GubCdQbFslkvbiyEawVpFcgLhUyDqx7fkWJUrVC9czEIh5YqE136RTAvf5+/IP4qCWpysjA3eMiEXJ/OnyLyVeVK52SRnqdC9E0MmaAQpzOxveZiYhjpr65uTmgVq3EVTXhP2MqFWvjw2L6l0dIMlGNkBvBrJfI/HTgBMHPcILEzxiSDAjR1faT88CGzx5UBz2+19V1ZP+Ku9i8v3xj0oPb8/DYW/HyOvCSHUz14N7Vleu2waXja7bOy1cOj1ridz1feeqBe5fDdm2dr93ynUqZbj7cXLr14cePR99QnyP4HxIbUmdfHxcc//rLnQ8Udwy/eHERdvFCLbSSeTLhHOI8cZIp+nn9/Hx4LPDc6fx1uum/+27vJ0s30CNb5dvUA0B+MVUAkD+bPkH2b3y7s5Xb45T5z7qhgFfGPmpTAdMCxqRgKWqlwJxSyom1lFzBJZWv6AX1SKhXD4SmafflCl0XOJtQq+uAr8ZQi6zWCL2wZ1ClwSyq1VpCvWkl0xt0oMxEqcOUOQeh1X0kzZ6QtTqjF/ZnVOn2F9VaI6PeXrgt2GAszmwLKHIMRcIPEYWg00rMzmxNZj3K+tQc7co1txmpUREicdGxw1QJapFeMcTYL4tnTCIS1WlIsbMdqtU6oqc6JQosWs6YPj0mRpq7UbSg04CtNRTiMEhE8IYQCgIdLUkWZmxHn6+HZPqocegKZSHaDFFGivqJONFiAfQSjRZE+ZVrjPrJxGMYCSGhdDSIYseF1DSuQ+jn2ykhARNNfiCqly7GyydBNdHP6zR/uAjqkcVLpMhRokrVgRwFla1SwWmZrm9Q6awaMwAAAA==') format('woff2') |
|
||||
} |
|
||||
|
|
||||
.iconfont { |
|
||||
font-family: "iconfont" !important; |
|
||||
font-size: 16px; |
|
||||
font-style: normal; |
|
||||
-webkit-font-smoothing: antialiased; |
|
||||
-moz-osx-font-smoothing: grayscale; |
|
||||
} |
|
||||
|
|
||||
.icon-check:before { |
|
||||
content: "\e60d"; |
|
||||
} |
|
||||
|
|
||||
.icon-arrow-down:before { |
|
||||
content: "\e62a"; |
|
||||
} |
|
||||
|
|
||||
.icon-arrow-up:before { |
|
||||
content: "\e62f"; |
|
||||
} |
|
||||
@ -1,36 +0,0 @@ |
|||||
.loader-one { |
|
||||
width: 50rpx; |
|
||||
height: 50rpx; |
|
||||
position: relative; |
|
||||
-webkit-animation: loading-one 1s infinite linear; |
|
||||
animation: loading-one 1s infinite linear; |
|
||||
} |
|
||||
|
|
||||
.loader-one, |
|
||||
.loader-one:after { |
|
||||
border-radius: 50%; |
|
||||
} |
|
||||
|
|
||||
@-webkit-keyframes loading-one { |
|
||||
0% { |
|
||||
-webkit-transform: rotate(0deg); |
|
||||
transform: rotate(0deg); |
|
||||
} |
|
||||
|
|
||||
100% { |
|
||||
-webkit-transform: rotate(360deg); |
|
||||
transform: rotate(360deg); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@keyframes loading-one { |
|
||||
0% { |
|
||||
-webkit-transform: rotate(0deg); |
|
||||
transform: rotate(0deg); |
|
||||
} |
|
||||
|
|
||||
100% { |
|
||||
-webkit-transform: rotate(360deg); |
|
||||
transform: rotate(360deg); |
|
||||
} |
|
||||
} |
|
||||
@ -1,36 +0,0 @@ |
|||||
export default function isEqual(x, y) { |
|
||||
if (x === y) { |
|
||||
return true |
|
||||
} |
|
||||
if (!(x instanceof Object) || !(y instanceof Object)) { |
|
||||
return false |
|
||||
} |
|
||||
if (x.constructor !== y.constructor) { |
|
||||
return false |
|
||||
} |
|
||||
for (var p in x) { |
|
||||
if (x.hasOwnProperty(p)) { |
|
||||
if (!y.hasOwnProperty(p)) { |
|
||||
return false |
|
||||
} |
|
||||
|
|
||||
if (x[p] === y[p]) { |
|
||||
continue |
|
||||
} |
|
||||
|
|
||||
if (typeof (x[p]) !== "object") { |
|
||||
return false |
|
||||
} |
|
||||
|
|
||||
if (!Object.equals(x[p], y[p])) { |
|
||||
return false |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
for (p in y) { |
|
||||
if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) { |
|
||||
return false |
|
||||
} |
|
||||
} |
|
||||
return true |
|
||||
} |
|
||||
@ -1,3 +0,0 @@ |
|||||
const { http } = uni.$u |
|
||||
// 获取菜单
|
|
||||
export const fetchMenu = (params, config = {}) => http.post('/ebapi/public_api/index', params, config) |
|
||||
File diff suppressed because it is too large
@ -1,3 +0,0 @@ |
|||||
export default { |
|
||||
baseUrl: 'https://api.youzixy.com' |
|
||||
} |
|
||||
@ -1,45 +0,0 @@ |
|||||
.u-block{ |
|
||||
padding: 14px; |
|
||||
&__section{ |
|
||||
margin-bottom:10px; |
|
||||
} |
|
||||
&__title { |
|
||||
margin-top:10px; |
|
||||
font-size: 15px; |
|
||||
color: $u-content-color; |
|
||||
margin-bottom:10px; |
|
||||
} |
|
||||
&__flex{ |
|
||||
/* #ifndef APP-NVUE */ |
|
||||
display: flex; |
|
||||
/* #endif */ |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 使用了cell组件的icon图片样式 |
|
||||
.u-cell-icon { |
|
||||
width: 36rpx; |
|
||||
height: 36rpx; |
|
||||
margin-right: 8rpx; |
|
||||
} |
|
||||
|
|
||||
.u-page { |
|
||||
padding: 15px 15px 40px 15px; |
|
||||
} |
|
||||
|
|
||||
.u-demo-block { |
|
||||
flex: 1; |
|
||||
margin-bottom: 23px; |
|
||||
|
|
||||
&__content { |
|
||||
@include flex(column); |
|
||||
} |
|
||||
|
|
||||
&__title { |
|
||||
font-size: 14px; |
|
||||
color: rgb(143, 156, 162); |
|
||||
margin-bottom: 8px; |
|
||||
@include flex; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@ -1,21 +0,0 @@ |
|||||
export default { |
|
||||
// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
|
|
||||
components: { |
|
||||
desc: 'Numerous components cover the various requirements of the development process, and the components are rich in functions and compatible with multiple terminals. Let you integrate quickly, out of the box' |
|
||||
}, |
|
||||
js: { |
|
||||
desc: 'Numerous intimate gadgets are a weapon that you can call upon during the development process, allowing you to dart in your hand and pierce the Yang with a hundred steps' |
|
||||
}, |
|
||||
template: { |
|
||||
desc: 'Collection of many commonly used pages and layouts, reducing the repetitive work of developers, allowing you to focus on logic and get twice the result with half the effort' |
|
||||
}, |
|
||||
nav: { |
|
||||
components: 'Components', |
|
||||
js: 'JS', |
|
||||
template: 'Template' |
|
||||
}, |
|
||||
common: { |
|
||||
intro: 'UI framework for rapid development of multiple platforms', |
|
||||
title: 'uview-plus', |
|
||||
}, |
|
||||
} |
|
||||
@ -1,21 +0,0 @@ |
|||||
export default { |
|
||||
// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
|
|
||||
components: { |
|
||||
desc: '众多组件覆盖开发过程的各个需求,组件功能丰富,多端兼容。让你快速集成,开箱即用' |
|
||||
}, |
|
||||
js: { |
|
||||
desc: '众多的贴心小工具,是你开发过程中召之即来的利器,让你飞镖在手,百步穿杨' |
|
||||
}, |
|
||||
template: { |
|
||||
desc: '收集众多的常用页面和布局,减少开发者的重复工作,让你专注逻辑,事半功倍' |
|
||||
}, |
|
||||
nav: { |
|
||||
components: '组件', |
|
||||
js: '工具', |
|
||||
template: '模板' |
|
||||
}, |
|
||||
common: { |
|
||||
intro: '多平台快速开发的UI框架', |
|
||||
title: 'uview-plus', |
|
||||
}, |
|
||||
} |
|
||||
@ -1,7 +0,0 @@ |
|||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
isWeixin: true |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,2 +0,0 @@ |
|||||
uni.$u.props.gap.bgColor = '#f3f4f6' |
|
||||
uni.$u.props.gap.height = '10' |
|
||||
@ -1,173 +0,0 @@ |
|||||
<template> |
|
||||
<view class="wrap"> |
|
||||
<view class="top"> |
|
||||
<view class="item"> |
|
||||
<view class="left">收货人</view> |
|
||||
<input type="text" placeholder-class="line" placeholder="请填写收货人姓名" /> |
|
||||
</view> |
|
||||
<view class="item"> |
|
||||
<view class="left">手机号码</view> |
|
||||
<input type="text" placeholder-class="line" placeholder="请填写收货人手机号" /> |
|
||||
</view> |
|
||||
<view class="item" @tap="showRegionPicker"> |
|
||||
<view class="left">所在地区</view> |
|
||||
<input disabled type="text" placeholder-class="line" placeholder="省市区县、乡镇等" /> |
|
||||
</view> |
|
||||
<view class="item address"> |
|
||||
<view class="left">详细地址</view> |
|
||||
<textarea type="text" placeholder-class="line" placeholder="街道、楼牌等" /> |
|
||||
</view> |
|
||||
<!-- <view class="site-clipboard"> |
|
||||
<textarea placeholder-class="line" value="" placeholder="粘贴文本,可自动识别姓名和地址等" /> |
|
||||
<view class="clipboard"> |
|
||||
地址粘贴板 |
|
||||
<u-icon name="arrow-down" class="icon" :size="20"></u-icon> |
|
||||
</view> |
|
||||
</view> --> |
|
||||
</view> |
|
||||
<view class="bottom"> |
|
||||
<view class="tag"> |
|
||||
<view class="left">标签</view> |
|
||||
<view class="right"> |
|
||||
<text class="tags">家</text> |
|
||||
<text class="tags">公司</text> |
|
||||
<text class="tags">学校</text> |
|
||||
<view class="tags plus"><u-icon size="22" name="plus"></u-icon></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="default"> |
|
||||
<view class="left"> |
|
||||
<view class="set">设置默认地址</view> |
|
||||
<view class="tips">提醒:每次下单会默认推荐该地址</view> |
|
||||
</view> |
|
||||
<view class="right"><switch color="red" @change="setDefault" /></view> |
|
||||
</view> |
|
||||
</view> |
|
||||
<u-picker mode="region" ref="uPicker" v-model="show" /> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
show: false |
|
||||
}; |
|
||||
}, |
|
||||
methods: { |
|
||||
setDefault() {}, |
|
||||
showRegionPicker() { |
|
||||
this.show = true; |
|
||||
} |
|
||||
} |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
:v-deep(.line) { |
|
||||
color: $u-light-color; |
|
||||
font-size: 28rpx; |
|
||||
} |
|
||||
.wrap { |
|
||||
background-color: #f2f2f2; |
|
||||
.top { |
|
||||
background-color: #ffffff; |
|
||||
border-top: solid 2rpx $u-border-color; |
|
||||
padding: 22rpx; |
|
||||
.item { |
|
||||
display: flex; |
|
||||
font-size: 32rpx; |
|
||||
line-height: 100rpx; |
|
||||
align-items: center; |
|
||||
border-bottom: solid 2rpx $u-border-color; |
|
||||
.left { |
|
||||
width: 180rpx; |
|
||||
} |
|
||||
input { |
|
||||
text-align: left; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.address { |
|
||||
padding: 20rpx 0; |
|
||||
textarea { |
|
||||
// width: 100%; |
|
||||
height: 150rpx; |
|
||||
background-color: #f7f7f7; |
|
||||
line-height: 60rpx; |
|
||||
margin: 40rpx auto; |
|
||||
padding: 20rpx; |
|
||||
} |
|
||||
} |
|
||||
.site-clipboard { |
|
||||
padding-right: 40rpx; |
|
||||
textarea { |
|
||||
// width: 100%; |
|
||||
height: 150rpx; |
|
||||
background-color: #f7f7f7; |
|
||||
line-height: 60rpx; |
|
||||
margin: 40rpx auto; |
|
||||
padding: 20rpx; |
|
||||
} |
|
||||
.clipboard { |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
font-size: 26rpx; |
|
||||
color: $u-tips-color; |
|
||||
height: 80rpx; |
|
||||
.icon { |
|
||||
margin-top: 6rpx; |
|
||||
margin-left: 10rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
.bottom { |
|
||||
margin-top: 20rpx; |
|
||||
padding: 40rpx; |
|
||||
padding-right: 0; |
|
||||
background-color: #ffffff; |
|
||||
font-size: 28rpx; |
|
||||
.tag { |
|
||||
display: flex; |
|
||||
.left { |
|
||||
width: 160rpx; |
|
||||
} |
|
||||
.right { |
|
||||
display: flex; |
|
||||
flex-wrap: wrap; |
|
||||
.tags { |
|
||||
width: 140rpx; |
|
||||
padding: 16rpx 8rpx; |
|
||||
border: solid 2rpx $u-border-color; |
|
||||
text-align: center; |
|
||||
border-radius: 50rpx; |
|
||||
margin: 0 10rpx 20rpx; |
|
||||
display: flex; |
|
||||
font-size: 28rpx; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
color: $u-content-color; |
|
||||
line-height: 1; |
|
||||
} |
|
||||
.plus { |
|
||||
//padding: 10rpx 0; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
.default { |
|
||||
margin-top: 50rpx; |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
border-bottom: solid 2rpx $u-border-color; |
|
||||
line-height: 64rpx; |
|
||||
.tips { |
|
||||
font-size: 24rpx; |
|
||||
} |
|
||||
.right { |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,139 +0,0 @@ |
|||||
<template> |
|
||||
<view> |
|
||||
<view class="item" v-for="(res, index) in siteList" :key="res.id"> |
|
||||
<view class="top"> |
|
||||
<view class="name">{{ res.name }}</view> |
|
||||
<view class="phone">{{ res.phone }}</view> |
|
||||
<view class="tag"> |
|
||||
<text v-for="(item, index) in res.tag" :key="index" :class="{red:item.tagText=='默认'}">{{ item.tagText }}</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="bottom"> |
|
||||
广东省深圳市宝安区 自由路66号 |
|
||||
<u-icon name="edit-pen" :size="40" color="#999999"></u-icon> |
|
||||
</view> |
|
||||
</view> |
|
||||
<view class="addSite" @tap="toAddSite"> |
|
||||
<view class="add"> |
|
||||
<u-icon name="plus" color="#ffffff" class="icon" :size="30"></u-icon>新建收货地址 |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
siteList: [] |
|
||||
}; |
|
||||
}, |
|
||||
onLoad() { |
|
||||
this.getData(); |
|
||||
}, |
|
||||
methods: { |
|
||||
getData() { |
|
||||
this.siteList = [ |
|
||||
{ |
|
||||
id: 1, |
|
||||
name: '游X', |
|
||||
phone: '183****5523', |
|
||||
tag: [ |
|
||||
{ |
|
||||
tagText: '默认' |
|
||||
}, |
|
||||
{ |
|
||||
tagText: '家' |
|
||||
} |
|
||||
], |
|
||||
site: '广东省深圳市宝安区 自由路66号' |
|
||||
}, |
|
||||
{ |
|
||||
id: 2, |
|
||||
name: '李XX', |
|
||||
phone: '183****5555', |
|
||||
tag: [ |
|
||||
{ |
|
||||
tagText: '公司' |
|
||||
} |
|
||||
], |
|
||||
site: '广东省深圳市宝安区 翻身路xx号' |
|
||||
}, |
|
||||
{ |
|
||||
id: 3, |
|
||||
name: '王YY', |
|
||||
phone: '153****5555', |
|
||||
tag: [], |
|
||||
site: '广东省深圳市宝安区 平安路13号' |
|
||||
} |
|
||||
]; |
|
||||
}, |
|
||||
toAddSite(){ |
|
||||
uni.navigateTo({ |
|
||||
url: '/pages_template/pages/address/addSite' |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.item { |
|
||||
padding: 40rpx 20rpx; |
|
||||
.top { |
|
||||
display: flex; |
|
||||
font-weight: bold; |
|
||||
font-size: 34rpx; |
|
||||
.phone { |
|
||||
margin-left: 60rpx; |
|
||||
} |
|
||||
.tag { |
|
||||
display: flex; |
|
||||
font-weight: normal; |
|
||||
align-items: center; |
|
||||
text { |
|
||||
display: block; |
|
||||
width: 60rpx; |
|
||||
height: 34rpx; |
|
||||
line-height: 34rpx; |
|
||||
color: #ffffff; |
|
||||
font-size: 20rpx; |
|
||||
border-radius: 6rpx; |
|
||||
text-align: center; |
|
||||
margin-left: 30rpx; |
|
||||
background-color:rgb(49, 145, 253); |
|
||||
} |
|
||||
.red{ |
|
||||
background-color:red |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
.bottom { |
|
||||
display: flex; |
|
||||
margin-top: 20rpx; |
|
||||
font-size: 28rpx; |
|
||||
justify-content: space-between; |
|
||||
color: #999999; |
|
||||
} |
|
||||
} |
|
||||
.addSite { |
|
||||
display: flex; |
|
||||
justify-content: space-around; |
|
||||
width: 600rpx; |
|
||||
line-height: 100rpx; |
|
||||
position: absolute; |
|
||||
bottom: 30rpx; |
|
||||
left: 80rpx; |
|
||||
background-color: red; |
|
||||
border-radius: 60rpx; |
|
||||
font-size: 30rpx; |
|
||||
.add{ |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
color: #ffffff; |
|
||||
.icon{ |
|
||||
margin-right: 10rpx; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue