uniapp 对一个页面进行重构

uniapp yekong

客户要求对他人的项目做一些调整,但是看到页面的代码,实在是难受,这些变量参数,来回赋值,看得脑壳疼,实在受不了了,就做了一些重构,不断的学习优化代码,尽量将代码写的优美一些,不给人带来困扰。

重构前

<template>
	<view class="content">
		<view class="gyf_title">
			<view class="gyf_title_image" @click="backfun" style="margin-right: 160upx;">
				<image src="../../static/image/gyf_title_img.png"></image>
			</view>
			<view class="gyf_title_list">
				<text>收{{this.name}}礼增加</text>
			</view>
		</view>
		<form @submit="submit">
			<view class="lbtk_gyf_main">
				<view class="lbtk_gyf_main_one">
					<view class="lbtk_gyf_main_one_time">
						<text @click="openDatetimePicker">{{this.birthday?this.birthday:rq}}</text>
						<SimpleDateTimePicker ref="myPicker" @submit="handleSubmit" :start-year="2000"
							:end-year="2030" />
					</view>
					<!-- <view class="lbtk_gyf_main_one_remind">
						<checkbox-group @change="tipfun">
							<checkbox :checked="is_tip"></checkbox>
						</checkbox-group>
						<text>{{remind}}</text>
					</view> -->
				</view>
				<view style="height: 250upx;">
					<swiper style="height: 330upx;" indicator-dots="true" indicator-active-color="red">
						<swiper-item v-for="(item,index) in eventtip">
							<view class="lbtk_gyf_main_classification">
								<view class="lbtk_gyf_main_classification_nav" @click="bgclick(index,i)"
									v-for="(v,i) in item" :style="((i*4)+index)===selectindex2?'background:#dfbbbf':''">
									<text>{{v.name}}</text>
								</view>

							</view>

						</swiper-item>

					</swiper>
				</view>
				<view class="a" style="margin-top: 80upx;">
					<input type="text" name="zdy" :disabled="is_virtulzdy?false:true" :placeholder="inputShi1"
						:value="value.name" id="inputShi1"
						style="width: 480upx;margin: 0 auto;font-size: 50upx;color: #000000;border-bottom: 1px solid #e2d9d2;padding-bottom: 30upx;" />
					<view class="lbtk_gyf_main_money_material">
						<checkbox-group @change="changezdy">
							<checkbox :checked="is_virtulzdy"></checkbox>
						</checkbox-group>
						<text>自定义</text>
					</view>
				</view>

				<view style="height: 250upx;">
					<swiper style="height: 330upx;" indicator-dots="true" indicator-active-color="red">
						<swiper-item v-for="(item,index) in monytip">
							<view class="lbtk_gyf_main_money">
								<view class="lbtk_gyf_main_money_nav" v-for="(v,i) in item" @click="getmoney(index,i)"
									:style="((i*4)+index)===selectindex?'background:#dfbbbf':''">
									<text>{{v.name}}</text>
								</view>

							</view>
						</swiper-item>
					</swiper>
				</view>
				<view class="a" style="margin-top: 80upx;">
					<input type="text" name="qian" :disabled="is_virtul?false:true" :placeholder="inputShi2"
						:value="moneyvalue.name" id="inputShi2"
						style="width: 480upx;margin: 0 auto;font-size: 50upx;color: #000000;border-bottom: 1px solid #e2d9d2;padding-bottom: 30upx;" />
					<view class="lbtk_gyf_main_money_material">
						<checkbox-group @change="change">
							<checkbox :checked="is_virtul"></checkbox>
						</checkbox-group>
						<text>自定义</text>
					</view>
				</view>

			</view>
			<view class="lbtk_gyf_bottom">
				<button form-type="submit" style="width: 700upx;margin: 0 auto;"><text>确认</text></button>
			</view>
		</form>

	</view>
</template>

