Browse Source

fix: 解决warnings

min
song 4 years ago
parent
commit
81b073aa2a
  1. 9277
      package-lock.json
  2. BIN
      src/assets/ck-logo.png
  3. BIN
      src/assets/pic-bg.png
  4. 34
      src/components/leftMenu.vue
  5. 88
      src/components/navbar.vue
  6. 124
      src/components/searchBar.vue
  7. 40
      src/routers/index.js
  8. 19
      src/views/Index.vue
  9. 3
      src/views/index-list/add-business.vue
  10. 0
      src/views/index-list/add-plugin.vue
  11. 9
      src/views/index-list/business-list.vue
  12. 14
      src/views/index-list/console-desk.vue
  13. 1
      src/views/index-list/develop.vue
  14. 3
      src/views/index-list/download-mould.vue
  15. 195
      src/views/index-list/plugin-shop.vue

9277
package-lock.json

File diff suppressed because it is too large

BIN
src/assets/ck-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
src/assets/pic-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

34
src/components/leftMenu.vue

@ -0,0 +1,34 @@
<template>
<el-menu :default-active="data.activeIndex" class="el-menu-demo" mode="vertical" @select="handleSelect">
<el-menu-item :index="index" @click="openPage(list.name)" v-for="(list, index) in data.menus" :key="index">{{
list.title
}}</el-menu-item>
</el-menu>
</template>
<script setup>
import { reactive } from 'vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const data = reactive({
activeIndex: 2,
menus: [
{ title: '概览', name: '' },
{ title: '创建业务', name: 'desk-add-business' },
{ title: '创建插件', name: 'desk-add-plugin' },
{ title: '我的业务', name: 'desk-business-list' },
{ title: '我的插件', name: 'desk-plugin-shop' },
],
});
function handleSelect(e) {
console.log(e);
}
//
function openPage(name) {
console.log('name: ', name);
router.push({ name });
}
</script>

88
src/components/navbar.vue

