小程序 打开方式 页面效果 表单页面 点击跳到详情页 图标 获取后台数据 进行页面渲染

请求地址: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>
(2)页面展示
相关推荐
吕彬-前端8 分钟前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱11 分钟前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
guai_guai_guai20 分钟前
uniapp
前端·javascript·vue.js·uni-app
Aloudata30 分钟前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
其乐无涯1 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
写bug的小屁孩1 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3
斑布斑布1 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
紅色彼岸花1 小时前
第六章:DNS域名解析服务器
运维·服务器
Spring_java_gg1 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
✿ ༺ ོIT技术༻1 小时前
Linux:认识文件系统
linux·运维·服务器