HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uni-admin,H5发布后,报错“未找到集合[xxx]对应的schema”的一种问题原因分享

uni-admin

当然,造成该问题的原因,最好还是看一下对应的schema是不是上传到了unicloud,或者写错了名字

我的故障现象是:在本地测试时,完全没问题,但发布后,就会报错未找到集合[xxx]对应的schema,就偶尔几个表,其他大部分也没事。而且检查云数据库里,确实该表是存在的。

我最终发现,问题出在,我建的数据库表超过100个了,至于怎么出来101个表,我也不知道。

解决办法是删没用的表,删到100个以内,问题就解决了。

希望能帮到大家,这问题耽误了好几个小时。

继续阅读 »

当然,造成该问题的原因,最好还是看一下对应的schema是不是上传到了unicloud,或者写错了名字

我的故障现象是:在本地测试时,完全没问题,但发布后,就会报错未找到集合[xxx]对应的schema,就偶尔几个表,其他大部分也没事。而且检查云数据库里,确实该表是存在的。

我最终发现,问题出在,我建的数据库表超过100个了,至于怎么出来101个表,我也不知道。

解决办法是删没用的表,删到100个以内,问题就解决了。

希望能帮到大家,这问题耽误了好几个小时。

收起阅读 »

【findLastIndex兼容问题】安卓端不兼容

已知bug

如题【findLastIndex兼容问题】安卓端不兼容

解决方式:

let lastIndex = -1;  
const list = [1,2,3];  
list.map((item, index) => {  
    if (item > 1) {  
         lastIndex = index;  
    }  
})

↓↓↓ 各位大佬点点赞

继续阅读 »

如题【findLastIndex兼容问题】安卓端不兼容

解决方式:

let lastIndex = -1;  
const list = [1,2,3];  
list.map((item, index) => {  
    if (item > 1) {  
         lastIndex = index;  
    }  
})

↓↓↓ 各位大佬点点赞

收起阅读 »

纯css聊天气泡框,挺好用的简单几句代码

css样式
        border-image-source: url("气泡框地址");  
        border-style: solid;  
        border-image-slice: 49.9% fill;   
        border-width: 20px;   
        background-color: transparent;  
        max-width: 100px;  
        color: #000;  
        font-size: 14px;  
        font-weight: 600;
        很好的示例 : http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/border-image-slice.html#google_vignette
继续阅读 »
        border-image-source: url("气泡框地址");  
        border-style: solid;  
        border-image-slice: 49.9% fill;   
        border-width: 20px;   
        background-color: transparent;  
        max-width: 100px;  
        color: #000;  
        font-size: 14px;  
        font-weight: 600;
        很好的示例 : http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/border-image-slice.html#google_vignette
收起阅读 »

兼职各类uniapp开发,多年经验,时间充足

如题,需要的老板DD

如题,需要的老板DD

【uview2.0.31 bug】解决安卓端使用u-modal只显示undefined问题

uview 安卓 Android

来源地址:https://blog.csdn.net/Amy_ly/article/details/142923615

解决方法:加个v-if就行

<u-modal v-if="show" title="提示" content="提示内容" :show="show"></u-modal>

↓↓↓ 各位大佬点点赞

继续阅读 »

来源地址:https://blog.csdn.net/Amy_ly/article/details/142923615

解决方法:加个v-if就行

<u-modal v-if="show" title="提示" content="提示内容" :show="show"></u-modal>

↓↓↓ 各位大佬点点赞

收起阅读 »

IOS离线自定义基座蓝牙一调用就闪退

iOS平台离线生成自定义基座

如果默认基座没问题,离线自定义的闪退,检查两个地方:
1)XCODE里CoreBluetooth.framework添加了没有?
2)NSBluetoothPeripheralUsageDescription设置了没有?
这两个都弄了的话是不会闪退的

如果默认基座没问题,离线自定义的闪退,检查两个地方:
1)XCODE里CoreBluetooth.framework添加了没有?
2)NSBluetoothPeripheralUsageDescription设置了没有?
这两个都弄了的话是不会闪退的

ios提交审核横竖屏报错ERROR ITMS-90474-90475: iPad Multitasking support requires these orientations

横竖屏 iOS打包 uni-app-x