@ -1,14 +1,27 @@
<template>
<div class="flex items-center justify-between pr-5 shadow-sm">
<!-- <h1 class="text-lg font-medium py-3 px-6"></h1> -->
<el-menu :default-active="activeIndex" class="el-menu-demo flex-1" mode="horizontal">
<el-menu-item index="1" @click="toShop">{{ pluginShop }}</el-menu-item>
<el-menu-item index="2" @click="toDevelop">{{ develop }}</el-menu-item>
<el-menu-item index="3" @click="toDown">{{ downloadMould }}</el-menu-item>
<el-menu-item index="4" @click="toUp">{{ upload }}</el-menu-item>
<div class="flex flex-nowrap items-center">
<img src="@/assets/ck-logo.png" class="w-15" />
<h1 class="py-3 pl-2 pr-6 logo-title">开放平台</h1>
</div>
<el-menu
class="menu flex-1"
background-color="#00182E"
text-color="#A5ADB5"
active-text-color="#fff"
:default-active="data.activeIndex"
mode="horizontal"
>
<el-menu-item :index="index" @click="openPage(list.name)" v-for="(list, index) in data.lists" :key="index">{{
list.title
}}</el-menu-item>
</el-menu>
<div class="flex items-center" style="color: #a5adb5">
<div @click="openPage('desk-business-list')" class="text-sm">控制台</div>
<i class="el-icon-bell mx-6"></i>
</div>
<el-dropdown>
<span class="flex items-center">
<span class="flex items-center" style="color: #a5adb5">
<el-avatar class="mr-2" size="small" src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"></el-avatar>
<div class="mr-3">{{ account }}</div>
<el-icon class="el-icon--right">
@ -17,6 +30,10 @@
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>个人资料</el-dropdown-item>
<el-dropdown-item>我的业务</el-dropdown-item>
<el-dropdown-item>我的插件</el-dropdown-item>
<el-dropdown-item>实名认证</el-dropdown-item>
<el-dropdown-item @click="openChangePassword">修改密码</el-dropdown-item>
<el-dropdown-item @click="signOut">退出登录</el-dropdown-item>
</el-dropdown-menu>
@ -26,24 +43,32 @@
</template>
<script setup>
import { computed, ref } from 'vue';
import { computed, reactive } from 'vue';
import { useStore } from 'vuex';
import { useRouter } from 'vue-router';
import { ArrowDown } from '@element-plus/icons';
const store = useStore();
const router = useRouter();
// const toggleCollapse = () => {
// console.log('Toggle Collapse');
// store.commit('toggleCollapse');
// };
// const menu = computed(() => store.state.menu);
const account = computed(() => store.getters['user/account']);
const activeIndex = ref('1');
const pluginShop = ref('插件商城');
const develop = ref('开发教程');
const downloadMould = ref('下载模板');
const upload = ref('上传插件');
const data = reactive({
lists: [
{ title: '首页', name: '' },
{ title: '解决方案', name: '' },
{ title: '案例中心', name: '' },
{ title: '插件商城', name: 'plugin-shop' },
{ title: '文档中心', name: '' },
{ title: '下载', name: '' },
],
activeIndex: 3,
});
//
function openPage(name) {
console.log('name: ', name);
router.push({ name });
}
//
function openChangePassword() {
@ -55,27 +80,16 @@ function signOut() {
store.commit('user/setUser', null);
router.push({ name: 'signin' });
}
//
function toShop() {
router.push({ name: 'plugin-shop' });
}
function toDevelop() {
router.push({ name: 'develop' });
}
function toDown() {
router.push({ name: 'download-mould' });
}
function toUp() {
router.push({ name: 'upload' });
}
</script>
<style scoped>
.el-menu-item {
width: 10%;
.menu {
width: 38.5rem;
}
.logo-title {
color: #dee2e6;
font-weight: 700;
font-size: 1.125rem;
}
</style>

124
src/components/searchBar.vue

@ -0,0 +1,124 @@
<template>
<!-- 热门插件 -->
<div class="flex flex-row justify-space-between items-center">
<div class="font-bold">
热门插件
<el-button plain size="mini" v-for="(tag, tagIndex) in data.tags" :key="tagIndex" class="cursor-pointer">{{ tag }}</el-button>
</div>
<div class="flex-1"></div>
<div class="flex flex-row">
<el-input v-model="data.keywords" placeholder="请输入插件名或标签名搜索" class="search-input" />
<el-button type="primary" size="small" class="w-60px h-40px">搜索</el-button>
</div>
</div>
<!-- 所属行业 -->
<div class="types">
所属行业:
<div
class="type"
:class="industry.checked ? 'check' : ''"
v-for="(industry, industryIndex) in data.industryList"
:key="industryIndex"
@click="changeIndustryCheck(industryIndex)"
>
{{ industry.value }}
</div>
</div>
<div class="line"></div>
<div class="types">
所属行业:
<div
class="type"
:class="sort.checked ? 'check' : ''"
v-for="(sort, sortIndex) in data.sortList"
:key="sortIndex"
@click="changeSortCheck(sortIndex)"
>
{{ sort.value }}
</div>
</div>
<div class="line"></div>
</template>
<script lang="ts" setup="true">
import { reactive } from 'vue';
const data = reactive({
tags: ['交付物', '财务条', '签到打卡', '即时奖惩'],
keywords: '',
industryList: [
{
value: '行业一',
label: '行业一',
checked: true,
},
{
value: '行业二',
label: '行业二',
checked: false,
},
{
value: '行业三',
label: '行业三',
checked: false,
},
],
sortList: [
{
value: '分类一',
label: '分类一',
checked: false,
},
{
value: '分类二',
label: '分类二',
checked: true,
},
{
value: '分类三',
label: '分类三',
checked: false,
},
],
});
function changeIndustryCheck(index) {
data.industryList[index].checked = !data.industryList[index].checked;
}
function changeSortCheck(index) {
data.sortList[index].checked = !data.sortList[index].checked;
}
</script>
<style scoped>
.search-input {
width: 27.3125rem;
}
.types {
display: flex;
flex-wrap: wrap;
align-items: center;
margin: 8px 0;
}
.types .type {
height: 2rem;
line-height: 2rem;
cursor: pointer;
padding: 0 12px;
margin: 6px 20px;
}
.types .check {
color: #fff;
background: #409eff;
border-radius: 3px;
}
.line {
width: 100%;
border-bottom: 1px dashed #ebebeb;
}
</style>

40
src/routers/index.js

@ -50,23 +50,39 @@ const router = createRouter({
component: () => import('views/index-list/plugin-shop.vue'),
},
{
path: '/store/home/develop',
name: 'develop',
component: () => import('views/index-list/develop.vue'),
path: '/store/home/add-plugin',
name: 'add-plugin',
component: () => import('views/index-list/add-plugin.vue'),
},
{
path: '/store/home/download-mould',
name: 'download-mould',
component: () => import('views/index-list/download-mould.vue'),
},
{
path: '/store/home/upload',
name: 'upload',
component: () => import('views/index-list/upload.vue'),
path: '/store/home/console-desk',
name: 'console-desk',
component: () => import('views/index-list/console-desk.vue'),
children: [
{
path: '/store/home/console-desk/plugin-shop',
name: 'desk-plugin-shop',
component: () => import('views/index-list/plugin-shop.vue'),
},
{
path: '/store/home/console-desk/add-plugin',
name: 'desk-add-plugin',
component: () => import('views/index-list/add-plugin.vue'),
},
{
path: '/store/home/console-desk/business-list',
name: 'desk-business-list',
component: () => import('views/index-list/business-list.vue'),
},
{
path: '/store/home/console-desk/add-business',
name: 'desk-add-business',
component: () => import('views/index-list/add-business.vue'),
},
],
},
],
},
...user,
],
});

