123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- import {ApplicationInfo, RunApplicationInfo} from "@/types/application.ts";
- import {NavItem} from "@/components/appleBar/appleBar.ts";
- import message from "@/components/public/kui/message";
- import {computed, reactive} from "vue";
- export let Applications:ApplicationInfo[] = [
- {
- key: 'music',
- name: '音乐',
- pinyin: 'yinyue',
- en: 'music',
- icon: 'music',
- allowMulti: false,
- minHeight: 600,
- minWidth: 800,
- description: '音乐播放器',
- },
- {
- key: 'setting',
- name: '软件设置',
- pinyin: 'shezhi',
- en: 'setting',
- icon: 'setting',
- allowMulti: false,
- minHeight: 600,
- minWidth: 800,
- description: '软件设置',
- },
- ]
- // 已经启动的app 列表
- export let runningApplications:RunApplicationInfo[] = reactive([]);
- // 使用computed 根据 runningApplications 动态生成 navItems
- export const runNavComputed = computed(
- () => runningApplications.map(item => {
- let rawAppInfo = Applications.find(appInfo => appInfo.key === item.key)
- if(!rawAppInfo)
- {
- throw new Error(`app not found: ${item.key}`)
- }
- return {
- id: item.id,
- name: rawAppInfo.name,
- icon: rawAppInfo.icon,
- description: rawAppInfo.description,
- actionCode: item.id
- } as NavItem;
- }))
- function genAppId(key: string, num: number = 0): string {
- let appId = `${key}-${num}`
- let app = runningApplications.find(item => item.id === appId)
- if (app) {
- return genAppId(key, num + 1)
- }
- return appId
- }
- function runApp(appInfo: ApplicationInfo): RunApplicationInfo {
- let appId = genAppId(appInfo.key + runningApplications.length)
- console.log(appInfo.name);
- let app:RunApplicationInfo = {
- id: appId,
- key: appInfo.key,
- show: true,
- full: false,
- index: 0,
- showTitle: appInfo.name,
- }
- return app
- }
- export function openApp(key: string) {
- let appInfo = Applications.find(item => item.key === key)
- let app = null;
- if(!appInfo)
- {
- message.error(`应用不存在: ${key}`);
- return
- }
- if (appInfo.allowMulti) {
- // 允许多开
- app = runApp(appInfo)
- runningApplications.push(app)
- } else {
- // 不允许多开
- app = runningApplications.find(item => item.key === appInfo.key)
- if(!app){
- app = runApp(appInfo)
- runningApplications.push(app)
- } else {
- app.show = true
- }
- }
- }
- // 将指定app设置为最上端
- export function setAppTop(app: RunApplicationInfo) {
- for (let i = 0; i < runningApplications.length; i++)
- {
- let nextIndex = runningApplications[i].index - 1;
- if (runningApplications[i].id === app.id) {
- nextIndex = runningApplications.length
- }
- if (nextIndex <= 0 )
- {
- nextIndex = 1;
- }
- runningApplications[i].index = nextIndex;
- }
- }
- export function closeApp(app: RunApplicationInfo) {
- let appIndex = runningApplications.findIndex(item => item.id === app.id)
- if (appIndex === -1) {
- return console.error('app not found')
- }
- runningApplications.splice(appIndex, 1)
- }
- export function getRunAppNavigation(): NavItem[] {
- return runningApplications.map(item => {
- let rawAppInfo = Applications.find(appInfo => appInfo.key === item.key)
- if(!rawAppInfo)
- {
- throw new Error(`app not found: ${item.key}`)
- }
- return {
- id: item.id,
- name: rawAppInfo.name,
- icon: rawAppInfo.icon,
- description: rawAppInfo.description,
- actionCode: item.id
- } as NavItem;
- })
- }
|