ipad横屏会自动旋转配置了

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
  <dict>  
    <key>UIRequiresFullScreen</key>  
    <string>YES</string>  
    <key>UISupportedInterfaceOrientations~ipad</key>  
    <array>  
      <string>UIInterfaceOrientationPortrait</string>  
    </array>  
    <key>UISupportedInterfaceOrientations~iphone</key>  
    <array>  
      <string>UIInterfaceOrientationPortrait</string>  
    </array>  
  </dict>  
</plist>

需要加上这行配置才不会不会报错
<key>UIRequiresFullScreen</key>
<string>YES</string>

继续阅读 »

ipad横屏会自动旋转配置了

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
<plist version="1.0">  
  <dict>  
    <key>UIRequiresFullScreen</key>  
    <string>YES</string>  
    <key>UISupportedInterfaceOrientations~ipad</key>  
    <array>  
      <string>UIInterfaceOrientationPortrait</string>  
    </array>  
    <key>UISupportedInterfaceOrientations~iphone</key>  
    <array>  
      <string>UIInterfaceOrientationPortrait</string>  
    </array>  
  </dict>  
</plist>

需要加上这行配置才不会不会报错
<key>UIRequiresFullScreen</key>
<string>YES</string>

收起阅读 »

不是这不支持,就是那不支持,不是这个端用不了,就是那个端用不了,不是仅支持这个端,就是仅支持那个端,整来整去没几个能用的,绝了!

uniapp

不是这不支持,就是那不支持,不是这个端用不了,就是那个端用不了,不是仅支持这个端,就是仅支持那个端,整来整去没几个能用的,绝了!

不是这不支持,就是那不支持,不是这个端用不了,就是那个端用不了,不是仅支持这个端,就是仅支持那个端,整来整去没几个能用的,绝了!

vue3.5+tauri v2桌面版后台管理系统|vite5+tauri2+element-plus客户端后台模板

经过大半个月高强度实战开发,又一款原创跨平台新作tauri2.0+vue3+pinia2+elementPlus+mockjs电脑端通用权限后台管理系统,正式结束了。实现4种通用布局模板,支持vue-i18n国际化、面包屑导航、tab标签路由等功能。

tauri2.0-vue3admin桌面端管理系统|tauri2+vite5+element-plus后台EXE程序

img

img

使用技术

  • 开发工具:VScode
  • 技术框架:tauri2.0+vite^5.4.8+vue^3.5.11+vue-router^4.4.5
  • 状态管理:pinia^2.2.4
  • 存储服务:pinia-plugin-persistedstate^4.1.1
  • 组件库:element-plus^2.8.5
  • 图表组件:echarts^5.5.1
  • 国际化:vue-i18n^10.0.4
  • 富文本编辑器:@vueup/vue-quill^1.2.0
  • md编辑器:md-editor-v3^4.20.3
  • 模拟数据:mockjs^1.1.0
  • 预处理样式:sass^1.79.4

img

img

目前该项目Tauri2-Vue3Admin已经同步发布到我的原创作品集。

https://gf.bilibili.com/item/detail/1107226011

项目结构

img

img

img

img

tauri2-admin后台布局模板

img

<script setup>  
  import { appState } from '@/pinia/modules/app'  

  import Toolbar from '@/layouts/components/Toolbar.vue'  
  import Sidebar from '@/layouts/components/sidebar/index.vue'  
  import Menus from '@/layouts/components/menus/index.vue'  
  import Breadcrumb from '@/layouts/components/Breadcrumb.vue'  
  import Tabview from '@/layouts/components/Tabview.vue'  
  import Main from '@/layouts/components/Main.vue'  

  const appstate = appState()  
</script>  

<template>  
  <div class="vuadmin__layout flexbox flex-col">  
    <Toolbar />  

    <div class="vuadmin__layout-body flex1 flexbox">  
      <!-- 侧边栏 -->  
      <div class="vuadmin__layout-sidebar">  
        <Sidebar />  
      </div>  

      <!-- 菜单栏 -->  
      <div class="vuadmin__layout-menus" :class="{'hidden': appstate.config.collapsed}">  
        <el-scrollbar>  
          <Menus :rootRouteEnable="false" />  
        </el-scrollbar>  
      </div>  

      <!-- 右侧主内容区 -->  
      <div class="vuadmin__layout-main flex1 flexbox flex-col">  
        <!-- 面包屑导航 -->  
        <Breadcrumb v-if="appstate.config.breadcrumb" />  

        <!-- 标签页 -->  
        <Tabview v-if="appstate.config.tabview" />  

        <!-- 内容区 -->  
        <Main />  
      </div>  
    </div>  
  </div>  
