+
+ 我的积分余额: {{ integral }}分
+
{{ name }}
@@ -32,7 +35,23 @@ export default {
return {};
},
computed: {
- ...mapGetters(["avatar", "name"]),
+ ...mapGetters(["avatar", "name", "integral", "roles"]),
+ },
+ methods: {
+ async logout() {
+ this.$confirm("确定注销并退出系统吗?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning",
+ })
+ .then(() => {
+ this.$store.dispatch("LogOut").then(() => {
+ // location.href = "/index";
+ this.$router.replace("/login");
+ });
+ })
+ .catch(() => {});
+ },
},
};
@@ -47,6 +66,7 @@ export default {
justify-content: space-between;
align-items: center;
padding: 0 20px;
+
.system-log {
font-size: 23px;
font-family: "Alibaba-PuHuiTi-Bold";
@@ -55,6 +75,13 @@ export default {
line-height: 60px;
letter-spacing: 2px;
}
+ .my-jifen {
+ font-size: 18px;
+ font-weight: 400;
+ color: #ffffff;
+ font-family: "Alibaba-PuHuiTi-Regular";
+ margin-right: 30px;
+ }
.avatar-container {
.avatar-wrapper {
display: flex;
diff --git a/src/layout/index.vue b/src/layout/index.vue
index ef598fc..b9fc486 100644
--- a/src/layout/index.vue
+++ b/src/layout/index.vue
@@ -107,7 +107,8 @@ export default {
.left-sidebar {
height: 100%;
background: url("~@/assets/images/sidebar.png");
- background-size: cover;
+ background-size: 100% 100%;
+ padding: 20px;
}
.right-page {
background: #f5f5f5;
diff --git a/src/main.js b/src/main.js
index db72ed0..cbd8500 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,76 +1,86 @@
-import Vue from 'vue'
+import Vue from "vue";
-import Cookies from 'js-cookie'
+import Cookies from "js-cookie";
-import Element from 'element-ui'
-import './assets/styles/element-variables.scss'
+import Element from "element-ui";
+import "./assets/styles/element-variables.scss";
import "@/utils/rem.js"; //计算rem基准
import API from "@/api/index.js";
-import '@/assets/styles/index.scss' // global css
-import '@/assets/styles/ruoyi.scss' // ruoyi css
-import App from './App'
-import store from './store'
-import router from './router'
-import directive from './directive' // directive
-import plugins from './plugins' // plugins
-import { download } from '@/utils/request'
+import "@/assets/styles/index.scss"; // global css
+import "@/assets/styles/ruoyi.scss"; // ruoyi css
+import App from "./App";
+import store from "./store";
+import router from "./router";
+import directive from "./directive"; // directive
+import plugins from "./plugins"; // plugins
+import { download } from "@/utils/request";
import moment from "moment";
import "moment/locale/zh-cn";
moment.locale("zh-cn");
Vue.prototype.$moment = moment;
-import './assets/icons' // icon
-import './permission' // permission control
+import "./assets/icons"; // icon
+import "./permission"; // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/system/config";
-import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
+import {
+ parseTime,
+ resetForm,
+ addDateRange,
+ selectDictLabel,
+ selectDictLabels,
+ handleTree,
+} from "@/utils/ruoyi";
// 分页组件
import Pagination from "@/components/Pagination";
// 自定义表格工具组件
-import RightToolbar from "@/components/RightToolbar"
+import RightToolbar from "@/components/RightToolbar";
// 富文本组件
-import Editor from "@/components/Editor"
+import Editor from "@/components/Editor";
// 文件上传组件
-import FileUpload from "@/components/FileUpload"
+import FileUpload from "@/components/FileUpload";
// 图片上传组件
-import ImageUpload from "@/components/ImageUpload"
+import ImageUpload from "@/components/ImageUpload";
// 图片预览组件
-import ImagePreview from "@/components/ImagePreview"
+import ImagePreview from "@/components/ImagePreview";
// 字典标签组件
-import DictTag from '@/components/DictTag'
+import DictTag from "@/components/DictTag";
// 头部标签组件
-import VueMeta from 'vue-meta'
+import VueMeta from "vue-meta";
// 字典数据组件
-import DictData from '@/components/DictData'
+import DictData from "@/components/DictData";
+//列表搜索框
+import MyInput from "@/views/components/myInput";
// 全局方法挂载
-Vue.prototype.getDicts = getDicts
-Vue.prototype.getConfigKey = getConfigKey
-Vue.prototype.parseTime = parseTime
-Vue.prototype.resetForm = resetForm
-Vue.prototype.addDateRange = addDateRange
-Vue.prototype.selectDictLabel = selectDictLabel
-Vue.prototype.selectDictLabels = selectDictLabels
-Vue.prototype.download = download
-Vue.prototype.handleTree = handleTree
-Vue.prototype.$api = API
+Vue.prototype.getDicts = getDicts;
+Vue.prototype.getConfigKey = getConfigKey;
+Vue.prototype.parseTime = parseTime;
+Vue.prototype.resetForm = resetForm;
+Vue.prototype.addDateRange = addDateRange;
+Vue.prototype.selectDictLabel = selectDictLabel;
+Vue.prototype.selectDictLabels = selectDictLabels;
+Vue.prototype.download = download;
+Vue.prototype.handleTree = handleTree;
+Vue.prototype.$api = API;
// 全局组件挂载
-Vue.component('DictTag', DictTag)
-Vue.component('Pagination', Pagination)
-Vue.component('RightToolbar', RightToolbar)
-Vue.component('Editor', Editor)
-Vue.component('FileUpload', FileUpload)
-Vue.component('ImageUpload', ImageUpload)
-Vue.component('ImagePreview', ImagePreview)
+Vue.component("DictTag", DictTag);
+Vue.component("Pagination", Pagination);
+Vue.component("RightToolbar", RightToolbar);
+Vue.component("Editor", Editor);
+Vue.component("FileUpload", FileUpload);
+Vue.component("ImageUpload", ImageUpload);
+Vue.component("ImagePreview", ImagePreview);
+Vue.component("MyInput", MyInput);
-Vue.use(directive)
-Vue.use(plugins)
-Vue.use(VueMeta)
-DictData.install()
+Vue.use(directive);
+Vue.use(plugins);
+Vue.use(VueMeta);
+DictData.install();
/**
* If you don't want to use mock-server
@@ -82,14 +92,14 @@ DictData.install()
*/
Vue.use(Element, {
- size: Cookies.get('size') || 'medium' // set element-ui default size
-})
+ size: Cookies.get("size") || "medium", // set element-ui default size
+});
-Vue.config.productionTip = false
+Vue.config.productionTip = false;
new Vue({
- el: '#app',
+ el: "#app",
router,
store,
- render: h => h(App)
-})
+ render: (h) => h(App),
+});
diff --git a/src/router/index.js b/src/router/index.js
index 413233f..5115a6a 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,10 +1,10 @@
-import Vue from 'vue'
-import Router from 'vue-router'
+import Vue from "vue";
+import Router from "vue-router";
-Vue.use(Router)
+Vue.use(Router);
/* Layout */
-import Layout from '@/layout'
+import Layout from "@/layout";
/**
* Note: 路由配置项
@@ -31,153 +31,173 @@ import Layout from '@/layout'
// 公共路由
export const constantRoutes = [
{
- path: '/redirect',
+ path: "/redirect",
component: Layout,
hidden: true,
children: [
{
- path: '/redirect/:path(.*)',
- component: () => import('@/views/redirect')
- }
- ]
+ path: "/redirect/:path(.*)",
+ component: () => import("@/views/redirect"),
+ },
+ ],
},
{
- path: '/login',
- component: () => import('@/views/login'),
- hidden: true
+ path: "/login",
+ component: () => import("@/views/login"),
+ hidden: true,
},
{
- path: '/register',
- component: () => import('@/views/register'),
- hidden: true
+ path: "/register",
+ component: () => import("@/views/register"),
+ hidden: true,
},
{
- path: '/404',
- component: () => import('@/views/error/404'),
- hidden: true
+ path: "/404",
+ component: () => import("@/views/error/404"),
+ hidden: true,
},
{
- path: '/401',
- component: () => import('@/views/error/401'),
- hidden: true
+ path: "/401",
+ component: () => import("@/views/error/401"),
+ hidden: true,
},
{
- path: '',
+ path: "",
component: Layout,
- redirect: 'index',
+ redirect: "index",
children: [
{
- path: 'index',
- component: () => import('@/views/index'),
- name: 'Index',
- meta: { title: '首页', icon: 'dashboard', affix: true }
- }
- ]
+ path: "index",
+ component: () => import("@/views/index"),
+ name: "Index",
+ meta: { title: "首页", icon: "dashboard", affix: true },
+ },
+ ],
},
{
- path: '/user',
+ path: "/user",
component: Layout,
hidden: true,
- redirect: 'noredirect',
+ redirect: "noredirect",
children: [
{
- path: 'profile',
- component: () => import('@/views/system/user/profile/index'),
- name: 'Profile',
- meta: { title: '个人中心', icon: 'user' }
- }
- ]
- }
-]
+ path: "profile",
+ component: () => import("@/views/system/user/profile/index"),
+ name: "Profile",
+ meta: { title: "个人中心", icon: "user" },
+ },
+ ],
+ },
+ {
+ path: "",
+ component: Layout,
+ redirect: "dictGl",
+ children: [
+ {
+ path: "/volunteer/zyzsjgl/zdgl/:dictId(\\d+)",
+ component: () => import("@/views/volunteer/userbq/dictGl/data"),
+ hidden: true,
+ name: "dictGl",
+ meta: {
+ title: "字典详情",
+ icon: "dashboard",
+ affix: true,
+ activeMenu: "/volunteer/userbq/dictGl",
+ },
+ },
+ ],
+ },
+];
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [
{
- path: '/system/user-auth',
+ path: "/system/user-auth",
component: Layout,
hidden: true,
- permissions: ['system:user:edit'],
+ permissions: ["system:user:edit"],
children: [
{
- path: 'role/:userId(\\d+)',
- component: () => import('@/views/system/user/authRole'),
- name: 'AuthRole',
- meta: { title: '分配角色', activeMenu: '/system/user' }
- }
- ]
+ path: "role/:userId(\\d+)",
+ component: () => import("@/views/system/user/authRole"),
+ name: "AuthRole",
+ meta: { title: "分配角色", activeMenu: "/system/user" },
+ },
+ ],
},
{
- path: '/system/role-auth',
+ path: "/system/role-auth",
component: Layout,
hidden: true,
- permissions: ['system:role:edit'],
+ permissions: ["system:role:edit"],
children: [
{
- path: 'user/:roleId(\\d+)',
- component: () => import('@/views/system/role/authUser'),
- name: 'AuthUser',
- meta: { title: '分配用户', activeMenu: '/system/role' }
- }
- ]
+ path: "user/:roleId(\\d+)",
+ component: () => import("@/views/system/role/authUser"),
+ name: "AuthUser",
+ meta: { title: "分配用户", activeMenu: "/system/role" },
+ },
+ ],
},
{
- path: '/system/dict-data',
+ path: "/system/dict-data",
component: Layout,
hidden: true,
- permissions: ['system:dict:list'],
+ permissions: ["system:dict:list"],
children: [
{
- path: 'index/:dictId(\\d+)',
- component: () => import('@/views/system/dict/data'),
- name: 'Data',
- meta: { title: '字典数据', activeMenu: '/system/dict' }
- }
- ]
+ path: "index/:dictId(\\d+)",
+ component: () => import("@/views/system/dict/data"),
+ name: "Data",
+ meta: { title: "字典数据", activeMenu: "/system/dict" },
+ },
+ ],
},
+
{
- path: '/monitor/job-log',
+ path: "/monitor/job-log",
component: Layout,
hidden: true,
- permissions: ['monitor:job:list'],
+ permissions: ["monitor:job:list"],
children: [
{
- path: 'index/:jobId(\\d+)',
- component: () => import('@/views/monitor/job/log'),
- name: 'JobLog',
- meta: { title: '调度日志', activeMenu: '/monitor/job' }
- }
- ]
+ path: "index/:jobId(\\d+)",
+ component: () => import("@/views/monitor/job/log"),
+ name: "JobLog",
+ meta: { title: "调度日志", activeMenu: "/monitor/job" },
+ },
+ ],
},
{
- path: '/tool/gen-edit',
+ path: "/tool/gen-edit",
component: Layout,
hidden: true,
- permissions: ['tool:gen:edit'],
+ permissions: ["tool:gen:edit"],
children: [
{
- path: 'index/:tableId(\\d+)',
- component: () => import('@/views/tool/gen/editTable'),
- name: 'GenEdit',
- meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
- }
- ]
- }
-]
+ path: "index/:tableId(\\d+)",
+ component: () => import("@/views/tool/gen/editTable"),
+ name: "GenEdit",
+ meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
+ },
+ ],
+ },
+];
// 防止连续点击多次路由报错
let routerPush = Router.prototype.push;
let routerReplace = Router.prototype.replace;
// push
Router.prototype.push = function push(location) {
- return routerPush.call(this, location).catch(err => err)
-}
+ return routerPush.call(this, location).catch((err) => err);
+};
// replace
Router.prototype.replace = function push(location) {
- return routerReplace.call(this, location).catch(err => err)
-}
+ return routerReplace.call(this, location).catch((err) => err);
+};
export default new Router({
// mode: 'history', // 去掉url中的#
scrollBehavior: () => ({ y: 0 }),
- routes: constantRoutes
-})
+ routes: constantRoutes,
+});
diff --git a/src/store/getters.js b/src/store/getters.js
index 8adb1b6..960e9fc 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -1,19 +1,21 @@
const getters = {
- sidebar: state => state.app.sidebar,
- size: state => state.app.size,
- device: state => state.app.device,
- dict: state => state.dict.dict,
- visitedViews: state => state.tagsView.visitedViews,
- cachedViews: state => state.tagsView.cachedViews,
- token: state => state.user.token,
- avatar: state => state.user.avatar,
- name: state => state.user.name,
- introduction: state => state.user.introduction,
- roles: state => state.user.roles,
- permissions: state => state.user.permissions,
- permission_routes: state => state.permission.routes,
- topbarRouters:state => state.permission.topbarRouters,
- defaultRoutes:state => state.permission.defaultRoutes,
- sidebarRouters:state => state.permission.sidebarRouters,
-}
-export default getters
+ sidebar: (state) => state.app.sidebar,
+ size: (state) => state.app.size,
+ device: (state) => state.app.device,
+ dict: (state) => state.dict.dict,
+ visitedViews: (state) => state.tagsView.visitedViews,
+ cachedViews: (state) => state.tagsView.cachedViews,
+ token: (state) => state.user.token,
+ avatar: (state) => state.user.avatar,
+ name: (state) => state.user.name,
+ userId: (state) => state.user.userId,
+ introduction: (state) => state.user.introduction,
+ roles: (state) => state.user.roles,
+ permissions: (state) => state.user.permissions,
+ permission_routes: (state) => state.permission.routes,
+ topbarRouters: (state) => state.permission.topbarRouters,
+ defaultRoutes: (state) => state.permission.defaultRoutes,
+ sidebarRouters: (state) => state.permission.sidebarRouters,
+ integral: (state) => state.permission.integral,
+};
+export default getters;
diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
index da6153d..cae3194 100644
--- a/src/store/modules/permission.js
+++ b/src/store/modules/permission.js
@@ -1,9 +1,10 @@
-import auth from '@/plugins/auth'
-import router, { constantRoutes, dynamicRoutes } from '@/router'
-import { getRouters } from '@/api/menu'
-import Layout from '@/layout/index'
-import ParentView from '@/components/ParentView'
-import InnerLink from '@/layout/components/InnerLink'
+import auth from "@/plugins/auth";
+import router, { constantRoutes, dynamicRoutes } from "@/router";
+import { getRouters } from "@/api/menu";
+import Layout from "@/layout/index";
+import ParentView from "@/components/ParentView";
+import InnerLink from "@/layout/components/InnerLink";
+import { findIntegral } from "@/api/volunteer/gxhzs/gxhzsgl/index.js";
const permission = {
state: {
@@ -11,124 +12,149 @@ const permission = {
addRoutes: [],
defaultRoutes: [],
topbarRouters: [],
- sidebarRouters: []
+ sidebarRouters: [],
+ integral: 0,
},
mutations: {
SET_ROUTES: (state, routes) => {
- state.addRoutes = routes
- state.routes = constantRoutes.concat(routes)
+ state.addRoutes = routes;
+ state.routes = constantRoutes.concat(routes);
},
SET_DEFAULT_ROUTES: (state, routes) => {
- state.defaultRoutes = constantRoutes.concat(routes)
+ state.defaultRoutes = constantRoutes.concat(routes);
},
SET_TOPBAR_ROUTES: (state, routes) => {
- state.topbarRouters = routes
+ state.topbarRouters = routes;
},
SET_SIDEBAR_ROUTERS: (state, routes) => {
// console.log(routes)
- state.sidebarRouters = routes
+ state.sidebarRouters = routes;
+ },
+ SET_INTEGRAL: (state, integral) => {
+ state.integral = integral;
},
},
actions: {
+ FindIntegralData({ commit }) {
+ getFindIntegral().then((integral) => {
+ commit("SET_INTEGRAL", integral);
+ });
+ },
// 生成路由
GenerateRoutes({ commit }) {
- return new Promise(resolve => {
+ return new Promise((resolve) => {
// 向后端请求路由数据
- getRouters().then(res => {
- const sdata = JSON.parse(JSON.stringify(res.data))
- const rdata = JSON.parse(JSON.stringify(res.data))
- const sidebarRoutes = filterAsyncRouter(sdata)
- const rewriteRoutes = filterAsyncRouter(rdata, false, true)
+ getRouters().then((res) => {
+ getFindIntegral().then((integral) => {
+ commit("SET_INTEGRAL", integral);
+ });
+ const sdata = JSON.parse(JSON.stringify(res.data));
+ const rdata = JSON.parse(JSON.stringify(res.data));
+ const sidebarRoutes = filterAsyncRouter(sdata);
+ const rewriteRoutes = filterAsyncRouter(rdata, false, true);
const asyncRoutes = filterDynamicRoutes(dynamicRoutes);
- rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
+ rewriteRoutes.push({ path: "*", redirect: "/404", hidden: true });
router.addRoutes(asyncRoutes);
- commit('SET_ROUTES', rewriteRoutes)
- commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
- commit('SET_DEFAULT_ROUTES', sidebarRoutes)
- commit('SET_TOPBAR_ROUTES', sidebarRoutes)
- resolve(rewriteRoutes)
- })
- })
- }
- }
-}
+ commit("SET_ROUTES", rewriteRoutes);
+ commit("SET_SIDEBAR_ROUTERS", constantRoutes.concat(sidebarRoutes));
+ commit("SET_DEFAULT_ROUTES", sidebarRoutes);
+ commit("SET_TOPBAR_ROUTES", sidebarRoutes);
+ resolve(rewriteRoutes);
+ });
+ });
+ },
+ },
+};
// 遍历后台传来的路由字符串,转换为组件对象
function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
- return asyncRouterMap.filter(route => {
+ return asyncRouterMap.filter((route) => {
if (type && route.children) {
- route.children = filterChildren(route.children)
+ route.children = filterChildren(route.children);
}
if (route.component) {
// Layout ParentView 组件特殊处理
- if (route.component === 'Layout') {
- route.component = Layout
- } else if (route.component === 'ParentView') {
- route.component = ParentView
- } else if (route.component === 'InnerLink') {
- route.component = InnerLink
+ if (route.component === "Layout") {
+ route.component = Layout;
+ } else if (route.component === "ParentView") {
+ route.component = ParentView;
+ } else if (route.component === "InnerLink") {
+ route.component = InnerLink;
} else {
- route.component = loadView(route.component)
+ route.component = loadView(route.component);
}
}
if (route.children != null && route.children && route.children.length) {
- route.children = filterAsyncRouter(route.children, route, type)
+ route.children = filterAsyncRouter(route.children, route, type);
} else {
- delete route['children']
- delete route['redirect']
+ delete route["children"];
+ delete route["redirect"];
}
- return true
- })
+ return true;
+ });
+}
+
+//获取用户积分
+function getFindIntegral() {
+ return new Promise((resolve, reject) => {
+ findIntegral()
+ .then((res) => {
+ resolve(res.data);
+ })
+ .catch((error) => {
+ reject(error);
+ });
+ });
}
function filterChildren(childrenMap, lastRouter = false) {
- var children = []
+ var children = [];
childrenMap.forEach((el, index) => {
if (el.children && el.children.length) {
- if (el.component === 'ParentView' && !lastRouter) {
- el.children.forEach(c => {
- c.path = el.path + '/' + c.path
+ if (el.component === "ParentView" && !lastRouter) {
+ el.children.forEach((c) => {
+ c.path = el.path + "/" + c.path;
if (c.children && c.children.length) {
- children = children.concat(filterChildren(c.children, c))
- return
+ children = children.concat(filterChildren(c.children, c));
+ return;
}
- children.push(c)
- })
- return
+ children.push(c);
+ });
+ return;
}
}
if (lastRouter) {
- el.path = lastRouter.path + '/' + el.path
+ el.path = lastRouter.path + "/" + el.path;
}
- children = children.concat(el)
- })
- return children
+ children = children.concat(el);
+ });
+ return children;
}
// 动态路由遍历,验证是否具备权限
export function filterDynamicRoutes(routes) {
- const res = []
- routes.forEach(route => {
+ const res = [];
+ routes.forEach((route) => {
if (route.permissions) {
if (auth.hasPermiOr(route.permissions)) {
- res.push(route)
+ res.push(route);
}
} else if (route.roles) {
if (auth.hasRoleOr(route.roles)) {
- res.push(route)
+ res.push(route);
}
}
- })
- return res
+ });
+ return res;
}
export const loadView = (view) => {
- if (process.env.NODE_ENV === 'development') {
- return (resolve) => require([`@/views/${view}`], resolve)
+ if (process.env.NODE_ENV === "development") {
+ return (resolve) => require([`@/views/${view}`], resolve);
} else {
// 使用 import 实现生产环境的路由懒加载
- return () => import(`@/views/${view}`)
+ return () => import(`@/views/${view}`);
}
-}
+};
-export default permission
+export default permission;
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index ab0a6fe..6d9517d 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,96 +1,111 @@
-import { login, logout, getInfo } from '@/api/login'
-import { getToken, setToken, removeToken } from '@/utils/auth'
+import { login, logout, getInfo } from "@/api/login";
+import { getToken, setToken, removeToken } from "@/utils/auth";
const user = {
state: {
token: getToken(),
- name: '',
- avatar: '',
+ name: "",
+ userId: "",
+ avatar: "",
roles: [],
- permissions: []
+ permissions: [],
},
mutations: {
SET_TOKEN: (state, token) => {
- state.token = token
+ state.token = token;
},
SET_NAME: (state, name) => {
- state.name = name
+ state.name = name;
+ },
+ SET_USER_ID: (state, userId) => {
+ state.userId = userId;
},
SET_AVATAR: (state, avatar) => {
- state.avatar = avatar
+ state.avatar = avatar;
},
SET_ROLES: (state, roles) => {
- state.roles = roles
+ state.roles = roles;
},
SET_PERMISSIONS: (state, permissions) => {
- state.permissions = permissions
- }
+ state.permissions = permissions;
+ },
},
actions: {
// 登录
Login({ commit }, userInfo) {
- const username = userInfo.username.trim()
- const password = userInfo.password
- const code = userInfo.code
- const uuid = userInfo.uuid
+ const username = userInfo.username.trim();
+ const password = userInfo.password;
+ const code = userInfo.code;
+ const uuid = userInfo.uuid;
return new Promise((resolve, reject) => {
- login(username, password, code, uuid).then(res => {
- setToken(res.token)
- commit('SET_TOKEN', res.token)
- resolve()
- }).catch(error => {
- reject(error)
- })
- })
+ login(username, password, code, uuid)
+ .then((res) => {
+ setToken(res.token);
+ commit("SET_TOKEN", res.token);
+ resolve();
+ })
+ .catch((error) => {
+ reject(error);
+ });
+ });
},
// 获取用户信息
GetInfo({ commit, state }) {
return new Promise((resolve, reject) => {
- getInfo().then(res => {
- const user = res.user
- const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : process.env.VUE_APP_BASE_API + user.avatar;
- if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
- commit('SET_ROLES', res.roles)
- commit('SET_PERMISSIONS', res.permissions)
- } else {
- commit('SET_ROLES', ['ROLE_DEFAULT'])
- }
- commit('SET_NAME', user.userName)
- commit('SET_AVATAR', avatar)
- resolve(res)
- }).catch(error => {
- reject(error)
- })
- })
+ getInfo()
+ .then((res) => {
+ const user = res.user;
+ const avatar =
+ user.avatar == "" || user.avatar == null
+ ? require("@/assets/images/profile.jpg")
+ : process.env.VUE_APP_BASE_API + user.avatar;
+ if (res.roles && res.roles.length > 0) {
+ // 验证返回的roles是否是一个非空数组
+ commit("SET_ROLES", res.roles);
+ commit("SET_PERMISSIONS", res.permissions);
+ } else {
+ commit("SET_ROLES", ["ROLE_DEFAULT"]);
+ }
+ commit("SET_NAME", user.nickName);
+ commit("SET_USER_ID", user.userId);
+ commit("SET_AVATAR", avatar);
+ resolve(res);
+ })
+ .catch((error) => {
+ reject(error);
+ });
+ });
},
// 退出系统
LogOut({ commit, state }) {
return new Promise((resolve, reject) => {
- logout(state.token).then(() => {
- commit('SET_TOKEN', '')
- commit('SET_ROLES', [])
- commit('SET_PERMISSIONS', [])
- removeToken()
- resolve()
- }).catch(error => {
- reject(error)
- })
- })
+ logout(state.token)
+ .then(() => {
+ commit("SET_TOKEN", "");
+ commit("SET_ROLES", []);
+ commit("SET_PERMISSIONS", []);
+ removeToken();
+ resolve();
+ })
+ .catch((error) => {
+ reject(error);
+ });
+ });
},
// 前端 登出
FedLogOut({ commit }) {
- return new Promise(resolve => {
- commit('SET_TOKEN', '')
- removeToken()
- resolve()
- })
- }
- }
-}
+ return new Promise((resolve) => {
+ commit("SET_TOKEN", "");
+ removeToken();
+ resolve();
+ });
+ },
+ },
+};
-export default user
+export default user;
diff --git a/src/utils/request.js b/src/utils/request.js
index ffb0d21..21b8745 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -1,114 +1,149 @@
-import axios from 'axios'
-import { Notification, MessageBox, Message, Loading } from 'element-ui'
-import store from '@/store'
-import { getToken } from '@/utils/auth'
-import errorCode from '@/utils/errorCode'
+import axios from "axios";
+import { Notification, MessageBox, Message, Loading } from "element-ui";
+import store from "@/store";
+import { getToken } from "@/utils/auth";
+import errorCode from "@/utils/errorCode";
import { tansParams, blobValidate } from "@/utils/ruoyi";
-import cache from '@/plugins/cache'
-import { saveAs } from 'file-saver'
+import cache from "@/plugins/cache";
+import { saveAs } from "file-saver";
let downloadLoadingInstance;
// 是否显示重新登录
export let isRelogin = { show: false };
-axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
- timeout: 10000
-})
+ timeout: 10000,
+});
// request拦截器
-service.interceptors.request.use(config => {
- // 是否需要设置 token
- const isToken = (config.headers || {}).isToken === false
- // 是否需要防止数据重复提交
- const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
- if (getToken() && !isToken) {
- config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- }
- // get请求映射params参数
- if (config.method === 'get' && config.params) {
- let url = config.url + '?' + tansParams(config.params);
- url = url.slice(0, -1);
- config.params = {};
- config.url = url;
- }
- if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
- const requestObj = {
- url: config.url,
- data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
- time: new Date().getTime()
+service.interceptors.request.use(
+ (config) => {
+ // 是否需要设置 token
+ const isToken = (config.headers || {}).isToken === false;
+ // 是否需要防止数据重复提交
+ const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
+ if (getToken() && !isToken) {
+ config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
}
- const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小
- const limitSize = 5 * 1024 * 1024; // 限制存放数据5M
- if (requestSize >= limitSize) {
- console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。')
- return config;
+ // get请求映射params参数
+ if (config.method === "get" && config.params) {
+ let url = config.url + "?" + tansParams(config.params);
+ url = url.slice(0, -1);
+ config.params = {};
+ config.url = url;
}
- const sessionObj = cache.session.getJSON('sessionObj')
- if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
- cache.session.setJSON('sessionObj', requestObj)
- } else {
- const s_url = sessionObj.url; // 请求地址
- const s_data = sessionObj.data; // 请求数据
- const s_time = sessionObj.time; // 请求时间
- const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
- if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
- const message = '数据正在处理,请勿重复提交';
- console.warn(`[${s_url}]: ` + message)
- return Promise.reject(new Error(message))
+ if (
+ !isRepeatSubmit &&
+ (config.method === "post" || config.method === "put")
+ ) {
+ const requestObj = {
+ url: config.url,
+ data:
+ typeof config.data === "object"
+ ? JSON.stringify(config.data)
+ : config.data,
+ time: new Date().getTime(),
+ };
+ const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小
+ const limitSize = 5 * 1024 * 1024; // 限制存放数据5M
+ if (requestSize >= limitSize) {
+ console.warn(
+ `[${config.url}]: ` +
+ "请求数据大小超出允许的5M限制,无法进行防重复提交验证。"
+ );
+ return config;
+ }
+ const sessionObj = cache.session.getJSON("sessionObj");
+ if (
+ sessionObj === undefined ||
+ sessionObj === null ||
+ sessionObj === ""
+ ) {
+ cache.session.setJSON("sessionObj", requestObj);
} else {
- cache.session.setJSON('sessionObj', requestObj)
+ const s_url = sessionObj.url; // 请求地址
+ const s_data = sessionObj.data; // 请求数据
+ const s_time = sessionObj.time; // 请求时间
+ const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
+ if (
+ s_data === requestObj.data &&
+ requestObj.time - s_time < interval &&
+ s_url === requestObj.url
+ ) {
+ const message = "数据正在处理,请勿重复提交";
+ console.warn(`[${s_url}]: ` + message);
+ return Promise.reject(new Error(message));
+ } else {
+ cache.session.setJSON("sessionObj", requestObj);
+ }
}
}
+ return config;
+ },
+ (error) => {
+ console.log(error);
+ Promise.reject(error);
}
- return config
-}, error => {
- console.log(error)
- Promise.reject(error)
-})
+);
// 响应拦截器
-service.interceptors.response.use(res => {
+service.interceptors.response.use(
+ (res) => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
- const msg = errorCode[code] || res.data.msg || errorCode['default']
+ const msg = errorCode[code] || res.data.msg || errorCode["default"];
// 二进制数据则直接返回
- if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
- return res.data
+ if (
+ res.request.responseType === "blob" ||
+ res.request.responseType === "arraybuffer"
+ ) {
+ return res.data;
}
if (code === 401) {
if (!isRelogin.show) {
isRelogin.show = true;
- MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
- isRelogin.show = false;
- store.dispatch('LogOut').then(() => {
- location.href = '/index';
+ MessageBox.confirm(
+ "登录状态已过期,您可以继续留在该页面,或者重新登录",
+ "系统提示",
+ {
+ confirmButtonText: "重新登录",
+ cancelButtonText: "取消",
+ type: "warning",
+ }
+ )
+ .then(() => {
+ isRelogin.show = false;
+ store.dispatch("LogOut").then(() => {
+ // location.href = '/index';
+ router.replace("/login");
+ });
})
- }).catch(() => {
- isRelogin.show = false;
- });
- }
- return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+ .catch(() => {
+ isRelogin.show = false;
+ });
+ }
+ return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) {
- Message({ message: msg, type: 'error' })
- return Promise.reject(new Error(msg))
+ Message({ message: msg, type: "error" });
+ return Promise.reject(new Error(msg));
} else if (code === 601) {
- Message({ message: msg, type: 'warning' })
- return Promise.reject('error')
+ Message({ message: msg, type: "warning" });
+ return Promise.reject("error");
} else if (code !== 200) {
- Notification.error({ title: msg })
- return Promise.reject('error')
+ Notification.error({ title: msg });
+ return Promise.reject("error");
} else {
- return res.data
+ return res.data;
}
},
- error => {
- console.log('err' + error)
+ (error) => {
+ console.log("err" + error);
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
@@ -117,36 +152,48 @@ service.interceptors.response.use(res => {
} else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
- Message({ message: message, type: 'error', duration: 5 * 1000 })
- return Promise.reject(error)
+ Message({ message: message, type: "error", duration: 5 * 1000 });
+ return Promise.reject(error);
}
-)
+);
// 通用下载方法
export function download(url, params, filename, config) {
- downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
- return service.post(url, params, {
- transformRequest: [(params) => { return tansParams(params) }],
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
- responseType: 'blob',
- ...config
- }).then(async (data) => {
- const isBlob = blobValidate(data);
- if (isBlob) {
- const blob = new Blob([data])
- saveAs(blob, filename)
- } else {
- const resText = await data.text();
- const rspObj = JSON.parse(resText);
- const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
- Message.error(errMsg);
- }
- downloadLoadingInstance.close();
- }).catch((r) => {
- console.error(r)
- Message.error('下载文件出现错误,请联系管理员!')
- downloadLoadingInstance.close();
- })
+ downloadLoadingInstance = Loading.service({
+ text: "正在下载数据,请稍候",
+ spinner: "el-icon-loading",
+ background: "rgba(0, 0, 0, 0.7)",
+ });
+ return service
+ .post(url, params, {
+ transformRequest: [
+ (params) => {
+ return tansParams(params);
+ },
+ ],
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ responseType: "blob",
+ ...config,
+ })
+ .then(async (data) => {
+ const isBlob = blobValidate(data);
+ if (isBlob) {
+ const blob = new Blob([data]);
+ saveAs(blob, filename);
+ } else {
+ const resText = await data.text();
+ const rspObj = JSON.parse(resText);
+ const errMsg =
+ errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
+ Message.error(errMsg);
+ }
+ downloadLoadingInstance.close();
+ })
+ .catch((r) => {
+ console.error(r);
+ Message.error("下载文件出现错误,请联系管理员!");
+ downloadLoadingInstance.close();
+ });
}
-export default service
+export default service;
diff --git a/src/views/components/myInput/index.vue b/src/views/components/myInput/index.vue
index b7edb88..5b96395 100644
--- a/src/views/components/myInput/index.vue
+++ b/src/views/components/myInput/index.vue
@@ -8,7 +8,7 @@
-->
@@ -16,37 +16,39 @@
export default {
data() {
return {
- input:'',
- }
+ input: "",
+ };
},
- props:{
- placeholder:{
- type:String,
- default:'请输入内容'
- }
+ props: {
+ placeholder: {
+ type: String,
+ default: "请输入关键字",
+ },
},
- methods:{
- inputValue(){
- this.$emit('changeInput',this.input)
+ methods: {
+ inputValue() {
+ this.$emit("clickSearch", this.input);
},
- changeValue(){
- this.$emit('changeValue',this.input)
+ cleara(){
+ this.$emit("cleara");
}
},
-}
+};
-
+
diff --git a/src/views/login.vue b/src/views/login.vue
index 95cff50..ef8445d 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -1,7 +1,12 @@
-
- 若依后台管理系统
+
+ 苏州园区志愿服务活动区块链平台
-
+
@@ -20,7 +29,11 @@
placeholder="密码"
@keyup.enter.native="handleLogin"
>
-
+
@@ -31,32 +44,42 @@
style="width: 63%"
@keyup.enter.native="handleLogin"
>
-
+
-
![]()
+
- 记住密码
-
+ 记住密码
+
登 录
登 录 中...
-
@@ -64,7 +87,7 @@
diff --git a/src/views/volunteer/addressGl/index.vue b/src/views/volunteer/addressGl/index.vue
new file mode 100644
index 0000000..bf5bbd6
--- /dev/null
+++ b/src/views/volunteer/addressGl/index.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提 交
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/components/invite.vue b/src/views/volunteer/components/invite.vue
index 8727815..c4d6b9e 100644
--- a/src/views/volunteer/components/invite.vue
+++ b/src/views/volunteer/components/invite.vue
@@ -1,60 +1,75 @@
+
+
+
+
-
-
+
+
-
{{ scope.row.content.split(' ')[0] }}
-
{{ scope.row.content.split(' ')[1] }}
+
{{ scope.row.name }}
+
{{ scope.row.content }}
-
+
+
+
+
+
+
+ {{ scope.row.activityTime.split(" ")[0] }}
+
-
+
+
+
+
{{ scope.row.involveStaus == 1 ? "未报名" : "已报名" }}
+
+
-
+
-

+
查看
+
+
+ 报名
+
@@ -63,93 +78,150 @@
+
+
+
+
+
活动名称:
+
{{ dialogContent.name }}
+
+
+
活动时间:
+
{{ dialogContent.activityTime.split(" ")[0] }}
+
+
+
+
+
活动内容:
+
{{ dialogContent.content }}
+
+
+
活动地址:
+
{{ dialogContent.address }}
+
+
+
+
+
活动举办方:
+
{{ dialogContent.publisher }}
+
+
+
+
diff --git a/src/views/volunteer/components/recommend.vue b/src/views/volunteer/components/recommend.vue
index 8297bdb..c4d6b9e 100644
--- a/src/views/volunteer/components/recommend.vue
+++ b/src/views/volunteer/components/recommend.vue
@@ -1,26 +1,30 @@
+
+
+
+
-
-
+
+
{{ scope.row.name }}
@@ -29,41 +33,40 @@
-
-
-
+
+
+
+
+
+
+ {{ scope.row.activityTime.split(" ")[0] }}
+
-
+
- {{ scope.row.activityTime.split(' ')[0] }}
+
+
{{ scope.row.involveStaus == 1 ? "未报名" : "已报名" }}
+
-
+
-

+
查看
-
活动时间:
-
{{ dialogContent.activityTime.split(' ')[0] }}
+
{{ dialogContent.activityTime.split(" ")[0] }}
@@ -117,7 +120,13 @@
活动标签:
-
{{ item.name }}
+
+ {{ item }}
+
@@ -125,78 +134,94 @@
diff --git a/src/views/volunteer/gxhzs/gxhzsff/index.vue b/src/views/volunteer/gxhzs/gxhzsff/index.vue
index 8b23abc..cea2d09 100644
--- a/src/views/volunteer/gxhzs/gxhzsff/index.vue
+++ b/src/views/volunteer/gxhzs/gxhzsff/index.vue
@@ -1,25 +1,10 @@
-
-
-
-
+
+
+
+
- {{ scope.row.type == 1 ? "已发放" : "未发放" }}
+ {{ scope.row.status == 1 ? "已发放" : "未发放" }}
-
+ 查看
发布发放
@@ -84,69 +62,206 @@
+
+
+ 证书信息
+
-
参与活动:
-
{{ form.activityId }}
+
证书名称:
+
{{ form.certificateName }}
-
证书id:
-
{{ form.certificateId }}
+
志愿者:
+
{{ form.userName }}
-
用户:
-
{{ form.uid }}
+
兑换时间:
+
{{ form.createTime }}
状态:
- {{ form.type == 1 ? "已发放" : "未发放" }}
+ {{ form.status == 1 ? "已发放" : "未发放" }}
+
+
+ 收货信息
+
+
+
姓名:
+
{{ form.userName }}
+
+
+
手机号:
+
{{ form.phonenumber }}
+
+
+
详细地址:
+
{{ form.address }}
+
-
+
邮政信息
-
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看
+
+
+
+
+

+
证书详情
+
+
+
+
+
证书名称:
+
{{ form.certificateName }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
+
+
兑换时间:
+
{{ form.createTime }}
+
+
+
状态:
+
{{ form.status == 1 ? "已发放" : "未发放" }}
+
+
+
+
+
+
+

+
纸制证书
+
+
+
+
+
快递公司:
+
{{ form.courierCompanies }}
+
+
+
快递单号:
+
{{ form.trackingNumber }}
+
+
+
+
+
+
+

+
电子证书
+
+
+
+
{{ form.userName }} 先生/女士:
+
+ 您在苏州工业园区累计志愿服务0小时,感谢您的无私奉献,特发此证,以兹鼓励。
+
+
+
+
+
+
+
+
+ {{ $moment().format("YYYY年MM月DD日") }}
+
+
+
+
+
+
下载电子证书
+
+
+
diff --git a/src/views/volunteer/gxhzs/gxhzsgl/index.vue b/src/views/volunteer/gxhzs/gxhzsgl/index.vue
index 7402a3a..5ac1ff0 100644
--- a/src/views/volunteer/gxhzs/gxhzsgl/index.vue
+++ b/src/views/volunteer/gxhzs/gxhzsgl/index.vue
@@ -1,81 +1,57 @@
-
-
-
-
-
-
-
-
-
-
新增
+
+
新增
-
-
-
-
-
-
高级
-
-
- 查看
-
-
- 修改
-
-
- 删除
-
-
+
+ -
+
积分:{{ item.integral }}
+
+
+
+
+
+
+ {{ item.name }}
+
+
+ 查看
+ 修改
+ 删除
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
@@ -140,16 +95,8 @@
{{ form.name }}
-
证书时间:
-
{{ form.datetime }}
-
-
-
服务时长:
-
{{ form.serviceDuration }}
-
-
-
证书内容:
-
{{ form.content }}
+
积分:
+
{{ form.integral }}
证书封面:
@@ -174,34 +121,55 @@ import {
export default {
data() {
return {
+ listStyle: {
+ height: 0,
+ overflowY: "auto",
+ },
baseUrl: process.env.VUE_APP_BASE_API,
certificatesList: [],
- tableHeigth: 0,
- queryParams: {},
loading: false,
tableData: [],
total: 0,
queryParams: {
+ type: 0, //个性化证书
+ name: undefined,
pageNum: 1,
- pageSize: 20,
+ pageSize: 10,
},
form: {},
rules: {},
open: false,
openInfo: false,
title: "",
- fileList: [],
};
},
created() {
// //给表格一个固定值
this.$nextTick(() => {
- this.tableHeigth =
- this.$refs.main.offsetHeight - this.$refs.search.offsetHeight - 80;
+ this.listStyle.height =
+ this.$refs.main.offsetHeight -
+ 40 -
+ this.$refs.search.offsetHeight -
+ 42 +
+ "px";
this.getList();
});
},
methods: {
+ isLastRow(index) {
+ const rowCount = Math.ceil(this.certificatesList.length / 5);
+ const row = Math.floor(index / 5);
+ return row === rowCount - 1;
+ },
+ /**搜索 */
+ handleSearch(keyWord) {
+ this.queryParams = {
+ name: keyWord,
+ pageNum: 1,
+ pageSize: 10,
+ };
+ this.getList();
+ },
/** 查询证书管理列表 */
getList() {
this.loading = true;
@@ -220,7 +188,7 @@ export default {
cover: null,
content: null,
datetime: null,
- serviceDuration: null,
+ integral: null,
createId: null,
createBy: null,
createTime: null,
@@ -267,6 +235,7 @@ export default {
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
+ this.form.type = 0;
if (this.form.id != null) {
updateCertificates(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
@@ -302,48 +271,4 @@ export default {
diff --git a/src/views/volunteer/gxhzs/hdzsff/index.vue b/src/views/volunteer/gxhzs/hdzsff/index.vue
index 3648a9b..965d952 100644
--- a/src/views/volunteer/gxhzs/hdzsff/index.vue
+++ b/src/views/volunteer/gxhzs/hdzsff/index.vue
@@ -106,13 +106,13 @@
-
+
@@ -161,13 +161,13 @@ export default {
});
},
methods: {
- /**纸质提交 */
+ /**纸制提交 */
submitForm() {
editData(this.form).then((res) => {
this.submitElectron();
});
},
- /**纸质 */
+ /**纸制 */
submitPaper() {
this.infoOpen = true;
},
diff --git a/src/views/volunteer/gxhzs/mygxhzs/index.vue b/src/views/volunteer/gxhzs/mygxhzs/index.vue
new file mode 100644
index 0000000..ef2d2fd
--- /dev/null
+++ b/src/views/volunteer/gxhzs/mygxhzs/index.vue
@@ -0,0 +1,244 @@
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ {{ item.certificateName }}
+
+
+ 查看
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看
+
+
+
+
+

+
证书详情
+
+
+
+
+
证书名称:
+
{{ form.certificateName }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
+
+
兑换时间:
+
{{ form.createTime }}
+
+
+
状态:
+
{{ form.status == 1 ? "已发放" : "未发放" }}
+
+
+
+
+
+
+

+
纸制证书
+
+
+
+
+
快递公司:
+
{{ form.courierCompanies }}
+
+
+
快递单号:
+
{{ form.trackingNumber }}
+
+
+
+
+
+
+

+
电子证书
+
+
+
+
{{ form.userName }} 先生/女士:
+
+ 您在苏州工业园区累计志愿服务0小时,感谢您的无私奉献,特发此证,以兹鼓励。
+
+
+
+
+
+
+
+
+ {{ $moment().format("YYYY年MM月DD日") }}
+
+
+
+
+
+
下载电子证书
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/hdtj/components/detailDialog.vue b/src/views/volunteer/hdtj/components/detailDialog.vue
new file mode 100644
index 0000000..fa33ae6
--- /dev/null
+++ b/src/views/volunteer/hdtj/components/detailDialog.vue
@@ -0,0 +1,660 @@
+
+
+
+
+
+
+
+
+
活动名称:
+
{{ detailData.name }}
+
+
+
活动地址:
+
{{ detailData.address }}
+
+
+
+
+
活动举办方:
+
{{ detailData.publisher }}
+
+
+
+
+
活动内容:
+
{{ detailData.content }}
+
+
+
活动时间:
+
{{ detailData.activityTime }}至{{ detailData.endTime }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.value }}
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/hdtj/hdGl/index.vue b/src/views/volunteer/hdtj/hdGl/index.vue
new file mode 100644
index 0000000..9da2d52
--- /dev/null
+++ b/src/views/volunteer/hdtj/hdGl/index.vue
@@ -0,0 +1,919 @@
+
+
+
+
+
+
+
+
+
+ 新增活动
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $moment().isAfter(scope.row.endTime) ? "停止" : "进行中" }}
+
+
+
+
+
+
+
+ 查看
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/hdtj/hdtjChild/index.vue b/src/views/volunteer/hdtj/hdtjChild/index.vue
new file mode 100644
index 0000000..4761d32
--- /dev/null
+++ b/src/views/volunteer/hdtj/hdtjChild/index.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
diff --git a/src/views/volunteer/hdtj/hdyq/index.vue b/src/views/volunteer/hdtj/hdyq/index.vue
new file mode 100644
index 0000000..55817b9
--- /dev/null
+++ b/src/views/volunteer/hdtj/hdyq/index.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
diff --git a/src/views/volunteer/integralConversion/index.vue b/src/views/volunteer/integralConversion/index.vue
index c2cf052..da641e0 100644
--- a/src/views/volunteer/integralConversion/index.vue
+++ b/src/views/volunteer/integralConversion/index.vue
@@ -1,173 +1,143 @@
-
-
-
+
\ No newline at end of file
+@import "@/assets/styles/myTable.scss";
+
diff --git a/src/views/volunteer/userbq/bqhsj/index.vue b/src/views/volunteer/userbq/bqhsj/index.vue
new file mode 100644
index 0000000..97a13a2
--- /dev/null
+++ b/src/views/volunteer/userbq/bqhsj/index.vue
@@ -0,0 +1,376 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.value }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/userbq/dictGl/data.vue b/src/views/volunteer/userbq/dictGl/data.vue
new file mode 100644
index 0000000..bfc3c6d
--- /dev/null
+++ b/src/views/volunteer/userbq/dictGl/data.vue
@@ -0,0 +1,402 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
+
+
+ {{ scope.row.dictLabel }}
+ {{ scope.row.dictLabel }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/volunteer/userbq/dictGl/index.vue b/src/views/volunteer/userbq/dictGl/index.vue
new file mode 100644
index 0000000..4f1f255
--- /dev/null
+++ b/src/views/volunteer/userbq/dictGl/index.vue
@@ -0,0 +1,348 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+
+ 刷新缓存
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.dictType }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime) }}
+
+
+
+
+ 修改
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{dict.label}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/volunteer/yzczs/myycxhd/index.vue b/src/views/volunteer/yzczs/myycxhd/index.vue
new file mode 100644
index 0000000..0fdcde1
--- /dev/null
+++ b/src/views/volunteer/yzczs/myycxhd/index.vue
@@ -0,0 +1,434 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+ 查看
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+ 证书信息
+
+
+
活动名称:
+
{{ form.name }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
活动参与时间:
+
{{ form.activityTime }}
+
+
+
状态:
+
+ {{ form.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+ 收货信息
+
+
+
姓名:
+
{{ form.userName }}
+
+
+
手机号:
+
{{ form.phonenumber }}
+
+
+
详细地址:
+
{{ form.address }}
+
+
+
+
+
+
+
+
+
+ 邮政信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看
+
+
+
+
+

+
活动详情
+
+
+
+
+
活动名称:
+
{{ form.name }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
+
+
活动参与时间:
+
{{ form.activityTime }}
+
+
+
状态:
+
{{ form.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+
+
+

+
纸制证书
+
+
+
+
+
快递公司:
+
{{ form.courierCompanies }}
+
+
+
快递单号:
+
{{ form.trackingNumber }}
+
+
+
+
+
+
+

+
电子证书
+
+
+
+
{{ form.userName }} 先生/女士:
+
+ 您在苏州工业园区累计志愿服务0小时,感谢您的无私奉献,特发此证,以兹鼓励。
+
+
+
+
+
+
+
+
+ {{ $moment().format("YYYY年MM月DD日") }}
+
+
+
+
+
+
下载电子证书
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/yzczs/myycxzs/index.vue b/src/views/volunteer/yzczs/myycxzs/index.vue
new file mode 100644
index 0000000..f3d62e8
--- /dev/null
+++ b/src/views/volunteer/yzczs/myycxzs/index.vue
@@ -0,0 +1,439 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+ 查看
+
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+ 证书信息
+
+
+
活动名称:
+
{{ form.name }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
活动参与时间:
+
{{ form.activityTime }}
+
+
+
状态:
+
+ {{ form.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+ 收货信息
+
+
+
姓名:
+
{{ form.userName }}
+
+
+
手机号:
+
{{ form.phonenumber }}
+
+
+
详细地址:
+
{{ form.address }}
+
+
+
+
+
+
+
+
+
+ 邮政信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看
+
+
+
+
+

+
活动详情
+
+
+
+
+
活动名称:
+
{{ form.name }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
+
+
活动参与时间:
+
{{ form.activityTime }}
+
+
+
状态:
+
{{ form.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+
+
+

+
纸制证书
+
+
+
+
+
快递公司:
+
{{ form.courierCompanies }}
+
+
+
快递单号:
+
{{ form.trackingNumber }}
+
+
+
+
+
+
+

+
电子证书
+
+
+
+
{{ form.userName }} 先生/女士:
+
+ 您在苏州工业园区累计志愿服务0小时,感谢您的无私奉献,特发此证,以兹鼓励。
+
+
+
+
+
+
+
+
+ {{ $moment().format("YYYY年MM月DD日") }}
+
+
+
+
+
+
下载电子证书
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/yzczs/ycxzsff/index.vue b/src/views/volunteer/yzczs/ycxzsff/index.vue
new file mode 100644
index 0000000..86c5f07
--- /dev/null
+++ b/src/views/volunteer/yzczs/ycxzsff/index.vue
@@ -0,0 +1,434 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+ 查看
+ 发放
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+ 证书信息
+
+
+
活动名称:
+
{{ form.name }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
活动参与时间:
+
{{ form.activityTime }}
+
+
+
状态:
+
+ {{ form.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+ 收货信息
+
+
+
姓名:
+
{{ form.userName }}
+
+
+
手机号:
+
{{ form.phonenumber }}
+
+
+
详细地址:
+
{{ form.address }}
+
+
+
+
+
+
+
+
+
+ 邮政信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看
+
+
+
+
+

+
活动详情
+
+
+
+
+
活动名称:
+
{{ form.name }}
+
+
+
志愿者:
+
{{ form.userName }}
+
+
+
+
+
活动参与时间:
+
{{ form.activityTime }}
+
+
+
状态:
+
{{ form.issuanceStatus ? "已发放" : "未发放" }}
+
+
+
+
+
+
+

+
纸制证书
+
+
+
+
+
快递公司:
+
{{ form.courierCompanies }}
+
+
+
快递单号:
+
{{ form.trackingNumber }}
+
+
+
+
+
+
+

+
电子证书
+
+
+
+
{{ form.userName }} 先生/女士:
+
+ 您在苏州工业园区累计志愿服务0小时,感谢您的无私奉献,特发此证,以兹鼓励。
+
+
+
+
+
+
+
+
+ {{ $moment().format("YYYY年MM月DD日") }}
+
+
+
+
+
+
下载电子证书
+
+
+
+
+
+
+
+
diff --git a/src/views/volunteer/zyzsjgl/bqhgl/index.vue b/src/views/volunteer/zyzsjgl/bqhgl/index.vue
index b4d9159..d2cd934 100644
--- a/src/views/volunteer/zyzsjgl/bqhgl/index.vue
+++ b/src/views/volunteer/zyzsjgl/bqhgl/index.vue
@@ -24,11 +24,18 @@
周爱
-
{{ item.ageRange }}
+
+
+ {{ itema }}
+
@@ -37,7 +44,7 @@
-
暂无数据
+
暂无数据