From 80dc4f0481f24deb307e6922364dbb12813f9d64 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期三, 13 十一月 2024 10:31:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/views/index.vue | 2
src/permission.js | 2
src/layout/components/Sidebar/menu.js | 51 +-
src/views/homePage.vue | 171 -------
src/views/safetyReview/expertManage/applyRecords/index.vue | 1
src/views/system/dept/index.vue | 51 +-
src/router/index.js | 65 +-
src/assets/images/loginBg.jpg | 0
.env.staging | 4
.env.development | 8
src/api/home/homePage.js | 54 --
src/views/safetyReview/projectSupplement/components/supplemenrtDialog.vue | 1
src/main.js | 1
index.html | 2
package.json | 2
src/views/safetyReview/expertManage/checkProgress/index.vue | 659 ++++------------------------
.env.production | 4
src/views/components/loginForm.vue | 288 ++++++++----
public/favicon.ico | 0
19 files changed, 399 insertions(+), 967 deletions(-)
diff --git a/.env.development b/.env.development
index 77a3fcf..fcf58c3 100644
--- a/.env.development
+++ b/.env.development
@@ -1,15 +1,15 @@
# 页面标题
-VITE_APP_TITLE = 智慧安评
+VITE_APP_TITLE = 专家管理系统
# 开发环境配置
VITE_APP_ENV = 'development'
-# 智慧安评/开发环境
+# 专家管理系统/开发环境
#黄镇
#VITE_APP_BASE_API = 'http://192.168.0.47:8085'
#孔哥
-VITE_APP_BASE_API = 'http://192.168.2.15:8088/api'
+#VITE_APP_BASE_API = 'http://192.168.2.15:8088/api'
#线上
-#VITE_APP_BASE_API = 'http://106.15.95.149:8088/api'
+VITE_APP_BASE_API = 'http://106.15.95.149:8088/api'
\ No newline at end of file
diff --git a/.env.production b/.env.production
index e42547e..dd3939d 100644
--- a/.env.production
+++ b/.env.production
@@ -1,10 +1,10 @@
# 页面标题
-VITE_APP_TITLE = 智慧安评
+VITE_APP_TITLE = 专家管理系统
# 生产环境配置
VITE_APP_ENV = 'production'
-# 智慧安评/生产环境
+# 专家管理系统/生产环境
VITE_APP_BASE_API = 'http://106.15.95.149:8088/api'
# 是否在打包时开启压缩,支持 gzip 和 brotli
diff --git a/.env.staging b/.env.staging
index 49092a9..26b6ad4 100644
--- a/.env.staging
+++ b/.env.staging
@@ -1,10 +1,10 @@
# 页面标题
-VITE_APP_TITLE = 智慧安评
+VITE_APP_TITLE = 专家管理系统
# 生产环境配置
VITE_APP_ENV = 'staging'
-# 智慧安评/生产环境
+# 专家管理系统/生产环境
VITE_APP_BASE_API = '/stage-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli
diff --git a/index.html b/index.html
index 5b6a975..ab81f49 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="/favicon.ico">
- <title>智慧安评</title>
+ <title>专家管理系统</title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style>
html,
diff --git a/package.json b/package.json
index 101e041..fbc916a 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "ruoyi",
"version": "3.8.6",
- "description": "智慧安评",
+ "description": "专家管理系统",
"author": "若依",
"license": "MIT",
"scripts": {
diff --git a/public/favicon.ico b/public/favicon.ico
index e263760..647bc5e 100644
--- a/public/favicon.ico
+++ b/public/favicon.ico
Binary files differ
diff --git a/src/api/home/homePage.js b/src/api/home/homePage.js
index 20ec8e8..543ea86 100644
--- a/src/api/home/homePage.js
+++ b/src/api/home/homePage.js
@@ -1,55 +1 @@
import request from '@/utils/request'
-
-// 获取分页
-export function getNotice(params) {
- return request({
- url: '/notice/noticeList',
- method: 'get',
- params: params
- })
-}
-
-// 获取详情
-export function getNoticeDetails(params) {
- return request({
- url: '/notice/getNoticeById',
- method: 'get',
- params: params
- })
-}
-
-// 获取分页
-export function getLaws(params) {
- return request({
- url: '/law/lawList',
- method: 'get',
- params: params
- })
-}
-
-// 获取详情
-export function getLawsDetails(params) {
- return request({
- url: '/law/getLawById',
- method: 'get',
- params: params
- })
-}
-
-// 获取分页
-export function getPublish(params) {
- return request({
- url: '/agency/agencyList',
- method: 'get',
- params: params
- })
-}
-
-// 获取详情
-export function getPublishDetails(params) {
- return request({
- url: '/agency/getAgencyById',
- method: 'get',
- params: params
- })
-}
\ No newline at end of file
diff --git a/src/assets/images/loginBg.jpg b/src/assets/images/loginBg.jpg
index e1cc12c..9d59c8c 100644
--- a/src/assets/images/loginBg.jpg
+++ b/src/assets/images/loginBg.jpg
Binary files differ
diff --git a/src/layout/components/Sidebar/menu.js b/src/layout/components/Sidebar/menu.js
index 74bc42a..dd25c14 100644
--- a/src/layout/components/Sidebar/menu.js
+++ b/src/layout/components/Sidebar/menu.js
@@ -66,35 +66,40 @@
]
},
{
- path: '/baseSet',
- redirect: '/baseSet/evaluate',
- meta: { title: '基础设置',icon: 'dict'},
+ path: '/system',
+ redirect: '/system/dept',
+ meta: { title: '系统设置',icon: 'dict'},
children: [
+ {
+ path: 'dept',
+ name: 'dept',
+ meta: { title: '部门处室管理',icon: 'build'}
+ },
{
path: 'evaluate',
name: 'evaluate',
meta: { title: '类型管理',icon: 'build'}
},
- {
- path: 'expertsType',
- name: 'expertsType',
- meta: { title: '专家类型管理',icon: 'clipboard'}
- },
- {
- path: 'business',
- name: 'business',
- meta: { title: '业务范围管理',icon: 'cascader'}
- },
- {
- path: 'area',
- name: 'area',
- meta: { title: '地区维护管理',icon: 'component'}
- },
- {
- path: 'major',
- name: 'major',
- meta: { title: '专业方向管理',icon: 'documentation'}
- }
+ // {
+ // path: 'expertsType',
+ // name: 'expertsType',
+ // meta: { title: '专家类型管理',icon: 'clipboard'}
+ // },
+ // {
+ // path: 'business',
+ // name: 'business',
+ // meta: { title: '业务范围管理',icon: 'cascader'}
+ // },
+ // {
+ // path: 'area',
+ // name: 'area',
+ // meta: { title: '地区维护管理',icon: 'component'}
+ // },
+ // {
+ // path: 'major',
+ // name: 'major',
+ // meta: { title: '专业方向管理',icon: 'documentation'}
+ // }
]
},
diff --git a/src/main.js b/src/main.js
index d1504ce..131022b 100644
--- a/src/main.js
+++ b/src/main.js
@@ -47,7 +47,6 @@
import vue3JsonExcel from 'vue3-json-excel';
-
import { Boot } from '@wangeditor/editor'
import attachmentModule from '@wangeditor/plugin-upload-attachment'
import loadMore from '@/utils/selectLoadMoreDirective'
diff --git a/src/permission.js b/src/permission.js
index b3da443..03ed486 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -11,7 +11,7 @@
NProgress.configure({ showSpinner: false });
-const whiteList = ['/homePage','/fillForm'];
+const whiteList = ['/homePage','/fillForm','/checkProgress'];
router.beforeEach((to, from, next) => {
NProgress.start()
diff --git a/src/router/index.js b/src/router/index.js
index 49e47c5..63231ea 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -58,6 +58,11 @@
hidden: true
},
{
+ path: '/checkProgress',
+ component: () => import('@/views/safetyReview/expertManage/checkProgress/index.vue'),
+ hidden: true
+ },
+ {
path: '/expertUser',
component: () => import('@/views/safetyReview/userManage/expertUsers/index.vue'),
hidden: true
@@ -235,41 +240,47 @@
]
},
{
- path: '/baseSet',
+ path: '/system',
component: Layout,
- redirect: '/baseSet/evaluate',
- meta: { title: '基础设置'},
+ redirect: '/system/post',
+ meta: { title: '系统设置'},
children: [
+ {
+ path: 'dept',
+ component: () => import('@/views/system/dept/index.vue'),
+ name: 'dept',
+ meta: { title: '部门处室管理',icon: 'form'}
+ },
{
path: 'evaluate',
component: () => import('@/views/safetyReview/baseSet/evaluateType/index.vue'),
name: 'evaluate',
meta: { title: '类型管理',icon: 'form'}
},
- {
- path: 'expertsType',
- component: () => import('@/views/safetyReview/baseSet/expertsType/index.vue'),
- name: 'expertsType',
- meta: { title: '专家类型管理',icon: 'form'}
- },
- {
- path: 'business',
- component: () => import('@/views/safetyReview/baseSet/business/index.vue'),
- name: 'business',
- meta: { title: '业务范围',icon: 'form'}
- },
- {
- path: 'area',
- component: () => import('@/views/safetyReview/baseSet/area/index.vue'),
- name: 'area',
- meta: { title: '地区维护',icon: 'form'}
- },
- {
- path: 'major',
- component: () => import('@/views/safetyReview/baseSet/major/index.vue'),
- name: 'major',
- meta: { title: '专业方向',icon: 'form'}
- },
+ // {
+ // path: 'expertsType',
+ // component: () => import('@/views/safetyReview/baseSet/expertsType/index.vue'),
+ // name: 'expertsType',
+ // meta: { title: '专家类型管理',icon: 'form'}
+ // },
+ // {
+ // path: 'business',
+ // component: () => import('@/views/safetyReview/baseSet/business/index.vue'),
+ // name: 'business',
+ // meta: { title: '业务范围',icon: 'form'}
+ // },
+ // {
+ // path: 'area',
+ // component: () => import('@/views/safetyReview/baseSet/area/index.vue'),
+ // name: 'area',
+ // meta: { title: '地区维护',icon: 'form'}
+ // },
+ // {
+ // path: 'major',
+ // component: () => import('@/views/safetyReview/baseSet/major/index.vue'),
+ // name: 'major',
+ // meta: { title: '专业方向',icon: 'form'}
+ // },
]
},
diff --git a/src/views/components/loginForm.vue b/src/views/components/loginForm.vue
index e2e2f2a..e6d1833 100644
--- a/src/views/components/loginForm.vue
+++ b/src/views/components/loginForm.vue
@@ -1,72 +1,76 @@
<template>
- <div class="login-panel">
- <div class="login-img">
- <img :src="loginImgPng">
- </div>
- <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
- <h3 class="title">登录系统</h3>
- <el-form-item prop="username">
- <el-input
- v-model="loginForm.username"
- type="text"
- size="large"
- auto-complete="off"
- placeholder="账号"
- >
- <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template>
- </el-input>
- </el-form-item>
- <el-form-item prop="password">
- <el-input
- v-model="loginForm.password"
- type="password"
- size="large"
- auto-complete="off"
- placeholder="密码"
- @keyup.enter="handleLogin"
- show-password
- >
- <template #prefix><svg-icon icon-class="password" class="el-input__icon input-icon" /></template>
- </el-input>
- </el-form-item>
- <el-form-item prop="code" v-if="captchaEnabled">
- <el-input
- v-model="loginForm.code"
- size="large"
- auto-complete="off"
- placeholder="验证码"
- style="width: 63%"
- @keyup.enter="handleLogin"
- >
- <template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template>
- </el-input>
- <div class="login-code">
- <img :src="codeUrl" @click="getCode" class="login-code-img"/>
- </div>
- </el-form-item>
- <el-radio-group v-model="loginForm.role" class="mb5">
- <el-radio :label="0" size="large">监管部门</el-radio>
- <el-radio :label="1" size="large">机构管理员</el-radio>
- </el-radio-group>
- <div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 25px">
-<!-- <el-checkbox v-model="loginForm.rememberMe">记住密码</el-checkbox>-->
- <el-button
- :loading="loading"
- size="large"
- type="primary"
- style="width:63%;"
- @click.prevent="handleLogin"
- >
- <span v-if="!loading">登 录</span>
- <span v-else>登 录 中...</span>
- </el-button>
- <div v-if="isRegister">
- <el-button link type="primary" @click="openRegist">立即注册</el-button>
+ <el-row class="login-panel">
+ <el-col :sm="24" :md="12" class="login-img">
+ 新疆维吾尔自治区应急管理厅<br/>专家管理系统
+ </el-col>
+ <el-col :sm="24" :md="12" class="login-box">
+ <div class="login-card">
+ <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
+ <h3 class="title">登录系统</h3>
+ <el-form-item prop="username">
+ <el-input
+ v-model="loginForm.username"
+ type="text"
+ size="large"
+ auto-complete="off"
+ placeholder="账号"
+ >
+ <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template>
+ </el-input>
+ </el-form-item>
+ <el-form-item prop="password">
+ <el-input
+ v-model="loginForm.password"
+ type="password"
+ size="large"
+ auto-complete="off"
+ placeholder="密码"
+ @keyup.enter="handleLogin"
+ show-password
+ >
+ <template #prefix><svg-icon icon-class="password" class="el-input__icon input-icon" /></template>
+ </el-input>
+ </el-form-item>
+ <el-form-item prop="code" v-if="captchaEnabled">
+ <el-input
+ v-model="loginForm.code"
+ size="large"
+ auto-complete="off"
+ placeholder="验证码"
+ style="width: 63%"
+ @keyup.enter="handleLogin"
+ >
+ <template #prefix><svg-icon icon-class="validCode" class="el-input__icon input-icon" /></template>
+ </el-input>
+ <div class="login-code">
+ <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+ </div>
+ </el-form-item>
+ <!-- <el-radio-group v-model="loginForm.role" class="mb5">-->
+ <!-- <el-radio :label="0" size="large">监管部门</el-radio>-->
+ <!-- <el-radio :label="1" size="large">机构管理员</el-radio>-->
+ <!-- </el-radio-group>-->
+ <div style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 25px">
+ <div class="btn-cont">
+ <button class="login-btn" @click.prevent="handleLogin">
+ <span v-if="!loading">登 录</span>
+ <span v-else>登 录 中...</span>
+ </button>
+ </div>
+ <!-- <div v-if="isRegister">-->
+ <!-- <el-button link type="primary" @click="openRegist">立即注册</el-button>-->
+ <!-- </div>-->
+ </div>
+ </el-form>
+ <div class="other-btns">
+ <el-button link type="primary" style="color: #fff" @click="openApply()">专家申请</el-button>
+ <el-button link type="primary" style="color: #fff" @click="openCheck">专家评定进度查询</el-button>
</div>
</div>
- </el-form>
- </div>
- <register ref="regRef"/>
+ </el-col>
+ </el-row>
+ <expert-form ref="expertFormRef"></expert-form>
+<!-- <register ref="regRef"/>-->
</template>
<script setup>
@@ -78,7 +82,7 @@
import { Register } from "@/layout/components";
import { Base64 } from 'js-base64'
import menu from "@/layout/components/Sidebar/menu";
-import loginImgPng from "@/assets/images/loginImg.png"
+import ExpertForm from "../safetyReview/expertManage/applyRecords/components/expertForm";
const userStore = useUserStore()
const route = useRoute();
@@ -113,7 +117,7 @@
})
const openRegist = ()=>{
- regRef.value.openDialog('add', {});
+ regRef.value.openApply();
}
watch(route, (newRoute) => {
@@ -122,6 +126,27 @@
const sidebarRouters = ref([])
+
+
+
+const expertFormRef = ref()
+const openApply = () => {
+ // expertFormRef.value.openApply(type, value)
+ const routePath = '/fillForm';
+ const resolvedRoute = router.resolve(routePath);
+ const fullPath = resolvedRoute.href
+ window.open(fullPath, '_blank');
+}
+
+
+const openCheck = () => {
+ // expertFormRef.value.openApply(type, value)
+ const routePath = '/checkProgress';
+ const resolvedRoute = router.resolve(routePath);
+ const fullPath = resolvedRoute.href
+ window.open(fullPath, '_blank');
+}
+
function handleLogin() {
proxy.$refs.loginRef.validate(valid => {
if (valid) {
@@ -218,42 +243,83 @@
</script>
<style lang='scss' scoped>
+@font-face {
+ font-family: "AliMa";
+ src: url("@/assets/styles/font/AlimamaShuHeiTi-Bold.ttf");
+ font-style: normal;
+ font-weight: normal;
+}
.login-panel{
width: 100%;
height: 100%;
- display: flex;
+ background: url("@/assets/images/loginBg.jpg") no-repeat center;
+ background-size: cover;
justify-content: center;
align-items: center;
+
}
.login-img{
- flex: 1;
display: flex;
justify-content: center;
align-items: center;
- img{
- width: 100%;
- }
+ font-family: 'AliMa';
+ color: #fff;
+ font-size: 3.2rem;
+ text-align: center;
+ line-height: 1.5;
+ transform: translateY(-80px);
+ text-shadow: -10px 10px 20px rgba(0,0,0,.4);
}
-.login-form {
- flex: 2;
- padding: 10px;
-
- .title{
- margin: 20px 0;
+.login-box{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ transform: translateY(-40px);
+ .login-card{
+ width: 500px;
+ padding: 30px;
+ border-radius: 16px;
+ background-color: rgba(255,255,255,.2);
+ backdrop-filter: blur(5px);
+ -webkit-backdrop-filter: blur(5px);
+ border: 1px solid rgba(255,255,255,.4);
+ max-width: 100%;
+ box-sizing: border-box;
+ box-shadow: 0 10px 20px rgba(0,0,0,.05);
}
+ .login-form {
+ width: 100%;
+ box-sizing: border-box;
- .el-input {
- height: 40px;
- input {
- height: 40px;
+ .title{
+ margin: 0 0 30px;
+ text-align: center;
+ color: #fff
+ }
+
+ .el-form-item{
+ margin-bottom: 30px;
+ }
+
+ .el-input {
+ height: 48px;
+ input {
+ height: 48px;
+ }
+ }
+ .input-icon {
+ height: 39px;
+ width: 14px;
+ margin-left: 0px;
}
}
- .input-icon {
- height: 39px;
- width: 14px;
- margin-left: 0px;
+ .other-btns{
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
}
}
+
.login-tip {
font-size: 13px;
text-align: center;
@@ -261,11 +327,12 @@
}
.login-code {
width: 33%;
- height: 40px;
+ height: 48px;
float: right;
- img {
+ .login-code-img {
display: inline-block;
width: 100%;
+ padding-left: 12px;
cursor: pointer;
vertical-align: middle;
}
@@ -279,8 +346,45 @@
display: flex;
justify-content: space-between;
}
-.login-code-img {
- height: 40px;
- padding-left: 12px;
+
+.login-btn {
+ width: 100%;
+ font-size: 1.2em;
+ padding: 0.6em 0.8em;
+ border-radius: 0.5em;
+ border: none;
+ background-color: #2563EB;
+ color: #fff;
+ cursor: pointer;
+ box-shadow: 2px 2px 3px #000000b4;
}
+
+.btn-cont {
+ width: 100%;
+ position: relative;
+ padding: 3px;
+ background: #03a9f4;
+ border-radius: 0.9em;
+ transition: all 0.3s ease;
+}
+
+.btn-cont::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ margin: auto;
+ border-radius: 0.9em;
+ z-index: -10;
+ filter: blur(0);
+ transition: filter 0.4s ease;
+}
+
+.btn-cont:hover::before {
+ background: #2559c9;
+ filter: blur(0.6em);
+}
+.btn-cont:active::before {
+ filter: blur(0.1em);
+}
+
</style>
diff --git a/src/views/homePage.vue b/src/views/homePage.vue
index 4cc13a1..cb4614f 100644
--- a/src/views/homePage.vue
+++ b/src/views/homePage.vue
@@ -1,51 +1,6 @@
<template>
<div class="login">
-<!-- <img class="pics1" src="src/assets/images/login-data.png">-->
-<!-- <img class="pics2" src="src/assets/images/login-search.png">-->
- <div class="main-content">
- <div class="top" style="z-index: 1">
- <div class="top-cont">
- <div class="logo blueFont">新疆维吾尔自治区智慧安评服务平台</div>
- <div class="time">
- <div>
- <span>{{state.date}}</span>
- <span>{{state.weekDay}}</span>
- </div>
- <div>
- {{state.dayTime}}好!
- </div>
- </div>
- </div>
- </div>
-
- <div class="nav blueBg" style="z-index: 1">
- <div class="nav-cont">
- <div :class="state.activeMenu == 1?'active': ''" @click="changeTab(1)">
- <HomeFilled style="width: 1em; height: 1em; margin-right: 8px" />
- <div>首页</div>
- </div>
- <div :class="state.activeMenu == 2?'active': ''" @click="changeTab(2)">
- <Comment style="width: 1em; height: 1em; margin-right: 8px" />
- <div>通知公告</div>
- </div>
- <div :class="state.activeMenu == 3?'active': ''" @click="changeTab(3)">
- <BellFilled style="width: 1em; height: 1em; margin-right: 8px" />
- <div>法律法规</div>
- </div>
- <div :class="state.activeMenu == 4?'active': ''" @click="changeTab(4)">
- <List style="width: 1em; height: 1em; margin-right: 8px" />
- <div>机构公示</div>
- </div>
- </div>
- </div>
- <div class="content">
- <Home v-if="state.activeMenu==1" ref="homeRef" @toMore="changeTab" @openDetails="openDetails"/>
- <Notice v-if="state.activeMenu==2" ref="noticeRef" @openDetails="openDetails"/>
- <Laws v-if="state.activeMenu==3" ref="lawsRef" @openDetails="openDetails"/>
- <Publish v-if="state.activeMenu==4" ref="publishRef" @openDetails="openDetails"/>
- <Details v-if="state.activeMenu==0" ref="detailsRef" @backJump="changeTab"></Details>
- </div>
- </div>
+ <login-form ref="loginRef"/>
<!-- 底部 -->
<div class="el-login-footer">
<span>Copyright ©2023-{{nowYear}} All Rights Reserved.</span>
@@ -56,11 +11,7 @@
<script setup>
import {onMounted, ref, reactive, watch, defineAsyncComponent, nextTick, onUnmounted} from "vue"
import useUserStore from '@/store/modules/user'
-import Home from './components/home'
-import Notice from './components/notice'
-import Laws from './components/laws'
-import Publish from './components/publish'
-import Details from './components/details.vue'
+import LoginForm from './components/loginForm'
const { proxy } = getCurrentInstance()
const route = useRoute()
const router = useRouter()
@@ -76,11 +27,8 @@
second: '2-digit'
}
-const homeRef = ref(null)
const noticeRef = ref(null)
-const lawsRef = ref(null)
-const publishRef = ref(null)
-const detailsRef = ref(null)
+
const state = reactive({
activeMenu: 1,
date: '',
@@ -130,19 +78,6 @@
redirect.value = newRoute.query && newRoute.query.redirect;
}, { immediate: true });
-const changeTab=(num)=>{
- state.activeMenu = num
-}
-
-const openDetails=(type,id)=>{
- state.activeMenu = 0
- nextTick(() => {
- proxy.$refs.detailsRef.openDetail(type,id)
- })
- // detailsRef.value.openDetail(type,id)
-
-}
-
</script>
<style lang='scss' scoped>
@@ -151,104 +86,6 @@
display: flex;
justify-content: center;
height: 100%;
-
- .main-content{
- width: 100%;
- display: flex;
- flex-direction: column;
- color: #333;
-
- .top{
- width: 100%;
- background: rgba(249,250,251,1);
- position: fixed;
- top: 0;
- left: 0;
- display: flex;
- align-items: center;
- justify-content: center;
- .top-cont{
- width: 1200px;
- height: 80px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin: 0 auto;
-
- .logo{
- font-size: 2rem;
- font-weight: 800;
- height: 80px;
- line-height: 80px;
- font-family: "PingFang SC";
- }
-
- .time{
- font-size: 16px;
- height: 80px;
- display: flex;
- flex-direction: column;
- justify-content: center;
- span{
- &:first-of-type{
- margin-right: 10px;
- }
- }
- }
- }
- }
-
-
- .nav{
- width: 100%;
- height: 70px;
- position: fixed;
- top: 80px;
- left: 0;
- .nav-cont{
- width: 1200px;
- height: 70px;
- margin: 0 auto;
- display: flex;
- align-items: center;
- justify-content: left;
-
- &>div{
- height: 100%;
- padding: 0 50px;
- color: #ffffff;
- background-color: #385ca7;
- font-size: 20px;
- text-decoration: none;
- display: flex;
- align-items: center;
- justify-content: center;
- cursor: pointer;
-
- &:hover{
- background: #294582;
- }
- }
- .active{
- background: #294582;
- }
- }
- }
- }
-}
-.pics1{
- position: absolute;
- width: 500px;
- bottom: 0;
- right: 0;
- opacity: 0.5;
-}
-.pics2{
- position: absolute;
- width: 500px;
- top: 20px;
- left: 20px;
- opacity: 0.5;
}
.el-login-footer {
@@ -259,8 +96,6 @@
width: 100%;
text-align: center;
color: #fff;
- background: #385ca7;
- font-family: "PingFang SC";
font-size: 12px;
letter-spacing: 1px;
}
diff --git a/src/views/index.vue b/src/views/index.vue
index 1c78965..cf1f44d 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -41,7 +41,7 @@
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>若依后台管理框架</h2>
<p>
- 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了智慧安评,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
+ 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了专家管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
</p>
<p>
<b>当前版本:</b> <span>v{{ version }}</span>
diff --git a/src/views/safetyReview/expertManage/applyRecords/index.vue b/src/views/safetyReview/expertManage/applyRecords/index.vue
index 39b5188..96084d0 100644
--- a/src/views/safetyReview/expertManage/applyRecords/index.vue
+++ b/src/views/safetyReview/expertManage/applyRecords/index.vue
@@ -201,7 +201,6 @@
const openDialog = (type, value) => {
expertFormRef.value.openDialog(type, value)
-
}
const handleDelete = (val) => {
diff --git a/src/views/safetyReview/expertManage/checkProgress/index.vue b/src/views/safetyReview/expertManage/checkProgress/index.vue
index 543b20b..30173e0 100644
--- a/src/views/safetyReview/expertManage/checkProgress/index.vue
+++ b/src/views/safetyReview/expertManage/checkProgress/index.vue
@@ -1,333 +1,57 @@
<template>
- <div class="form-container">
- <div class="main-title" style="font-size: 24px;font-weight: bolder;text-align: center;margin: 40px 0">专家信息录入</div>
- <div class="main_form">
- <el-form :model="state.form" :rules="state.rules" ref="ruleFormRef" label-width="200px">
- <el-row>
- <el-col :span="20">
- <el-form-item label="专业类别" prop="profession">
- <el-cascader
- style="width: 100%"
- v-model="state.form.profession"
- :options="state.expertsType"
- :props="{ expandTrigger: 'hover',value: 'id',label: 'classifyName' }"
- @change="professionChange"></el-cascader>
- </el-form-item>
- </el-col>
- </el-row>
- <!-- <el-row>-->
- <!-- <el-col :span="20">-->
- <!-- <el-form-item label="填报日期" prop="date">-->
- <!-- <el-date-picker-->
- <!-- style="width: 100%"-->
- <!-- v-model="form.date"-->
- <!-- type="date"-->
- <!-- placeholder="选择日期">-->
- <!-- </el-date-picker>-->
- <!-- </el-form-item>-->
- <!-- </el-col>-->
- <!-- </el-row>-->
- <el-row>
- <el-col :span="20">
- <el-form-item label="姓名" prop="name">
- <el-input v-model="state.form.name"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="性别" prop="sex">
- <el-radio-group v-model="state.form.sex">
- <el-radio :label="0">男</el-radio>
- <el-radio :label="1">女</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="出生日期" prop="birthday">
- <el-date-picker
- style="width: 100%"
- v-model="state.form.birthday"
- value-format="YYYY-MM-DD 00:00:00"
- type="date"
- placeholder="选择日期">
- </el-date-picker>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="联系电话" prop="phone">
- <el-input v-model="state.form.phone"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="职称" prop="title">
- <!-- <el-select v-model="form.title" placeholder="请选择" style="width: 100%">-->
- <!-- <el-option-->
- <!-- v-for="item in professionalList"-->
- <!-- :key="item.value"-->
- <!-- :label="item.label"-->
- <!-- :value="item.value">-->
- <!-- </el-option>-->
- <!-- </el-select>-->
- <el-input v-model="state.form.title"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="证件照" prop="electronicPhoto">
- <el-upload accept="image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'证件照')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.fileList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'证件照')" :before-remove="beforeRemove">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="身份证号" prop="idCard">
- <el-input v-model="state.form.idCard"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="在岗情况" prop="dutyStatus">
- <el-radio-group v-model="state.form.dutyStatus">
- <el-radio :label="0">在岗</el-radio>
- <el-radio :label="1">退休</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="单位全称" prop="companyName">
- <el-input v-model="state.form.companyName"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="单位地址">
- <el-input v-model="state.form.companyAddress"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="所在部门">
- <el-input v-model="state.form.deptName"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="职务">
- <el-input v-model="state.form.job"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="单位电话">
- <el-input v-model="state.form.companyTelephone"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="传真号码">
- <el-input v-model="state.form.faxNum"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="电子邮箱">
- <el-input v-model="state.form.email"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="毕业学校">
- <el-input v-model="state.form.graduationSchool"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="最高学历" prop="degree">
- <el-input v-model="state.form.degree"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="所学专业">
- <el-input v-model="state.form.speciality"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="现从事的专业及方向">
- <el-input v-model="state.form.currentProfession"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="支撑方向_安全生产" prop="supportDirectionSafety">
- <!-- <el-radio-group v-model="form.supportDirectionSafety">-->
- <!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
- <!-- </el-radio-group>-->
- <el-checkbox-group v-model="state.form.supportDirectionSafety">
- <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="支撑方向_防灾减灾救灾" prop="supportDirectionPrevention">
- <!-- <el-radio-group v-model="form.supportDirectionPrevention">-->
- <!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
- <!-- </el-radio-group>-->
- <el-checkbox-group v-model="state.form.supportDirectionPrevention">
- <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="支撑方向_应急救援" prop="supportDirectionEmergency">
- <!-- <el-radio-group v-model="form.supportDirectionEmergency">-->
- <!-- <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
- <!-- </el-radio-group>-->
- <el-checkbox-group v-model="state.form.supportDirectionEmergency">
- <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
- </el-checkbox-group>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="工作简历">
- <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'简历')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.resumeList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'简历')" :before-remove="beforeRemove">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="发明、著作、学术论文情况(何时、何地出版或发表)">
- <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'著作')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.inventionList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'著作')" :before-remove="beforeRemove">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="受过何种奖励">
- <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'奖励')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.rewardList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'奖励')" :before-remove="beforeRemove">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="应急管理相关工作主要业绩及研究成果">
- <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'研究')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.achievementList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'研究')" :before-remove="beforeRemove">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="专家本人意见">
- <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'本人')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.proAdviceList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'本人')" :before-remove="beforeRemove">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="推荐单位意见">
- <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'单位')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.adviceList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'单位')" :before-remove="beforeRemove">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="20">
- <el-form-item label="补充说明">
- <el-input v-model="state.form.remark" type="textarea" :autosize="{ minRows: 2}"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <el-dialog v-model="imgDialog">
- <img w-full :src="state.dialogImageUrl" alt="">
- </el-dialog>
- </div>
- <div style="width: 100%;display: flex;justify-content: center;margin: 20px 0">
- <el-button type="primary" @click="onSubmit(ruleFormRef)" size="large" v-preReClick style="width: 40%">确认</el-button>
- </div>
+ <div class="form-container">
+ <el-dialog
+ v-model="dialogVisible"
+ title="专家申请进度查询"
+ width="550px"
+ :before-close="handleClose"
+ center
+ >
+ <el-form :model="state.form" size="default" ref="formRef" :rules="state.formRules" label-width="110px" >
+ <el-form-item label="身份证号:" prop="idCard">
+ <el-input v-model.trim="state.form.idCard" placeholder="请输入身份证号"></el-input>
+ </el-form-item>
+ <el-form-item label="手机号:" prop="phone">
+ <el-input v-model.trim="state.form.phone" placeholder="请输入申报时预留的手机号"></el-input>
+ </el-form-item>
+ <el-form-item label="业务处室:" prop="roomId">
+ <el-select v-model="state.form.roomId" style="width: 100%" class="m-2" placeholder="请选择申请的业务处室">
+ <el-option
+ v-for="item in state.agencyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ />
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button type="primary" @click="onSubmit" size="default" v-preReClick>进度查询</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <div class="pro-map">
+ <button class="pro-btn-active">申请提交</button>
+ <button class="pro-btn">
+ <span>待评定</span>
+ </button>
+ <button class="pro-btn">
+ 专家入库
+ </button>
+ <button class="pro-btn">
+ 专家证书下载
+ </button>
</div>
+ </div>
</template>
<script setup>
import {reactive, ref, toRefs, defineEmits, nextTick, onMounted} from 'vue'
import {ElMessage, ElMessageBox} from "element-plus"
import {verifyPhone, verifyIdCard} from "../../../../utils/validate"
-import {addExpertInfo, getExpertTypes, uploadFile} from "@/api/form"
-import {delPic} from "@/api/login"
import { getToken } from "@/utils/auth"
-import {Base64} from "js-base64"
-const imgDialog = ref(false)
-const ruleFormRef = ref()
-var validatePass = (rule, value, callback) => {
- if (state.fileList.length == 0) {
- callback(new Error('请上传证件照'));
- } else {
- callback();
- }
-}
+
let validatePhone = (rule, value, callback)=>{
if(value === ''){
callback(new Error('请输入手机号'))
@@ -351,255 +75,37 @@
}
}
+const dialogVisible = ref(false)
+const formRef = ref()
+const handleClose = () => {
+ reset();
+ formRef.value.clearValidate();
+ dialogVisible.value = false;
+}
+
+
const state = reactive({
form:{
- name:'',
- sex:'',
- profession: [],
- bigClassify:null,
- smallClassify: null,
- birthday: '',
- phone:'',
- title: '',
- electronicPhoto: '',
- idCard: '',
- dutyStatus: null,
- companyName: '',
- companyAddress: '',
- deptName: '',
- job: '',
- companyTelephone: '',
- faxNum: '',
- email: '',
- graduationSchool: '',
- degree: '',
- speciality: '',
- currentProfession: '',
- supportDirectionSafety: [],
- supportDirectionPrevention: [],
- supportDirectionEmergency: [],
- resumeKey: '',
- paperSituationKey: '',
- rewardKey: '',
- achievementKey: '',
- personalOpinionKey: '',
- recommendUnitOpinionKey: '',
- remark: '',
- source: 1
+ idCard: null,
+ phone: '',
+ roomId: null
},
- expertsType: [],
- directionList: [
- {
- value: 1,
- label: '现场检查'
- },
- {
- value: 2,
- label: '调查评估'
- },
- {
- value: 3,
- label: '咨询服务'
- },
- {
- value: 4,
- label: '教育培训'
- },
- {
- value: 5,
- label: '其他'
- }
- ],
- uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
- header: {
- Authorization: 'Bearer ' + getToken()
- },
- fileList: [],
- resumeList: [],
- inventionList: [],
- rewardList: [],
- achievementList: [],
- proAdviceList: [],
- adviceList: [],
- dialogImageUrl: '',
- rules:{
- name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
- sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
- profession: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
- birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
+ formRules:{
+ idCard:[{ required: true, validator: verifyId, trigger: 'blur' }],
phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
- title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
- electronicPhoto: [{ required: true,validator: validatePass, trigger: 'blur' }],
- idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
- dutyStatus: [{ required: true, message: '请选择在岗情况', trigger: 'blur' }],
- companyName: [{ required: true, message: '请填写单位全称', trigger: 'blur' }],
- degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }]
+ roomId: [{ required: true, message: '请选择申请的业务处室', trigger: 'blur' }]
}
})
- onMounted(()=>{
- getExpertsType()
- })
+onMounted(()=>{
- const getExpertsType = async ()=>{
- const res = await getExpertTypes()
- if(res.code == 200){
- state.expertsType = res.data
- }else{
- ElMessage({
- type: 'warning',
- message: res.message
- });
- }
- }
-
- const professionChange=(value)=> {
- console.log(value,'val')
- }
-
-
-
- // 图片上传
- const showTip =()=>{
- ElMessage({
- type: 'warning',
- message: '超出文件上传数量'
- });
- }
-
- const picSize = async (rawFile) => {
- if(rawFile.size / 1024 / 1024 > 5){
- ElMessage({
- type: 'warning',
- message: '文件大小不能超过5M'
- });
- return false
- }
- };
-
- const handlePictureCardPreview = (uploadFile) => {
- state.dialogImageUrl = uploadFile.url
- imgDialog.value = true;
- }
-
- const handleAvatarSuccess = (res, uploadFile,type) => {
- if(res.code == 200){
- if(type == '证件照'){
- state.form.electronicPhoto = res.data.path
- }else{
- uploadFile.name = res.data.path
- }
- }else{
- ElMessage({
- type: 'warning',
- message: '文件上传失败'
- })
- }
- }
-
- const handleRemove = (file, uploadFiles,type) => {
- if(file && file.status == 'success') {
- ElMessageBox.confirm(
- '该操作将永久删除此文件内容,是否继续?',
- '提示',
- {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- })
- .then(async () => {
- let path = ''
- if (type == '证件照') {
- path = state.form.electronicPhoto
- } else {
- path = file.name
- }
- const res = await delPic({path: path})
- if (res.code == 200) {
- ElMessage({
- type: 'success',
- message: '文件已删除'
- })
- } else {
- ElMessage({
- type: 'warning',
- message: res.message
- })
- }
- })
- }
- }
+})
const onSubmit = async (formEl)=> {
if (!formEl) return
await formEl.validate(async (valid, fields) => {
if (valid) {
- if(state.form.supportDirectionSafety.length==0&&state.form.supportDirectionSafety.length==0&&state.form.supportDirectionSafety.length==0){
- ElMessage.warning('请至少选择一种支撑方向')
- return
- }
- let data = JSON.parse(JSON.stringify(state.form))
- data.supportDirectionSafety = data.supportDirectionSafety.join(',')
- data.supportDirectionPrevention = data.supportDirectionPrevention.join(',')
- data.supportDirectionEmergency = data.supportDirectionEmergency.join(',')
- data.bigClassify = data.profession[0]
- data.smallClassify = data.profession[1]
- data.resumeKey = state.resumeList.map(i=>i.name).join(',')
- data.paperSituationKey = state.inventionList.map(i=>i.name).join(',')
- data.rewardKey = state.rewardList.map(i=>i.name).join(',')
- data.achievementKey = state.achievementList.map(i=>i.name).join(',')
- data.personalOpinionKey = state.proAdviceList.map(i=>i.name).join(',')
- data.recommendUnitOpinionKey = state.adviceList.map(i=>i.name).join(',')
- delete data.profession
- delete data.id
- const res= await addExpertInfo(data)
- if(res.code == 200){
- ElMessage.success(res.message)
- state.form = {
- name:'',
- sex:'',
- profession: [],
- bigClassify:null,
- smallClassify: null,
- birthday: '',
- phone:'',
- title: '',
- electronicPhoto: '',
- idCard: '',
- dutyStatus: null,
- companyName: '',
- companyAddress: '',
- deptName: '',
- job: '',
- companyTelephone: '',
- faxNum: '',
- email: '',
- graduationSchool: '',
- degree: '',
- speciality: '',
- currentProfession: '',
- supportDirectionSafety: [],
- supportDirectionPrevention: [],
- supportDirectionEmergency: [],
- resumeKey: '',
- paperSituationKey: '',
- rewardKey: '',
- achievementKey: '',
- personalOpinionKey: '',
- recommendUnitOpinionKey: '',
- remark: '',
- source: 1
- }
- state.fileList = []
- state.resumeList = []
- state.inventionList = []
- state.rewardList = []
- state.achievementList = []
- state.proAdviceList = []
- state.adviceList = []
- }else{
- ElMessage.warning(res.message)
- }
+
} else {
ElMessage.warning('请完善必填信息')
}
@@ -610,15 +116,40 @@
<style scoped lang="scss">
.form-container{
- padding: 20px;
+ padding: 20px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
- :deep(.el-form .el-form-item__label) {
- font-size: 15px;
+ .pro-map{
+ width: 75%;
+ margin-top: 40px;
+ display: flex;
+ justify-content: space-around;
+
+ .pro-btn {
+ width: calc(25% - 20px);
+ color: #fff;
+ cursor: pointer;
+ border: 1px solid #000;
+ border-radius: 40px 99px 99px 40px;
+ padding: 2em 4em;
+ background: #000;
+ transition: 0.2s;
}
- .file {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
+
+ .pro-btn-active {
+ width: calc(25% - 20px);
+ color: #fff;
+ cursor: pointer;
+ border: 1px solid #000;
+ border-radius: 40px 99px 99px 40px;
+ padding: 2em 4em;
+ transition: 0.2s;
+ transform: translate(-0.25rem, -0.25rem);
+ background: #03a9f4;
+ box-shadow: 0.25rem 0.25rem #000;
}
+ }
}
</style>
diff --git a/src/views/safetyReview/projectSupplement/components/supplemenrtDialog.vue b/src/views/safetyReview/projectSupplement/components/supplemenrtDialog.vue
index ef6fed9..2d08881 100644
--- a/src/views/safetyReview/projectSupplement/components/supplemenrtDialog.vue
+++ b/src/views/safetyReview/projectSupplement/components/supplemenrtDialog.vue
@@ -234,7 +234,6 @@
const handleClose = () => {
reset();
suppleRef.value.clearValidate();
-
dialogVisible.value = false;
}
const reset = () => {
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index e013bb7..a4a3c8d 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -26,26 +26,26 @@
</el-form-item>
</el-form>
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5">
- <el-button
- type="primary"
- plain
- icon="Plus"
- @click="handleAdd"
- v-hasPermi="['system:dept:add']"
- >新增</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="info"
- plain
- icon="Sort"
- @click="toggleExpandAll"
- >展开/折叠</el-button>
- </el-col>
- <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
- </el-row>
+<!-- <el-row :gutter="10" class="mb8">-->
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="primary"-->
+<!-- plain-->
+<!-- icon="Plus"-->
+<!-- @click="handleAdd"-->
+<!-- v-hasPermi="['system:dept:add']"-->
+<!-- >新增</el-button>-->
+<!-- </el-col>-->
+<!-- <el-col :span="1.5">-->
+<!-- <el-button-->
+<!-- type="info"-->
+<!-- plain-->
+<!-- icon="Sort"-->
+<!-- @click="toggleExpandAll"-->
+<!-- >展开/折叠</el-button>-->
+<!-- </el-col>-->
+<!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>-->
+<!-- </el-row>-->
<el-table
v-if="refreshTable"
@@ -142,13 +142,14 @@
<script setup name="Dept">
import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from "@/api/system/dept";
+import {onMounted,ref} from "vue";
const { proxy } = getCurrentInstance();
-const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
+// const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
const deptList = ref([]);
const open = ref(false);
-const loading = ref(true);
+const loading = ref(false);
const showSearch = ref(true);
const title = ref("");
const deptOptions = ref([]);
@@ -171,6 +172,10 @@
});
const { queryParams, form, rules } = toRefs(data);
+
+onMounted(()=>{
+ // getList()
+})
/** 查询部门列表 */
function getList() {
@@ -269,6 +274,4 @@
proxy.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
-
-getList();
</script>
--
Gitblit v1.9.2