<script>
	import moment from 'moment'
	import {
		eventtip,
		bookadd,
		monytip,
	} from '../../config/api.js'
	// import gppDatePicker from "@/components/gpp-datePicker/gpp-datePicker.vue"
	import SimpleDateTimePicker from "uni_modules/buuug7-simple-datetime-picker/components/buuug7-simple-datetime-picker/buuug7-simple-datetime-picker.vue";
	import {
		Debounce
	} from '@/utils/utils.js'
	export default {
		// components: {
		// 	gppDatePicker
		// },
		components: {
			SimpleDateTimePicker,
		},
		data() {
			return {
				birthday: "",
				startDate: "1999-01-01",
				endDate: "2155-01-01",
				pickerDate: '',
				mId: '',
				remembtime: '',
				// time: '',
				// data: '',
				remind: '提醒',
				address: '',
				// Banquetclassification: ['婚宴', '生日', '升学', '酒席', '升学', '酒席', '升学', '自定义'],
				eventtip: [],
				monytip: [],
				// Banquetmoney: ['50', '100', '200', '300', '400', '500', '1000', '自定义'],
				moneyvalue: '',
				material: '',
				value: '',
				is_tip: false,
				is_virtul: false,
				is_virtulzdy: false,
				remark: false,
				list: [],
				bID: "",
				selectindex: "",
				selectindex2: '',
				inputShi1: '',
				inputShi2: '',
				rq: '',
				name: '',
				zdy: '',
				qian: ''
			}
		},
		created() {
			this.getevent();
			this.getmony();
		},
		onLoad(name) {
			this.name = name.name
			this.rq = moment().format("YYYY-MM-DD HH:mm")
			this.time = moment(this.rq).unix();
			var that = this
		},
		methods: {
			openDatetimePicker() {
				this.$refs.myPicker.show();
			},
			closeDatetimePicker() {
				this.$refs.myPicker.hide();
			},
			handleSubmit(e) {
				// {year: "2019", month: "07", day: "17", hour: "15", minute: "21"}
				console.log(e);
				this.birthday = ```{e.year}-``{e.month}-``{e.day} ``{e.hour}:${e.minute}`;
				this.time = moment(this.birthday).unix();
				console.log(this.time);
			},
			// onCancel(e) {
			// 	console.log(e);
			// },
			// onConfirm(e) {
			// 	this.pickerDate = e.dateValue;
			// 	var time = new Date(this.pickerDate);
			// 	this.time = time.getTime()/1000;
			// 	console.log(this.time);
			// },
			getevent() {
				var that = this;
				eventtip().then(res => {
					var data = res.data
					that.eventtip = that.setdata(data)
				}).catch(err => {

				})
			},
			getmony() {
				var that = this;
				monytip().then(res => {
					var data = res.data
					that.monytip = that.setdata(data)
				}).catch(err => {

				})
			},
			setdata(data) {
				var arr = [],
					mun = Math.ceil(data.length / 4)
				for (let i = 0; i < mun; i++) {
					let isarr = []
					for (var j = 0; j < 4; j++) {
						if (!data[(i * 4) + j]) {
							break;
						}
						isarr.push(data[(i * 4) + j])
					}
					arr.push(isarr)
				}
				return arr
			},
			bgclick: function(index, i) {
				this.selectindex2 = (i * 4) + index
				var value = this.eventtip[index][i] == '自定义' ? '' : this.eventtip[index][i];
				this.value = value
				if (this.value === '') {
					this.inputShi1 = '请输入事项'
				}
			},
			getmoney: function(index, i) {
				this.selectindex = (i * 4) + index
				var moneyvalue = this.monytip[index][i] == "自定义" ? "" : this.monytip[index][i];
				this.moneyvalue = moneyvalue;
				// this.list.money = this.Banquetmoney[index];
				if (this.moneyvalue === '') {
					this.inputShi2 = '请输入礼金'
				}
			},
			backfun: function() {
				uni.navigateBack({
					delta: 1
				})
			},
			changezdy() {
				this.is_virtulzdy = !this.is_virtulzdy
			},
			change() {
				this.is_virtul = !this.is_virtul
			},
			changeshiwu() {
				this.remark = !this.remark
			},
			tipfun() {
				this.is_tip = !this.is_tip
				console.log(this.is_tip)
			},
			submit: Debounce(function(e) {
				e.detail.value.remembtime = this.time
				e.detail.value.event = this.value.name
				e.detail.value.money = this.moneyvalue.name
				// e.detail.value.addr = this.address
				this.address = e.detail.value.address
				this.zdy = e.detail.value.zdy
				this.qian = e.detail.value.qian
				this.shiwu = e.detail.value.shiwu
				e.detail.value.remark = this.remark
				e.detail.value.is_tip = this.is_tip
				e.detail.value.is_virtul = this.is_virtul
				const gyfvalue = uni.getStorageSync("Cid")
				// this.token = uni.getStorageSync('token').token
				const time = new Date();
				var data = {
					mId: gyfvalue,
					catId: 19,
					remembtime: this.time,
					event: this.value.name ? this.value.name : this.zdy,
					money: this.moneyvalue.name ? this.moneyvalue.name : this.qian,
					addr: this.address,
					remark: this.remark === true ? this.shiwu : false,
					is_tip: this.is_tip,
					is_virtul: this.is_virtul === true ? '1' : '0'
				}
				bookadd(data).then(res => {
					console.log(res)
					if (res.msg == "添加成功") {
						uni.showToast({
							title: res.msg,
							icon: "none"
						})
						const time = setInterval(function() {
							uni.switchTab({
								url: "/pages/home/home"
							})
							clearInterval(time)
						}, 1000)
					} else {
						uni.showToast({
							title: res.msg,
							icon: "none"
						})
					}
				}).catch(err => {

				})
			}, 1000)
		}
	}
</script>

<style>
	@import url("../../static/css/style.css");
