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> <template>
<div class="flex items-center justify-between pr-5 shadow-sm"> <div class="flex items-center justify-between pr-5 shadow-sm">
<!-- <h1 class="text-lg font-medium py-3 px-6"></h1> --> <div class="flex flex-nowrap items-center">
<el-menu :default-active="activeIndex" class="el-menu-demo flex-1" mode="horizontal"> <img src="@/assets/ck-logo.png" class="w-15" />
<el-menu-item index="1" @click="toShop">{{ pluginShop }}</el-menu-item> <h1 class="py-3 pl-2 pr-6 logo-title">开放平台</h1>
<el-menu-item index="2" @click="toDevelop">{{ develop }}</el-menu-item> </div>
<el-menu-item index="3" @click="toDown">{{ downloadMould }}</el-menu-item> <el-menu
<el-menu-item index="4" @click="toUp">{{ upload }}</el-menu-item> 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> </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> <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> <el-avatar class="mr-2" size="small" src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"></el-avatar>
<div class="mr-3">{{ account }}</div> <div class="mr-3">{{ account }}</div>
<el-icon class="el-icon--right"> <el-icon class="el-icon--right">
@ -17,6 +30,10 @@
</span> </span>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <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="openChangePassword">修改密码</el-dropdown-item>
<el-dropdown-item @click="signOut">退出登录</el-dropdown-item> <el-dropdown-item @click="signOut">退出登录</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
@ -26,24 +43,32 @@
</template> </template>
<script setup> <script setup>
import { computed, ref } from 'vue'; import { computed, reactive } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { ArrowDown } from '@element-plus/icons'; import { ArrowDown } from '@element-plus/icons';
const store = useStore(); const store = useStore();
const router = useRouter(); 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 account = computed(() => store.getters['user/account']);
const activeIndex = ref('1');
const pluginShop = ref('插件商城'); const data = reactive({
const develop = ref('开发教程'); lists: [
const downloadMould = ref('下载模板'); { title: '首页', name: '' },
const upload = ref('上传插件'); { 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() { function openChangePassword() {
@ -55,27 +80,16 @@ function signOut() {
store.commit('user/setUser', null); store.commit('user/setUser', null);
router.push({ name: 'signin' }); 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> </script>
<style scoped> <style scoped>
.el-menu-item { .menu {
width: 10%; width: 38.5rem;
}
.logo-title {
color: #dee2e6;
font-weight: 700;
font-size: 1.125rem;
} }
</style> </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'), component: () => import('views/index-list/plugin-shop.vue'),
}, },
{ {
path: '/store/home/develop', path: '/store/home/add-plugin',
name: 'develop', name: 'add-plugin',
component: () => import('views/index-list/develop.vue'), component: () => import('views/index-list/add-plugin.vue'),
}, },
{ {
path: '/store/home/download-mould', path: '/store/home/console-desk',
name: 'download-mould', name: 'console-desk',
component: () => import('views/index-list/download-mould.vue'), component: () => import('views/index-list/console-desk.vue'),
}, children: [
{ {
path: '/store/home/upload', path: '/store/home/console-desk/plugin-shop',
name: 'upload', name: 'desk-plugin-shop',
component: () => import('views/index-list/upload.vue'), 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, ...user,
], ],
}); });

19
src/views/Index.vue

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

Loading…
Cancel
Save