请求地址:geecg-uniapp 同源策略 数据请求 获取后台数据 ui库安装 冲突解决(3)-CSDN博客
一.uniapp转小程序
(1) 运行微信开发工具
(2) 配置id 然后运行
打开小程序 路径 E:\通\uniapp-jeecg\unpackage\dist\dev\mp-weixin
(5)运行
二.表单页面
<template>
<view>
<cu-custom bgColor="bg-gradual-blue" :isBack="true">
<block slot="content">额外加工</block>
</cu-custom>
<uni-section title=" ">
<view style="margin: 0 20px;">
<uni-forms ref="customForm" :rules="customRules" :modelValue="customFormData">
<uni-forms-item label="类型" required name="seType">
<uni-data-select v-model="customFormData.seType" :localdata="range" style="width: 215px; "
@change="select"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="石材编号" required name="seRknum">
<uni-data-select style="width: 215px; " v-model="customFormData.seRknum" :localdata="candidates"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="日期时间" required name="seDate">
<uni-datetime-picker style="width: 215px; " type="datetime" return-type="timestamp" v-model="customFormData.seDate" />
</uni-forms-item>
<uni-forms-item label="长" required name="seLong">
<!-- <input v-model="customFormData.seLong" placeholder="请输入长" type="number" /> -->
<input class="uni-input " name="input" v-model="customFormData.seLong" placeholder="请输入长"
@input="fpNumInput" />
</uni-forms-item>
<uni-forms-item label="宽" required name="seWeight">
<input class="uni-input " name="input" v-model="customFormData.seWeight" placeholder="请输入宽"
type="number" @input="fpNumInputseWeight" />
</uni-forms-item>
<uni-forms-item label="高" required name="seHeight">
<input class="uni-input " name="input" v-model="customFormData.seHeight" placeholder="请输入高"
type="number" @input="fpNumInputseHeight" />
</uni-forms-item>
<uni-forms-item label="数量" required name="seNum">
<input class="uni-input " name="input" v-model="customFormData.seNum" placeholder="请输入数量"
type="number" @input="fpNumInputseNum" />
</uni-forms-item>
<uni-forms-item label="面积" required name="seMj">
<input class="uni-input " name="input" v-model="customFormData.seMj" placeholder="请输入面积"
type="number" @input="fpNumInputseMj" />
</uni-forms-item>
<uni-forms-item label="体积" required name="seTj">
<input class="uni-input " name="input" v-model="customFormData.seTj" placeholder="请输入体积"
type="number" @input="fpNumInputseTj" />
</uni-forms-item>
<uni-forms-item label="额外加工" required name="sePromed">
<uni-data-select style="width: 215px; " v-model="customFormData.sePromed" :localdata="sePromed"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="机组" required name="seSet">
<uni-data-select style="width: 215px; " v-model="customFormData.seSet" :localdata="seSets"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="单价" required name="sePrice">
<input class="uni-input " name="input" v-model="customFormData.sePrice" placeholder="请输入单价"
type="number" @input="fpNumInputsePrice" />
</uni-forms-item>
<uni-forms-item label="总价">
<input class="uni-input " name="input" v-model="customFormData.seZprice" placeholder="请输入总价"
type="number" @input="fpNumInputseZprice" />
</uni-forms-item>
<uni-forms-item label="人员" required name="sePerson">
<uni-data-select style="width: 215px; " v-model="customFormData.sePerson" :localdata="sePerson"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="操作人">
<uni-easyinput v-model="customFormData.seOpuser" placeholder="请输入操作人" disabled style="width: 215px; "/>
<!-- <input class="uni-input " v-model="customFormData.seOpuser" placeholder="请输入操作人" disabled /> -->
</uni-forms-item>
<uni-forms-item label="图片" required name="sePic">
<uni-file-picker v-model="imageValue" fileMediatype="image" mode="grid" @select="upload"
@delete="delIMG" title="最多选择3张图片" :auto-upload='false' limit="3"></uni-file-picker>
</uni-forms-item>
<uni-forms-item label="备注">
<uni-easyinput style="width: 215px; " type="textarea" v-model="customFormData.seRemake" placeholder="请输入备注" />
</uni-forms-item>
</uni-forms>
<button type="primary" @click="submit('customForm')" style='background-color: blue;'>提交</button>
</view>
</uni-section>
</view>
</template>
<script>
export default {
data() {
return {
imgURL: '',
imageValue: [],
imageUrls: [],
tableDatafinish: [],
// 定义初始数据 绑定类型 :localdata="range"
range: [{
value: 1,
text: "荒料"
},
{
value: 2,
text: "板材成品"
},
{
value: 3,
text: "板材半成品"
},
{
value: 4,
text: "路边石成品"
},
{
value: 5,
text: "路边石半成品"
},
{
value: 6,
text: "界石成品"
},
{
value: 7,
text: "界石半成品"
}
],
// 定义初始数据 绑定石材编号 :localdata="candidates"
candidates: [],
// 定义初始数据 绑定机组 :localdata="seSet"
seSets: [],
// 定义初始数据 绑定机组 :localdata="seSet"
sePerson: [],
sePromed: [],
// 定义初始数据 绑定输入框 获取输入数据 v-model="customFormData.xxx" aa
customFormData: {
seType: '',
seRknum: '',
seDate: new Date(),
seLong: '',
seWeight: '',
seHeight: '',
seNum: '',
seMj: '',
seTj: '',
sePromed: '',
seSet: '',
sePrice: '',
seZprice: '',
sePerson: '',
seOpuser: '',
seRemake: '',
sePic: ''
},
customRules: {
seType: {
rules: [{
required: true,
errorMessage: '石材编号不能为空'
}]
},
seRknum: {
rules: [{
required: true,
errorMessage: '石材编号不能为空'
}]
},
seDate: {
rules: [{
required: true,
errorMessage: '时间不能为空'
}]
},
seLong: {
rules: [{
required: true,
errorMessage: '长度不能为空'
}]
},
// seLong: [
// { required: true, message: '请再次输入密码', trigger: 'blur' },
// { pattern: /^\S{6,15}$/, message: '请输入 6 ~ 15 位的非空字符', trigger: 'blur' },
// ],
seWeight: {
rules: [{
required: true,
errorMessage: '宽度不能为空'
}]
},
seHeight: {
rules: [{
required: true,
errorMessage: '高度不能为空'
}]
},
seNum: {
rules: [{
required: true,
errorMessage: '数量不能为空'
}]
},
seMj: {
rules: [{
required: true,
errorMessage: '面积不能为空'
}]
},
seTj: {
rules: [{
required: true,
errorMessage: '体积不能为空'
}]
},
sePromed: {
rules: [{
required: true,
errorMessage: '额外加工不能为空'
}]
},
seSet: {
rules: [{
required: true,
errorMessage: '机组不能为空'
}]
},
sePrice: {
rules: [{
required: true,
errorMessage: '单价不能为空'
}]
},
sePerson: {
rules: [{
required: true,
errorMessage: '人员不能为空'
}]
},
},
}
},
mounted() {
// 机组
let url33 = '/ewjg/smsEwjg/gztj';
this.$http.get(url33).then(res => {
console.log(res.data.result)
res.data.result.records.forEach(value => { //循环 添加到 candidates
this.seSets.push({
value: value.seSet,
text: value.seSet_dictText
})
})
res.data.result.records.forEach(value => { //循环 添加到 candidates
this.sePerson.push({
value: value.sePerson,
text: value.sePerson_dictText
})
})
res.data.result.records.forEach(value => { //循环 添加到 candidates
this.sePromed.push({
value: value.sePromed,
text: value.sePromed_dictText
})
})
})
},
methods: {
fpNumInput(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.seLong = o.value.replace(inputRule, '');
})
},
fpNumInputseWeight(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.seWeight = o.value.replace(inputRule, '');
})
},
fpNumInputseHeight(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.seHeight = o.value.replace(inputRule, '');
})
},
fpNumInputseNum(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.seNum = o.value.replace(inputRule, '');
})
},
fpNumInputseMj(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.seMj = o.value.replace(inputRule, '');
})
},
fpNumInputseTj(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.seTj = o.value.replace(inputRule, '');
})
},
fpNumInputsePrice(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.sePrice = o.value.replace(inputRule, '');
})
},
fpNumInputseZprice(e) {
const o = e.target;
const inputRule = /[^\d]/g
this.$nextTick(function() {
this.customFormData.seZprice = o.value.replace(inputRule, '');
})
},
// 获取上传状态
upload(e) {
this.imageValue.push(e.tempFiles[0])
},
delIMG(e) {
const index = this.imageValue.findIndex(v => v.url === e.tempFilePath);
if (index !== -1) {
this.imageValue.splice(index, 1);
}
},
submitImage() {
if (this.imageValue.length != 0) {
const uploadPromises = this.imageValue.map(val => {
const formData = {
biz: 'temp',
};
return new Promise((resolve, reject) => {
uni.uploadFile({
url: 'http://43.138.31.228:1888/jeecg-boot/sys/common/upload',
formData: formData,
filePath: val.path,
name: 'file',
fileType: 'image',
fileName: val.name,
success: (uploadFileRes) => {
var jsonObject = JSON.parse(uploadFileRes.data);
const imageUrl = jsonObject.message;
this.imageUrls.push(imageUrl); // 将每次上传的图片链接添加到数组中
if (this.imageUrls.length > 1) {
this.customFormData.sePic = this.imageUrls.join(',');
} else {
this.customFormData.sePic = imageUrl
}
resolve();
},
fail: (err) => {
reject(err);
}
});
});
});
this.imageUrls = []
return Promise.all(uploadPromises)
} else {
this.customFormData.sePic = '';
return Promise.resolve(); // 如果没有上传图片,直接返回一个已解决的Promise对象
}
},
select() {
let url3 = '/cwkhfk/cwKhfk/scxxList';
let params = {
type: this.value //定义 this.value 赋值给type 最后parmas
}
this.$http.get(url3, {
params: params //定义赋值 params = parmas
}).then(res => {
// this.candidates = res.data.result
res.data.result.forEach(value => { //循环 添加到 candidates
this.candidates.push({
value: value.number,
text: value.number
})
})
})
},
async submit(ref) {
console.log('tijiao')
// await this.submitImage();
// console.log(this.customFormData.sePic)
// //添加上传
// let customFormData = this.customFormData
// // 获取数据进行添加
// let url = '/ewjg/smsEwjg/add';
// var params = customFormData //定义赋值 params = customFormData 后端带着parmas去后端
// this.$http.post(url, params).then(res => {
// this.customFormData = res.data.result
// })
// this.customFormData = ''
// this.$refs[ref].validate().then(res => {
// console.log('success', res);
// uni.showToast({
// title: `校验通过`
// })
// }).catch(err => {
// console.log('err', err);
// })
},
}
}
</script>
<style>
.uni-input {
width: 215px;
font-size: 12px;
height: 35px;
border: 1px solid #dedede;
padding: 0 5px;
border-radius: 5px;
}
</style>
二. 点击跳到详情页
父页面
<template>
<view class="order-list">
<cu-custom bgColor="bg-gradual-blue" :isBack="true">
<block slot="content">荒料管理</block>
</cu-custom>
<view class="" >
<!-- 订单展示 -->
<mescroll-uni ref="mescrollRef" @init="mescrollInit" top="60rpx" @down="downCallback" @up="upCallback">
<!-- 数据列表 -->
<view class="data-list" style=" margin-top: 2rem;">
<!-- 空内容展示-->
<u-empty :text="textNoMore" v-if="dataList.length==0" mode="list"></u-empty>
<!-- 空内容展示End-->
<view class="order margin-top-sm" v-for="(item, aindex) in dataList" :key="item.id"
@click="jumpToOrder(item)">
<view class='bg-white padding-sm flex padding-right-zero flex-between'>
<view class='flex-sub radius text-left text-xs margin-top-xs'>
<image src="../../static/common/huang.png"
style="width: 100rpx;height: 80rpx;margin-top: -10px;"></image>
</view>
<view class='flex-sub radius text-left text-xs margin-top-xs'
style="margin-left: -200px;font-size: 12px;">
编号:{{ item.sbwWarehousingNumber}}</view>
</view>
<view class="bg-white padding-sm solid-top" >
<view class='padding-top-sm text-sm flex'>
<view class="left-title" style="font-size: 12px;">日期:</view><view class="right-content" style="font-size: 12px;">{{ item.sbwWarehousingDate}}</view>
</view>
<view class='padding-top-sm text-sm flex'></view>
</view>
</view>
<!-- 返回顶部 -->
<u-back-top :scroll-top="scrollTop" top="600">
</u-back-top>
<!-- 返回顶部End -->
</view>
</mescroll-uni>
</view>
<!-- 订单展示完毕End -->
</view>
</template>
<script>
import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
import configService from '@/common/service/config.service.js';
export default {
mixins: [MescrollMixin],
data() {
return {
pageable: {
pageIndex: 0,
pageSize: 10
},
list: [{
complainantStatus: '0',
name: '待解决'
}, {
complainantStatus: '10',
name: '已解决'
}],
textNoMore :'-- 没有更多数据了 --',
tabCurrent: 0,
scrollTop: 0,
dataList: [],
}
},
methods: {
//下拉刷新
downCallback() {
this.mescroll.scrollTo(0, 0)
this.mescroll.resetUpScroll();
},
//上拉加载
async upCallback(pages) {
let pageIndex = pages.num // 页码, 默认从1开始
let pageSize = pages.size // 页长, 默认每页10条
this.pageable.pageIndex = pageIndex
this.pageable.pageSize = pageSize
let data = await this.getOrder(this.pageable)
console.log("data" + data)
const curPageData = data.records || []
if (data && curPageData.length > 0) {
const curPageLen = curPageData.length // 当前数据长度
const totalPage = data.total // 获取接口总共有多少页
this.mescroll.endByPage(curPageLen, totalPage);
} else {
this.mescroll.endErr()
}
},
//订单列表
async getOrder(pageable) {
let that = this
let params = {
openid: uni.getStorageSync("openId"),
complainantStatus: this.list[this.tabCurrent].complainantStatus,
pageNo: pageable.pageIndex,
pageSize: pageable.pageSize
}
// console.log(params)
let preData = {
records: []
}
// 获取列表数据
await that.$http.get('/block/smsBlockWarehousing/list', {
params: params
}).then(res => {
console.log(res)
if (res.data.success !== true) {
that.$tip.alert(res.data.message)
} else {
if (pageable.pageIndex < 2)
that.dataList = [] // 如果是第一页需手动置空列表
that.dataList.push(...res.data.result.records) //数据添加到dataList
console.log(res.data.result)
preData = res.data.result;
}
}).catch(err => {
// that.$tip.alert("网络波动,请重试!")
console.log("err")
})
console.log(preData)
return preData
},
// 点击跳转到huangliao页面 携带当前点击的id 过去
jumpToOrder(item) {
// console.log(item, 'adad')
uni.navigateTo({
url: '/pages/common/huangliao?id=' + item.id
})
},
}
}
</script>
子页面
<template>
<view style="background-color: #ffffff;">
<cu-custom bgColor="bg-gradual-blue" :isBack="true">
<block slot="content">荒料详情</block>
</cu-custom>
<u-form :model="form" ref="uForm">
<view class="container">
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ; display: flex;">入库编号 :<span
style="color:#666;">{{form.sbwWarehousingNumber}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">入库日期 :<span
style="color:#666;">{{form.sbwWarehousingDate}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">荒料种类 :<span
style="color:#666;">{{form.sbwName_dictText}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">长 :<span
style="color:#666;">{{form.sbwLong}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">宽 :<span
style="color:#666;">{{form.sbwWidth}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">高 :<span
style="color:#666;">{{form.sbwTall}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">体积 :<span
style="color:#666;">{{form.sbwSbwVolume}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">颜色 :<span
style="color:#666;">{{form.sbwColor_dictText}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">价格 :<span
style="color:#666;">{{form.sbwPrice}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">数量 :<span
style="color:#666;">{{form.sbwNum}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">运单单价 :<span
style="color:#666;">{{form.sbwFreightPrice}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">运费 :<span
style="color:#666;">{{form.sbwFreight}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">运输人 :<span
style="color:#666;">{{form.sbwTransporter_dictText}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">总价 :<span
style="color:#666;">{{form.sbwNum}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">料场 :<span
style="color:#666;">{{form.sbwFreight}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">操作员 :<span
style="color:#666;">{{form.sbwTransporter_dictText}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">图片 :<!-- <span
style="color:#666;">{{form.sbwPic}}</span> -->
<image src="form.sbwPic" mode=""></image>
</view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">文件 :<span
style="color:#666;">{{form.sbwFile}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
<view style="margin-top: 5px; font-size: 13px;padding:10px 15px ;">备注 :<span
style="color:#666;">{{form.sbwRemake}}</span></view>
<view style="border: #e5e5e5 1px solid; margin: 10px;;"></view>
</view>
</u-form>
</view>
</template>
<script>
export default {
data() {
return {
form: {
sbwWarehousingDate: '',
sbwWarehousingNumber: '',
sbwName_dictText: '',
sbwLong: '',
sbwWidth: '',
sbwTall: '',
sbwSbwVolume: '',
sbwColor_dictText: '',
sbwPrice: '',
sbwNum: '',
sbwFreightPrice: '',
sbwFreight: '',
sbwTransporter_dictText: '',
sbwTotalPrice: '',
sbwStockyard_dictText: '',
sbwPic: '',
sbwFile: '',
sbwRemake: ''
},
}
},
onLoad: function(options) {
this.getOrderDetail()
},
methods: {
// 接受数据
async getOrderDetail() {
let that = this
let params = {
id: this.id
}
console.log(params)
//return
await this.$http.get('/block/smsBlockWarehousing/list', {
params: params
}).then(res => {
console.log("get RES")
console.log(res.data.result.records[0], '马甲的喇嘛是的')
if (res.data.success !== true) {
that.form = res.data.result.records[0]
that.$tip.alert(res.data.message)
} else {
that.form = res.data.result.records[0]
if (that.form.complaintFileString) {
that.fileList = that.form.complaintFileString.split(",")
}
console.log(that.fileList)
}
}).catch(err => {
// that.$tip.alert("网络波动,请重试!")
console.log(err)
})
},
}
}
</script>
三.图标
<template>
<view>
<cu-custom bgColor="bg-gradual-blue" :isBack="true">
<block slot="content">出库统计图</block>
</cu-custom>
<view>
<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="button" activeColor="#3a82f8"></uni-segmented-control>
</view>
<view class="charts-box">
<qiun-data-charts
type="pie"
:opts="opts"
:chartData="chartData"
/>
<qiun-data-charts
type="mount"
:opts="opt"
:chartData="chartData"
/>
</view>
</view>
</template>
<script>
import { forEach } from '../../common/luch-request/utils';
export default {
data() {
return {
items: ['日', '月', '年'],
current: 0,
chartData: {},
//您可以通过修改 config-ucharts.js 文件中下标为 ['pie'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
// 饼图
opts: {
color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],
// padding: [15,5,5,5],
// enableScroll: false,
// legend: {
// show:true,
// lineHeight:20
// },
// extra: {
// pie: {
// activeOpacity: 0.5,
// activeRadius: 10,
// offsetAngle: 0,
// labelWidth: 15,
// border: true,
// borderWidth: 3,
// borderColor: "#FFFFFF"
// }
// }
},
// 条形图
opt: {
color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],
// padding: [15,10,0,5],
// enableScroll: false,
// legend: {
// show:false,
// },
// xAxis: {
// disableGrid: true,
// rotateLabel:true,
// rotateAngle:"45",
// },
// yAxis: {
// data: [
// {
// min: 0
// }
// ]
// },
// extra: {
// mount: {
// type: "bar",
// widthRatio: 0.3,
// borderWidth: 0,
// barBorderRadius: [
// 50,
// 50,
// 50,
// 50
// ],
// linearType: "custom"
// }
// }
}
};
},
mounted() {
var today = new Date(); // 日
var yesterday = new Date(today.getTime()); // 月
this.getServerData(yesterday.getFullYear() + "-" + (yesterday.getMonth() + 1) + "-" + yesterday.getDate(),'0') //年
},
methods: {
// 定义方法 和值 (item,type)
async getServerData(item,type) {
let that = this
let params = {
item: item, //自己定义的值 和后端的值要对应 问后端
type: type
}
// 请求数据 携带 params
await that.$http.get('/totalView/totalView/PieChuKu',{params: params}).then(res => {
// 计算总值 reduce 累加
// 在括号内的箭头函数(acc, item) => acc + item.value是reduce方法所接受的函数。这个箭头函数接收两个参数,acc表示累加器(accumulator),item表示当前正在处理的数组元素。箭头函数的功能是将累加器acc和当前元素的value属性相加,并返回相加的结果。
//最后的, 0表示reduce方法的初始值为0。这意味着在开始累加之前,累加器acc的初始值为0。
const totalValue = res.data.result.reduce((acc, item) => acc + item.value, 0);
// console.log(totalValue,'asasasasa')
// 计算占比并更新数组
// console.log(res.data.result,'dadsada')
// 判断数据 要是是0 要么是有数值
// 如果totalValue值 等于0 就循环遍历渲染
if(totalValue==0){
res.data.result.forEach(item => {
item.labelText = '0%'; //强制数值变成0% 不写的话 就平均分成6份 因为有6份
});
}
else{
// 如果不是 就截取后两位 拼接上%
res.data.result.forEach(item => {
const percentage = (item.value / totalValue) * 100; //获取的数值× 100
item.labelText = percentage.toFixed(2)+"%"; //然后 拼接上%
});
}
// ress是一个包含series属性的对象。
// series是一个包含一个对象的数组。
// 这个对象包含一个名为data的属性,其值为res.data.result,假设res是一个包含data属性的对象,而data属性包含一个名为result的数组。
let ress = {
series: [
{
data:res.data.result
}
]
};
this.chartData = JSON.parse(JSON.stringify(ress));
}).catch(err => {
console.log(err,"err")
})
},
onClickItem(e) {
if (this.current != e.currentIndex) {
this.current = e.currentIndex;
if(this.current=="0"){
// var today = new Date(); 创建了一个Date对象,表示当前的日期和时间。它会将当前的日期和时间信息存储在today变量中。
// console.log(today,'sasasasa') 打印出了today的值,以及额外的字符串sasasasa到控制台。这里主要是用来调试和查看today的值。
// var yesterday = new Date(today.getTime()); 创建了另一个Date对象,其时间戳(以毫秒为单位的时间值)与today相同。这意味着yesterday代表的是和today相同的日期和时间。
// this.getServerData(yesterday.getFullYear() + "-" + (yesterday.getMonth() + 1) + "-" + yesterday.getDate(),'2'); 这行代码调用了一个名为getServerData的方法,并传递了两个参数。第一个参数是一个表示日期的字符串,格式为"年-月-日",通过yesterday.getFullYear() + "-" + (yesterday.getMonth() + 1) + "-" + yesterday.getDate()获取。第二个参数是字符串'2'。
var today = new Date();
var yesterday = new Date(today.getTime());
this.getServerData(yesterday.getFullYear() + "-" + (yesterday.getMonth() + 1) + "-" + yesterday.getDate(),'0')
}
if(this.current=="1"){
var today = new Date();
var yesterday = new Date(today.getTime());
this.getServerData(yesterday.getFullYear() + "-" + (yesterday.getMonth() + 1) + "-" + yesterday.getDate(),'1');
}
if(this.current=="2"){
var today = new Date(); //显示
console.log(today,'sasasasa')
var yesterday = new Date(today.getTime());
this.getServerData(yesterday.getFullYear() + "-" + (yesterday.getMonth() + 1) + "-" + yesterday.getDate(),'2');
}
}
}
}
};
</script>
<style scoped>
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
height: 230px;
}
</style>
地址:演示 - uCharts跨平台图表库
五,获取后台数据 进行页面渲染
案例一
(1)代码展示
<template>
<view>
<cu-custom bgColor="bg-gradual-pink" :isBack="true">
<block slot="content">荒料管理</block>
</cu-custom>
<view class="uni-container">
<uni-table border stripe emptyText="暂无更多数据">
<uni-tr style="background-color:#ebebeb;">
<uni-th width="150" align="center">序号</uni-th>
<uni-th width="150" align="center">入库编号</uni-th>
<uni-th align="center">日期</uni-th>
<uni-th align="center">荒料种类</uni-th>
<uni-th align="center">长</uni-th>
<uni-th align="center">宽</uni-th>
<uni-th align="center">高</uni-th>
<uni-th align="center">体积</uni-th>
<uni-th align="center">颜色</uni-th>
<uni-th align="center">价格</uni-th>
<uni-th align="center">数量</uni-th>
<uni-th align="center">运单单价</uni-th>
<uni-th align="center">运费</uni-th>
<uni-th width="204" align="center">运输人</uni-th>
<uni-th width="204" align="center">总价</uni-th>
<uni-th width="204" align="center">料场</uni-th>
<uni-th align="center">操作员</uni-th>
<uni-th align="center">图片</uni-th>
<uni-th align="center">文件</uni-th>
<uni-th align="center">备注</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in tableData" :key="index">
<uni-td>{{index+1}}</uni-td>
<uni-td>
<view class="name">{{ item.sbwWarehousingNumber}}</view>
</uni-td>
<uni-td align="center">{{ item.sbwWarehousingDate}}</uni-td>
<uni-td align="center">{{ item.sbwName_dictText }}</uni-td>
<uni-td align="center">{{ item.sbwLong }}</uni-td>
<uni-td align="center">{{ item.sbwWidth }}</uni-td>
<uni-td align="center">{{ item.sbwTall }}</uni-td>
<uni-td align="center">{{ item.sbwSbwVolume }}</uni-td>
<uni-td align="center">{{ item.sbwColor_dictText }}</uni-td>
<uni-td align="center">{{ item.sbwPrice }}</uni-td>
<uni-td align="center">{{ item.sbwNum }}</uni-td>
<uni-td align="center">{{ item.sbwFreightPrice }}</uni-td>
<uni-td align="center">{{ item.sbwFreight }}</uni-td>
<uni-td align="center">{{ item.sbwTransporter_dictText }}</uni-td>
<uni-td align="center">{{ item.sbwTotalPrice }}</uni-td>
<uni-td align="center">{{ item.sbwStockyard_dictText }}</uni-td>
<uni-td align="center">{{ item.sbwTransporter_dictText }}</uni-td>
<uni-td align="center">{{ item.sbwPic }}</uni-td>
<uni-td align="center">{{ item.sbwFile }}</uni-td>
<uni-td align="center">{{ item.sbwRemake }}</uni-td>
</uni-tr>
</uni-table>
<p>总数据量{{this.total}}</p>
<view class="uni-pagination-box"><uni-pagination show-icon :page-size="pageSize" :current="pageCurrent"
:total="total" @change="change" /></view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
searchVal: '',
tableData: [],
// 每页数据量
pageSize: 10,
// 当前页
pageCurrent: 1,
// 数据总量
total: 0,
}
},
onLoad() {
this.selectedIndexs = []
this.getData(1) //初始化默认第一页
},
methods: {
// 分页触发
change(e) {
// this.selectedIndexs.length = 0
this.getData(e.current) //点击出发 :current="pageCurrent" 当前页
},
// 获取数据
getData(pageCurrent) {
// 定义请求数据 然后通过路径带到后端返回需要的数据
this.pageCurrent = pageCurrent
let pageNo=this.pageCurrent //当前页
let pageSize=this.pageSize //每页数据量
// 路径拼接数据 发送到后端 获取翻页的数据和效果
let url = '/block/smsBlockWarehousing/list?pageNo='+pageNo+"&pageSize="+pageSize;
this.$http.get(url).then(res => {
this.tableData = res.data.result.records
this.total=res.data.result.total; //总数据量
// console.log('结果', res.data.result.records)
})
},
}
}
</script>
(2)页面展示
案例二
(1)代码展示
<template>
<view>
<cu-custom bgColor="bg-gradual-pink" :isBack="true">
<block slot="content">路边石管理</block>
</cu-custom>
<uni-section title="">
<view>
<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" />
</view>
<view class="content">
<view v-if="current === 0">
<uni-table border stripe emptyText="暂无更多数据">
<uni-tr style="background-color:#ebebeb;">
<uni-th width="100" align="center">序号</uni-th>
<uni-th width="204" align="center">入库编号</uni-th>
<uni-th align="center" width="204">库存日期</uni-th>
<uni-th width="150" align="center">长(m)</uni-th>
<uni-th width="150" align="center">宽(m)</uni-th>
<uni-th width="150" align="center">高(m)</uni-th>
<uni-th width="150" align="center">数量</uni-th>
<uni-th width="150" align="center">单价</uni-th>
<uni-th width="150" align="center">体积(㎡)</uni-th>
<uni-th width="204" align="center">加工费</uni-th>
<uni-th width="150" align="center">颜色</uni-th>
<uni-th width="150" align="center">机组</uni-th>
<uni-th width="150" align="center">人员</uni-th>
<uni-th width="204" align="center">操作员</uni-th>
<uni-th width="204" align="center">图片</uni-th>
<uni-th width="150" align="center">文件</uni-th>
<uni-th width="204" align="center">备注</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in tableData" :key="index">
<uni-td>{{index+1}}</uni-td>
<uni-td align="center">{{ item.sskwRkid }}</uni-td>
<uni-td align="center">{{ item.sskwDate }}</uni-td>
<uni-td align="center">{{ item.sskwLong }}</uni-td>
<uni-td align="center">{{ item.sskwWight }}</uni-td>
<uni-td align="center">{{ item.sskwHight }}</uni-td>
<uni-td align="center">{{ item.sskwNum }}</uni-td>
<uni-td align="center">{{ item.sskwPrice }}</uni-td>
<uni-td align="center">{{ item.sskwVolume }}</uni-td>
<uni-td align="center">{{ item.sskwWages }}</uni-td>
<uni-td align="center">{{item.sskwColor_dictText}}</uni-td>
<uni-td align="center">{{item.sskwSet_dictText}}</uni-td>
<uni-td align="center">{{ item.sskwPromed_dictText }}</uni-td>
<uni-td align="center">{{ item.sskwOpuser }}</uni-td>
<uni-td align="center"><img :src="item.sabwPic" /></uni-td>
<uni-td align="center">{{ item.sskwFile }}</uni-td>
<uni-td align="center">{{ item.sskwRemake }}</uni-td>
</uni-tr>
</uni-table>
<view class="uni-pagination-box"><uni-pagination show-icon :page-size="pageSize"
:current="pageCurrent" :total="total" @change="change" /></view>
</view>
<view v-if="current === 1">
<uni-table border stripe emptyText="暂无更多数据">
<uni-tr style="background-color:#ebebeb;">
<uni-th width="100" align="center">序号</uni-th>
<uni-th width="204" align="center">入库编号</uni-th>
<uni-th align="center" width="204">库存日期</uni-th>
<uni-th width="150" align="center">长(m)</uni-th>
<uni-th width="150" align="center">宽(m)</uni-th>
<uni-th width="150" align="center">高(m)</uni-th>
<uni-th width="150" align="center">数量</uni-th>
<uni-th width="150" align="center">单价</uni-th>
<uni-th width="150" align="center">体积(㎡)</uni-th>
<uni-th width="204" align="center">加工费</uni-th>
<uni-th width="150" align="center">颜色</uni-th>
<uni-th width="150" align="center">机组</uni-th>
<uni-th width="150" align="center">人员</uni-th>
<uni-th width="204" align="center">操作员</uni-th>
<uni-th width="150" align="center">加工方式</uni-th>
<uni-th width="204" align="center">图片</uni-th>
<uni-th width="150" align="center">文件</uni-th>
<uni-th width="204" align="center">备注</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in tableData2" :key="index">
<uni-td>{{index+1}}</uni-td>
<uni-td>
<view class="name">{{ item.skwRkid }}</view>
</uni-td>
<uni-td align="center">{{ item.skwDate }}</uni-td>
<uni-td align="center">{{ item.skwLong }}</uni-td>
<uni-td align="center">{{ item.skwWight}}</uni-td>
<uni-td align="center">{{ item.skwHight }}</uni-td>
<uni-td align="center">{{ item.skwNum }}</uni-td>
<uni-td align="center">{{ item.skwPrice}}</uni-td>
<uni-td align="center">{{ item.skwVolume }}</uni-td>
<uni-td align="center">{{ item.skwWages }}</uni-td>
<uni-td align="center">{{item.skwColor_dictText}}</uni-td>
<uni-td align="center">{{item.skwSet_dictText}}</uni-td>
<uni-td align="center">{{ item.skwPerson_dictText }}</uni-td>
<uni-td align="center">{{ item.skwOpuser }}</uni-td>
<uni-td align="center">{{ item.skwPromed_dictText}}</uni-td>
<uni-td align="center"><img :src="item.skwPic" /></uni-td>
<uni-td align="center">{{ item.skwFile }}</uni-td>
<uni-td align="center">{{ item.skwRemake }}</uni-td>
</uni-tr>
</uni-table>
<view class="uni-pagination-box"><uni-pagination show-icon :page-size="pageSize2"
:current="pageCurrent2" :total="total2" @change="changeChengpin" /></view>
</view>
</view>
</uni-section>
</view>
</template>
<script>
export default {
data() {
return {
tableData: [], //半成品获取数据
tableData2: [], //成品获取数据
// 每页数据量
pageSize: 7,
pageSize2: 7,
// 当前页
pageCurrent: 1,
pageCurrent2: 1,
// 数据总量
total: 0,
total2:0,
loading: false,
current: 0,
current2: 0,
items: ['半成品展示', '成品展示'],
}
},
// 初始值
onLoad() {
// this.getRemote()
this.selectedIndexs = []
this.getData(1)
this.getData2(1)
},
// 方法
methods: {
// 点击切换展示页面
onClickItem(e) {
if (this.current !== e.currentIndex) {
this.current = e.currentIndex
}
},
// 分页触发
change(e) {
// this.$refs.table.clearSelection()
this.selectedIndexs.length = 0
this.getData(e.current) //半成品
},
changeChengpin(e) {
// this.$refs.table.clearSelection()
this.selectedIndexs.length = 0
this.getData2(e.current) //成品
},
// 半成品获取数据
getData(pageCurrent) {
this.loading = true
this.pageCurrent = pageCurrent
let pageNo = this.pageCurrent
let pageSize = this.pageSize
let url = '/sakerb/smsSaKerbWarehousing/list?pageNo=' + pageNo + "&pageSize=" + pageSize;
this.$http.get(url).then(res => {
this.tableData = res.data.result.records
this.total = res.data.result.total;
// console.log('结果', res.data.result.records)
});
},
// 成品获取数据
getData2(pageCurrent2) {
this.loading = true
this.pageCurrent2 = pageCurrent2
let pageNo = this.pageCurrent2
let pageSize = this.pageSize2
let url2 = '/kerb/smsKerbWarehousing/list?pageNo=' + pageNo + "&pageSize=" + pageSize;
this.$http.get(url2).then(res => {
this.tableData2 = res.data.result.records
this.total2 = res.data.result.total;
// console.log('结果', res.data.result.records)
})
}
// 成品伪request请求
}
}
</script>