21 changed files with 6333 additions and 0 deletions
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
module.exports = { |
||||
presets: [ |
||||
'@vue/cli-plugin-babel/preset' |
||||
] |
||||
} |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
<template> |
||||
<WkbTag>ssss</WkbTag> |
||||
<ListTable :data="data" :height="500" :props="prop"></ListTable> |
||||
</template> |
||||
|
||||
<script lang="ts" setup> |
||||
import { reactive, onMounted } from "vue"; |
||||
import { useStore } from "vuex"; |
||||
import { WkbTag, ListTable } from "../packages"; |
||||
|
||||
const store = useStore(); |
||||
|
||||
const data = [ |
||||
{ caseName: 111, taskName: 111, userId: 'test', content: 'content', createTime: 'createTime' } |
||||
] |
||||
|
||||
const prop = [ |
||||
{ |
||||
code: "caseName", |
||||
name: "案件名称", |
||||
width: 110, |
||||
}, |
||||
{ |
||||
code: "taskName", |
||||
name: "任务名称", |
||||
width: 110, |
||||
}, |
||||
{ |
||||
code: "userId", |
||||
name: "用户名", |
||||
width: 100, |
||||
}, |
||||
{ |
||||
code: "content", |
||||
name: "日志内容", |
||||
width: 500, |
||||
}, |
||||
{ |
||||
code: "createTime", |
||||
name: "产生时间", |
||||
width: 170, |
||||
}, |
||||
]; |
||||
|
||||
onMounted(() => { |
||||
|
||||
}); |
||||
|
||||
</script> |
||||
|
||||
<style> |
||||
@charset "UTF-8"; |
||||
</style> |
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
import { createApp } from 'vue'; |
||||
import App from './App.vue'; |
||||
import router from './router'; |
||||
import store from './store'; |
||||
|
||||
import ElementPlus from 'element-plus'; |
||||
import 'element-plus/dist/index.css'; |
||||
import zhCn from 'element-plus/es/locale/lang/zh-cn'; |
||||
import * as ElementPlusIconsVue from '@element-plus/icons-vue'; |
||||
|
||||
const app = createApp(App); |
||||
for (const [key, component] of Object.entries(ElementPlusIconsVue)) { |
||||
app.component(key, component); |
||||
} |
||||
app.use(ElementPlus, { size: 'default', locale: zhCn }); |
||||
app.use(store).use(router).mount('#app'); |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'; |
||||
|
||||
const routes: Array<RouteRecordRaw> = [ |
||||
]; |
||||
|
||||
const router = createRouter({ |
||||
history: createWebHashHistory(), |
||||
routes, |
||||
}); |
||||
|
||||
export default router; |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
/* eslint-disable */ |
||||
declare module '*.vue' { |
||||
import type { DefineComponent } from 'vue' |
||||
const component: DefineComponent<{}, {}, any> |
||||
export default component |
||||
} |
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
import { createStore } from 'vuex'; |
||||
import state from './state'; |
||||
import mutations from './mutations'; |
||||
import actions from './actions'; |
||||
|
||||
export default createStore({ |
||||
state, |
||||
getters: {}, |
||||
mutations, |
||||
actions, |
||||
modules: {}, |
||||
}); |
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
{ |
||||
"name": "noob", |
||||
"version": "0.1.0", |
||||
"private": true, |
||||
"scripts": { |
||||
"dev": "vue-cli-service serve", |
||||
"build": "vue-cli-service build", |
||||
"lint": "vue-cli-service lint" |
||||
}, |
||||
"dependencies": { |
||||
"core-js": "^3.8.3", |
||||
"vue": "^3.2.13", |
||||
"vue-class-component": "^8.0.0-0", |
||||
"element-plus": "2.2.18", |
||||
"vue-router": "^4.0.3", |
||||
"vuex": "^4.0.0" |
||||
}, |
||||
"devDependencies": { |
||||
"@vue/cli-plugin-babel": "~5.0.0", |
||||
"@vue/cli-plugin-router": "~5.0.0", |
||||
"@vue/cli-plugin-typescript": "~5.0.0", |
||||
"@vue/cli-plugin-vuex": "~5.0.0", |
||||
"@vue/cli-service": "~5.0.0", |
||||
"sass": "^1.32.7", |
||||
"sass-loader": "^12.0.0", |
||||
"typescript": "~4.5.5" |
||||
}, |
||||
"eslintConfig": { |
||||
"root": true, |
||||
"env": { |
||||
"node": true |
||||
}, |
||||
"extends": [ |
||||
"plugin:vue/vue3-essential", |
||||
"@vue/typescript/recommended" |
||||
], |
||||
"parserOptions": { |
||||
"ecmaVersion": 2020 |
||||
}, |
||||
"rules": {} |
||||
}, |
||||
"browserslist": [ |
||||
"> 1%", |
||||
"last 2 versions", |
||||
"not dead", |
||||
"not ie 11" |
||||
] |
||||
} |
@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
|
||||
import WkbTag from './tag'; |
||||
import ListTable from './list-table'; |
||||
|
||||
export { WkbTag, ListTable }; |
@ -0,0 +1,2 @@
@@ -0,0 +1,2 @@
|
||||
import listTable from "./src/listTable.vue" |
||||
export default listTable; |
@ -0,0 +1,108 @@
@@ -0,0 +1,108 @@
|
||||
<template> |
||||
<div class="my-table"> |
||||
<el-table :data="page ? data.data : data" |
||||
:height="height ? height : (page ? state.sizes.pTableHei : state.sizes.tableHei)" highlight-current-row> |
||||
<el-table-column v-for="item in props" :key="item.code" :prop="item.code" :label="item.name" |
||||
:min-width="item.width" :width="item.type ? item.width : ''" :align="item.align ? item.align : 'center'" |
||||
show-overflow-tooltip :formatter="formatter"> |
||||
<template v-if="item.slot" #default="scope"> |
||||
<slot :name="item.code" :row="scope.row"></slot> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column v-if="prop.actionWidth" label="操作" :min-width="prop.actionWidth" align="center"> |
||||
<template #default="scope"> |
||||
<slot v-bind:row="scope.row" v-bind:$index="scope.$index"></slot> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
</div> |
||||
<div v-if="page" class="my-pagination"> |
||||
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="example.page" |
||||
:page-sizes="[10, 20, 50, 100, 200]" :page-size="example.size" layout="total, sizes, prev, pager, next, jumper" |
||||
:total="data.total"> |
||||
</el-pagination> |
||||
</div> |
||||
</template> |
||||
|
||||
<script lang="ts" setup> |
||||
import { useStore } from "vuex"; |
||||
import { reactive, onMounted, ref, defineEmits, defineProps } from "vue"; |
||||
|
||||
const { |
||||
state: { dict }, |
||||
} = useStore(); |
||||
|
||||
const prop = defineProps({ |
||||
data: { |
||||
type: Object, |
||||
default: null |
||||
}, |
||||
props: { |
||||
type: Array<any>(), |
||||
default: [], |
||||
}, |
||||
page: { |
||||
type: Boolean, |
||||
default: false, |
||||
}, |
||||
actionWidth: { |
||||
type: Number, |
||||
default: null, |
||||
}, |
||||
height: { |
||||
type: Number, |
||||
default: null, |
||||
}, |
||||
example: { |
||||
type: Object, |
||||
default: null, |
||||
}, |
||||
}); |
||||
const { state } = useStore(); |
||||
|
||||
const emit = defineEmits(["query"]); |
||||
|
||||
const handleSizeChange = (val) => { |
||||
prop.example.size = val; |
||||
emit("query"); |
||||
}; |
||||
|
||||
const handleCurrentChange = (val) => { |
||||
prop.example.page = val; |
||||
emit("query"); |
||||
}; |
||||
|
||||
const getValue = ( |
||||
row: any, |
||||
column: string, |
||||
value: any, |
||||
index?: number |
||||
) => { |
||||
if ((value == null || value == '') && value !== 0) { |
||||
return '--'; |
||||
} |
||||
return value; |
||||
}; |
||||
|
||||
const formatter = (row: any, column: any, value: any, index: number) => { |
||||
if (row.scheme) |
||||
return formatterByDist(row.scheme + '_' + column.property, value); |
||||
return getValue(null, '', value); |
||||
}; |
||||
|
||||
const formatterByDist = (dictKey, value) => { |
||||
if (!dictKey) { |
||||
return getValue(null, '', value); |
||||
} |
||||
const mapping = dict[dictKey]; |
||||
if (mapping == null) { |
||||
return getValue(null, '', value); |
||||
} |
||||
return mapping[value] == null ? value : mapping[value]; |
||||
}; |
||||
|
||||
onMounted(() => { }); |
||||
</script> |
||||
<style lang="scss" scoped> |
||||
//@import url(); 引入公共css类 |
||||
</style> |
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
// import { PluginObject } from 'vue'
|
||||
import WkbTag from './src/tag.vue' |
||||
|
||||
// const injectInstallObject: PluginObject<null> = {
|
||||
// install(Vue) {
|
||||
// Vue.component('wkb-tag', WkbTag)
|
||||
// },
|
||||
// pluginName: 'wkb-tag'
|
||||
// }
|
||||
|
||||
// const WkbComponent = Object.assign(WkbTag, injectInstallObject)
|
||||
|
||||
// if (typeof window !== 'undefined' && window.Vue) {
|
||||
// injectInstallObject.install(window.Vue as any)
|
||||
// }
|
||||
|
||||
export default WkbTag |
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
<template> |
||||
<span :class="['wkb-tag', type]"> |
||||
<slot /> |
||||
</span> |
||||
</template> |
||||
|
||||
<script lang="ts" setup> |
||||
import { useStore } from "vuex"; |
||||
import { reactive, onMounted, ref, defineProps } from "vue"; |
||||
|
||||
const { state, commit, dispatch } = useStore(); |
||||
const prop = defineProps({ |
||||
type: { |
||||
type: String, |
||||
default: 'primary' |
||||
} |
||||
}); |
||||
|
||||
onMounted(() => { }); |
||||
</script> |
||||
<style scoped lang="scss"> |
||||
.wkb-tag { |
||||
font-weight: 500; |
||||
font-size: 18px; |
||||
line-height: 24px; |
||||
text-transform: uppercase; |
||||
padding: 2px 10px; |
||||
border-radius: 10.5px; |
||||
|
||||
&.primary { |
||||
color: #387dff; |
||||
background-color: rgba(#387dff, 0.2); |
||||
} |
||||
|
||||
&.success { |
||||
color: #23b899; |
||||
background-color: rgba(#23b899, 0.2); |
||||
} |
||||
|
||||
&.danger { |
||||
color: #fe7c4b; |
||||
background-color: rgba(#fe7c4b, 0.2); |
||||
} |
||||
} |
||||
</style> |
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
import { useStore } from 'vuex'; |
||||
// const {
|
||||
// state: { dict },
|
||||
// } = useStore();
|
||||
const dict = {}; |
||||
|
||||
export const getValue = ( |
||||
row: any, |
||||
column: string, |
||||
value: any, |
||||
index?: number |
||||
) => { |
||||
if ((value == null || value == '') && value !== 0) { |
||||
return '--'; |
||||
} |
||||
return value; |
||||
}; |
||||
|
||||
export const formatter = (row: any, column: any, value: any, index: number) => { |
||||
return formatterByDist(row.scheme + '_' + column.property, value); |
||||
}; |
||||
|
||||
export const formatterByDist = (dictKey, value) => { |
||||
if (!dictKey) { |
||||
return getValue(null, '', value); |
||||
} |
||||
const mapping = dict[dictKey]; |
||||
if (mapping == null) { |
||||
return getValue(null, '', value); |
||||
} |
||||
return mapping[value] == null ? value : mapping[value]; |
||||
}; |
||||
|
||||
// export const formartLink = (row) => {
|
||||
// const up = row.ambr.uplink;
|
||||
// const down = row.ambr.downlink;
|
||||
// return (
|
||||
// down.value + dict.units[down.unit] + '/' + up.value + dict.units[up.unit]
|
||||
// );
|
||||
// };
|
||||
|
||||
// export const formartApn = (row, index) => {
|
||||
// const session = row.slice[0].session[index];
|
||||
// if (session) {
|
||||
// return session.name + '-' + session.qos.index;
|
||||
// } else {
|
||||
// return '';
|
||||
// }
|
||||
// };
|
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
<!DOCTYPE html> |
||||
<html lang=""> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0"> |
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
||||
<title></title> |
||||
</head> |
||||
<body> |
||||
<noscript> |
||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> |
||||
</noscript> |
||||
<div id="app"></div> |
||||
<!-- built files will be auto injected --> |
||||
</body> |
||||
</html> |
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
{ |
||||
"compilerOptions": { |
||||
"target": "esnext", |
||||
"module": "esnext", |
||||
"strict": true, |
||||
"jsx": "preserve", |
||||
"moduleResolution": "node", |
||||
"experimentalDecorators": true, |
||||
"skipLibCheck": true, |
||||
"esModuleInterop": true, |
||||
"allowSyntheticDefaultImports": true, |
||||
"forceConsistentCasingInFileNames": true, |
||||
"useDefineForClassFields": true, |
||||
"noImplicitAny": false, |
||||
"sourceMap": true, |
||||
"baseUrl": ".", |
||||
"types": [ |
||||
"webpack-env" |
||||
], |
||||
"paths": { |
||||
"@/*": [ |
||||
"/*" |
||||
] |
||||
}, |
||||
"lib": [ |
||||
"esnext", |
||||
"dom", |
||||
"dom.iterable", |
||||
"scripthost" |
||||
] |
||||
}, |
||||
"include": [ |
||||
"examples/**/*.ts", |
||||
"examples/**/*.tsx", |
||||
// "examples/**/*.vue", |
||||
"packages/**/*.ts", |
||||
"packages/**/*.tsx", |
||||
"packages/**/*.vue" |
||||
], |
||||
"exclude": [ |
||||
"node_modules" |
||||
] |
||||
} |
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
const path = require('path'); |
||||
const { config } = require('process'); |
||||
|
||||
const resolve = (dir) => path.join(__dirname, dir); |
||||
|
||||
module.exports = { |
||||
pages: { |
||||
index: { |
||||
entry: 'examples/main.ts', // 入口文件
|
||||
template: 'public/index.html', |
||||
filename: 'index.html', |
||||
}, |
||||
}, |
||||
|
||||
chainWebpack: (config) => { |
||||
config.module |
||||
.rule('js') |
||||
.include.add(resolve('packages')) |
||||
.end() |
||||
.use('babel') // 编译器
|
||||
.loader('babel-loader') |
||||
.tap((option) => { |
||||
return option; |
||||
}); |
||||
config.resolve.alias |
||||
.set('noob', resolve('packages')) |
||||
.set('plugs', resolve('plugs')); |
||||
}, |
||||
}; |
Loading…
Reference in new issue