学习:uniapp全栈微信小程序vue3后台 (25)

121.创建schema初始化数据库并实现查询和修改库

新建DB Schema

wallpaper-system-config.schema

复制代码
// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{
	"bsonType": "object",
	"required": [],
	"permission": {
		"read": true,
		"create": false,
		"update": false,
		"delete": false
	},
	"properties": {
		"_id": {
			"description": "ID,系统自动生成"
		},
		"brand": {
			"bsonType": "string",
			"description": "品牌名称",
			"maxLength": 20
		},
		"logo": {
			"bsonType": "string",
			"description": "品牌标志"
		},
		"checkedAd": {
			"bsonType": "bool",
			"description": "是否启用广告:true展现 false不展现",
			"defaultValue": true
		},
		"rewardedVideo": {
			"bsonType": "string",
			"description": "激励视频广告id"
		},
		"cardVideo": {
			"bsonType": "string",
			"description": "卡片广告位"
		},
		"dayCoin": {
			"bsonType": "int",
			"description": "每日领币数",
			"defaultValue": 10
		},
		"adCoin": {
			"bsonType": "int",
			"description": "看广告得币数",
			"defaultValue": 30
		},
		"ruleCoin": {
			"bsonType": "string",
			"description": "硬币使用规则",
			"maxLength": 300
		},
		"hots": {
			"bsonType": "string",
			"description": "热门搜索词"
		},
		"copyright": {
			"bsonType": "string",
			"description": "版权信息",
			"maxLength": 300
		},
		"service": {
			"bsonType": "string",
			"description": "服务协议",
			"maxLength": 1000
		},
		"privacy": {
			"bsonType": "string",
			"description": "隐私政策",
			"maxLength": 1000
		},
		"updateTime": {
			"bsonType": "timestamp",
			"title": "发表时间",
			"description": "发表时间",
			"defaultValue": {
				"$env": "now"
			}
		}
	}
}

新建json文件

复制代码
[{
	"brand": "壁纸",
	"checkedAd": false,
	"dayCoin": 10,
	"adCoin": 30,
}]

初始化云数据库数据

新建云对象

复制代码
module.exports = {
	_before: function() { // 通用预处理器
	},
	async getConfig() {
		const dbJQL = uniCloud.databaseForJQL({
			clientInfo: this.getClientInfo()
		})
		return await dbJQL.collection("wallpaper-system-config")
			.orderBy("_id,asc")
			.limit(1)
			.get({ getOne: true });
	},
}

更新

复制代码
async updateConfig(params) {
		const dbJQL = uniCloud.databaseForJQL({
			clientInfo: this.getClientInfo()
		})
		params.updateTime = Date.now();
		return await dbJQL.collection("wallpaper-system-config")
			.update(params);
	}

122.使用自定义封装的图片上传组件实现logo图片的更改

复制代码
<script setup>
	import { computed, ref } from 'vue';
	import { showToast, uploadFileItem } from '../../../utils/common';
	import { cloudToHttps } from '../../../utils/tools';
	const systemCloudObj = uniCloud.importObject("admin-system");
	const btnType = ref(0); //0是编辑  1是提交
	const btnName = computed(() => btnType.value ? '提交' : '编辑');
	const formRef = ref(null);
	const formData = ref({
		logo: "",
		brand: "",
		checkedAd: false,
		rewardedVideo: "", //激励视频id
		cardVideo: "", //视频卡片广告
		dayCoin: 10, //每日领币
		adCoin: 30, //看广告获得币
		ruleCoin: "", //硬币规则说明
		hots: "", //搜索热词
		copyright: "",
		service: "",
		privacy: ""
	})
	// 获取数据
	const getData = async () => {
		let { errCode, data } = await systemCloudObj.getConfig();
		if (errCode !== 0) return showToast({ title: "查询有误" });
		formData.value = { ...formData.value, ...data, tempurl: data.logo };
		console.log(formData.value);
	}
	//是否加入广告开关
	const checkedAdChange = (e) => {
		formData.value.checkedAd = e.detail.value;
	}

	const editAndSubmit = async () => {
		if (btnType.value) {
			try {
				uni.showLoading({ mask: true });
				if (formData.value.tempurl && formData.value.tempurl != formData.value.logo) {
					let file = await uploadFileItem(formData.value.tempurl)
					formData.value.logo = cloudToHttps(file.fileID);
				}
				let { _id, tempurl, picurl, ...params } = formData.value
				let { errCode } = await systemCloudObj.updateConfig(params);
				if (errCode !== 0) return showToast({ title: "更新失败请重试" })
				showToast({ title: "更新成功" });
				console.log(res);
			} catch (err) {
				console.log(err);
				uni.hideLoading();
				showToast({ title: err })
			}
		} else {
			console.log("编辑");
		}
		btnType.value = btnType.value ? 0 : 1;
	}
	getData()

