- 添加 .editorconfig 文件统一代码风格 - 添加 .env.development 和 .env.example 环境配置文件 - 添加 .eslintignore 和 .eslintrc.js 代码检查配置 - 添加 .gitignore 版本控制忽略文件配置 - 添加 .prettierignore 格式化忽略配置 - 添加隐私协议HTML文件 - 添加API密钥管理组件基础结构
238 lines
5.8 KiB
Vue
238 lines
5.8 KiB
Vue
<template>
|
|
<div class="alert py-3">
|
|
<a-alert
|
|
description="通过安装扩展程序来满足您的业务需求,该操作将复制菜单和权限到您的系统。"
|
|
type="warning"
|
|
show-icon
|
|
closable
|
|
/>
|
|
</div>
|
|
<a-row :gutter="16">
|
|
<a-col
|
|
v-bind="
|
|
styleResponsive ? { xl: 6, lg: 6, md: 6, sm: 24, xs: 24 } : { span: 12 }
|
|
"
|
|
class="gutter-row"
|
|
v-for="(item, index) in list"
|
|
:key="index"
|
|
:span="6"
|
|
>
|
|
<a-card hoverable>
|
|
<div class="gutter-box">
|
|
<div class="plug-item">
|
|
<a-image
|
|
:height="72"
|
|
:width="72"
|
|
:preview="false"
|
|
class="app-icon"
|
|
style="
|
|
border: 1px solid #e3e3e3;
|
|
box-shadow: 0 0 1px -1px;
|
|
border-radius: 12px;
|
|
"
|
|
:src="item.companyLogo"
|
|
@click="openUrl('/system/plug/detail/' + item.companyId)"
|
|
fallback="https://file.wsdns.cn/20230218/550e610d43334dd2a7f66d5b20bd58eb.svg"
|
|
/>
|
|
<div class="info">
|
|
<a
|
|
class="name ele-text-heading"
|
|
@click="openUrl('/system/plug/detail/' + item.companyId)"
|
|
>{{ item.tenantName }}</a
|
|
>
|
|
<a-rate class="rate" v-model:value="rate" disabled allow-half />
|
|
<div class="company ele-text-placeholder">
|
|
<a-typography-text
|
|
type="secondary"
|
|
:ellipsis="{ rows: 1, expandable: true, symbol: '...' }"
|
|
>
|
|
{{ item.companyName }}
|
|
</a-typography-text>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="plug-desc ele-text-secondary">
|
|
<a-typography-paragraph
|
|
type="secondary"
|
|
:ellipsis="{ rows: 2, expandable: true, symbol: '显示' }"
|
|
:content="item.comments"
|
|
/>
|
|
</div>
|
|
<div class="plug-bottom">
|
|
<div class="downloads ele-text-placeholder"
|
|
>安装 {{ item.clicks }}
|
|
</div>
|
|
<a-button type="primary" disabled v-if="planId === item.tenantId"
|
|
>已安装
|
|
</a-button>
|
|
<a-button v-else type="primary" @click="onClone(item)"
|
|
>安装
|
|
</a-button>
|
|
</div>
|
|
</div>
|
|
</a-card>
|
|
</a-col>
|
|
</a-row>
|
|
<div class="plug-page" v-if="list.length">
|
|
<a-pagination
|
|
v-model:current="where.page"
|
|
v-model:pageSize="where.limit"
|
|
size="large"
|
|
:total="total"
|
|
@change="reload"
|
|
/>
|
|
</div>
|
|
</template>
|
|
<script setup lang="ts">
|
|
import { getPageTitle, openUrl } from '@/utils/common';
|
|
import { onClone } from '@/utils/plug-uitl';
|
|
import { useThemeStore } from '@/store/modules/theme';
|
|
import { storeToRefs } from 'pinia';
|
|
import { ref } from 'vue';
|
|
import { Company, CompanyParam } from '@/api/system/company/model';
|
|
import useSearch from '@/utils/use-search';
|
|
import { pageCompanyAll } from '@/api/system/company';
|
|
|
|
const props = defineProps<{
|
|
// 修改回显的数据
|
|
use: boolean;
|
|
}>();
|
|
|
|
// 是否开启响应式布局
|
|
const themeStore = useThemeStore();
|
|
const { styleResponsive } = storeToRefs(themeStore);
|
|
|
|
const searchText = ref('');
|
|
const rate = ref(3.5);
|
|
const list = ref<Company[]>([]);
|
|
const industry = ref<any>();
|
|
const total = ref<any>(0);
|
|
const planId = ref<number>(Number(localStorage.getItem('PlanId')));
|
|
|
|
// 查询条件
|
|
const { where, resetFields } = useSearch<CompanyParam>({
|
|
keywords: undefined,
|
|
industryParent: '',
|
|
industryChild: '',
|
|
recommend: undefined,
|
|
authoritative: 1,
|
|
sceneType: 'recommend',
|
|
limit: 20,
|
|
page: 1
|
|
});
|
|
|
|
const onIndustry = (item: any) => {
|
|
where.industryChild = item[1];
|
|
};
|
|
|
|
const onTabs = (index) => {
|
|
if (index == 'recommend') {
|
|
where.recommend = true;
|
|
}
|
|
if (index == 'free') {
|
|
where.recommend = false;
|
|
}
|
|
if (index == 'pay') {
|
|
where.recommend = false;
|
|
}
|
|
if (index == 'new') {
|
|
where.sceneType = 'new';
|
|
}
|
|
if (index == 'collect') {
|
|
where.sceneType = 'collect';
|
|
}
|
|
reload();
|
|
};
|
|
|
|
const reset = () => {
|
|
resetFields();
|
|
reload();
|
|
};
|
|
|
|
const reload = () => {
|
|
where.sort = 'buys';
|
|
where.order = 'desc';
|
|
pageCompanyAll(where).then((data) => {
|
|
total.value = data?.count;
|
|
if (data?.list) {
|
|
list.value = data?.list;
|
|
}
|
|
});
|
|
};
|
|
reload();
|
|
</script>
|
|
<style scoped lang="less">
|
|
.ele-body-card {
|
|
background-color: transparent;
|
|
padding: 20px;
|
|
}
|
|
|
|
.card-title {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.gutter-row {
|
|
margin: 0 auto 30px auto;
|
|
|
|
.gutter-box {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: space-between;
|
|
min-height: 200px;
|
|
|
|
.plug-item {
|
|
display: flex;
|
|
|
|
.app-icon {
|
|
}
|
|
|
|
.info {
|
|
font-size: 14px;
|
|
margin-left: 12px;
|
|
max-width: 234px;
|
|
|
|
.name {
|
|
font-size: 20px;
|
|
display: -webkit-box;
|
|
overflow: hidden;
|
|
-webkit-box-orient: vertical;
|
|
text-overflow: ellipsis;
|
|
-webkit-line-clamp: 2;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.rate {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.company {
|
|
}
|
|
}
|
|
}
|
|
|
|
.plug-desc {
|
|
padding: 10px 0;
|
|
font-size: 16px;
|
|
}
|
|
|
|
.plug-bottom {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
}
|
|
}
|
|
}
|
|
|
|
.ele-text-heading {
|
|
width: 100%;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.plug-page {
|
|
display: flex;
|
|
justify-content: center;
|
|
}
|
|
</style>
|