-
Notifications
You must be signed in to change notification settings - Fork 108
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
20 changed files
with
1,661 additions
and
18 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
import { request } from '@/utils/request.js' | ||
|
||
/** | ||
* 检查是.env 是否设置了 access_token | ||
*/ | ||
export const hasAccessToken = () => { | ||
return request({ | ||
url: 'plugin/store/hasAccessToken', | ||
method: 'get', | ||
}) | ||
} | ||
|
||
/** | ||
* 请求应用列表 | ||
*/ | ||
export const getAppList = (params) => { | ||
return request({ | ||
url: 'plugin/store/index', | ||
method: 'get', | ||
params | ||
}) | ||
} | ||
|
||
/** | ||
* 已购买应用 | ||
*/ | ||
export const getPayApp = () => { | ||
return request({ | ||
url: 'plugin/store/getPayApp', | ||
method: 'get' | ||
}) | ||
} | ||
|
||
/** | ||
* 本地应用安装状态 | ||
*/ | ||
export const getLocalAppInstallList = () => { | ||
return request({ | ||
url: 'plugin/store/getLocalAppInstallList', | ||
method: 'get' | ||
}) | ||
} | ||
|
||
/** | ||
* 详情 | ||
*/ | ||
export const getDetail = (params) => { | ||
return request({ | ||
url: 'plugin/store/detail', | ||
method: 'get', | ||
params | ||
}) | ||
} | ||
|
||
/** | ||
* 下载应用 | ||
*/ | ||
export const download = (data) => { | ||
return request({ | ||
url: 'plugin/store/download', | ||
method: 'post', | ||
timeout: 500000, | ||
data, | ||
}) | ||
} | ||
|
||
/** | ||
* 安装应用 | ||
*/ | ||
export const install = (data) => { | ||
return request({ | ||
url: 'plugin/store/install', | ||
method: 'post', | ||
data, | ||
}) | ||
} | ||
|
||
/** | ||
* 安装应用 | ||
*/ | ||
export const unInstall = (data) => { | ||
return request({ | ||
url: 'plugin/store/unInstall', | ||
method: 'post', | ||
data, | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
<script setup> | ||
import { isUndefined } from "lodash" | ||
import dayjs from "dayjs" | ||
import {discount} from "@/utils/common" | ||
const props = defineProps({ | ||
appList: Array, | ||
myAppList: Array, | ||
localInstallList: Object, | ||
isOnlyShowLocalApp: Boolean, | ||
}) | ||
const emit = defineEmits(['onOpenDetail']) | ||
const openDetailModal = (item) => { | ||
emit('onOpenDetail', item) | ||
} | ||
const checkInstallStatus = (space, identifier) => { | ||
const name = `${space}/${identifier}` | ||
return !isUndefined(props.localInstallList[name]) && props.localInstallList[name].status | ||
} | ||
</script> | ||
|
||
<template> | ||
<div | ||
class="h-auto relative mt-8 sm:mt-0 border border-gray-150 dark:border-gray-600 hover:border-primary-500 dark:hover:border-gray-400 rounded-md top-0 hover:shadow-md hover:-top-1 dark:shadow-gray-600 transition-all duration-300 group overflow-hidden" | ||
v-for="(item, idx) in props.appList" | ||
> | ||
<div | ||
class="absolute z-10 w-auto bg-red-600 text-white px-5 origin-center rotate-45 -right-5 top-2.5" | ||
v-if="myAppList.includes(item.identifier) && ! props.isOnlyShowLocalApp" | ||
> | ||
已购买 | ||
</div> | ||
<div | ||
class="absolute z-10 w-32 text-center bg-lime-600 text-white px-5 origin-center rotate-45 -right-7 top-6" | ||
v-if="checkInstallStatus(item.space, item.identifier) && ! props.isOnlyShowLocalApp" | ||
> | ||
已安装 | ||
</div> | ||
<div | ||
class="absolute z-10 w-auto bg-green-600 text-white px-5 origin-center rotate-45 -right-6 top-3.5 text-sm" | ||
v-if="props.isOnlyShowLocalApp && ! isUndefined(props.localInstallList[`${item.space}/${item.identifier}`])" | ||
> | ||
本地应用 | ||
</div> | ||
<a class="h-44 w-full" href="javascript:" @click="openDetailModal(item)"> | ||
<div class="relative"> | ||
<img | ||
class="!rounded-b-none !rounded-t-md pointer-events-none w-full object-cover sm:rounded-md h-48 transform transition-transform duration-200 group-hover:scale-105" | ||
:src="item.homepage[0]" | ||
/> | ||
<div class="absolute bottom-2 right-2 space-x-2"> | ||
<a-tag :color="tag.color === 'primary' ? 'arcoblue' : tag.color" v-for="tag in item.tags">{{ tag.name }}</a-tag> | ||
</div> | ||
</div> | ||
</a> | ||
<div class="p-3 pb-2"> | ||
<div class="grid-cols-2 grid"> | ||
<div class="text-sm"> | ||
<a class="hover:underline" href="javascript:" @click="openDetailModal(item)">{{ item.name }}</a> | ||
</div> | ||
<div class="text-xs leading-5 text-gray-500 dark:text-gray-400 text-right"> | ||
{{ `${dayjs(item.created_at).fromNow()}更新` }} | ||
</div> | ||
</div> | ||
<div class="text-xs mt-1 text-gray-500 dark:text-gray-400"> | ||
{{ item.description }} | ||
</div> | ||
<div class="text-xs mt-5 grid grid-cols-2"> | ||
<div class="leading-6 text-gray-700 dark:text-gray-300"><span class="hover:underline">X.Mo</span></div> | ||
<div class="text-right"> | ||
<a-tag v-if="item.auth.type === 0" color="green">免费</a-tag> | ||
<div v-else-if="item.auth.type === 1"> | ||
<div class="flex items-center justify-end leading-6"> | ||
<div class="line-through text-gray-400" v-if="item.auth.integral_discount !== '0.00'">{{ item.auth.integral_quota }} 积分</div> | ||
<div class="ml-2 text-emerald-700">{{ discount(item.auth.integral_discount, item.auth.integral_quota) }} 积分</div> | ||
</div> | ||
</div> | ||
<div v-else-if="item.auth.type === 2"> | ||
<div class="flex items-center justify-end leading-6"> | ||
<div class="line-through text-gray-400" v-if="item.auth.basic_discount !== '0.00'">¥{{ item.auth.basic_quota }}</div> | ||
<div class="ml-2 text-blue-600">¥{{ discount(item.auth.basic_discount, item.auth.basic_quota) }}</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</template> | ||
|
||
<style scoped> | ||
</style> |
Oops, something went wrong.