</script>

bug

/admin.config.js

/store/modules/system.js

复制代码
export default {
	namespaced: true,
	state: {},
	mutations: {},
	actions: {
		getSysConfig({ commit }) {
			const db = uniCloud.database()
			return db
				.collection('wallpaper-system-config')
				.orderBy("_id asc")
				.limit(1)
				.field('brand,logo')
				.get()
				.then(({ result }) => {
					const [config] = result.data
					commit("app/SET_APP_NAME", config.brand, { root: true })
					commit("app/SET_APP_LOGO", config.logo, { root: true })
				})
		}
	}
}

/store/modules/app.js

logo

124.在uniapp项目中使用pinia全局状态管理

全局引入

创建

复制代码
import { defineStore } from 'pinia';
import { ref } from "vue";

export const useCounterStore = defineStore('counter', () => {
	const count = ref(200);

	function increment() {
		count.value++;
	}
	return { count, increment };
});

125.使用Pinia状态管理记录数据库中配置项替换到页面中

新建js文件

/stores/system.js

复制代码
import { defineStore } from 'pinia';
import { ref } from "vue";
const dbJQL = uniCloud.databaseForJQL()

export const useSystemStore = defineStore('system', () => {
	const config = ref({
		dayCoin: 10,
		adCoin: 30,
		checkedAd: false
	})
	const getSysConfig = async () => {
		let { data = {} } = await dbJQL.collection("wallpaper-system-config")
			.orderBy("_id asc")
			.limit(1)
			.field(
				"adCoin,brand,checkedAd,dayCoin,cardVideo,copyright,hots,logo,rewardedVideo,ruleCoin")
			.get({ getOne: true });
		config.value = { ...config.value, ...data }
		console.log(config.value);
	}
	return { config, getSysConfig }
});

/App

复制代码
<script setup>
	import { onLaunch, onShow, onHide } from "@dcloudio/uni-app"
	import { useSystemStore } from "@/stores/system.js";
	const systemStore = useSystemStore();
	onLaunch(() => {
		console.log('App Launch')
		systemStore.getSysConfig();

	})
	onShow(() => {
		console.log('App Show')
	})

	onHide(() => {
		console.log('App Hide')
	})

</script>

<style lang="scss">
	@import "common/style/common-style.scss"

</style>

/pages/user/user

其他

相关推荐
Gomiko8 分钟前
JavaScript DOM 原生部分(五):事件绑定
开发语言·前端·javascript
出来吧皮卡丘11 分钟前
A2UI:让 AI Agent 自主构建用户界面的新范式
前端·人工智能·aigc
Jeking21711 分钟前
进阶流程图绘制工具 Unione Flow Editor-- 击破样式痛点:全维度自定义解决方案
前端·流程图·workflow·unione flow·flow editor·unione cloud
晴转多云54311 分钟前
关于Vite后台项目的打包优化(首屏加载)
前端
阿苟16 分钟前
nginx部署踩坑
前端·后端
小林攻城狮18 分钟前
pdfmake 生成平铺式水印:核心方法与优化
前端
search721 分钟前
前端设计:CRG 2--CDC检查
前端·芯片设计
协同生态21 分钟前
天锐绿盾新版注册机【仅用于个人学习,禁止其他用途】
学习
松涛和鸣24 分钟前
DAY33 Linux Thread Synchronization and Mutual Exclusion
linux·运维·服务器·前端·数据结构·哈希算法
Cuby!29 分钟前
【AFDM与信号处理:论文阅读】仿射频分复用:扩展OFDM以实现场景灵活性和弹性
论文阅读·笔记·学习·信息与通信·信号处理