+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
index f2a913f..1ee2bd3 100644
--- a/src/layout/components/Sidebar/SidebarItem.vue
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -1,98 +1,156 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/permission.js b/src/permission.js
index d6ea76b..478cc05 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -1,63 +1,79 @@
-import router from './router'
-import { ElMessage } from 'element-plus'
-import NProgress from 'nprogress'
-import 'nprogress/nprogress.css'
-import { getToken } from '@/utils/auth'
-import { isHttp } from '@/utils/validate'
-import { isRelogin } from '@/utils/request'
-import useUserStore from '@/store/modules/user'
-import useSettingsStore from '@/store/modules/settings'
-import usePermissionStore from '@/store/modules/permission'
+import router from "./router";
+import { ElMessage } from "element-plus";
+import NProgress from "nprogress";
+import "nprogress/nprogress.css";
+import { getToken } from "@/utils/auth";
+import { isHttp } from "@/utils/validate";
+import { isRelogin } from "@/utils/request";
+import useUserStore from "@/store/modules/user";
+import useSettingsStore from "@/store/modules/settings";
+import usePermissionStore from "@/store/modules/permission";
+// import { expertList } from "./api/expert/expert";
+// import { companyList } from "./api/dataList/enterprise";
NProgress.configure({ showSpinner: false });
-const whiteList = ['/login', '/auth-redirect', '/bind', '/register'];
+const whiteList = ["/login", "/auth-redirect", "/bind", "/register"];
router.beforeEach((to, from, next) => {
- NProgress.start()
+ NProgress.start();
if (getToken()) {
- to.meta.title && useSettingsStore().setTitle(to.meta.title)
+ to.meta.title && useSettingsStore().setTitle(to.meta.title);
/* has token*/
- if (to.path === '/login') {
- next({ path: '/' })
- NProgress.done()
+ if (to.path === "/login") {
+ next({ path: "/" });
+ NProgress.done();
} else {
if (useUserStore().roles.length === 0) {
- isRelogin.show = true
+ isRelogin.show = true;
// 判断当前用户是否已拉取完user_info信息
- useUserStore().getInfo().then(() => {
- isRelogin.show = false
- usePermissionStore().generateRoutes().then(accessRoutes => {
- // 根据roles权限生成可访问的路由表
- accessRoutes.forEach(route => {
- if (!isHttp(route.path)) {
- router.addRoute(route) // 动态添加可访问路由表
- }
- })
- next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
+ useUserStore()
+ .getInfo()
+ .then(() => {
+ isRelogin.show = false;
+ useUserStore().getApprovalCount();
+ usePermissionStore()
+ .generateRoutes()
+ .then((accessRoutes) => {
+ // 根据roles权限生成可访问的路由表
+ accessRoutes.forEach((route) => {
+ if (!isHttp(route.path)) {
+ router.addRoute(route); // 动态添加可访问路由表
+ }
+ });
+ next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
+ });
+ // 获取未审核的专家和企业数量
+ // useUserStore.getApprovalCount({
+ // unApprovedBusiness: resps[0].total,
+ // unApprovedExpert: resps[1].total,
+ // });
})
- }).catch(err => {
- useUserStore().logOut().then(() => {
- ElMessage.error(err)
- next({ path: '/' })
- })
- })
+ .catch((err) => {
+ console.log(err);
+ useUserStore()
+ .logOut()
+ .then(() => {
+ ElMessage.error(err);
+ next({ path: "/" });
+ });
+ });
} else {
- next()
+ next();
}
}
} else {
// 没有token
if (whiteList.indexOf(to.path) !== -1) {
// 在免登录白名单,直接进入
- next()
+ next();
} else {
- next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
- NProgress.done()
+ next(`/login?redirect=${to.fullPath}`); // 否则全部重定向到登录页
+ NProgress.done();
}
}
-})
+});
router.afterEach(() => {
- NProgress.done()
-})
+ NProgress.done();
+});
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index bbdf1ae..a862fb0 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,71 +1,104 @@
-import { login, logout, getInfo } from '@/api/login'
-import { getToken, setToken, removeToken } from '@/utils/auth'
-import defAva from '@/assets/images/profile.jpg'
-import md5 from 'js-md5'
+import { login, logout, getInfo } from "@/api/login";
+import { getToken, setToken, removeToken } from "@/utils/auth";
+import defAva from "@/assets/images/profile.jpg";
+import md5 from "js-md5";
+import { companyList } from "@/api/dataList/enterprise";
+import { expertList } from "@/api/expert/expert";
-const useUserStore = defineStore(
- 'user',
- {
- state: () => ({
- token: getToken(),
- name: '',
- avatar: '',
- roles: [],
- permissions: []
- }),
- actions: {
- // 登录
- login(userInfo) {
- const username = userInfo.username.trim()
- const password = md5(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)
- this.token = res.token
- resolve()
- }).catch(error => {
- reject(error)
+const useUserStore = defineStore("user", {
+ state: () => ({
+ token: getToken(),
+ name: "",
+ avatar: "",
+ roles: [],
+ permissions: [],
+ unApprovedBusiness: 10,
+ unApprovedExpert: 20,
+ }),
+ actions: {
+ // 登录
+ login(userInfo) {
+ const username = userInfo.username.trim();
+ const password = md5(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);
+ this.token = res.token;
+ resolve();
})
- })
- },
- // 获取用户信息
- getInfo() {
- return new Promise((resolve, reject) => {
- getInfo().then(res => {
- const user = res.user
- const avatar = (user.avatar == "" || user.avatar == null) ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar;
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ },
+ // 获取用户信息
+ getInfo() {
+ return new Promise((resolve, reject) => {
+ getInfo()
+ .then((res) => {
+ const user = res.user;
+ const avatar =
+ user.avatar == "" || user.avatar == null
+ ? defAva
+ : import.meta.env.VITE_APP_BASE_API + user.avatar;
- if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
- this.roles = res.roles
- this.permissions = res.permissions
+ if (res.roles && res.roles.length > 0) {
+ // 验证返回的roles是否是一个非空数组
+ this.roles = res.roles;
+ this.permissions = res.permissions;
} else {
- this.roles = ['ROLE_DEFAULT']
+ this.roles = ["ROLE_DEFAULT"];
}
- this.name = user.userName
+ this.name = user.userName;
this.avatar = avatar;
- resolve(res)
- }).catch(error => {
- reject(error)
+ resolve(res);
+ // return res;
})
- })
- },
- // 退出系统
- logOut() {
- return new Promise((resolve, reject) => {
- logout(this.token).then(() => {
- this.token = ''
- this.roles = []
- this.permissions = []
- removeToken()
- resolve()
- }).catch(error => {
- reject(error)
- })
- })
- }
- }
- })
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ },
-export default useUserStore
+ async getApprovalCount() {
+ const resps = await Promise.all([
+ companyList({
+ examineStatus: 0,
+ pageSize: 1,
+ pageNum: 10,
+ }),
+ expertList({
+ examineStatus: 0,
+ pageSize: 1,
+ pageNum: 10,
+ }),
+ ]);
+ this.unApprovedBusiness = resps[0].total;
+ this.unApprovedExpert = resps[1].total;
+ },
+ unApprovedBusinessPlus() {
+ this.unApprovedBusiness++;
+ },
+ // 退出系统
+ logOut() {
+ return new Promise((resolve, reject) => {
+ logout(this.token)
+ .then(() => {
+ this.token = "";
+ this.roles = [];
+ this.permissions = [];
+ removeToken();
+ resolve();
+ })
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ },
+ },
+});
+
+export default useUserStore;
diff --git a/src/utils/parameter.js b/src/utils/parameter.js
index 11eaf12..00eed25 100644
--- a/src/utils/parameter.js
+++ b/src/utils/parameter.js
@@ -28,10 +28,17 @@ export const educationOptions = [
{ key: 7, text: "博士" },
];
// 企业类型
+// export const enterpriseOptions = [
+// { key: "101", value: "上市企业" },
+// { key: "102", value: "优质企业" },
+// { key: "103", value: "普通企业" },
+// ];
export const enterpriseOptions = [
{ key: "101", value: "上市企业" },
- { key: "102", value: "优质企业" },
- { key: "103", value: "普通企业" },
+ { key: "102", value: "独角兽企业" },
+ { key: "103", value: "国家级专精特新企业" },
+ { key: "104", value: "高新技术企业" },
+ { key: "105", value: "科技企业" },
];
// 成果成熟度 技术
export const maturityOptions = [
diff --git a/src/views/approval/dataList/add.vue b/src/views/approval/dataList/add.vue
index b5f8f0d..7ffaf82 100644
--- a/src/views/approval/dataList/add.vue
+++ b/src/views/approval/dataList/add.vue
@@ -14,6 +14,7 @@
审核拒绝
通过审核
+ 通过审核
@@ -29,6 +30,12 @@ import {
import { reactive, toRefs } from "vue";
import { useRoute, useRouter } from "vue-router";
import { ElMessage } from "element-plus";
+import useUserStore from "@/store/modules/user";
+
+const testCount = () => {
+ useUserStore().unApprovedBusinessPlus();
+};
+
const router = useRouter();
const route = useRoute();
const formType = ref(2);
@@ -55,21 +62,25 @@ const data = reactive({
examineStatus: "",
},
});
+
const { form } = toRefs(data);
const cancel = () => {
router.back();
tab.closeOpenPage();
};
+
const submitForm = async (state) => {
const valid = await expertFormRef.value.validateForm();
if (valid) {
if (form.value.id != undefined) {
form.value.examineStatus = state;
await companyEdit(form.value);
+ useUserStore().getApprovalCount();
cancel();
ElMessage.success("修改成功");
} else {
await companyAdd(form.value);
+ useUserStore().getApprovalCount();
cancel();
ElMessage.success("新增成功");
}
diff --git a/src/views/approval/dataList/index.vue b/src/views/approval/dataList/index.vue
index 1b733c9..24e3e4f 100644
--- a/src/views/approval/dataList/index.vue
+++ b/src/views/approval/dataList/index.vue
@@ -57,7 +57,7 @@
-
+
{{ row.industrys[row.industrys.length - 1] }}
@@ -110,9 +110,15 @@
- 上市企业
- 优质企业
- 普通企业
+ {{ value }}
+
+
+
diff --git a/src/views/components/ExpertForm/index.vue b/src/views/components/ExpertForm/index.vue
index ab2a9fe..1314fb0 100644
--- a/src/views/components/ExpertForm/index.vue
+++ b/src/views/components/ExpertForm/index.vue
@@ -31,7 +31,7 @@
-
+
diff --git a/src/views/dataAuditList/serviceDemand/approval.vue b/src/views/dataAuditList/serviceDemand/approval.vue
index b7636c4..d7633ae 100644
--- a/src/views/dataAuditList/serviceDemand/approval.vue
+++ b/src/views/dataAuditList/serviceDemand/approval.vue
@@ -10,13 +10,13 @@
>
基本信息
-
+
@@ -59,12 +59,12 @@
-
+ /> -->
diff --git a/src/views/dataList/enterprise/index.vue b/src/views/dataList/enterprise/index.vue
index e45fbe6..558bf80 100644
--- a/src/views/dataList/enterprise/index.vue
+++ b/src/views/dataList/enterprise/index.vue
@@ -75,7 +75,7 @@
-
+
{{ row.industrys[row.industrys.length - 1] }}
@@ -270,6 +270,7 @@
>
+ 普通会员
VIP
SVIP
diff --git a/src/views/dataList/expert/index.vue b/src/views/dataList/expert/index.vue
index 5f50881..5949a26 100644
--- a/src/views/dataList/expert/index.vue
+++ b/src/views/dataList/expert/index.vue
@@ -92,6 +92,13 @@
@click="handleDetail(row.id)"
>修改
+ 删除
diff --git a/src/views/website/solution/service/index.vue b/src/views/website/solution/service/index.vue
index 3b38d06..6f43823 100644
--- a/src/views/website/solution/service/index.vue
+++ b/src/views/website/solution/service/index.vue
@@ -26,12 +26,19 @@
clearable
@clear="delete queryParams.mode"
>
-
+ -->
+
@@ -91,7 +98,7 @@
- {{ modeOptions.find((item) => item.value == row.mode).label }}
+ {{ categoryList.find((item) => item.id == row.mode)?.name }}
@@ -143,12 +150,19 @@
+
+
@@ -189,6 +203,13 @@ import {
serviceEdit,
serviceDelete,
} from "@/api/website/solution";
+import {
+ planCategoryList,
+ planCategoryAdd,
+ planCategoryDelete,
+ planCategoryDetail,
+ planCategoryUpdate,
+} from "@/api/website/solution";
import { tenantSelect } from "@/api/subPlatform/tenant";
import { ElMessage, ElMessageBox } from "element-plus";
import { cloneDeep } from "lodash";
@@ -309,6 +330,15 @@ const reset = () => {
formRef.value.resetFields();
}
};
+const categoryList = ref([]);
+const getPlanCategoryList = async () => {
+ const { data } = await planCategoryList();
+ categoryList.value = data.map((el) => {
+ return { ...el, id: el.id.toString() };
+ });
+};
+getPlanCategoryList();
+
const handleAdd = () => {
reset();
showEditDialog.value = true;
diff --git a/src/views/website/solution/serviceCase/index.vue b/src/views/website/solution/serviceCase/index.vue
index 6535b32..d687fab 100644
--- a/src/views/website/solution/serviceCase/index.vue
+++ b/src/views/website/solution/serviceCase/index.vue
@@ -173,6 +173,7 @@ import {
} from "@/api/website/solution";
import WangEditor from "@/components/WangEditor/index.vue";
import SiteOptions from "@/views/components/SiteOptions";
+import { planCategoryList } from "../../../../api/website/solution";
const dataList = ref([]);
const loading = ref(true);
@@ -253,6 +254,8 @@ const getSiteList = async () => {
const getCaseKindList = async () => {
const resp = await serviceCaseKindSelect();
+ // const resp = await planCategoryList();
+ // const serviceResp= await ser
for (const key in resp.data) {
if (Object.hasOwnProperty.call(resp.data, key)) {
const item = { ...resp.data[key], id: parseInt(key) };
diff --git a/vite.config.js b/vite.config.js
index 7bf1fe6..640e33f 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -31,8 +31,8 @@ export default defineConfig(({ mode, command }) => {
proxy: {
// https://cn.vitejs.dev/config/#server-proxy
"/dev-api": {
- target: 'http://192.168.110.10:1618',
- // target: "http://101.34.131.16:1618",
+ // target: 'http://192.168.110.10:1618',
+ target: "http://101.34.131.16:1618",
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, ""),
},