报工报表接口对接,投料bug修复

main
sunshine 2 years ago
parent 16f59c10be
commit 226b2d295e

@ -61,3 +61,43 @@ export function deleteByReportId(id) {
method: 'delete'
})
}
// 30天报工数据
export function getReportTime(id) {
return request({
url: '/admin-api/mes/app/product/get30DaysReportList?userId='+id,
method: 'get'
})
}
// 上月报工汇总
export function getLastMonthSum(id) {
return request({
url: '/admin-api/mes/app/product/getLastMonthSum?userId='+id,
method: 'get'
})
}
// 本月报工汇总
export function getThisMonthSum(id) {
return request({
url: '/admin-api/mes/app/product/getThisMonthSum?userId='+id,
method: 'get'
})
}
// 本月上月计时汇总
export function getSumReportTime(id) {
return request({
url: '/admin-api/mes/app/product/getSumReportTime?userId='+id,
method: 'get'
})
}
// 最近30天计时列表
export function getDayReportTime(id) {
return request({
url: '/admin-api/mes/app/product/getDay30ReportTime?userId='+id,
method: 'get'
})
}

@ -1,7 +1,7 @@
// 应用全局配置
const config = {
// baseUrl: 'http://47.106.185.127:48080',127.0.0.1
baseUrl: 'http://47.106.185.127:48080',
baseUrl: 'http://192.168.0.122:48080',
// 应用信息
appInfo: {
// 应用名称

@ -108,8 +108,8 @@ export default {
//
customFormData: {
id: undefined,
name: this.getUserInfo.name,
userId: this.getUserInfo.userId,
name: this.getUserInfo().name,
userId: this.getUserInfo().userId,
orgId: undefined,
orgType: undefined,
reportTime: undefined,

@ -124,8 +124,8 @@ export default {
//
customFormData: {
id: undefined,
name: this.getUserInfo.name,
userId: this.getUserInfo.userId,
name: this.getUserInfo().name,
userId: this.getUserInfo().userId,
orgId: undefined,
orgType: undefined,
reportTime: undefined,

@ -51,12 +51,6 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/template",
"style": {
"navigationBarTitleText": "模板"
}
},
{
"path": "pages/report",
"style": {
@ -315,12 +309,6 @@
"selectedIconPath": "static/images/tabbar/material_.png",
"text": "投料"
},
/*{
"pagePath": "pages/template",
"iconPath": "static/images/tabbar/work.png",
"selectedIconPath": "static/images/tabbar/work_.png",
"text": "模板"
},*/
{
"pagePath": "pages/mine",
"iconPath": "static/images/tabbar/mine.png",

@ -0,0 +1,170 @@
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('暂未开放该功能!');
},
})
}
},
}

@ -0,0 +1,79 @@
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
}

@ -0,0 +1,68 @@
{
"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}
]
}
}

@ -0,0 +1,33 @@
{
"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"
}
]
}
]
}

