From 0019102482b2f41d796d6c96b170104b33eee579 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B2=B3=E9=B9=8F=E9=BE=99?= <1547476325@qq.com>
Date: Fri, 18 Apr 2025 14:39:01 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.development | 5 +
.env.production | 6 +
.eslintignore | 3 +
.eslintrc.cjs | 146 +++++++++++++
.gitignore | 30 +++
.husky/pre-commit | 4 +
.prettierignore | 8 +
.prettierrc.cjs | 36 ++++
auto/addPage.ts | 85 ++++++++
auto/preinstall.js | 4 +
index.html | 23 ++
package.json | 100 +++++++++
src/App.vue | 29 +++
src/api/common.ts | 25 +++
src/api/login.ts | 39 ++++
src/api/user.ts | 61 ++++++
src/api/votingElection.ts | 44 ++++
src/config/index.ts | 13 ++
src/main.ts | 16 ++
src/manifest.json | 131 ++++++++++++
src/pages.json | 85 ++++++++
src/pages/index/index.vue | 283 ++++++++++++++++++++++++
src/pages/learningCenter/index.vue | 27 +++
src/pages/login/login.vue | 111 ++++++++++
src/pages/memberCenter/index.vue | 203 ++++++++++++++++++
src/pages/mine/index.vue | 331 +++++++++++++++++++++++++++++
src/permission.ts | 51 +++++
src/share.vue | 257 ++++++++++++++++++++++
src/static/img/Group.png | Bin 0 -> 4474 bytes
src/static/logo.png | Bin 0 -> 112107 bytes
src/static/tabbar/grzx.png | Bin 0 -> 1091 bytes
src/static/tabbar/grzx_select.png | Bin 0 -> 1196 bytes
src/static/tabbar/hyzx.png | Bin 0 -> 1044 bytes
src/static/tabbar/hyzx_select.png | Bin 0 -> 1032 bytes
src/static/tabbar/index.png | Bin 0 -> 923 bytes
src/static/tabbar/index_select.png | Bin 0 -> 750 bytes
src/static/tabbar/xxzx.png | Bin 0 -> 918 bytes
src/static/tabbar/xxzx_select.png | Bin 0 -> 1005 bytes
src/store/index.ts | 10 +
src/store/user.ts | 115 ++++++++++
src/types/auto-imports.d.ts | 180 ++++++++++++++++
src/types/env.d.ts | 13 ++
src/types/global.d.ts | 29 +++
src/uni.scss | 118 ++++++++++
src/utils/common.ts | 58 +++++
src/utils/http.ts | 61 ++++++
src/utils/rules.ts | 6 +
tsconfig.json | 29 +++
vite.config.ts | 45 ++++
49 files changed, 2820 insertions(+)
create mode 100644 .env.development
create mode 100644 .env.production
create mode 100644 .eslintignore
create mode 100644 .eslintrc.cjs
create mode 100644 .gitignore
create mode 100644 .husky/pre-commit
create mode 100644 .prettierignore
create mode 100644 .prettierrc.cjs
create mode 100644 auto/addPage.ts
create mode 100644 auto/preinstall.js
create mode 100644 index.html
create mode 100644 package.json
create mode 100644 src/App.vue
create mode 100644 src/api/common.ts
create mode 100644 src/api/login.ts
create mode 100644 src/api/user.ts
create mode 100644 src/api/votingElection.ts
create mode 100644 src/config/index.ts
create mode 100644 src/main.ts
create mode 100644 src/manifest.json
create mode 100644 src/pages.json
create mode 100644 src/pages/index/index.vue
create mode 100644 src/pages/learningCenter/index.vue
create mode 100644 src/pages/login/login.vue
create mode 100644 src/pages/memberCenter/index.vue
create mode 100644 src/pages/mine/index.vue
create mode 100644 src/permission.ts
create mode 100644 src/share.vue
create mode 100644 src/static/img/Group.png
create mode 100644 src/static/logo.png
create mode 100644 src/static/tabbar/grzx.png
create mode 100644 src/static/tabbar/grzx_select.png
create mode 100644 src/static/tabbar/hyzx.png
create mode 100644 src/static/tabbar/hyzx_select.png
create mode 100644 src/static/tabbar/index.png
create mode 100644 src/static/tabbar/index_select.png
create mode 100644 src/static/tabbar/xxzx.png
create mode 100644 src/static/tabbar/xxzx_select.png
create mode 100644 src/store/index.ts
create mode 100644 src/store/user.ts
create mode 100644 src/types/auto-imports.d.ts
create mode 100644 src/types/env.d.ts
create mode 100644 src/types/global.d.ts
create mode 100644 src/uni.scss
create mode 100644 src/utils/common.ts
create mode 100644 src/utils/http.ts
create mode 100644 src/utils/rules.ts
create mode 100644 tsconfig.json
create mode 100644 vite.config.ts
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..4ed7ec7
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,5 @@
+ENV='development'
+# base api
+VITE_APP_BASE_URL = 'https://evote.truescloud.com'
+VITE_APP_BASE_PRE = '/dev-api'
+VITE_APP_BASE_NAME = 'POS'
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000..6ca60a8
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,6 @@
+ENV='production'
+# base api
+VITE_APP_BASE_URL = 'http://pos-api.lingji.vip'
+VITE_APP_BASE_PRE = 'http://pos-api.lingji.vip'
+VITE_APP_BASE_NAME = 'POS'
+
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..0ea3957
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,3 @@
+dist
+node_modules
+uni_modules
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000..f44624e
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,146 @@
+// @see https://eslint.bootcss.com/docs/rules/
+
+module.exports = {
+ env: {
+ browser: true,
+ es2021: true,
+ node: true
+ },
+ globals: {
+ NodeJS: 'readonly'
+ },
+ /* 指定如何解析语法 */
+ parser: 'vue-eslint-parser',
+ /** 优先级低于 parse 的语法解析配置 */
+ parserOptions: {
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ parser: '@typescript-eslint/parser',
+ jsxPragma: 'React',
+ ecmaFeatures: {
+ jsx: true
+ }
+ },
+ /* 继承已有的规则 */
+ extends: ['eslint:recommended', 'plugin:vue/vue3-essential', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended'],
+ plugins: ['vue', '@typescript-eslint'],
+ overrides: [
+ {
+ files: ['*.ts', '*.tsx', '*.vue'],
+ rules: {
+ 'no-undef': 0
+ }
+ }
+ ],
+ /*
+ * 'off' 或 0 ==> 关闭规则
+ * 'warn' 或 1 ==> 打开的规则作为警告(不影响代码执行)
+ * 'error' 或 2 ==> 规则作为一个错误(代码不能执行,界面报错)
+ */
+ rules: {
+ // typeScript (https://typescript-eslint.io/rules)
+ '@typescript-eslint/no-unused-vars': [2, { argsIgnorePattern: '^_' }], // 禁止定义未使用的变量
+ '@typescript-eslint/prefer-ts-expect-error': 2, // 禁止使用 @ts-ignore
+ '@typescript-eslint/no-explicit-any': 0, // 禁止使用 any 类型
+ '@typescript-eslint/no-non-null-assertion': 0,
+ '@typescript-eslint/no-namespace': 0, // 禁止使用自定义 TypeScript 模块和命名空间。
+ '@typescript-eslint/semi': 0,
+ 'no-prototype-builtins': 0, // 可以使用obj.hasOwnProperty()
+ '@typescript-eslint/no-var-requires': 0, // 不允许在import 中使用require
+ '@typescript-eslint/no-empty-function': 2, // 关闭空方法检查
+ // eslint-plugin-vue (https://eslint.vuejs.org/rules/)
+ 'vue/multi-word-component-names': 0, // 要求组件名称始终为 “-” 链接的单词
+ 'vue/script-setup-uses-vars': 2, // 防止
+
+
+
+ ${title}
+
+
+`;
+ createStream.write(template);
+ createStream.end();
+ console.log('\x1B[34m', `pages ${name} created successfully.`);
+ }
+ console.log('\x1B[32m%s\x1B[39m', '\n All files are created successfully.\n');
+}
+
+addPages(newPages);
\ No newline at end of file
diff --git a/auto/preinstall.js b/auto/preinstall.js
new file mode 100644
index 0000000..01f63a5
--- /dev/null
+++ b/auto/preinstall.js
@@ -0,0 +1,4 @@
+if (!/pnpm/.test(process.env.npm_execpath || '')) {
+ console.warn(`\u001b[33mThis repository must using pnpm as the package manager ` + ` for scripts to work properly.\u001b[39m\n`)
+ process.exit(1)
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..b05e747
--- /dev/null
+++ b/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..350e978
--- /dev/null
+++ b/package.json
@@ -0,0 +1,100 @@
+{
+ "name": "uni-preset-vue",
+ "version": "0.0.0",
+ "scripts": {
+ "dev:app": "uni -p app",
+ "dev:app-android": "uni -p app-android",
+ "dev:app-ios": "uni -p app-ios",
+ "dev:custom": "uni -p",
+ "dev:h5": "uni",
+ "dev:h5:prop": "uni --mode=production",
+ "dev:h5:ssr": "uni --ssr",
+ "dev:mp-alipay": "uni -p mp-alipay",
+ "dev:mp-baidu": "uni -p mp-baidu",
+ "dev:mp-jd": "uni -p mp-jd",
+ "dev:mp-kuaishou": "uni -p mp-kuaishou",
+ "dev:mp-lark": "uni -p mp-lark",
+ "dev:mp-qq": "uni -p mp-qq",
+ "dev:mp-toutiao": "uni -p mp-toutiao",
+ "dev:mp-weixin": "uni -p mp-weixin",
+ "dev:quickapp-webview": "uni -p quickapp-webview",
+ "dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
+ "dev:quickapp-webview-union": "uni -p quickapp-webview-union",
+ "build:app": "uni build -p app",
+ "build:app-android": "uni build -p app-android",
+ "build:app-ios": "uni build -p app-ios",
+ "build:custom": "uni build -p",
+ "build:h5": "uni build",
+ "build:h5:ssr": "uni build --ssr",
+ "build:mp-alipay": "uni build -p mp-alipay",
+ "build:mp-baidu": "uni build -p mp-baidu",
+ "build:mp-jd": "uni build -p mp-jd",
+ "build:mp-kuaishou": "uni build -p mp-kuaishou",
+ "build:mp-lark": "uni build -p mp-lark",
+ "build:mp-qq": "uni build -p mp-qq",
+ "build:mp-toutiao": "uni build -p mp-toutiao",
+ "build:mp-weixin": "uni build -p mp-weixin",
+ "build:quickapp-webview": "uni build -p quickapp-webview",
+ "build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
+ "build:quickapp-webview-union": "uni build -p quickapp-webview-union",
+ "type-check": "vue-tsc --noEmit",
+ "add": "node ./auto/addPage.ts",
+ "preinstall": "node ./auto/preinstall.js",
+ "lint": "eslint --ext .ts,.js,.vue ./src",
+ "fix": "eslint --fix --ext .ts,.js,.vue ./src",
+ "prepare": "husky install",
+ "rm": "rm -rf node_modules package-lock.json pnpm-lock.yaml && pnpm install"
+ },
+ "dependencies": {
+ "@dcloudio/uni-app": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-app-plus": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-components": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-h5": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-alipay": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-baidu": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-jd": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-lark": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-qq": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-mp-xhs": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3081220230802001",
+ "@qiun/ucharts": "2.5.0-20230101",
+ "animate.css": "^4.1.1",
+ "echarts": "^5.5.0",
+ "pinia": "2.0.36",
+ "sass": "^1.63.2",
+ "uview-plus": "^3.4.9",
+ "vue": "^3.2.45",
+ "vue-i18n": "^9.1.9"
+ },
+ "devDependencies": {
+ "@babel/eslint-parser": "^7.22.9",
+ "@dcloudio/types": "^3.3.2",
+ "@dcloudio/uni-automator": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-cli-shared": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/uni-stacktracey": "3.0.0-alpha-3081220230802001",
+ "@dcloudio/vite-plugin-uni": "3.0.0-alpha-3081220230802001",
+ "@typescript-eslint/eslint-plugin": "^6.2.1",
+ "@typescript-eslint/parser": "^6.2.1",
+ "@vue/tsconfig": "^0.1.3",
+ "@vueuse/core": "^10.3.0",
+ "eslint": "^8.46.0",
+ "eslint-config-prettier": "^8.9.0",
+ "eslint-plugin-import": "^2.28.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-prettier": "^5.0.0",
+ "eslint-plugin-vue": "^9.16.1",
+ "feng-uniapp-exploit": "^1.0.2",
+ "husky": "^8.0.0",
+ "pinia-plugin-unistorage": "^0.0.17",
+ "prettier": "^3.0.0",
+ "sass-loader": "^10.4.1",
+ "typescript": "^4.9.4",
+ "unplugin-auto-import": "^0.16.6",
+ "unplugin-vue-components": "^0.25.1",
+ "vite": "4.0.3",
+ "vue-tsc": "^1.0.24"
+ }
+}
\ No newline at end of file
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..b95142e
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/src/api/common.ts b/src/api/common.ts
new file mode 100644
index 0000000..af0397f
--- /dev/null
+++ b/src/api/common.ts
@@ -0,0 +1,25 @@
+import { request } from '@/utils/http'
+
+export function getVoteList(data: pageType) {
+ return request.http({
+ url: '/api/vote_list',
+ method: 'GET',
+ data
+ })
+}
+
+export function getVoteDetail(data: { id: number }) {
+ return request.http({
+ url: '/api/vote_result_detail',
+ method: 'GET',
+ data
+ })
+}
+
+export function getVoteResult(data: pageType) {
+ return request.http({
+ url: '/api/vote_result',
+ method: 'GET',
+ data
+ })
+}
diff --git a/src/api/login.ts b/src/api/login.ts
new file mode 100644
index 0000000..a98c560
--- /dev/null
+++ b/src/api/login.ts
@@ -0,0 +1,39 @@
+import { request } from '@/utils/http'
+
+export function getOpenid(data: { code: string }) {
+ return request.http({
+ url: '/api/openid',
+ data
+ })
+}
+
+export function getMobile(data: { code: string; openid: string }) {
+ return request.http({
+ url: '/api/mobile',
+ data
+ })
+}
+
+export function getAdminPhone() {
+ return request.http({
+ url: '/api/admin_mobile',
+ method: 'GET'
+ })
+}
+//用户签到
+export function getSign(data: { meetId: string; openid: string }) {
+ return request.http({
+ url: '/api/sign',
+ method: 'GET',
+ data
+ })
+}
+
+//扫码时手机号获取用户信息
+export function getmemberMobileGet(data: { meetId: string; openid: string; mobile: string }) {
+ return request.http({
+ url: '/api/member_mobile_get',
+ method: 'GET',
+ data
+ })
+}
\ No newline at end of file
diff --git a/src/api/user.ts b/src/api/user.ts
new file mode 100644
index 0000000..81ce8ce
--- /dev/null
+++ b/src/api/user.ts
@@ -0,0 +1,61 @@
+import { request } from '@/utils/http'
+
+export interface listType {
+ name: string
+ age: number
+ sex: number
+ nation: string
+ mobile: string
+ position: string
+ work_unit: string
+}
+
+export interface dateListtype extends listType {
+ id: number
+}
+
+export function infoForOpenid(data: { openid: string; mobile: string ; meetId: string }) {
+ return request.http({
+ url: '/api/member_mobile_get',
+ method: 'GET',
+ data
+ })
+}
+
+// 手机号获取用户信息
+export function getMember_mobile(data: any) {
+ return request.http({
+ url: '/api/member_mobile',
+ method: 'GET',
+ data
+ })
+}
+
+export function list(data: { name: string, meetId: string }) {
+ return request.http({
+ url: '/api/member_name',
+ method: 'GET',
+ data
+ })
+}
+
+export function update(data: { [n: string]: string }, openid: string) {
+ return request.http({
+ url: '/api/member_update',
+ data: Object.assign(data, { openid })
+ })
+}
+
+export function bind(data: { id: number; openid: string }) {
+ return request.http({
+ url: '/api/name_sub',
+ data
+ })
+}
+
+export function add(data: listType) {
+ return request.http({
+ url: '/api/member_add',
+ data
+ })
+}
diff --git a/src/api/votingElection.ts b/src/api/votingElection.ts
new file mode 100644
index 0000000..9fb86e6
--- /dev/null
+++ b/src/api/votingElection.ts
@@ -0,0 +1,44 @@
+import { request } from '@/utils/http'
+
+// 获取投票选举(正在进行)
+export function getVoteprogress(id: string) {
+ return request.http({
+ url: '/api/vote_progress?meetId='+ id,
+ method: 'GET'
+ })
+}
+
+//用户投票
+export function voteMember(data: any) {
+ return request.http({
+ url: '/api/vote_member',
+ data
+ })
+}
+
+// 获取我的选举
+export function getMyvote(data: any) {
+ return request.http({
+ url: '/api/my_vote',
+ method: 'GET',
+ data
+ })
+}
+
+// 手机号获取用户信息
+export function getMember_mobile(data: any) {
+ return request.http({
+ url: '/api/member_mobile',
+ method: 'GET',
+ data
+ })
+}
+
+// 判断用户是否签到
+export function getIs_sign(data: any) {
+ return request.http({
+ url: '/api/is_sign',
+ method: 'GET',
+ data
+ })
+}
diff --git a/src/config/index.ts b/src/config/index.ts
new file mode 100644
index 0000000..3b11541
--- /dev/null
+++ b/src/config/index.ts
@@ -0,0 +1,13 @@
+export const Prefix = 'Election_'
+
+export const getPrefixName = (name: string) => {
+ return Prefix + name
+}
+
+export function getAuthorization() {
+ return uni.getStorageSync(getPrefixName('user'))
+}
+
+export function removeAuthorization() {
+ return uni.removeStorageSync(getPrefixName('user'))
+}
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..8d202a8
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,16 @@
+import { createSSRApp } from 'vue'
+import App from './App.vue'
+
+import uviewPlus from 'uview-plus'
+import fengUniappExploit from 'feng-uniapp-exploit'
+
+import store from './store'
+
+export function createApp() {
+ const app = createSSRApp(App)
+ app.use(uviewPlus)
+ app.use(fengUniappExploit)
+ app.use(store)
+
+ return { app }
+}
diff --git a/src/manifest.json b/src/manifest.json
new file mode 100644
index 0000000..39cca9f
--- /dev/null
+++ b/src/manifest.json
@@ -0,0 +1,131 @@
+{
+ "name" : "惠企通",
+ "appid" : "__UNI__4CC99EE",
+ "description" : "v3+ts+uniapp模版",
+ "versionName" : "1.0.68",
+ "versionCode" : 168,
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "compatible" : {
+ "ignoreVersion" : true
+ },
+ /* 模块配置 */
+ "modules" : {
+ "Barcode" : {},
+ "Camera" : {},
+ "VideoPlayer" : {},
+ "Share" : {},
+ "Geolocation" : {},
+ "Maps" : {}
+ },
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "minSdkVersion" : 21
+ },
+ /* ios打包配置 */
+ "ios" : {
+ "dSYMs" : false
+ },
+ /* SDK配置 */
+ "sdkConfigs" : {
+ "ad" : {},
+ "share" : {
+ "weixin" : {
+ "appid" : "wx5d1a07b75bd48225",
+ "UniversalLinks" : ""
+ }
+ },
+ "geolocation" : {
+ "amap" : {
+ "name" : "amap_18648278829CcsBXVUm1",
+ "__platform__" : [ "ios", "android" ],
+ "appkey_ios" : "37180416cb95db05dc9639e616655a7a",
+ "appkey_android" : "37180416cb95db05dc9639e616655a7a"
+ }
+ },
+ "maps" : {
+ "amap" : {
+ "name" : "amap_18648278829CcsBXVUm1",
+ "appkey_ios" : "37180416cb95db05dc9639e616655a7a",
+ "appkey_android" : "37180416cb95db05dc9639e616655a7a"
+ }
+ }
+ },
+ "icons" : {
+ "android" : {
+ "hdpi" : "src/static/logo.png",
+ "xhdpi" : "src/static/logo.png",
+ "xxhdpi" : "src/static/logo.png",
+ "xxxhdpi" : "src/static/logo.png"
+ }
+ },
+ "splashscreen" : {
+ "iosStyle" : "common",
+ "androidStyle" : "default",
+ "android" : {
+ "hdpi" : "",
+ "xhdpi" : "",
+ "xxhdpi" : ""
+ },
+ "ios" : {
+ "storyboard" : "C:/Users/Lenovo/Desktop/CustomStoryboard.zip"
+ }
+ }
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "wx4f9dae5cc37dd9f4",
+ "setting" : {
+ "urlCheck" : false,
+ "es6" : true,
+ "postcss" : false,
+ "minified" : true
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "3"
+}
diff --git a/src/pages.json b/src/pages.json
new file mode 100644
index 0000000..d6905dc
--- /dev/null
+++ b/src/pages.json
@@ -0,0 +1,85 @@
+{
+ "easycom": {
+ "autoscan": true,
+ "custom": {
+ "^ex-(.*)": "feng-uniapp-exploit/components/ex-$1/ex-$1.vue",
+ "^u-(.*)": "uview-plus/components/u-$1/u-$1.vue"
+ }
+ },
+ "pages": [
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "首页",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/memberCenter/index",
+ "style": {
+ "navigationBarTitleText": "会员中心",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/learningCenter/index",
+ "style": {
+ "navigationBarTitleText": "学习中心",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "name": "user",
+ "path": "pages/mine/index",
+ "style": {
+ "navigationBarTitleText": "个人中心",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/login/login",
+ "style": {
+ "navigationBarTitleText": "登录",
+ "enablePullDownRefresh": false,
+ "navigationStyle": "custom"
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "white",
+ "navigationBarBackgroundColor": "#F1F3F9",
+ "backgroundColor": "#F8F8F8"
+ },
+ "tabBar": {
+ "color": "#9CA3AF",
+ "selectedColor": "#2563EB",
+ "borderStyle": "white",
+ "backgroundColor": "#FFFFFF",
+ "list": [
+ {
+ "pagePath": "pages/index/index",
+ "iconPath": "static/tabbar/index.png",
+ "selectedIconPath": "static/tabbar/index_select.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/memberCenter/index",
+ "iconPath": "static/tabbar/hyzx.png",
+ "selectedIconPath": "static/tabbar/hyzx_select.png",
+ "text": "会员中心"
+ },
+ {
+ "pagePath": "pages/learningCenter/index",
+ "iconPath": "static/tabbar/xxzx.png",
+ "selectedIconPath": "static/tabbar/xxzx_select.png",
+ "text": "学习中心"
+ },
+ {
+ "pagePath": "pages/mine/index",
+ "iconPath": "static/tabbar/grzx.png",
+ "selectedIconPath": "static/tabbar/grzx_select.png",
+ "text": "个人中心"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue
new file mode 100644
index 0000000..49dda52
--- /dev/null
+++ b/src/pages/index/index.vue
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+ {{ item.vote_title }}
+
+ {{ item.status == 1 ? '未开始' : item.status == 2 ? '进行中' : '已结束' }}
+
+
+
+
+
+
+
+
+
+
+ {{ candidate.name }}
+ {{ candidate.position }}
+
+
+
+ 我的选择:
+
+ {{ choiceText(candidate.vote_result) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/learningCenter/index.vue b/src/pages/learningCenter/index.vue
new file mode 100644
index 0000000..90d1b5f
--- /dev/null
+++ b/src/pages/learningCenter/index.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/login/login.vue b/src/pages/login/login.vue
new file mode 100644
index 0000000..36861da
--- /dev/null
+++ b/src/pages/login/login.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/memberCenter/index.vue b/src/pages/memberCenter/index.vue
new file mode 100644
index 0000000..0539b63
--- /dev/null
+++ b/src/pages/memberCenter/index.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+
+ {{ row.title }}
+ 进行中
+ 未开始
+ 已结束
+
+ {{ `投票时间:${row.start_time} 至 ${row.end_time}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ v.name }}
+ 当选
+ 未当选
+
+ 得票数:{{ v.agree_num }}
+
+
+
+
+ {{ v.agree_percent }}%
+
+
+
+
+ 查看投票详情
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/mine/index.vue b/src/pages/mine/index.vue
new file mode 100644
index 0000000..6228e2f
--- /dev/null
+++ b/src/pages/mine/index.vue
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+ 姓名
+
+ 搜索
+
+
+
+
+
+ 姓名
+ {{ row.name }}
+
+
+ 电话
+ {{ row.mobile }}
+
+
+ 工作单位
+ {{ row.work_unit }}
+
+
+
+
+
+ 确认信息
+ 新建信息
+
+
+
+
+
+
+
+ 姓名
+
+ {{ userStore.userInfo.name }}
+
+
+
+ 电话
+
+ {{ userStore.userInfo.mobile }}
+
+
+
+ 性别
+
+ {{ userStore.userInfo.sex === 1 ? '男' : '女' }}
+
+
+
+
+ 民族
+
+ {{ userStore.userInfo.nation }}
+
+
+
+
+ 年龄
+
+ {{ userStore.userInfo.age }}
+
+
+
+
+ 工作单位
+
+ {{ userStore.userInfo.work_unit }}
+
+
+
+
+ 职位
+
+ {{ userStore.userInfo.position }}
+
+
+
+
+
+ * 姓名和电话信息需要管理员修改
+
+ 管理员电话:
+ {{ amdinPhone }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/permission.ts b/src/permission.ts
new file mode 100644
index 0000000..ec90164
--- /dev/null
+++ b/src/permission.ts
@@ -0,0 +1,51 @@
+// import { getAuthorization } from '@/config'
+
+// 白名单
+// const whiteList = ['/agentpages/index/index', '/agentpages/mine/index']
+
+export default async function () {
+ const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab']
+
+ // 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
+ list.forEach((item) => {
+ uni.addInterceptor(item, {
+ invoke(e) {
+ console.log('e', e)
+
+ // 获取要跳转的页面路径(url去掉"?"和"?"后的参数)
+ // const url = e.url.split('?')[0]
+ // const type = url.split('/')[1] || ''
+
+ // let data
+ // if (getAuthorization()) {
+ // data = JSON.parse(getAuthorization())
+ // } else {
+ // data = { userInfo: { is_real: 0 } }
+ // }
+
+ // // 判断当前窗口是白名单,如果是则不重定向路由
+ // if (type === 'agentpages' && !whiteList.includes(url) && !data.userInfo.is_real) {
+ // uni.showModal({
+ // title: '提示',
+ // content: '请先实名认证',
+ // showCancel: true,
+ // success({ confirm }) {
+ // if (confirm) {
+ // uni.navigateTo({
+ // url: '/pages/mine/authentication'
+ // })
+ // }
+ // }
+ // })
+ // return false
+ // }
+
+ return e
+ },
+ fail(err) {
+ // 失败回调拦截
+ console.log(err)
+ }
+ })
+ })
+}
diff --git a/src/share.vue b/src/share.vue
new file mode 100644
index 0000000..49c7feb
--- /dev/null
+++ b/src/share.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存图片
+
+
+
+
+
+ 确定要保存图片吗?
+
+
+
+
+
diff --git a/src/static/img/Group.png b/src/static/img/Group.png
new file mode 100644
index 0000000000000000000000000000000000000000..848be8ca12b28e4bad1f8504daf33260d62a84d8
GIT binary patch
literal 4474
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
M07*qoM6N<$fqkutxH*M5Aqe6=
zd}#kM2x0^O$_A}w2YvJu}Y~Jnr`Vu1L0&+$s3FuN2%@4se7HlBgg0=Pb!@v
zmrLhzFsfN{Yqt#v0VN&p_Xjt
zf!#W(CC}^BsT-53zt%{NPPNs_zo~q|J$q`CN&B*8vHO|gSt*a_wZeom_9W68vKWMC
z^@3-na_F=ofx&KW)MN4K8bT}-ws {pmiT{(VIg*-8B8e>xW}$2IoqyNy47BLBWO
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