</template>

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

tauri2-admin国际化配置

img

img

import { createI18n } from 'vue-i18n'  
import { appState } from '@/pinia/modules/app'  

// 引入语言配置  
import enUS from './en-US'  
import zhCN from './zh-CN'  
import zhTW from './zh-TW'  

// 默认语言  
export const langVal = 'zh-CN'  

export default async (app) => {  
  const appstate = appState()  
  const lang = appstate.lang || langVal  
  appstate.setLang(lang)  

  const i18n = createI18n({  
    legacy: false,  
    locale: lang,  
    messages: {  
      'en': enUS,  
      'zh-CN': zhCN,  
      'zh-TW': zhTW  
    }  
  })  

  app.use(i18n)  
}

tauri2-admin实现自定义导航栏

img

<script setup>  
  import { ref, markRaw } from 'vue'  
  import { ElMessageBox } from 'element-plus'  
  import { QuestionFilled, SwitchButton } from '@element-plus/icons-vue'  
  import { getCurrentWindow } from '@tauri-apps/api/window'  
  import { listen } from '@tauri-apps/api/event'  
  import { exit } from '@tauri-apps/plugin-process'  

  import { isTrue } from '@/utils'  
  import { authState } from '@/pinia/modules/auth'  

  const authstate = authState()  

  const props = defineProps({  
    color: String,  
    // 窗口是否可最小化  
    minimizable: {type: [Boolean, String], default: true},  
    // 窗口是否可最大化  
    maximizable: {type: [Boolean, String], default: true},  
    // 窗口是否可关闭  
    closable: {type: [Boolean, String], default: true},  
    // 层级  
    zIndex: {type: [Number, String], default: 2024},  
  })  

  const hasMaximized = ref(false)  
  const isResizable = ref(true)  
  const isMaximizable = ref(true)  

  // 用户是否可以手动调整窗口大小  
  getCurrentWindow().isResizable().then(res => {  
    isResizable.value = res  
  })  
  // 窗口是否可以最大化  
  getCurrentWindow().isMaximizable().then(res => {  
    isMaximizable.value = res  
  })  
  // 初始监听窗口是否最大化  
  getCurrentWindow().isMaximized().then(res => {  
    hasMaximized.value = res  
  })  
  // 实时监听窗口是否最大化  
  listen('tauri://resize', async() => {  
    hasMaximized.value = await getCurrentWindow().isMaximized()  
  })  

  // 最小化  
  const handleWinMin = async() => {  
    await getCurrentWindow().minimize()  
  }  
  // 最大化/还原  
  const handleWinToggle = async() => {  
    await getCurrentWindow().toggleMaximize()  
  }  
  // 关闭  
  const handleWinClose = async() => {  
    const isMajor = getCurrentWindow().label.indexOf('main') > -1  
    if(isMajor) {  
      ElMessageBox.confirm('是否最小化到系统托盘,不退出程序?', '提示', {  
        type: 'warning',  
        icon: markRaw(QuestionFilled),  
        confirmButtonText: '残忍退出',  
        cancelButtonText: '最小化到托盘',  
        customStyle: {'width': '300px'},  
        draggable: true,  
        roundButton: true,  
        center: true,  
        buttonSize: 'small',  
        distinguishCancelAndClose: true,  
      }).then(async() => {  
        authstate.logout()  
        await exit()  
      }).catch(async(action) => {  
        if(action === 'cancel') {  
          await getCurrentWindow().hide()  
        }  
      })  
    }else {  
      await getCurrentWindow().close()  
    }  
  }  
</script>  

