mirror of https://gitee.com/godoos/godoos.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.3 KiB
132 lines
4.3 KiB
import { defineStore } from 'pinia'
|
|
import { ref, inject } from "vue";
|
|
import { t } from "@/i18n";
|
|
// import storeInitList from "@/assets/store.json";
|
|
import { System } from "@/system";
|
|
import { getSystemKey } from "@/system/config";
|
|
export const useStoreStore = defineStore('storeStore', () => {
|
|
const sys: any = inject<System>("system");
|
|
const currentCateId = ref(0)
|
|
const currentTitle = ref(t("store.hots"))
|
|
const currentCate = ref('hots')
|
|
const categoryList = ['hots', 'work', 'development', 'games', 'education', 'news', 'shopping', 'social', 'utilities', 'others', 'add']
|
|
const categoryIcon = ['HomeFilled', 'Odometer', 'Postcard', 'TrendCharts', 'School', 'HelpFilled', 'ShoppingCart', 'ChatLineRound', 'MessageBox', 'Ticket', 'CirclePlusFilled']
|
|
const isready = ref(false);
|
|
const apiUrl = getSystemKey("apiUrl");
|
|
const installedList: any = ref([]);
|
|
const storeList: any = ref([])
|
|
const outList: any = ref([])
|
|
async function getList() {
|
|
if (currentCate.value == 'add') return;
|
|
//storeList.value = storeInitList
|
|
const storeUrl = apiUrl + '/store/storelist?cate=' + currentCate.value
|
|
const res = await fetch(storeUrl)
|
|
if (!res.ok) {
|
|
return []
|
|
}
|
|
const json: any = await res.json()
|
|
let list = json.data || []
|
|
//console.log(data)
|
|
if (outList.value.length > 0 && currentCate.value == 'hots' && list && list.length > 0) {
|
|
const names = list.map((item: any) => item.name)
|
|
const adds: any = []
|
|
outList.value.forEach((item: any) => {
|
|
if (!names.includes(item.name)) {
|
|
adds.push(item)
|
|
}
|
|
})
|
|
list = adds.concat(list)
|
|
}
|
|
storeList.value = list
|
|
await checkProgress()
|
|
isready.value = true;
|
|
}
|
|
async function addOutList(item: any) {
|
|
const has = outList.value.find((i: any) => i.name === item.name)
|
|
if (!has) {
|
|
item.isOut = true
|
|
outList.value.push(item)
|
|
await getList()
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
async function changeCate(index: number, item: string) {
|
|
currentCateId.value = index
|
|
currentCate.value = item
|
|
currentTitle.value = t("store." + item)
|
|
await getList()
|
|
}
|
|
async function checkProgress() {
|
|
const completion: any = await fetch(apiUrl + '/store/listporgress')
|
|
if (!completion.ok) {
|
|
return
|
|
}
|
|
let res: any = await completion.json()
|
|
if (!res || res.length < 1) {
|
|
res = []
|
|
}
|
|
storeList.value.forEach((item: any, index: number) => {
|
|
const pitem: any = res.find((i: any) => i.name == item.name)
|
|
//console.log(pitem)
|
|
if (pitem) {
|
|
storeList.value[index].isRuning = pitem.running
|
|
} else {
|
|
storeList.value[index].isRuning = false
|
|
}
|
|
})
|
|
}
|
|
async function addDesktop(item: any) {
|
|
if (item.webUrl) {
|
|
await sys.fs.writeFile(
|
|
`${sys._options.userLocation}Desktop/${item.name}.url`,
|
|
`link::url::${item.webUrl}::${item.icon}`
|
|
);
|
|
setTimeout(() => {
|
|
sys.refershAppList();
|
|
}, 1000);
|
|
}
|
|
installedList.value.push(item.name);
|
|
}
|
|
async function removeDesktop(item: any) {
|
|
if (item.webUrl) {
|
|
await sys.fs.unlink(`${sys._options.userLocation}Desktop/${item.name}.url`);
|
|
setTimeout(() => {
|
|
sys.refershAppList();
|
|
}, 1000);
|
|
}
|
|
delete installedList.value[installedList.value.indexOf(item.name)];
|
|
}
|
|
return {
|
|
currentCateId,
|
|
categoryIcon,
|
|
currentTitle,
|
|
currentCate,
|
|
categoryList,
|
|
isready,
|
|
installedList,
|
|
storeList,
|
|
outList,
|
|
apiUrl,
|
|
changeCate,
|
|
getList,
|
|
addOutList,
|
|
checkProgress,
|
|
addDesktop,
|
|
removeDesktop
|
|
}
|
|
}, {
|
|
persist: {
|
|
enabled: true,
|
|
strategies: [
|
|
{
|
|
storage: localStorage,
|
|
paths: [
|
|
"outList",
|
|
"installedList"
|
|
]
|
|
}, // name 字段用localstorage存储
|
|
],
|
|
}
|
|
})
|