19
src/views/Index.vue

@ -6,7 +6,9 @@
</div>
</el-header>
<el-main>
<router-view></router-view>
<div class="bg-white p-6">
<router-view></router-view>
</div>
</el-main>
</el-container>
</template>
@ -19,14 +21,19 @@
export default {};
</script>
<style>
<style scoped>
.el-header {
background: #00182e;
color: #fff;
}
.el-main {
padding: 2rem 12rem;
/* background-color: #ff6700; */
overflow: hidden;
padding: 1.6rem 12rem;
background: #f5f5f5;
}
.top {
padding: 2rem 10rem;
/* padding: 2rem 10rem; */
width: 100%;
}
</style>

3
src/views/index-list/add-business.vue

@ -0,0 +1,3 @@
<template>创建业务</template>
<style></style>

0
src/views/index-list/upload.vue → src/views/index-list/add-plugin.vue

9
src/views/index-list/business-list.vue

@ -0,0 +1,9 @@
<template>
<div class="box">
<h1 class="text-xl mt-10 font-semibold">业务列表</h1>
</div>
</template>
<script setup></script>
<style></style>

14
src/views/index-list/console-desk.vue

@ -0,0 +1,14 @@
<template>
<!-- <div class="flex flex-row"> -->
<el-container>
<el-aside width="208px">
<leftMenu />
</el-aside>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
<!-- </div> -->
</template>
<script setup></script>

1
src/views/index-list/develop.vue

@ -1 +0,0 @@
<template>开发教程</template>

3
src/views/index-list/download-mould.vue

@ -1,3 +0,0 @@
<template>下载模板</template>
<style></style>

195
src/views/index-list/plugin-shop.vue