<template>  
  <div class="ev__winbtns flexbox flex-alignc vu__drag" :style="{'z-index': zIndex}">  
    <div class="ev__winbtns-actions flexbox flex-alignc vu__undrag" :style="{'color': color}">  
      <a v-if="isTrue(minimizable)" class="wbtn min" title="最小化" @click="handleWinMin"><i class="wicon iconfont elec-icon-min"></i></a>  
      <a v-if="isTrue(maximizable)" class="wbtn toggle" :title="hasMaximized ? '向下还原' : '最大化'" @click="handleWinToggle">  
        <i class="wicon iconfont" :class="hasMaximized ? 'elec-icon-restore' : 'elec-icon-max'"></i>  
      </a>  
      <a v-if="isTrue(closable)" class="wbtn close" title="关闭" @click="handleWinClose"><i class="wicon iconfont elec-icon-quit"></i></a>  
    </div>  
  </div>  
</template>  

<style lang="scss" scoped>  
  @import './index.scss';  
</style>

tauri2-vue3admin自定义标签栏路由

img

img

<template>  
  <div class="vu__tabview">  
    <el-tabs  
      v-model="activeTab"  
      class="vu__tabview-tabs"  
      @tab-change="changeTabs"  
      @tab-remove="removeTab"  
    >  
      <el-tab-pane  
        v-for="(item, index) in tabList"  
        :key="index"  
        :name="item.path"  
        :closable="!item?.meta?.isAffix"  
      >  
        <template #label>  
          <el-dropdown ref="dropdownRef" trigger="contextmenu" :id="item.path" @visible-change="handleDropdownChange($event, item.path)" @command="handleDropdownCommand($event, item)">  
            <span class="vu__tabview-tabs__label">  
              <span>{{$t(item?.meta?.title)}}</span>  
            </span>  
            <template #dropdown>  
              <el-dropdown-menu>  
                <el-dropdown-item command="refresh" :icon="Refresh">{{$t('tabview__contextmenu-refresh')}}</el-dropdown-item>  
                <el-dropdown-item command="close" :icon="Close" :disabled="item.meta.isAffix">{{$t('tabview__contextmenu-close')}}</el-dropdown-item>  
                <el-dropdown-item command="closeOther" :icon="Switch">{{$t('tabview__contextmenu-closeother')}}</el-dropdown-item>  
                <el-dropdown-item command="closeLeft" :icon="DArrowLeft">{{$t('tabview__contextmenu-closeleft')}}</el-dropdown-item>  
                <el-dropdown-item command="closeRight" :icon="DArrowRight">{{$t('tabview__contextmenu-closeright')}}</el-dropdown-item>  
                <el-dropdown-item command="closeAll" :icon="CircleCloseFilled">{{$t('tabview__contextmenu-closeall')}}</el-dropdown-item>  
              </el-dropdown-menu>  
            </template>  
          </el-dropdown>  
        </template>  
      </el-tab-pane>  
    </el-tabs>  
  </div>  
</template>

img

tauri2+vue3实现自定义托盘右键菜单功能。

img

End,以上就是tauri2+vue3+pinia2实战开发桌面版后台管理系统模板的一些知识分享。

作者:xiaoyan2017
链接: https://segmentfault.com/a/1190000045381943
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

继续阅读 »

经过大半个月高强度实战开发,又一款原创跨平台新作tauri2.0+vue3+pinia2+elementPlus+mockjs电脑端通用权限后台管理系统,正式结束了。实现4种通用布局模板,支持vue-i18n国际化、面包屑导航、tab标签路由等功能。

tauri2.0-vue3admin桌面端管理系统|tauri2+vite5+element-plus后台EXE程序

img

img

使用技术

  • 开发工具:VScode
  • 技术框架:tauri2.0+vite^5.4.8+vue^3.5.11+vue-router^4.4.5
  • 状态管理:pinia^2.2.4
  • 存储服务:pinia-plugin-persistedstate^4.1.1
  • 组件库:element-plus^2.8.5
  • 图表组件:echarts^5.5.1
  • 国际化:vue-i18n^10.0.4
  • 富文本编辑器:@vueup/vue-quill^1.2.0
  • md编辑器:md-editor-v3^4.20.3
  • 模拟数据:mockjs^1.1.0
  • 预处理样式:sass^1.79.4

img

img

目前该项目Tauri2-Vue3Admin已经同步发布到我的原创作品集。

https://gf.bilibili.com/item/detail/1107226011

项目结构

img

img

img

img

tauri2-admin后台布局模板

img

