commit
cc87deff5e
22 changed files with 29364 additions and 0 deletions
-
3.browserslistrc
-
23.gitignore
-
19README.md
-
26babel.config.js
-
28800package-lock.json
-
29package.json
-
BINpublic/favicon.ico
-
17public/index.html
-
45src/App.vue
-
11src/api/admin.js
-
BINsrc/assets/logo.png
-
167src/components/HelloWorld.vue
-
14src/main.ts
-
10src/plugins/nutui.ts
-
25src/router/index.ts
-
6src/shims-vue.d.ts
-
12src/store/index.ts
-
53src/utils/request.js
-
5src/views/About.vue
-
26src/views/Home.vue
-
39tsconfig.json
-
34vue.config.js
@ -0,0 +1,3 @@ |
|||
> 1% |
|||
last 2 versions |
|||
not dead |
|||
@ -0,0 +1,23 @@ |
|||
.DS_Store |
|||
node_modules |
|||
/dist |
|||
|
|||
|
|||
# local env files |
|||
.env.local |
|||
.env.*.local |
|||
|
|||
# Log files |
|||
npm-debug.log* |
|||
yarn-debug.log* |
|||
yarn-error.log* |
|||
pnpm-debug.log* |
|||
|
|||
# Editor directories and files |
|||
.idea |
|||
.vscode |
|||
*.suo |
|||
*.ntvs* |
|||
*.njsproj |
|||
*.sln |
|||
*.sw? |
|||
@ -0,0 +1,19 @@ |
|||
# vue3demo |
|||
|
|||
## Project setup |
|||
``` |
|||
npm install |
|||
``` |
|||
|
|||
### Compiles and hot-reloads for development |
|||
``` |
|||
npm run serve |
|||
``` |
|||
|
|||
### Compiles and minifies for production |
|||
``` |
|||
npm run build |
|||
``` |
|||
|
|||
### Customize configuration |
|||
See [Configuration Reference](https://cli.vuejs.org/config/). |
|||
@ -0,0 +1,26 @@ |
|||
module.exports = { |
|||
presets: [ |
|||
'@vue/cli-plugin-babel/preset' |
|||
], |
|||
plugins: [ |
|||
[ |
|||
"import", |
|||
{ |
|||
"libraryName": "@nutui/nutui", |
|||
"libraryDirectory": "dist/packages/_es", |
|||
// customName自定义兼容国际化使用
|
|||
"customName": (name, file) => { |
|||
if (name == 'Locale') { |
|||
return '@nutui/nutui/dist/packages/locale/lang'; |
|||
} else { |
|||
return `@nutui/nutui/dist/packages/_es/${name}`; |
|||
} |
|||
}, |
|||
"style": (name, file) => name.toLowerCase().replace('_es/', '') + '/index.scss', |
|||
"camel2DashComponentName": false |
|||
}, |
|||
'nutui3-vue' |
|||
] |
|||
|
|||
] |
|||
} |
|||
28800
package-lock.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,29 @@ |
|||
{ |
|||
"name": "vue3demo", |
|||
"version": "0.1.0", |
|||
"private": true, |
|||
"scripts": { |
|||
"serve": "vue-cli-service serve", |
|||
"build": "vue-cli-service build" |
|||
}, |
|||
"dependencies": { |
|||
"@nutui/nutui": "^3.3.0", |
|||
"axios": "^1.2.1", |
|||
"core-js": "^3.6.5", |
|||
"vue": "^3.0.0", |
|||
"vue-router": "^4.0.0-0", |
|||
"vuex": "^4.0.0-0" |
|||
}, |
|||
"devDependencies": { |
|||
"@vue/cli-plugin-babel": "~4.5.15", |
|||
"@vue/cli-plugin-router": "~4.5.15", |
|||
"@vue/cli-plugin-typescript": "~4.5.15", |
|||
"@vue/cli-plugin-vuex": "~4.5.15", |
|||
"@vue/cli-service": "~4.5.15", |
|||
"@vue/compiler-sfc": "^3.0.0", |
|||
"babel-plugin-import": "^1.13.5", |
|||
"sass": "^1.26.5", |
|||
"sass-loader": "^8.0.2", |
|||
"typescript": "~4.1.5" |
|||
} |
|||
} |
|||
@ -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><%= htmlWebpackPlugin.options.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,45 @@ |
|||
<template> |
|||
<router-view /> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
timer:null |
|||
}; |
|||
}, |
|||
mounted() { |
|||
// this.timer=null |
|||
// clearInterval(this.timer) |
|||
// this.timer=setInterval(()=>{ |
|||
// // location.reload() //原生刷新 |
|||
// this.$router.go() //路由刷新 |
|||
// },5000) |
|||
}, |
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
|
|||
<style lang="scss"> |
|||
#app { |
|||
font-family: Avenir, Helvetica, Arial, sans-serif; |
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
text-align: center; |
|||
color: #2c3e50; |
|||
} |
|||
|
|||
#nav { |
|||
padding: 30px; |
|||
|
|||
a { |
|||
font-weight: bold; |
|||
color: #2c3e50; |
|||
|
|||
&.router-link-exact-active { |
|||
color: #42b983; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,11 @@ |
|||
import request from '../utils/request' |
|||
|
|||
export function getiddata(query) { |
|||
return request({ |
|||
url: '/api/article/queryById', |
|||
method: 'get', |
|||
params: query |
|||
}) |
|||
} |
|||
|
|||
|
|||
|
After Width: 200 | Height: 200 | Size: 6.7 KiB |
@ -0,0 +1,167 @@ |
|||
<template> |
|||
<div class="hello"> |
|||
<div class="margintopBox"></div> |
|||
<div class="out"> |
|||
<div class="in1">123</div> |
|||
<div class="in2">456</div> |
|||
</div> |
|||
|
|||
<div class="item1">111</div> |
|||
<div class="item_box"></div> |
|||
<div class="item2">222</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { |
|||
computed, |
|||
defineComponent, |
|||
onMounted, |
|||
onUpdated, |
|||
reactive, |
|||
ref, |
|||
toRefs |
|||
} from 'vue'; |
|||
import { |
|||
getiddata |
|||
} from "../api/admin"; |
|||
|
|||
export default defineComponent({ |
|||
name: 'HelloWorld', |
|||
props: { |
|||
msg: String, |
|||
}, |
|||
setup(props, ctx) { |
|||
|
|||
const state = reactive({ |
|||
a: 0, |
|||
page: 0, |
|||
list: [1, 2, 3, 4], |
|||
count: computed(() => state.a + 1), |
|||
fin: computed(() => state.list.filter((item) => item > 1)), |
|||
text: '', |
|||
}) |
|||
onMounted(() => { |
|||
console.log('mounted'); |
|||
getdata() |
|||
}); |
|||
onUpdated(() => { |
|||
// 文本内容应该与当前的 `count.value` 一致 |
|||
let a = document.querySelector('#a') |
|||
// console.log(a?.textContent) |
|||
}) |
|||
|
|||
function add() { |
|||
state.a++ |
|||
} |
|||
|
|||
function handlertext() { |
|||
console.log(state.text); |
|||
|
|||
} |
|||
|
|||
function getdata() { |
|||
getiddata({ |
|||
title:'文章名称', |
|||
id: 29, |
|||
|
|||
}).then(res => { |
|||
console.log(res); |
|||
}) |
|||
|
|||
} |
|||
|
|||
function clickCount() { |
|||
console.log(state.count); |
|||
console.log(props.msg); |
|||
ctx.emit('handler', state.count) |
|||
|
|||
|
|||
} |
|||
|
|||
return { |
|||
...toRefs(state), |
|||
add, |
|||
clickCount, |
|||
handlertext, |
|||
getdata |
|||
} |
|||
} |
|||
}); |
|||
</script> |
|||
|
|||
<!-- Add "scoped" attribute to limit CSS to this component only --> |
|||
<style scoped lang="scss"> |
|||
h3 { |
|||
margin: 40px 0 0; |
|||
} |
|||
|
|||
ul { |
|||
list-style-type: none; |
|||
padding: 0; |
|||
} |
|||
|
|||
li { |
|||
display: inline-block; |
|||
margin: 0 10px; |
|||
} |
|||
|
|||
a { |
|||
color: #42b983; |
|||
} |
|||
|
|||
.nut-swiper-item { |
|||
line-height: 150px; |
|||
|
|||
img { |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
} |
|||
.hello{ |
|||
background-color: rgb(230, 230, 230); |
|||
// border: 1px solid transparent; |
|||
overflow: auto; |
|||
} |
|||
.margintopBox{ |
|||
margin-top: 100px; |
|||
} |
|||
|
|||
.out { |
|||
background-color: red; |
|||
overflow: auto; |
|||
// display: flex; |
|||
|
|||
.in1 { |
|||
background-color: green; |
|||
width: 100px; |
|||
height: 100px; |
|||
float: left; |
|||
} |
|||
|
|||
.in2 { |
|||
background-color: gold; |
|||
width: 200px; |
|||
display: flow-root; |
|||
} |
|||
|
|||
.in3 { |
|||
background-color: blue; |
|||
} |
|||
} |
|||
|
|||
.item1 { |
|||
background-color: rgb(0, 255, 76); |
|||
margin: 10px 0; |
|||
} |
|||
|
|||
.item_box { |
|||
overflow: auto; |
|||
} |
|||
|
|||
.item2 { |
|||
background-color: rgb(0, 255, 76); |
|||
margin: 10px 0; |
|||
|
|||
} |
|||
</style> |
|||
@ -0,0 +1,14 @@ |
|||
import { createApp } from 'vue' |
|||
import App from './App.vue' |
|||
import router from './router' |
|||
import store from './store' |
|||
// import './plugins/nutui'
|
|||
|
|||
import { |
|||
Button, |
|||
Icon,Swiper,SwiperItem,Input |
|||
} from "@nutui/nutui"; |
|||
let app=createApp(App) |
|||
|
|||
app.use(Button).use(Icon).use(Swiper).use(SwiperItem).use(Input) |
|||
app.use(store).use(router).mount('#app') |
|||
@ -0,0 +1,10 @@ |
|||
import { createApp } from 'vue' |
|||
import App from '../App.vue' |
|||
import { |
|||
Button, |
|||
Icon,Swiper,SwiperItem |
|||
} from "@nutui/nutui"; |
|||
|
|||
// let app=createApp()
|
|||
|
|||
App.use(Button).use(Icon).use(Swiper).use(SwiperItem) |
|||
@ -0,0 +1,25 @@ |
|||
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router' |
|||
import Home from '../views/Home.vue' |
|||
|
|||
const routes: Array<RouteRecordRaw> = [ |
|||
{ |
|||
path: '/', |
|||
name: 'Home', |
|||
component: Home |
|||
}, |
|||
{ |
|||
path: '/about', |
|||
name: 'About', |
|||
// route level code-splitting
|
|||
// this generates a separate chunk (about.[hash].js) for this route
|
|||
// which is lazy-loaded when the route is visited.
|
|||
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') |
|||
} |
|||
] |
|||
|
|||
const router = createRouter({ |
|||
history: createWebHashHistory(), |
|||
routes |
|||
}) |
|||
|
|||
export default router |
|||
@ -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 @@ |
|||
import { createStore } from 'vuex' |
|||
|
|||
export default createStore({ |
|||
state: { |
|||
}, |
|||
mutations: { |
|||
}, |
|||
actions: { |
|||
}, |
|||
modules: { |
|||
} |
|||
}) |
|||
@ -0,0 +1,53 @@ |
|||
import axios from 'axios' |
|||
|
|||
// create an axios instance
|
|||
const service = axios.create({ |
|||
// baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
|
|||
timeout: 5000 // request timeout
|
|||
}) |
|||
|
|||
// request interceptor
|
|||
service.interceptors.request.use( |
|||
config => { |
|||
// do something before request is sent
|
|||
|
|||
|
|||
return config |
|||
}, |
|||
error => { |
|||
// do something with request error
|
|||
console.log(error) // for debug
|
|||
return Promise.reject(error) |
|||
} |
|||
) |
|||
|
|||
// response interceptor
|
|||
service.interceptors.response.use( |
|||
/** |
|||
* If you want to get http information such as headers or status |
|||
* Please return response => response |
|||
*/ |
|||
|
|||
/** |
|||
* Determine the request status by custom code |
|||
* Here is just an example |
|||
* You can also judge the status by HTTP Status Code |
|||
*/ |
|||
response => { |
|||
const res = response.data |
|||
|
|||
// if the custom code is not 20000, it is judged as an error.
|
|||
if (res.code !== 0) { |
|||
return Promise.reject(res) |
|||
} else { |
|||
return res.data |
|||
} |
|||
}, |
|||
error => { |
|||
console.log('err' + error) // for debug
|
|||
|
|||
return Promise.reject(error) |
|||
} |
|||
) |
|||
|
|||
export default service |
|||
@ -0,0 +1,5 @@ |
|||
<template> |
|||
<div class="about"> |
|||
<h1>This is an about page</h1> |
|||
</div> |
|||
</template> |
|||
@ -0,0 +1,26 @@ |
|||
<template> |
|||
<div class="home"> |
|||
<HelloWorld msg="Welcome to Your Vue.js + TypeScript App" @handler="getvalue"/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script lang="ts"> |
|||
import { defineComponent } from 'vue'; |
|||
import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src |
|||
|
|||
export default defineComponent({ |
|||
name: 'Home', |
|||
components: { |
|||
HelloWorld, |
|||
}, |
|||
setup(){ |
|||
function getvalue(a:any){ |
|||
console.log('子组件传过来的值'+a); |
|||
} |
|||
|
|||
return{ |
|||
getvalue, |
|||
} |
|||
} |
|||
}); |
|||
</script> |
|||
@ -0,0 +1,39 @@ |
|||
{ |
|||
"compilerOptions": { |
|||
"target": "esnext", |
|||
"module": "esnext", |
|||
"strict": true, |
|||
"jsx": "preserve", |
|||
"importHelpers": true, |
|||
"moduleResolution": "node", |
|||
"skipLibCheck": true, |
|||
"esModuleInterop": true, |
|||
"allowSyntheticDefaultImports": true, |
|||
"sourceMap": true, |
|||
"baseUrl": ".", |
|||
"types": [ |
|||
"webpack-env" |
|||
], |
|||
"paths": { |
|||
"@/*": [ |
|||
"src/*" |
|||
] |
|||
}, |
|||
"lib": [ |
|||
"esnext", |
|||
"dom", |
|||
"dom.iterable", |
|||
"scripthost" |
|||
] |
|||
}, |
|||
"include": [ |
|||
"src/**/*.ts", |
|||
"src/**/*.tsx", |
|||
"src/**/*.vue", |
|||
"tests/**/*.ts", |
|||
"tests/**/*.tsx" |
|||
, "src/**/*.js" ], |
|||
"exclude": [ |
|||
"node_modules" |
|||
] |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
module.exports = { |
|||
lintOnSave: false, |
|||
assetsDir: "static/wap", |
|||
productionSourceMap: false, |
|||
publicPath: '/', |
|||
devServer: { |
|||
port: 8080, // 端口号
|
|||
host: '0.0.0.0', |
|||
disableHostCheck: true, |
|||
https: false, // https:{type:Boolean}
|
|||
open: true, |
|||
proxy: { |
|||
'/api': { //代理api
|
|||
target: 'http://localhost:3000/', |
|||
ws: true, // proxy websockets
|
|||
changeOrigin: true, //是否跨域
|
|||
pathRewrite: { //重写路径
|
|||
'^/api': '' |
|||
} |
|||
}, |
|||
} |
|||
}, |
|||
css: { |
|||
loaderOptions: { |
|||
// 给 sass-loader 传递选项
|
|||
scss: { |
|||
// @/ 是 src/ 的别名
|
|||
// 注意:在 sass-loader v7 中,这个选项名是 "data"
|
|||
// @import "@/assets/custom_theme.scss"; 自定义主题
|
|||
prependData: `@import "@nutui/nutui/dist/styles/variables.scss";`, |
|||
} |
|||
}, |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue