当前位置: 首页 > article >正文

uni-app开发日志:将schema2code生成的新增页和修改页整合成一页

有没有想过,add和edit页面其实没多大差别?
我之前自研的系统add和edit都是一个页面,只要判断一下当前有没有id传递来,为空来就是新增。
这样如果页面修改时,才能尽量少改动代码,少出错。

对比add.vue和edit.vue

其实代码几乎没差别,主要就是edit.vue多了一个获取id和依靠id获取具体数据,不一样之处一个是新建入库一个是修改库中数据。
我现在把不一样的代码列出来。

// html部分一模一样
<template>
...
</template>
<script>
...
// edit.vue多一个获取id
onLoad(e) {
	if (e.id) {
		const id = e.id
		this.formDataId = id
		this.getDetail(id)
	}
},
...
methods: {
	...
	// add.vue是新增,edit.vue是修改	
	// 这是add.vue
	submitForm(value) {
		// 使用 clientDB 提交数据
		return db.collection(dbCollectionName).add(value).then((res) => {
			uni.showToast({
				title: '新增成功'
			})
			this.getOpenerEventChannel().emit('refreshData')
			setTimeout(() => uni.navigateBack(), 500)
		}).catch((err) => {
			uni.showModal({
				content: err.message || '请求服务失败',
				showCancel: false
			})
		})
	}
	// 这是edit.vue
	submitForm(value) {
		// 使用 clientDB 提交数据
		return db.collection(dbCollectionName).doc(this.formDataId).update(value).then((res) => {
			uni.showToast({
				title: '修改成功'
			})
			this.getOpenerEventChannel().emit('refreshData')
			setTimeout(() => uni.navigateBack(), 500)
		}).catch((err) => {
			uni.showModal({
				content: err.message || '请求服务失败',
				showCancel: false
			})
		})
	},
			
	// edit.vue的方法中还多了一个获取内容的方法
	/**
	 * 获取表单数据
	 * @param {Object} id
	 */
	getDetail(id) {
		uni.showLoading({
			mask: true
		})
		db.collection(dbCollectionName).doc(id).field(
				"parent_id,key,name,icon,description,remark,sort,is_hot_show,is_display,status,is_deleted").get()
			.then((res) => {
				const data = res.result.data[0]
				if (data) {
					this.formData = data

				}
			}).catch((err) => {
				uni.showModal({
					content: err.message || '请求服务失败',
					showCancel: false
				})
			}).finally(() => {
				uni.hideLoading()
			})
	}
	...
}
</script>

代码合并

好了,有了如上的分析,那修改就再简单不过了:直接在edit.vue上修改。

  • 其它地方都不需要改动。
  • submitForm(value)方法里,判断一下id是否存在。
    • 如果不存在则为新增,把add.vue中该方法下的内容复制来即可;
    • 如果为修改,那就是原来代码;
  • 最后在list.vue上修改一下新增按钮的链接就行。
// 只需要把add.vue的submitForm中的内容复制到edit.vue来就行了

/**
 * 提交表单
 */
submitForm(value) {
	// 判断一下formDataId不为空就是修改,为空就是新增
	// 使用 clientDB 提交数据
	if(this.formDataId && this.formDataId !== ''){
		return db.collection(dbCollectionName).doc(this.formDataId).update(value).then((res) => {
			uni.showToast({
				title: '修改成功'
			})
			this.getOpenerEventChannel().emit('refreshData')
			setTimeout(() => uni.navigateBack(), 500)
		}).catch((err) => {
			uni.showModal({
				content: err.message || '请求服务失败',
				showCancel: false
			})
		})
	}else{
		return db.collection(dbCollectionName).add(value).then((res) => {
			uni.showToast({
				title: '新增成功'
			})
			this.getOpenerEventChannel().emit('refreshData')
			setTimeout(() => uni.navigateBack(), 500)
		}).catch((err) => {
			uni.showModal({
				content: err.message || '请求服务失败',
				showCancel: false
			})
		})
	}
},

list.vue页面上找到新增,把add.vue改成edit.vue就ok啦

// 把原来的add改为edit
<button class="uni-button" type="default" size="mini" @click="navigateTo('./edit)">新增</button>

测试成功,完美。

当然,我自己做的系统,权限系统是在页面里面进行判断是否授权,而现在是根据路由来,那该add.vue还是add.vue吧,不多想了

在这里插入图片描述


http://www.kler.cn/news/284352.html

相关文章:

  • 8种数据结构
  • 【RabbitMQ】应用
  • 纯vue实现笔记系统
  • 【python】Gpt-embedding文本建模
  • 【面试题系列Vue06】Vue 单页应用与多页应用的区别
  • 【单片机原理及应用】实验:数码管的中断控制
  • customRef 与 ref
  • docker仓库的工作原理
  • Apache CloudStack Official Document 翻译节选(十)
  • 零基础转行学网络安全怎么样?
  • sheng的学习笔记-AI-基于分歧的方法
  • 高性价比百元学生党蓝牙耳机怎么选?2024四款年度耳机推荐揭秘!
  • redis作为缓存,mysql的数据如何与redis同步
  • 力扣52-最大子序和(java详细题解)
  • AI产品经理系列:如何应对AI时代?
  • 设置 Nginx、MySQL 日志轮询
  • Java-树形图工具类TreeUtil
  • 网通产品硬件设计工程师:百兆超薄网络隔离变压器您知道的有多少呢?
  • 【PyCharm激活码】2024年最新pycharm专业版激活码+安装教程!
  • 【Android】使用 ADB 查看 Android 设备的 CPU 使用率
  • 项目技巧二
  • R语言股价跳跃点识别:隐马尔可夫hmm和 GARCH-Jump对sp500金融时间序列分析
  • “添加”业务功能开发
  • Qt 杨帆起航
  • 【分布式定时任务】XXL-JOB_2.4.1部署与实战
  • 解决Element-ui中Table表格里的show-overflow-tooltip不兼容safari浏览器问题
  • vue-admin-template pan版使用方法
  • 【秋招笔试】8.24阿里控股秋招(研发岗)-三语言题解
  • 使用极狐GitLab进行K3S集群的维护与控制
  • 进程间通信--IPC机制