<script setup>  
  import { appState } from '@/pinia/modules/app'  

  import Toolbar from '@/layouts/components/Toolbar.vue'  
  import Sidebar from '@/layouts/components/sidebar/index.vue'  
  import Menus from '@/layouts/components/menus/index.vue'  
  import Breadcrumb from '@/layouts/components/Breadcrumb.vue'  
  import Tabview from '@/layouts/components/Tabview.vue'  
  import Main from '@/layouts/components/Main.vue'  

  const appstate = appState()  
</script>  

<template>  
  <div class="vuadmin__layout flexbox flex-col">  
    <Toolbar />  

    <div class="vuadmin__layout-body flex1 flexbox">  
      <!-- 侧边栏 -->  
      <div class="vuadmin__layout-sidebar">  
        <Sidebar />  
      </div>  

      <!-- 菜单栏 -->  
      <div class="vuadmin__layout-menus" :class="{'hidden': appstate.config.collapsed}">  
        <el-scrollbar>  
          <Menus :rootRouteEnable="false" />  
        </el-scrollbar>  
      </div>  

      <!-- 右侧主内容区 -->  
      <div class="vuadmin__layout-main flex1 flexbox flex-col">  
        <!-- 面包屑导航 -->  
        <Breadcrumb v-if="appstate.config.breadcrumb" />  

        <!-- 标签页 -->  
        <Tabview v-if="appstate.config.tabview" />  

        <!-- 内容区 -->  
        <Main />  
      </div>  
    </div>  
  </div>  
</template>

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

tauri2-admin国际化配置

img

img

import { createI18n } from 'vue-i18n'  
import { appState } from '@/pinia/modules/app'  

// 引入语言配置  
import enUS from './en-US'  
import zhCN from './zh-CN'  
import zhTW from './zh-TW'  

// 默认语言  
export const langVal = 'zh-CN'  

export default async (app) => {  
  const appstate = appState()  
  const lang = appstate.lang || langVal  
  appstate.setLang(lang)  

  const i18n = createI18n({  
    legacy: false,  
    locale: lang,  
    messages: {  
      'en': enUS,  
      'zh-CN': zhCN,  
      'zh-TW': zhTW  
    }  
  })  

  app.use(i18n)  
}

tauri2-admin实现自定义导航栏

img

<script setup>  
  import { ref, markRaw } from 'vue'  
  import { ElMessageBox } from 'element-plus'  
  import { QuestionFilled, SwitchButton } from '@element-plus/icons-vue'  
  import { getCurrentWindow } from '@tauri-apps/api/window'  
  import { listen } from '@tauri-apps/api/event'  
  import { exit } from '@tauri-apps/plugin-process'  

  import { isTrue } from '@/utils'  
  import { authState } from '@/pinia/modules/auth'  

  const authstate = authState()  

  const props = defineProps({  
    color: String,  
    // 窗口是否可最小化  
    minimizable: {type: [Boolean, String], default: true},  
    // 窗口是否可最大化  
    maximizable: {type: [Boolean, String], default: true},  
    // 窗口是否可关闭  
    closable: {type: [Boolean, String], default: true},  
    // 层级  
    zIndex: {type: [Number, String], default: 2024},  
  })  

  const hasMaximized = ref(false)  
  const isResizable = ref(true)  
  const isMaximizable = ref(true)  

  // 用户是否可以手动调整窗口大小  
  getCurrentWindow().isResizable().then(res => {  
    isResizable.value = res  
  })  
  // 窗口是否可以最大化  
  getCurrentWindow().isMaximizable().then(res => {  
    isMaximizable.value = res  
  })  
  // 初始监听窗口是否最大化  
  getCurrentWindow().isMaximized().then(res => {  
    hasMaximized.value = res  
  })  
  // 实时监听窗口是否最大化  
  listen('tauri://resize', async() => {  
    hasMaximized.value = await getCurrentWindow().isMaximized()  
  })  

  // 最小化  
  const handleWinMin = async() => {  
    await getCurrentWindow().minimize()  
  }  
  // 最大化/还原  
  const handleWinToggle = async() => {  
    await getCurrentWindow().toggleMaximize()  
  }  
  // 关闭  
  const handleWinClose = async() => {  
    const isMajor = getCurrentWindow().label.indexOf('main') > -1  
    if(isMajor) {  
      ElMessageBox.confirm('是否最小化到系统托盘,不退出程序?', '提示', {  
        type: 'warning',  
        icon: markRaw(QuestionFilled),  
        confirmButtonText: '残忍退出',  
        cancelButtonText: '最小化到托盘',  
        customStyle: {'width': '300px'},  
        draggable: true,  
        roundButton: true,  
        center: true,  
        buttonSize: 'small',  
        distinguishCancelAndClose: true,  
      }).then(async() => {  
        authstate.logout()  
        await exit()  
      }).catch(async(action) => {  
        if(action === 'cancel') {  
          await getCurrentWindow().hide()  
        }  
      })  
    }else {  
      await getCurrentWindow().close()  
    }  
  }  
