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

学习: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: "", //激励视频idcardVideo: "", //视频卡片广告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.valuelet { 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

123.通过vuex全局状态管理实时修改头部的logo

/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.datacommit("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

其他

http://www.dtcms.com/a/393611.html

相关文章:

  • 23种设计模式之【原型模式】-核心原理与 Java实践
  • Netty 重放解码器ReplayingDecoder揭秘:重写轻量异常机制 和 ConstantPool
  • getgeo 生物信息 R语言 表型信息表”“样本信息表”或“临床信息表 phenodata phenotype data
  • OceanBase备租户创建(二):通过BACKUP DATABASE PLUS ARCHIVELOG
  • Linux文件打包压缩与软件安装管理完全指南
  • KingbaseES数据备份操作详解(图文教程)
  • 中断屏蔽实现方法-ARM内核
  • Kotlin 协程之 SharedFlow 与 StateFlow 深度解析
  • python爬虫(请求+解析+案例)
  • 111-Christopher-Dall_Arm-Timers-and-Fire:Arm架构计时器与半虚拟化时间
  • switch缺少break出现bug
  • 【自然语言处理】(3) --RNN循环神经网络
  • C# 中的 ReferenceEquals 方法
  • BERT:用于语言理解的深度双向Transformer预训练【简单分析】
  • 力扣hot100:两数相加(模拟竖式加法详解)(2)
  • Zotero + Word 插件管理参考文献的引用
  • 用Python一键整理文件:自动分类DOCX与PDF,告别文件夹杂乱
  • Ubuntu部署Elasticsearch教程
  • 61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额
  • 一款基于 .NET 开源、免费、命令行式的哔哩哔哩视频内容下载工具
  • Win Semi宣布推出线性优化的GaN工艺
  • 考研408计算机网络2025年第38题真题解析
  • C++编写的经典贪吃蛇游戏
  • 风险预测模型原理
  • PS练习5:利用翻转制作图像倒影
  • 平替Jenkins,推荐一款国产开源免费的CICD工具 - Arbess
  • aws 实战小bug
  • NumPy 系列(一):numpy 数组基础
  • VSCode 的 launch.json 配置
  • OpenLayers地图交互 -- 章节六:范围交互详解