master
panliang 2023-12-08 15:03:37 +08:00
parent 2f3ff47d96
commit dc787fb883
27 changed files with 1105 additions and 96 deletions

View File

@ -1,4 +1,4 @@
# uniapp
# 五星党建
## Project setup
```

View File

@ -69,7 +69,9 @@
"@dcloudio/uni-stat": "^2.0.2-3061420221215001",
"@vue/shared": "^3.0.0",
"core-js": "^3.8.3",
"echarts": "^5.4.3",
"flyio": "^0.6.2",
"uview-ui": "2.0.36",
"vue": ">= 2.6.14 < 2.7",
"vuex": "^3.2.0"
},
@ -92,6 +94,8 @@
"cross-env": "^7.0.2",
"jest": "^25.4.0",
"postcss-comment": "^2.0.0",
"sass": "^1.69.5",
"sass-loader": "10",
"vue-template-compiler": ">= 2.6.14 < 2.7"
},
"browserslist": [

View File

@ -68,9 +68,15 @@ dependencies:
core-js:
specifier: ^3.8.3
version: 3.8.3
echarts:
specifier: ^5.4.3
version: 5.4.3
flyio:
specifier: ^0.6.2
version: 0.6.2
uview-ui:
specifier: 2.0.36
version: 2.0.36
vue:
specifier: '>= 2.6.14 < 2.7'
version: 2.6.14
@ -120,7 +126,7 @@ devDependencies:
version: 5.0.0(@vue/cli-service@5.0.1)(core-js@3.8.3)(vue@2.6.14)
'@vue/cli-service':
specifier: ~5.0.0
version: 5.0.1(vue-template-compiler@2.6.14)(vue@2.6.14)
version: 5.0.1(sass-loader@10.5.0)(vue-template-compiler@2.6.14)(vue@2.6.14)
babel-plugin-import:
specifier: ^1.11.0
version: 1.11.0
@ -133,6 +139,12 @@ devDependencies:
postcss-comment:
specifier: ^2.0.0
version: 2.0.0
sass:
specifier: ^1.69.5
version: 1.69.5
sass-loader:
specifier: '10'
version: 10.5.0(sass@1.69.5)(webpack@4.47.0)
vue-template-compiler:
specifier: '>= 2.6.14 < 2.7'
version: 2.6.14
@ -2915,7 +2927,7 @@ packages:
dependencies:
'@babel/core': 7.23.5
'@vue/babel-preset-app': 5.0.8(@babel/core@7.23.5)(core-js@3.8.3)(vue@2.6.14)
'@vue/cli-service': 5.0.1(vue-template-compiler@2.6.14)(vue@2.6.14)
'@vue/cli-service': 5.0.1(sass-loader@10.5.0)(vue-template-compiler@2.6.14)(vue@2.6.14)
'@vue/cli-shared-utils': 5.0.8
babel-loader: 8.3.0(@babel/core@7.23.5)(webpack@5.89.0)
thread-loader: 3.0.4(webpack@5.89.0)
@ -2936,7 +2948,7 @@ packages:
peerDependencies:
'@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0
dependencies:
'@vue/cli-service': 5.0.1(vue-template-compiler@2.6.14)(vue@2.6.14)
'@vue/cli-service': 5.0.1(sass-loader@10.5.0)(vue-template-compiler@2.6.14)(vue@2.6.14)
'@vue/cli-shared-utils': 5.0.8
transitivePeerDependencies:
- encoding
@ -2947,10 +2959,10 @@ packages:
peerDependencies:
'@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0
dependencies:
'@vue/cli-service': 5.0.1(vue-template-compiler@2.6.14)(vue@2.6.14)
'@vue/cli-service': 5.0.1(sass-loader@10.5.0)(vue-template-compiler@2.6.14)(vue@2.6.14)
dev: true
/@vue/cli-service@5.0.1(vue-template-compiler@2.6.14)(vue@2.6.14):
/@vue/cli-service@5.0.1(sass-loader@10.5.0)(vue-template-compiler@2.6.14)(vue@2.6.14):
resolution: {integrity: sha512-lhTW1d8waZv1VaRSvhE5pWWfkdmAgRTRSluDfyxkehZHMAWi//rd7a9zppN3k9Zr4X3oYVii+u7wR/RcTlr9cQ==}
engines: {node: ^12.0.0 || >= 14.0.0}
hasBin: true
@ -3024,6 +3036,7 @@ packages:
postcss: 8.4.32
postcss-loader: 6.2.1(postcss@8.4.32)(webpack@5.89.0)
progress-webpack-plugin: 1.0.16(webpack@5.89.0)
sass-loader: 10.5.0(sass@1.69.5)(webpack@4.47.0)
ssri: 8.0.1
terser-webpack-plugin: 5.3.9(webpack@5.89.0)
thread-loader: 3.0.4(webpack@5.89.0)
@ -4056,6 +4069,7 @@ packages:
/binary-extensions@2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
requiresBuild: true
/bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
@ -5601,6 +5615,13 @@ packages:
jsbn: 0.1.1
safer-buffer: 2.1.2
/echarts@5.4.3:
resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==}
dependencies:
tslib: 2.3.0
zrender: 5.4.4
dev: false
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@ -6798,6 +6819,10 @@ packages:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
dev: false
/immutable@4.3.4:
resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==}
dev: true
/import-fresh@3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@ -6909,6 +6934,7 @@ packages:
/is-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
requiresBuild: true
dependencies:
binary-extensions: 2.2.0
@ -9803,6 +9829,7 @@ packages:
/readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
requiresBuild: true
dependencies:
picomatch: 2.3.1
@ -10124,6 +10151,41 @@ packages:
- supports-color
dev: true
/sass-loader@10.5.0(sass@1.69.5)(webpack@4.47.0):
resolution: {integrity: sha512-VsU71W7VR6SChMJZUqtrfLeMSA8ns7QTHbnA7cfevtjb3c392mX93lr0Dmr4uU1ch5uIbEmfmHjdrDYcXXkQ7w==}
engines: {node: '>= 10.13.0'}
peerDependencies:
fibers: '>= 3.1.0'
node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
sass: ^1.3.0
webpack: ^4.36.0 || ^5.0.0
peerDependenciesMeta:
fibers:
optional: true
node-sass:
optional: true
sass:
optional: true
dependencies:
klona: 2.0.6
loader-utils: 2.0.4
neo-async: 2.6.2
sass: 1.69.5
schema-utils: 3.3.0
semver: 7.5.4
webpack: 4.47.0
dev: true
/sass@1.69.5:
resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==}
engines: {node: '>=14.0.0'}
hasBin: true
dependencies:
chokidar: 3.5.3
immutable: 4.3.4
source-map-js: 1.0.2
dev: true
/sax@1.3.0:
resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
dev: true
@ -11084,6 +11146,10 @@ packages:
punycode: 2.3.1
dev: true
/tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
dev: false
/tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
dev: true
@ -11327,6 +11393,11 @@ packages:
hasBin: true
dev: true
/uview-ui@2.0.36:
resolution: {integrity: sha512-ASSZT6M8w3GTO1eFPbsgEFV0U5UujK+8pTNr+MSUbRNcRMC1u63DDTLJVeArV91kWM0bfAexK3SK9pnTqF9TtA==}
engines: {HBuilderX: ^3.1.0}
dev: false
/v8-to-istanbul@4.1.4:
resolution: {integrity: sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ==}
engines: {node: 8.x.x || >=10.10.0}
@ -12154,3 +12225,9 @@ packages:
resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==}
engines: {node: '>= 4.0.0'}
dev: false
/zrender@5.4.4:
resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==}
dependencies:
tslib: 2.3.0
dev: false

View File

@ -12,6 +12,7 @@
}
</script>
<style>
/*每个页面公共css */
<style lang="scss">
@import "uview-ui/index.scss";
@import url("static/css/base.css");
</style>

View File

@ -0,0 +1,64 @@
<template>
<view class="table">
<view class="table-header">
<view class="table-tr">
<view v-for="(item, index) in header" :key="index" class="table-td">{{ item }}</view>
</view>
</view>
<view class="table-body">
<view v-for="(item, index) in list" :key="index" class="table-tr">
<view class="table-td">{{ index + 1 }}</view>
<view class="table-td">
<view class="avatar">
<image src="https://via.placeholder.com/64x64.png?text=A">
</view>
<view class="name">{{ item.name }}</view>
</view>
<view class="table-td">{{ item.score }}</view>
</view>
</view>
</view>
</template>
<script>
export default {
name: 'Rank',
props: ['header', 'list'],
data() {
return {}
}
}
</script>
<style scoped>
.table {
background-color: white;
}
.table-header {
width: 100%;
border: 1px solid #e5e5e5;
border-left: none;
border-right: none;
}
.table-td {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
padding: 0 20rpx;
}
.table-tr {
display: flex;
justify-content: space-between;
padding: 15rpx 0;
}
.avatar ::v-deep uni-image {
border-radius: 30rpx;
width: 64rpx;
height: 64rpx;
}
.name {
line-height: 64rpx;
margin-left: 10rpx;
}
</style>

View File

@ -1,8 +1,10 @@
import Vue from 'vue'
import App from './App'
import './uni.promisify.adaptor'
import uView from 'uview-ui'
Vue.config.productionTip = false
Vue.use(uView)
App.mpType = 'app'

View File

@ -1,66 +1,67 @@
{
"name": "",
"appid": "",
"description": "",
"versionName": "1.0.0",
"versionCode": "100",
"transformPx": false,
"app-plus": { /* 5+App */
"usingComponents": true,
"splashscreen": {
"alwaysShowBeforeRender": true,
"waiting": true,
"autoclose": true,
"delay": 0
},
"modules": { /* */
},
"distribute": { /* */
"android": { /* android */
"permissions": ["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
"ios": { /* ios */
},
"sdkConfigs": { /* SDK */
}
}
},
"quickapp": { /* */
},
"mp-weixin": { /* */
"appid": "",
"setting": {
"urlCheck": false
},
"usingComponents": true
},
"mp-alipay" : {
"name" : "PartyRank",
"appid" : "__UNI__828F200",
"description" : "五星党建",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
"app-plus" : {
/* 5+App */
"usingComponents" : true,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
"modules" : {},
/* */
"distribute" : {
/* */
"android" : {
/* android */
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
"ios" : {},
/* ios */
"sdkConfigs" : {}
}
},
/* SDK */
"quickapp" : {},
/* */
"mp-weixin" : {
/* */
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
@ -71,5 +72,15 @@
},
"mp-qq" : {
"usingComponents" : true
},
"h5" : {
"title" : "五星党建",
"router" : {
"mode" : "history",
"base" : "/h5/"
},
"devServer" : {
"https" : false
}
}
}

View File

@ -3,14 +3,89 @@
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "uni-app"
"navigationBarTitleText": "五星党建"
}
},
{
"path": "pages/auth/login",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path" : "pages/score/category",
"style" :
{
"navigationBarTitleText" : "填报"
}
},
{
"path" : "pages/score/form",
"style" :
{
"navigationBarTitleText" : "填报"
}
},
{
"path" : "pages/score/user-rank",
"style" :
{
"navigationBarTitleText" : "排行榜"
}
},
{
"path" : "pages/user/profile",
"style" :
{
"navigationBarTitleText" : "个人中心",
"navigationBarBackgroundColor": "white",
"navigationBarTextStyle": "black"
}
},
{
"path" : "pages/article/detail",
"style" :
{
"navigationBarTitleText" : "文章详细"
}
},
{
"path" : "pages/feedback/add",
"style" :
{
"navigationBarTitleText" : "书记信箱"
}
}
],
"tabBar": {
"backgroundColor": "#FFFFFF",
"color": "#B2B2B2",
"selectedColor": "#C20000",
"borderStyle": "white",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "static/images/home.png",
"selectedIconPath": "static/images/home-active.png",
"text": "首页"
}, {
"pagePath": "pages/score/category",
"iconPath": "static/images/form.png",
"selectedIconPath": "static/images/form-active.png",
"text": "填报"
}, {
"pagePath": "pages/user/profile",
"iconPath": "static/images/user.png",
"selectedIconPath": "static/images/user-active.png",
"text": "我的"
}]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
"navigationBarTextStyle": "white",
"navigationBarTitleText": "五星党建",
"navigationBarBackgroundColor": "#C20000",
"backgroundColor": "#efefef"
},
"easycom": {
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
}
}

View File

@ -0,0 +1,37 @@
<template>
<view class="page">
<view class="title">文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题</view>
<view class="content">
<rich-text :nodes="content" />
</view>
</view>
</template>
<script>
export default {
data() {
return {
content: '<p>1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111</p>'
}
}
}
</script>
<style scoped>
.page {
padding: 20rpx;
}
.title {
font-size: 36rpx;
font-weight: bold;
text-align: center;
}
.content {
margin-top: 30rpx;
background-color: white;
word-break: break-all;
overflow-wrap: break-word;
width: 100%;
line-height: 1.6;
}
</style>

View File

@ -0,0 +1,88 @@
<template>
<view class="page">
<view class="title">您好欢迎登录</view>
<view class="form">
<view class="item">
<view class="label">帐号</view>
<view class="control">
<input v-model="username" type="text" class="input" name="username" focus placeholder="请输入账号" />
</view>
</view>
<view class="item">
<view class="label">密码</view>
<view class="control">
<input v-model="password" type="password" class="input" name="password" placeholder="请输入密码" />
</view>
</view>
<view class="item submit">
<button class="btn btn-danger" @click="submit"></button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
username: '',
password: ''
}
},
onLoad() {},
methods: {
submit() {
if (!this.username) {
return uni.showToast({
icon: 'error',
title: '账号必填'
})
}
if (!this.username) {
return uni.showToast({
icon: 'error',
title: '密码必填'
})
}
}
}
}
</script>
<style>
.page {
background-color: white;
padding-top: 150rpx;
padding-left: 60rpx;
padding-right: 60rpx;
}
.title {
background-color: white;
font-size: 56rpx;
font-weight: bold;
text-align: center;
margin-top: 150rpx;
}
.form {
margin-top: 95rpx;
}
.form .label {
font-size: 15px;
font-weight: bolder;
}
.form .item {
margin-top: 30rpx;
}
.form .input {
padding: 14px 0;
border-radius: 0;
border-bottom: 0.5px solid #dadbde;
}
.form .submit {
font-size: 34rpx;
margin-top: 200rpx;
font-weight: 700;
}
</style>

View File

@ -0,0 +1,51 @@
<template>
<view class="page">
<view class="form">
<textarea v-model="content" name="content" placeholder="请填写内容" focus auto-height />
</view>
<view class="block">
<button class="btn-danger" @click="submit"></button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
content: ''
}
},
methods: {
submit() {
if (!this.content) {
return uni.showToast({
title: '请填写内容',
icon: 'error'
})
}
}
}
}
</script>
<style>
.form {
padding: 20rpx;
margin-top: 150rpx;
}
::v-deep uni-textarea {
border: 1px solid #ddd;
width: 100%;
box-sizing: border-box;
padding: 10rpx;
min-height: 400rpx;
}
.block {
padding: 20rpx;
margin-top: 40rpx;
}
.block .btn-danger {
width: 100%;
}
</style>

View File

@ -1,49 +1,143 @@
<template>
<view class="content">
<image class="logo" src="/static/logo.png"></image>
<view>
<text class="title">{{title}}</text>
<view class="page">
<swiper class="swiper" autoplay circular>
<swiper-item v-for="item in banners" :key="item.id">
<image :src="item.image" style="height: 300rpx;width: 100%;" />
</swiper-item>
</swiper>
<view class="app-content">
<view class="item" @click="navigateArticle">
<view class="icon">
<image src="../../static/images/form-active.png" />
</view>
<view class="title">共性指标</view>
</view>
<view class="item" @click="navigateArticle">
<view class="icon">
<image src="../../static/images/form-active.png" />
</view>
<view class="title">进阶指标</view>
</view>
<view class="item" @click="feedback">
<view class="icon">
<image src="../../static/images/form-active.png" />
</view>
<view class="title">书记信箱</view>
</view>
</view>
<view class="rank">
<view class="header">
<text class="title">五星党员</text>
<text class="tool" @click="userRank"></text>
</view>
<view class="body">
<rank :header="header" :list="list" />
</view>
</view>
<view class="rank">
<view class="header">
<text class="title">五星党员</text>
<text class="tool">更多</text>
</view>
<view class="body">
<rank :header="header" :list="list" />
</view>
</view>
</view>
</template>
<script>
import Rank from '../../components/rank.vue'
export default {
components: { Rank },
data() {
return {
title: 'Hello'
header: ['排名', '党员', '得分'],
list: [
{ name: '党员1', score: 100 }
],
banners: [
{id: 1, 'image': 'https://via.placeholder.com/800x300.png?text=1'},
{id: 2, 'image': 'https://via.placeholder.com/800x300.png?text=2'},
{id: 3, 'image': 'https://via.placeholder.com/800x300.png?text=3'},
]
}
},
onLoad() {
},
methods: {
userRank() {
uni.navigateTo({
url: '/pages/score/user-rank'
})
},
navigateArticle() {
uni.navigateTo({
url: '/pages/article/detail'
})
},
feedback() {
uni.navigateTo({
url: '/pages/feedback/add'
})
}
}
}
</script>
<style>
.content {
.swiper {
height: 300rpx;
}
.app-content {
background-color: white;
border-radius: 20rpx;
padding: 10px;
margin: 10px;
display: flex;
justify-content: space-between;
align-items: center;
}
.app-content .item {
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.logo {
height: 200rpx;
width: 200rpx;
margin: 200rpx auto 50rpx auto;
.app-content .title {
text-align: center;
margin-top: 15rpx;
}
.text-area {
display: flex;
justify-content: center;
.app-content .icon {
width: 90rpx;
height: 90rpx;
}
.title {
.app-content .icon ::v-deep image {
width: 90rpx;
height: 90rpx;
}
.rank {
background-color: white;
padding: 10px;
margin: 10px;
box-sizing: border-box;
border-radius: 20rpx;
}
.rank .header {
text-align: center;
font-weight: bold;
}
.rank .title {
font-size: 36rpx;
color: #8f8f94;
}
.rank .tool {
float: right;
margin-right: 30rpx;
}
.rank .body {
padding-top: 15rpx;
}
</style>

View File

@ -0,0 +1,89 @@
<template>
<view class="page">
<swiper class="swiper" autoplay circular>
<swiper-item v-for="item in banners" :key="item.id">
<image :src="item.image" style="height: 300rpx;width: 100%;" />
</swiper-item>
</swiper>
<view class="app">
<view class="row">
<view v-for="(item, index) in categories" :key="item.id" v-if="index < 2" class="item" @click="navigateTo">
<view class="icon">
<image :src="item.image" />
</view>
<view class="title">{{ item.name }}</view>
</view>
</view>
<view class="row">
<view v-for="(item, index) in categories" :key="item.id" v-if="index >= 2" class="item">
<view class="icon">
<image :src="item.image" />
</view>
<view class="title">{{ item.name }}</view>
</view>
</view>
</view>
<view class="article">
<rich-text :nodes="content" />
</view>
</view>
</template>
<script>
export default {
data() {
return {
banners: [
{id: 1, 'image': 'https://via.placeholder.com/800x300.png?text=1'},
{id: 2, 'image': 'https://via.placeholder.com/800x300.png?text=2'},
{id: 3, 'image': 'https://via.placeholder.com/800x300.png?text=3'},
],
categories: [
{id: 1, name: '政治忠诚', image: 'https://via.placeholder.com/100x100.png?text=1'},
{id: 2, name: '政治定力', image: 'https://via.placeholder.com/100x100.png?text=1'},
{id: 3, name: '政治担当', image: 'https://via.placeholder.com/100x100.png?text=1'},
{id: 4, name: '政治能力', image: 'https://via.placeholder.com/100x100.png?text=1'},
{id: 5, name: '政治自律', image: 'https://via.placeholder.com/100x100.png?text=1'},
],
content: '<h1>富文本</h1><p>哈哈哈</p><img src="https://via.placeholder.com/100x100.png"/><p><b>哈哈哈</b></p>'
}
},
methods: {
navigateTo() {
uni.navigateTo({
url: '/pages/score/form'
})
}
}
}
</script>
<style>
.swiper {
height: 300rpx;
}
.app .row {
margin: 20rpx;
padding: 20rpx 10rpx;
border-radius: 20rpx;
background-color: white;
display: flex;
justify-content: center;
}
.app .item {
text-align: center;
margin: 0 10rpx;
}
.app .icon ::v-deep uni-image {
border-radius: 20rpx;
width: 200rpx;
height: 200rpx;
}
.article {
margin: 20rpx;
padding: 20rpx 10rpx;
border-radius: 20rpx;
background-color: white;
}
</style>

View File

@ -0,0 +1,134 @@
<template>
<view class="page">
<view class="form">
<u--form :labelStyle="{color:'#000000',fontSize:'34rpx'}" labelWidth="80">
<u-form-item label="主题" borderBottom required>
<u--input
v-model="title"
name="title"
placeholder="请填写主题"
fontSize="17"
color="#000000"
inputAlign="right"
border="none"
/>
</u-form-item>
<u-form-item label="内容" labelPosition="top" borderBottom>
<textarea v-model="content" name="content" auto-height placeholder="请填写内容" />
</u-form-item>
<u-form-item label="图片(最多5张)" labelPosition="top" labelWidth="120" borderBottom>
<view class="item">
<u-upload
:fileList="images"
uploadIcon="photo"
multiple
maxCount="5"
previewFullImage
@afterRead="uploadImage"
@delete="deleteImage"
/>
</view>
</u-form-item>
<u-form-item label="附件" labelPosition="top" borderBottom>
<view class="item">
<u-upload
:fileList="files"
accept="file"
uploadIcon="plus"
maxCount="1"
@afterRead="uploadFile"
@delete="deleteFile"
/>
</view>
</u-form-item>
<u-form-item>
<button class="btn-danger" @click="submit"></button>
</u-form-item>
</u--form>
</view>
</view>
</template>
<script>
export default {
data() {
return {
title: '',
content: '',
images: [],
files: []
}
},
methods: {
deleteImage(event) {
this.images.splice(event.index, 1)
},
async uploadImage(event) {
let lists = [].concat(event.file)
let fileListLen = this.images.length
lists.map((item) => {
this.images.push({
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url)
let item = this.images[fileListLen]
this.images.splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
uploadFile(event) {
this.files.push(event.file)
},
deleteFile(event) {
this.files.splice(event.index, 1)
},
uploadFilePromise() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('https://via.placeholder.com/100x100.png')
}, 1000)
})
},
submit() {
if (!this.title) {
return uni.showToast({
title: '主题必填',
icon: 'error'
})
}
}
}
}
</script>
<style>
.page {
padding-top: 20rpx;
}
.form {
background-color: white;
padding: 0 30rpx;
}
.item {
margin-top: 30rpx;
}
::v-deep uni-textarea {
min-height: 110rpx;
background-color: #F5F5F5;
width: 100%;
margin-top: 20rpx;
padding: 10rpx 15rpx;
}
.btn-danger {
width: 100%;
}
</style>

View File

@ -0,0 +1,51 @@
<template>
<view class="page">
<view class="title">
<view class="name1">
<picker mode="selector" :range="dates" @change="changeDate">{{ date }}</picker>
</view>
</view>
<view class="rank">
<rank :header="header" :list="list" />
</view>
</view>
</template>
<script>
import Rank from '../../components/rank.vue'
export default {
components: { Rank },
data() {
return {
header: ['排名', '党员', '得分'],
list: [
{ name: '党员1', score: 100 },
{ name: '党员2', score: 200 },
],
date: '请选择期数',
dates: ['2023-1', '2023-2', '2023-3']
}
},
methods: {
changeDate(e) {
this.date = this.dates[e.detail.value]
}
}
}
</script>
<style>
.title {
background-color: white;
display: flex;
padding: 20rpx;
justify-content: space-around;
}
.rank {
background-color: white;
margin-top: 20rpx;
padding: 20rpx;
border-radius: 10rpx;
box-sizing: border-box;
}
</style>

View File

@ -0,0 +1,210 @@
<template>
<view class="page">
<view class="profile">
<view class="bg">
<view class="bg1"></view>
<view class="bg2"></view>
</view>
<view class="box">
<view class="title">
<view class="left">
<view class="avatar">
<image src="https://via.placeholder.com/64x64.png">
</view>
<view class="name">
<view class="name1">党员1</view>
<view class="name2">党支部1</view>
</view>
</view>
<view class="icon flex">
<image src="../../static/images/arrow-right.png" style="width: 20rpx; height: 20rpx;" />
</view>
</view>
<view class="list">
<view class="item">
<view class="number">10</view>
<view class="text">当前得星</view>
</view>
<view class="border"></view>
<view class="item">
<view class="number">10</view>
<view class="text">总排名</view>
</view>
<view class="border"></view>
<view class="item">
<view class="number">10</view>
<view class="text">累计得星</view>
</view>
</view>
</view>
</view>
<view class="redar">
<view id="echart" style="height: 250px;width: 330px;"></view>
</view>
<view class="options">
<view class="item">
<view class="flex">
<view class="icon">
<image src="https://via.placeholder.com/64x64.png">
</view>
<view class="title">我的填报</view>
</view>
<view class="badge">
<image src="../../static/images/arrow-right.png" style="width: 20rpx; height: 20rpx;" />
</view>
</view>
</view>
</view>
</template>
<script>
import * as echarts from 'echarts';
export default {
data() {
return {
}
},
onLoad() {
this.$nextTick(() => {
this.init()
})
},
methods: {
init() {
var option = {
radar: {
indicator: [
{ name: '政治忠诚', max: 50 },
{ name: '政治定力', max: 50 },
{ name: '政治担当', max: 50 },
{ name: '政治能力', max: 50 },
{ name: '政治自律', max: 50 },
]
},
series: [
{
type: 'radar',
areaStyle: {
opacity: 0.9
},
data: [
{
value: [33, 14, 28, 26, 42],
}
]
}
]
};
var chartElement = echarts.init(document.getElementById('echart'));
chartElement.setOption(option)
}
}
}
</script>
<style>
.profile {
position: relative;
}
.profile .avatar {
display: inline-block;
}
.profile .left {
display: flex;
align-items: center;
}
.profile .name {
margin-left: 20rpx;
}
.profile .avatar ::v-deep uni-image {
border-radius: 100%;
width: 120rpx;
height: 120rpx;
}
.profile .bg {
height: 400rpx;
}
.profile .bg1 {
width: 100%;
height: 200rpx;
background-color: #0da0f5;
}
.profile .bg2 {
width: 100%;
height: 200rpx;
background-color: white;
}
.profile .box {
background-color: white;
border: 1px solid #dddddd;
border-radius: 20rpx;
position: absolute;
top: 10%;
left: 3%;
width: 700rpx;
padding: 30rpx;
box-sizing: border-box;
}
.profile .title {
display: flex;
justify-content: space-between;
}
.profile .name1 {
font-weight: bold;
font-size: 38rpx;
}
.profile .name2 {
margin-top: 10rpx;
font-size: 25rpx;
color: gray;
}
.profile .list {
display: flex;
justify-content: space-between;
margin-top: 30rpx;
padding: 0 30rpx;
text-align: center;
}
.list .border {
width: 1px;
border-left: 1px solid #cbcbcb;
}
.list .number {
font-weight: bold;
font-size: 38rpx;
}
.list .text {
margin-top: 10rpx;
font-size: 25rpx;
color: gray;
}
.redar {
background-color: white;
margin: 10rpx auto;
padding: 10rpx 0;
display: flex;
justify-content: center;
align-items: center;
}
.options {
margin-top: 10rpx;
}
.options .item {
padding: 10rpx;
background-color: white;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #dddddd;
}
.options .title {
margin-left: 15rpx;
}
.options .icon ::v-deep uni-image {
border-radius: 10rpx;
width: 60rpx;
height: 60rpx;
}
</style>

View File

@ -0,0 +1,18 @@
.page {
background-color: #efefef;
/* position: absolute;
width: 100%;
height: 100%;
box-sizing: border-box; */
}
.flex {
display: flex;
justify-content: space-between;
align-items: center;
}
.btn-danger {
color: white;
background-color: #C20000;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -5,7 +5,7 @@
* 使scss使 import 便App
*
*/
@import 'uview-ui/theme.scss';
/**
* App使
*

3
vue.config.js 100644
View File

@ -0,0 +1,3 @@
module.exports = {
transpileDependencies: ['uview-ui'],
}