</style>

重构后

<template>
	<view class="content">
		<view class="gyf_title">
			<view class="gyf_title_image" @click="backfun" style="margin-right: 160upx;">
				<image src="../../static/image/gyf_title_img.png"></image>
			</view>
			<view class="gyf_title_list">
				<text>收{{this.name}}礼增加</text>
			</view>
		</view>
		<form @submit="submit">
			<view class="lbtk_gyf_main">
				<dateTimePickerSync :date.sync="data.time" mode="datetime"></dateTimePickerSync>
				<swiperChoose :list='eventtip' :name.sync="data.event"></swiperChoose>
				<view class="a" style="margin-top: 80upx;">
					<input type="text" :disabled="is_virtulzdy?false:true" :placeholder="is_virtul?'自定义':'请输入事项'"
						v-model="data.event"
						style="width: 480upx;margin: 0 auto;font-size: 50upx;color: #000000;border-bottom: 1px solid #e2d9d2;padding-bottom: 30upx;" />
					<checkboxCom :value.sync="is_virtulzdy"></checkboxCom>
				</view>
				<swiperChoose :list='monytip' :name.sync="data.money"></swiperChoose>
				<view class="a" style="margin-top: 80upx;">
					<input type="text" :disabled="is_virtul?false:true" :placeholder="is_virtul?'自定义':'请输入礼金'"
						v-model="data.money"
						style="width: 480upx;margin: 0 auto;font-size: 50upx;color: #000000;border-bottom: 1px solid #e2d9d2;padding-bottom: 30upx;" />
					<checkboxCom :value.sync="is_virtul"></checkboxCom>
				</view>
			</view>
			<view class="lbtk_gyf_bottom">
				<button @tap="$u.debounce(submit, 500)" style="width: 700upx;margin: 0 auto;"><text>确认</text></button>
			</view>
		</form>
	</view>
</template>

<script>
	import dayjs from 'dayjs'
	import {
		eventtip,
		bookadd,
		monytip,
	} from '../../config/api.js'
	import dateTimePickerSync from '@/components/dateTimePicker/dateTimePickerSync.vue'
	import swiperChoose from '@/components/dateTimePicker/swiper-choose.vue'
	import checkboxCom from '@/components/dateTimePicker/checkboxCom.vue'
	export default {
		components: {
			dateTimePickerSync,
			swiperChoose,
			checkboxCom
		},
		data() {
			return {
				data: {
					time: dayjs().format("YYYY-MM-DD HH:mm"),
					event: '',
					money: ''
				},
				mId: '',
				eventtip: [],
				monytip: [],
				is_tip: false,
				is_virtul: false,
				is_virtulzdy: false,
				remark: false,
				name: ''
			}
		},
		created() {
			this.getevent();
			this.getmony();
		},
		onLoad(name) {
			var that = this
			this.name = name.name
			this.data.time = uni.getStorageSync('addtime') ? uni.getStorageSync('addtime') : dayjs().format(
				"YYYY-MM-DD HH:mm")
			this.data.event = uni.getStorageSync('addevent') ? uni.getStorageSync('addevent') : ''
		},
		methods: {
			getevent() {
				var that = this;
				eventtip().then(res => {
					var data = res.data
					that.eventtip = data
				})
			},
			getmony() {
				var that = this;
				monytip().then(res => {
					var data = res.data
					that.monytip = data
				})
			},
			backfun: function() {
				uni.navigateBack({
					delta: 1
				})
			},
			submit: function() {
				var that = this;
				if (!that.data.time) {
					uni.showToast({
						title: '请选择日期',
						icon: 'none'
					})
					return
				}
				if (!that.data.event) {
					uni.showToast({
						title: '请选择类型',
						icon: 'none'
					})
					return
				}
				if (!that.data.money) {
					uni.showToast({
						title: '请选择礼金',
						icon: 'none'
					})
					return
				}
				var data = {
					mId: uni.getStorageSync("Cid"),
					catId: 19,
					remembtime: dayjs(that.data.time).unix(),
					event: that.data.event,
					money: that.data.money,
					addr: '',
					remark: false,
					is_tip: false,
					is_virtul: that.is_virtul === true ? '1' : '0'
				}
				uni.showLoading({
					title: '提交中',
					mask: true
				})
				bookadd(data).then(res => {
					uni.setStorageSync('addtime', that.data.time)
					uni.setStorageSync('addevent', that.data.event)
					uni.hideLoading()
					if (res.msg == "添加成功") {
						uni.showToast({
							title: res.msg,
							icon: "none"
						})
						setTimeout(() => {
							uni.switchTab({
								url: "/pages/home/home"
							})
						}, 2000)
					} else {
						uni.showToast({
							title: res.msg,
							icon: "none"
						})
					}
				})
			}
		}
	}
</script>

<style>
	@import url("../../static/css/style.css");
</style>

喜欢