@ -1,34 +1,27 @@
<template>
<div class="flex flex-1 py-10">
<el-input v-model="keywords" placeholder="请输入内容" />
<el-select v-model="industry" filterable placeholder="请选择行业">
<el-option v-for="item in industryList" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<el-select v-model="sort" filterable placeholder="请选择分类">
<el-option v-for="item in sortList" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
<el-button type="primary" size="small" class="w-60px h-40px">搜索</el-button>
</div>
<div class="shop-content flex py-5">
<img src="@/assets/u1.jpg" alt="" class="shop-left h-90 border-20 p-1 box-border" />
<div class="shop-right ml-6">
<searchBar />
<div class="shop-content flex py-5" v-for="list in data.lists" :key="list.id">
<img :src="list.preview" alt="" class="shop-left" />
<div class="shop-right ml-8">
<div>
<span class="text-2xl font-semibold">{{ pluginName }}</span> <span class="ml-5">{{ versionNumber }}</span>
<span class="text-xl font-semibold">{{ list.name }}</span> <span class="ml-5 text-sm">{{ list.versions }}</span>
</div>
<div class="mt-4 desc text-sm">
<span> 描述</span> <span>{{ list.intro }}</span>
</div>
<div class="mt-5 text-sm">
<el-tag v-for="item in list.tags" :type="item.btnType" class="mr-3" :key="item.name">{{ item.name }}</el-tag>
</div>
<div class="mt-5 text-sm">
<span>行业:</span> <span>{{ list.industryName }}</span> <span class="ml-8">分类:</span> <span>{{ list.sortName }}</span>
</div>
<p class="h-13 mt-7 desc">
<span> 描述</span> <span>{{ describe }}</span>
</p>
<div class="mt-7">
<el-tag v-for="item in tags" :type="item.btnType" class="mr-3" :key="item.name">{{ item.name }}</el-tag>
<div class="mt-4 text-sm">
<span>更新日期:</span> <span>{{ list.updateTime }}</span> <span class="ml-8">作者:</span> <span>{{ list.authorName }}</span>
</div>
<p class="mt-7">
<span>行业:</span> <span>{{ industryName }}</span> <span class="ml-8">分类:</span> <span>{{ sortName }}</span>
</p>
<p class="mt-7">
<span>更新日期:</span> <span>{{ update }}</span> <span class="ml-8">作者:</span> <span>{{ owner }}</span>
</p>
<div class="mt-10">
<el-button type="primary">下载</el-button>
<div class="mt-6">
<el-button type="primary">下载源代码</el-button>
<el-button type="primary">下载示例代码</el-button>
<el-button type="primary">添加到业务</el-button>
</div>
</div>
</div>
@ -37,10 +30,11 @@
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:page-size="20"
layout="total, sizes, prev, pager, next, jumper"
:total="200"
:current-page.sync="data.currentPage"
:page-size="data.pageSize"
layout="prev, pager, next, sizes, jumper"
:total="data.total"
:page-sizes="[10, 20, 30, 40, 50]"
>
</el-pagination>
</el-config-provider>
@ -48,62 +42,61 @@
</template>
<script lang="ts" setup="true">
import { ref } from 'vue';
import { reactive } from 'vue';
import { ElConfigProvider } from 'element-plus';
import zhCn from 'element-plus/lib/locale/lang/zh-cn';
const keywords = ref('');
const industry = ref('');
const sort = ref('');
const pluginName = ref('插件名称');
const versionNumber = ref('版本号');
const industryName = ref('数字医疗');
const sortName = ref('签到');
const update = ref('2021年12月20日');
const owner = ref('传控电子');
const describe = ref(
'In my dual profession as an educator and health care , I have worked with numerous children infected with the virus that causes AIDS.',
);
const tags = ref([
{ btnType: '', name: '医疗' },
{ btnType: 'success', name: '打卡' },
{ btnType: 'warning', name: '签到' },
]);
const industryList = [
{
value: '行业一',
label: '行业一',
},
{
value: '行业二',
label: '行业二',
},
{
value: '行业三',
label: '行业三',
},
];
const sortList = [
{
value: '分类一',
label: '分类一',
},
{
value: '分类二',
label: '分类二',
},
{
value: '分类三',
label: '分类三',
},
];
const data = reactive({
lists: [
{
id: '1',
name: '插件名称',
versions: 'V1.0.0',
intro: 'In my dual profession as an educator and health care',
updateTime: '2021年12月20日',
authorName: '张三',
preview: 'https://s4.ax1x.com/2022/01/17/7abX3d.png',
mine: true,
tags: [
{ btnType: 'primary', name: '医疗' },
{ btnType: 'success', name: '打卡' },
{ btnType: 'warning', name: '签到' },
],
industryName: '数字医疗',
sortName: '医疗',
},
{
id: '2',
name: '插件名称',
versions: 'V1.0.0',
intro: 'In my dual profession as an educator and health care',
updateTime: '2021年12月20日',
authorName: '张三',
preview: 'https://s4.ax1x.com/2022/01/17/7abX3d.png',
mine: true,
tags: [
{ btnType: 'primary', name: '医疗' },
{ btnType: 'success', name: '打卡' },
{ btnType: 'warning', name: '签到' },
],
industryName: '数字医疗',
sortName: '医疗',
},
],
currentPage: 1,
pageSize: 10,
total: 55,
});
const handleSizeChange = val => {
function handleSizeChange(val) {
console.log(val);
};
const handleCurrentChange = val => {
data.pageSize = val;
}
function handleCurrentChange(val) {
console.log(val);
};
data.currentPage = val;
}
</script>
<style scoped>
@ -116,9 +109,47 @@ const handleCurrentChange = val => {
width: 20%;
}
.desc {
height: 30px;
line-height: 15px;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
.shop-left {
width: 35%;
width: 288px;
height: 263px;
}
.pagination >>> .el-pager li,
.pagination >>> .btn-prev,
.pagination >>> .btn-next {
border: 1px solid #ccc;
width: 2rem;
height: 2rem;
line-height: 2rem;
text-align: center;
padding: 0;
margin: 0 8px;
border-radius: 6px;
font-weight: normal;
}
.pagination >>> .el-pager li.active {
border: 1px solid #409eff;
color: #fff;
background: #409eff;
}
.pagination >>> .el-input__inner {
height: 2rem;
line-height: 2rem;
border: 1px solid #ccc;
border-radius: 6px !important;
}
.pagination >>> .el-pagination__jump {
margin-left: 0;
}
</style>

Loading…
Cancel
Save