基于ColorUi-uniapp的一个表单实例

1.页面

2.新建一个uniapp项目,导入ColorUi-nuiapp模板https://ext.dcloud.net.cn/plugin?id=239

 

3.页面代码:

  1 <!--
  2   文件描述:预付费页面
  3   创建时间:2020/1/19 14:37
  4   创建人:Administrator
  5 -->
  6 <template>
  7   <view class="appletPage appletPage-prepayment">
  8     <cu-custom bgColor="bg-gradual-blue" :isBack="true">
  9       <block slot="backText">返回</block>
 10       <block slot="content">预付费页面</block>
 11     </cu-custom>
 12     <view class="cu-modal" :class="modalName=='Modal'?'show':''" @tap="hideModal">
 13       <view class="cu-dialog">
 14         <view class="cu-bar bg-white justify-end">
 15           <view class="content">提示</view>
 16           <view class="action" @tap="hideModal">
 17             <text class="cuIcon-close text-red"></text>
 18           </view>
 19         </view>
 20         <view class="padding-xl">
 21           {{modalContent}}
 22         </view>
 23       </view>
 24     </view>
 25 
 26     <view class="cu-modal bottom-modal" :class="modalName=='ChooseModal'?'show':''" @tap="hideModal">
 27       <view class="cu-dialog" @tap.stop="">
 28         <view class="cu-bar bg-white">
 29           <view class="action text-green" @tap="hideModal">确定</view>
 30         </view>
 31         <view class="grid col-3 padding-sm">
 32           <view v-for="(item,index) in checkboxVolumn" class="padding-xs" :key="index">
 33             <button class="cu-btn orange lg block" :class="item.checked?'bg-orange':'line-orange'" @tap="ChooseCheckbox"
 34                     :data-value="item.value"> {{item.name}}
 35               <view class="cu-tag sm round" :class="item.checked?'bg-white text-orange':'bg-orange'" v-if="item.hot">
 36                 HOT
 37               </view>
 38             </button>
 39           </view>
 40         </view>
 41       </view>
 42     </view>
 43 
 44     <form>
 45       <view class="cu-form-group">
 46         <view class="title">用户号</view>
 47         <input placeholder="请输入用户号" name="input" v-model="userinfo.usercode" disabled></input>
 48       </view>
 49       <view class="cu-form-group">
 50         <view class="title">用户名</view>
 51         <input name="input" v-model="userinfo.name" disabled></input>
 52       </view>
 53       <view class="cu-form-group">
 54         <view class="title">所属公司</view>
 55         <input name="input" v-model="userinfo.branchname" disabled></input>
 56       </view>
 57       <view class="cu-form-group">
 58         <view class="title">气价</view>
 59         <input name="input" v-model="userinfo.price" disabled></input>
 60       </view>
 61       <view class="cu-form-group">
 62         <view class="title">
 63           {{userinfo.balancename}}
 64         </view>
 65         <input name="input" v-model="userinfo.balance" disabled></input>
 66       </view>
 67       <view class="cu-form-group">
 68         <view class="title">充气量</view>
 69         <input name="input" placeholder="请输入充气量" type="number" v-model="dataForm.volumn" @change="changeVolumn"></input>
 70         <button class='cu-btn bg-green shadow' @click="chooseVolumn">选择</button>
 71       </view>
 72       <view class="cu-form-group">
 73         <view class="title">金额</view>
 74         <input name="input" v-model="dataForm.amount" disabled></input>
 75         <text class='cuIcon-refund text-orange'></text>
 76       </view>
 77     </form>
 78     <view class="margin-tb-sm text-center">
 79       <button class="cu-btn round bg-blue lg" style="margin-right: 15px;" @click="ccbPay('qr')">二维码支付</button>
 80       <button class="cu-btn round bg-cyan lg" @click="ccbPay('card')">建行卡支付</button>
 81     </view>
 82   </view>
 83 </template>
 84 
 85 <script>
 86 // 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
 87 // 例如:import 《组件名称》 from '《组件路径》';
 88 // 例如:import uploadFile from '@/components/uploadFile/uploadFile'
 89 
 90 export default {
 91   name: 'payment',
 92   // import引入的组件需要注入到对象中才能使用
 93   components: {},
 94   data () {
 95     // 这里存放数据
 96     return {
 97       modalName: null,
 98       modalContent: '提示内容',
 99       userinfo: {
100         usercode: '',
101         name: '',
102         branchname: '',
103         price: '',
104         balance: 0,
105         balancename: '当前余额',
106         customid: '',
107         meterid: ''
108       },
109       dataForm: {
110         amount: 0,
111         volumn: ''
112       },
113       requestParams: {
114         page: 1,
115         limit: 10
116       },
117       banner: {},
118       checkboxVolumn: [{
119         value: 50,
120         name: '50m³',
121         checked: false,
122         hot: false,
123       }, {
124         value: 100,
125         name: '100m³',
126         checked: false,
127         hot: false,
128       }, {
129         value: 200,
130         name: '200m³',
131         checked: false,
132       }, {
133         value: 300,
134         name: '300m³',
135         checked: false
136       }, {
137         value: 500,
138         name: '500m³',
139         checked: false
140       }, {
141         value: 1000,
142         name: '1000m³',
143         checked: false
144       }]
145     }
146   },
147   // 监听属性 类似于data概念
148   computed: {},
149   // 方法集合
150   methods: {
151     onLoad(event) {
152       // 目前在某些平台参数会被主动 decode,暂时这样处理。
153       try {
154         this.banner = JSON.parse(decodeURIComponent(event.query));
155       } catch (error) {
156         this.banner = JSON.parse(event.query);
157       }
158       this.userinfo.usercode = this.banner.usercode
159       this.getUserInfo()
160     },
161     hideModal(e) {
162       this.modalName = null
163     },
164     getUserInfo () {
165       this.banner.act = 'CESHI_getuserInfo'
166       uni.request({
167         url: this.$Request,
168         data: this.banner,
169         method: 'GET',
170         success: (result) => {
171           const data = result.data;
172           console.log(data)
173           if (result.statusCode === 200) {
174             Object.assign(this.userinfo, data.data[0]);
175             if (this.userinfo.balance !== null) {
176               if (this.userinfo.balance > 0) {
177                 this.userinfo.balancename = '当前欠费'
178               } else {
179                 this.userinfo.balancename = '当前余额'
180                 this.userinfo.balance = -this.userinfo.balance
181               }
182             }
183           } else {
184             this.modalName = 'Modal'
185             this.modalContent = '失败'
186           }
187         },
188         fail: (err) => {
189           console.log(err);
190         },
191         complete: (e) => {
192         }
193       });
194     },
195     chooseVolumn () {
196       this.modalName = 'ChooseModal'
197     },
198     changeVolumn () {
199       if(Number(this.dataForm.volumn < 0)){
200         this.modalName = 'Modal'
201         this.modalContent = '气量不能小于0!'
202         return
203       }
204       let o = {
205         price: this.userinfo.price,
206         customid: this.userinfo.id,
207         volumn: this.dataForm.volumn,
208         act: 'CESHI_getFeeByVolumn'
209       }
210       uni.request({
211         url: this.$Request,
212         data: o,
213         method: 'GET',
214         success: (result) => {
215           const data = result;
216           if (result.statusCode === 200) {
217             let amount = data.data
218             this.dataForm.amount = amount
219           } else {
220             this.modalName = 'Modal'
221             this.modalContent = '计算金额失败'
222           }
223         },
224         fail: (err) => {
225           console.log(err);
226         },
227         complete: (e) => {
228         }
229       });
230     },
231     ChooseCheckbox(e) {
232       let items = this.checkboxVolumn;
233       let values = e.currentTarget.dataset.value;
234       console.log(values)
235       if(this.dataForm.volumn !== values){
236         this.dataForm.volumn = values
237         for (let i = 0, lenI = items.length; i < lenI; ++i) {
238           if (items[i].value == values) {
239             items[i].checked = true;
240           }else{
241             items[i].checked = false
242           }
243         }
244       }else{
245         this.dataForm.volumn = ''
246         for (let i = 0, lenI = items.length; i < lenI; ++i) {
247           items[i].checked = false
248         }
249       }
250       if(this.dataForm.volumn !== ''){
251         this.changeVolumn()
252       }else{
253         this.dataForm.amount = 0
254       }
255 
256     },
257     ccbPay (paytype) {
258       this.modalName = 'Modal'
259       this.modalContent = '调用支付接口返回支付二维码'
260       return;
261       let o = {
262         customid: this.userinfo.id,
263         volumn: this.dataForm.volumn
264       }
265       uni.request({
266         url: this.$Request + '/gasuser/custom/getFeeByVolumn',
267         data: o,
268         method: 'GET',
269         success: (result) => {
270           const data = result.data;
271           if (data.code === 0) {
272             let amount = data.data
273             let saveDataForm = {
274               customid: this.userinfo.id,
275               meterid: this.userinfo.meterid,
276               branchname: this.userinfo.branchname,
277               amount: amount,
278               paytype: paytype
279             }
280             uni.request({
281               url: this.$Request + '/wechat/fee/ccbPayOrder',
282               data: saveDataForm,
283               method: 'POST',
284               success: (result) => {
285                 const data = result.data;
286                 if (data.code === 0) {
287                   location.replace(data.data)
288                 } else {
289                   this.modalName = 'Modal'
290                   this.modalContent = data.msg
291                 }
292               },
293               fail: (err) => {
294                 console.log(err);
295               },
296               complete: (e) => {
297               }
298             });
299           } else {
300             this.modalName = 'Modal'
301             this.modalContent = data.msg
302           }
303         },
304         fail: (err) => {
305           console.log(err);
306         },
307         complete: (e) => {
308         }
309       });
310     }
311   },
312   // 监控data中的数据变化
313   watch: {},
314   // 生命周期 - 创建完成(可以访问当前this实例)
315   created () {
316 
317   },
318   // 生命周期 - 挂载完成(可以访问DOM元素)
319   mounted () {
320 
321   },
322   beforeCreate () {
323   }, // 生命周期 - 创建之前
324   beforeMount () {
325   }, // 生命周期 - 挂载之前
326   beforeUpdate () {
327   }, // 生命周期 - 更新之前
328   updated () {
329   }, // 生命周期 - 更新之后
330   beforeDestroy () {
331   }, // 生命周期 - 销毁之前
332   destroyed () {
333   }, // 生命周期 - 销毁完成
334   activated () {
335   } // 如果页面有keep-alive缓存功能,这个函数会触发
336 }
337 </script>
338 
339 <style scoped  lang="scss">
340   //@import url(); 引入公共css类
341 
342   // 输入框样式
343   .appletPage {
344     .cu-form-group .title {
345       min-width: calc(4em + 15px);
346     }
347 
348     .nodata-demo {
349       img {
350         width: 70vw;
351         margin-left: 15vw;
352       }
353     }
354   }
355 </style>
列表页面代码

4.后台代码:

// 计算气价
      case 'CESHI_getFeeByVolumn':
            $volumn = $_REQUEST['volumn'];
            $price = $_REQUEST['price'];
            echo $volumn*$price;
      break;
        // 获取一个用户信息
        case 'CESHI_getuserInfo':
            $json_string = file_get_contents('E:\www\json\FeHelper-20200119163146.json');
            $j= json_decode($json_string);
            echo $json_string;
        break;

5.用户信息数据格式:

{
    "data": [
        {
            "id": "1209690283472470017",
            "customtype": "residenttype",
            "usercode": "1020016985",
            "name": "曹**",
            "branchname": "XXX市收费有限公司",
            "price": 2.95,
            "priceid": "1169134547270692865",
            "balance": 0,
            "metertype": "2",
            "meterid": "1209690283480858625",
            "metercode": "10017343",
            "pricemode": "2",
            "ladderprice": "0,2.95,360,3.1,1080,3.8",
            "totalamount": "null",
            "scrapped": "0"
        }
    ]
}

6.页面操做展示

 

猜你喜欢

转载自www.cnblogs.com/pangchunlei/p/12214631.html