</script>  

<template>  
  <div class="ev__winbtns flexbox flex-alignc vu__drag" :style="{'z-index': zIndex}">  
    <div class="ev__winbtns-actions flexbox flex-alignc vu__undrag" :style="{'color': color}">  
      <a v-if="isTrue(minimizable)" class="wbtn min" title="最小化" @click="handleWinMin"><i class="wicon iconfont elec-icon-min"></i></a>  
      <a v-if="isTrue(maximizable)" class="wbtn toggle" :title="hasMaximized ? '向下还原' : '最大化'" @click="handleWinToggle">  
        <i class="wicon iconfont" :class="hasMaximized ? 'elec-icon-restore' : 'elec-icon-max'"></i>  
      </a>  
      <a v-if="isTrue(closable)" class="wbtn close" title="关闭" @click="handleWinClose"><i class="wicon iconfont elec-icon-quit"></i></a>  
    </div>  
  </div>  
</template>  

<style lang="scss" scoped>  
  @import './index.scss';  
</style>

tauri2-vue3admin自定义标签栏路由

img

img

<template>  
  <div class="vu__tabview">  
    <el-tabs  
      v-model="activeTab"  
      class="vu__tabview-tabs"  
      @tab-change="changeTabs"  
      @tab-remove="removeTab"  
    >  
      <el-tab-pane  
        v-for="(item, index) in tabList"  
        :key="index"  
        :name="item.path"  
        :closable="!item?.meta?.isAffix"  
      >  
        <template #label>  
          <el-dropdown ref="dropdownRef" trigger="contextmenu" :id="item.path" @visible-change="handleDropdownChange($event, item.path)" @command="handleDropdownCommand($event, item)">  
            <span class="vu__tabview-tabs__label">  
              <span>{{$t(item?.meta?.title)}}</span>  
            </span>  
            <template #dropdown>  
              <el-dropdown-menu>  
                <el-dropdown-item command="refresh" :icon="Refresh">{{$t('tabview__contextmenu-refresh')}}</el-dropdown-item>  
                <el-dropdown-item command="close" :icon="Close" :disabled="item.meta.isAffix">{{$t('tabview__contextmenu-close')}}</el-dropdown-item>  
                <el-dropdown-item command="closeOther" :icon="Switch">{{$t('tabview__contextmenu-closeother')}}</el-dropdown-item>  
                <el-dropdown-item command="closeLeft" :icon="DArrowLeft">{{$t('tabview__contextmenu-closeleft')}}</el-dropdown-item>  
                <el-dropdown-item command="closeRight" :icon="DArrowRight">{{$t('tabview__contextmenu-closeright')}}</el-dropdown-item>  
                <el-dropdown-item command="closeAll" :icon="CircleCloseFilled">{{$t('tabview__contextmenu-closeall')}}</el-dropdown-item>  
              </el-dropdown-menu>  
            </template>  
          </el-dropdown>  
        </template>  
      </el-tab-pane>  
    </el-tabs>  
  </div>  
</template>

img

tauri2+vue3实现自定义托盘右键菜单功能。

img

End,以上就是tauri2+vue3+pinia2实战开发桌面版后台管理系统模板的一些知识分享。

作者:xiaoyan2017
链接: https://segmentfault.com/a/1190000045381943
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收起阅读 »

抢鲜体验!个推一键认证SDK HarmonyOS NEXT适配版上线

鸿蒙next SDK 华为