@ -114,8 +114,6 @@ uni.$on('refresh', () => {
avatar.value = userStore.avatar;
})
console.log(avatar.value)
function handleToInfo() {
uni.navigateTo({
url: '/pages_mine/pages/info/index'

@ -0,0 +1,125 @@
<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>

@ -132,7 +132,7 @@
</uni-list-item>
</uni-list>
</view>
<view v-if="current === 3" >报工报表</view>
<view v-if="current === 3" ><WorkReport /></view>
</view>
</view>
</template>
@ -147,7 +147,9 @@ import { showConfirm } from "@/utils/common";
import { getCurrentDate, timestampToTime } from "@/utils/dateUtil";
import { processTypes } from "@/api/system/dict/data";
import { getOtherPersonalUser } from "@/api/mes/organization";
import WorkReport from "@/pages/workReport.vue";
export default {
components: { WorkReport },
computed: {
Delete() { return Delete },
Promotion() { return Promotion },

@ -26,13 +26,12 @@
</u-sticky>
<uni-notice-bar show-icon scrollable
text="安全生产!有序生产!高效生产!" />
<!-- 已提交-->
<!-- 草稿状态-->
<view v-if="current === 0" class="container" >
<u-list>
<u-list-item
v-for="(item, index) in finishList"
v-for="(item, index) in draftList"
:key="item"
@click="handleFinishClick(item.id,index)"
>
<view class="content">
<view class="header">
@ -58,7 +57,7 @@
<el-text>{{ item.weight }} </el-text>
</el-col>
</el-row>
<el-row v-for="(item2, index2) in handleFinishClick(item.id,index)" :key="index2" class="u-m-b-30">
<el-row v-for="(item2, index2) in handleDraftClick(item.id,index)" :key="index2" class="u-m-b-30">
<el-col :span="8">原料:
<el-text type="warning">{{item2.itemName}}</el-text>
</el-col>
@ -69,16 +68,26 @@
<el-text>{{item2.unitName }} </el-text>
</el-col>
</el-row>
<view class="u-m-t-30 u-m-b-30"><u-line/></view>
<view class="u-flex justify-end">
<el-col :span="4" class="u-m-r-30">
<u-button type="info" @click="handleUpdate(item.id)"></u-button>
</el-col>
<el-col :span="4">
<u-button type="error" @click="handleDelete(item.id)"></u-button>
</el-col>
</view>
</view>
</u-list-item>
</u-list>
</view>
<!-- 草稿状态-->
<!-- 已提交-->
<view v-if="current === 1" class="container" >
<u-list>
<u-list-item
v-for="(item, index) in draftList"
v-for="(item, index) in finishList"
:key="item"
@click="handleFinishClick(item.id,index)"
>
<view class="content">
<view class="header">
@ -104,7 +113,7 @@
<el-text>{{ item.weight }} </el-text>
</el-col>
</el-row>
<el-row v-for="(item2, index2) in handleDraftClick(item.id,index)" :key="index2" class="u-m-b-30">
<el-row v-for="(item2, index2) in handleFinishClick(item.id,index)" :key="index2" class="u-m-b-30">
<el-col :span="8">原料:
<el-text type="warning">{{item2.itemName}}</el-text>
</el-col>
@ -118,15 +127,6 @@
</view>
</u-list-item>
</u-list>
<view class="u-m-t-30 u-m-b-30"><u-line/></view>
<view class="u-flex justify-end">
<el-col :span="4" class="u-m-r-30">
<u-button type="info" @click="handleUpdate(item.id)"></u-button>
</el-col>
<el-col :span="4">
<u-button type="error" @click="handleDelete(item.id)"></u-button>
</el-col>
</view>
</view>
<uni-fab v-if="auth.hasPermi('mes:feeding-record:create')" ref="fab" :pattern="pattern" @fabClick="handleAdd" />
</view>
@ -144,10 +144,10 @@ import auth from "@/plugins/auth";
const menuList = ref([
{
name: '已提交'
name: '草稿'
},
{
name: '草稿'
name: '已提交'
}
])
@ -184,13 +184,11 @@ function handleFinishClick(id, index){
getDetailByRecordId(id).then(response => {
finishList.value[index].detailList = response.data
})
return finishList.value[index].detailList
}
function handleDraftClick(id, index){
getDetailByRecordId(id).then(response => {
draftList.value[index].detailList = response.data
})
return draftList.value[index].detailList
}
/** 提交 */
function handleUpdate(id){
@ -247,4 +245,7 @@ function handleAdd(){
}
}
}
.u-button {
height: 24.8px
}
</style>

@ -0,0 +1,512 @@
<template>
<view class="body">
<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>
<view class="text">上月报工汇总</view>
<view class="text-gray">总数</view>
<view class="remaining">{{ lastMonthSum.sumNumber }}</view>
<view class="row head_block">
<view class="flex_1">
<text class="text-gray">合格数</text>
<text class="text_green">{{ lastMonthSum.totalQualityNumber }}</text>
</view>
<view class="flex_1">
<text class="text-gray">废品数</text>
<text class="income">{{ lastMonthSum.totalWasteNumber }}</text>
</view>
</view>
</view>
<view>
<view class="text">本月报工汇总</view>
<view class="text-gray">总数</view>
<view class="remaining">{{ thisMonthSum.sumNumber }}</view>
<view class="row head_block">
<view class="flex_1">
<text class="text-gray">合格数</text>
<text class="text_green">{{ thisMonthSum.totalQualityNumber }}</text>
</view>
<view class="flex_1">
<text class="text-gray">废品数</text>
<text class="income">{{ thisMonthSum.totalWasteNumber }}</text>
</view>
</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">30天报工数据</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">最近30天计时列表</text>
</view>
<view class="detail_list">
<view v-for="(item, index) in detailList" :key="index" class="detail_item">
<view>
<view class="font-middle">报工日期</view>
<view class="font-small">{{ item.reportDay }}</view>
</view>
<view class="right_content">
<view class="hour">计时时长</view>
<view class="text-gray font-middle">{{ item.reportTime }}</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="flex_wrap">
<view>
<text class="text-gray" style="margin-right: 10px">上月总计时</text>
<text class="text_green">{{ sumReportTime.totalWasteNumber }}</text>
</view>
<view>
<text class="text-gray" style="margin-right: 10px">本月总计时</text>
<text class="text_green">{{ sumReportTime.totalQualityNumber }}</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import dataOne from '@/pages/json/1.json';
import expendDetail from '@/pages/json/2.json';
import {getDayReportTime, getLastMonthSum, getReportTime, getSumReportTime, getThisMonthSum} from "@/api/mes/report";
import useUserStore from "@/store/modules/user";
import Config from '@/pages/js/config'
import { ref } from 'vue';
import { onLoad } from "@dcloudio/uni-app";
const now = new Date();
const nowTime = {
year: now.getFullYear(),
month: now.getMonth() + 1,
day: now.getDate()
};
const useStore = useUserStore()
const userId = ref(useStore.userId)
const isCanvas2d = ref(Config.ISCANVAS2D)
let expendCount = 0;
let delayload = ref(false);
let historyData = ref({});
const reportTime = ref({})
const lastMonthSum = ref({});
const thisMonthSum = ref({});
const sumReportTime = ref({})
const detailList = ref([]);
const historyBtn = ref([
{
name: "总数",
state: 1,
type: "sumNumber"
},
{
name: "合格数",
state: 0,
type: "totalQualityNumber"
},
{
name: "废品数",
state: 0,
type: "totalWasteNumber"
}
]);
const filterHistoryData = () => {
let type = historyBtn.value.filter(x => x.state == 1)[0].type;
switch (type) {
case "sumNumber":
historyData.value = dataOne.sumNumber;
break;
case "totalQualityNumber":
historyData.value = dataOne.totalQualityNumber;
break;
case "totalWasteNumber":
historyData.value = dataOne.totalWasteNumber;
break;
}
}
const getData =()=> {
filterHistoryData();
for (let i = 0; i < expendDetail.series.length; i++) {
expendDetail.series[i].format = "pieDemo";
}
let length = expendDetail.series[0].data.length;
for (let i = 0; i < length; i++) {
expendCount += expendDetail.series[0].data[i].value;
}
setTimeout(() => {
delayload.value = true;
}, 1000);
}
const changeHistoryBtn = (type) => {
for (let i = 0; i < historyBtn.value.length; i++) {
if (historyBtn.value[i].type === type) {
historyBtn.value[i].state = 1;
} else {
historyBtn.value[i].state = 0;
}
}
filterHistoryData();
}
// 30
const getReportTimeList = ()=>{
getReportTime(userId.value).then(response => {
reportTime.value = response.data;
});
}
//
const getLastMonthSumList = ()=>{
getLastMonthSum(userId.value).then(response => {
lastMonthSum.value = response.data;
});
}
//
const getThisMonthSumList = ()=>{
getThisMonthSum(userId.value).then(response => {
thisMonthSum.value = response.data;
});
}
//
const getSumReportTimeList = ()=>{
getSumReportTime(userId.value).then(response => {
sumReportTime.value = response.data;
});
}
// 30
const getDayReportTimeList = ()=>{
getDayReportTime(userId.value).then(response => {
detailList.value = response.data;
});
}
onLoad(() => {
getData();
getReportTimeList()
getLastMonthSumList()
getThisMonthSumList()
getSumReportTimeList()
getDayReportTimeList();
});
</script>
<style scoped lang="scss">
.body {
height: 100%;
background-color: #f1f1f1;
margin: 0;
padding-bottom: 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;
.right_content {
width: 75%;
text-align: center;
}
.hour {
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: 0 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;
.flex_wrap {
display: flex;
justify-content: space-between;
}
}
.row_block {
width: 100%;
box-sizing: border-box;
background-color: #fff;
border-radius: 12rpx;
position: relative;
padding: 20rpx;
&::after {
content: "";
height: 0;
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: 495rpx;
width: 100%;
padding: 110rpx 10rpx 0 10rpx;
background: url('@/static/images/icon/background.png') no-repeat center 0;
box-sizing: border-box;
.top_desc {
width: 100%;
border-radius: 20rpx;
background-color: #fff;
margin-top: 20rpx;
padding: 20rpx;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
.text {
font-size: 30rpx;
font-weight: bold;
color: #1783f2;
margin-bottom: 10px
}
.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>
Loading…
Cancel
Save