10月8日,华为鸿蒙HarmonyOS NEXT版本正式开启公测。作为一个有核心技术、有全栈能力、有底座、有生态的全新操作系统,HarmonyOS NEXT采用了自主研发的微内核架构,彻底摆脱了对Linux内核和AOSP代码的依赖,使得系统更加轻量、高效和安全。此外,该系统还引入了多项新功能,在用户体验、系统安全和多设备互联等方面都进行了全面的优化。
个推作为华为鸿蒙生态的重要合作伙伴,陆续推进旗下SDK产品的HarmonyOS NEXT适配工作,本月个推一键认证SDK HarmonyOS NEXT版本也正式上线。个推一键认证SDK整合了三大运营商的认证能力,支持一键免密、安全、秒级登录,为开发者提供了简单、快捷、灵活的集成方式,提升开发效率。对于用户而言,个推一键认证SDK的秒级登录体验结合鸿蒙新系统的全场景分布式能力,让用户的多终端登录变得无缝丝滑。

早前,个推消息推送SDK、用户运营SDK的华为鸿蒙HarmonyOS NEXT适配版本,已成功上架至个推官网及华为鸿蒙生态伙伴SDK专区。各位感兴趣的开发者可以进入个推官网(https://docs.getui.com/download/overview)或华为鸿蒙生态市场,即可免费下载体验。
除了上述三款SDK,个推的OneID SDK也将在近期同步上线,助力企业实现APP、小程序、H5、快应用、Web等多端数据互通,让用户运营更有效、商业增长更高效。

继续阅读 »


10月8日,华为鸿蒙HarmonyOS NEXT版本正式开启公测。作为一个有核心技术、有全栈能力、有底座、有生态的全新操作系统,HarmonyOS NEXT采用了自主研发的微内核架构,彻底摆脱了对Linux内核和AOSP代码的依赖,使得系统更加轻量、高效和安全。此外,该系统还引入了多项新功能,在用户体验、系统安全和多设备互联等方面都进行了全面的优化。
个推作为华为鸿蒙生态的重要合作伙伴,陆续推进旗下SDK产品的HarmonyOS NEXT适配工作,本月个推一键认证SDK HarmonyOS NEXT版本也正式上线。个推一键认证SDK整合了三大运营商的认证能力,支持一键免密、安全、秒级登录,为开发者提供了简单、快捷、灵活的集成方式,提升开发效率。对于用户而言,个推一键认证SDK的秒级登录体验结合鸿蒙新系统的全场景分布式能力,让用户的多终端登录变得无缝丝滑。

早前,个推消息推送SDK、用户运营SDK的华为鸿蒙HarmonyOS NEXT适配版本,已成功上架至个推官网及华为鸿蒙生态伙伴SDK专区。各位感兴趣的开发者可以进入个推官网(https://docs.getui.com/download/overview)或华为鸿蒙生态市场,即可免费下载体验。
除了上述三款SDK,个推的OneID SDK也将在近期同步上线,助力企业实现APP、小程序、H5、快应用、Web等多端数据互通,让用户运营更有效、商业增长更高效。

收起阅读 »

android下获取系统导航栏高度

const main = plus.android.runtimeMainActivity()  
const windowMe = main.getWindow()  
plus.android.importClass(windowMe)  
const decorView = windowMe.getDecorView()  
plus.android.importClass(decorView)  

const windowInsets = decorView.getRootWindowInsets()  
const WindowInsets = plus.android.importClass(windowInsets)  
const insets = windowInsets.getInsets(WindowInsets.Type.navigationBars())  
const navigationBarHeight = plus.android.getAttribute(insets, 'bottom')  
console.log(navigationBarHeight) // 取到的是物理像素值,需要除以dpr转为逻辑像素值
继续阅读 »
const main = plus.android.runtimeMainActivity()  
const windowMe = main.getWindow()  
plus.android.importClass(windowMe)  
const decorView = windowMe.getDecorView()  
plus.android.importClass(decorView)  

const windowInsets = decorView.getRootWindowInsets()  
const WindowInsets = plus.android.importClass(windowInsets)  
const insets = windowInsets.getInsets(WindowInsets.Type.navigationBars())  
const navigationBarHeight = plus.android.getAttribute(insets, 'bottom')  
console.log(navigationBarHeight) // 取到的是物理像素值,需要除以dpr转为逻辑像素值
收起阅读 »