From 12a7587eb12e3d33809ef9c169dd76b20ac707c4 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期三, 13 十一月 2024 10:23:47 +0800 Subject: [PATCH] 修改 --- 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/views/safetyReview/expertManage/experts/index.vue | 26 - 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 20 files changed, 401 insertions(+), 991 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/expertManage/experts/index.vue b/src/views/safetyReview/expertManage/experts/index.vue index 2b323ff..56c3b88 100644 --- a/src/views/safetyReview/expertManage/experts/index.vue +++ b/src/views/safetyReview/expertManage/experts/index.vue @@ -55,7 +55,7 @@ <el-table-column label="单位全称" align="center" prop="companyName"/> <el-table-column label="现从事专业及方向" align="center" prop="currentProfession"/> <el-table-column label="联系方式" align="center" prop="phone"/> - <el-table-column label="支撑方向" align="center" prop="supportName" width="100"/> + <el-table-column label="支撑方向" align="center" prop="supportDirectionSafety"/> <el-table-column label="专家领域" align="center" prop="domain"/> <el-table-column label="入库分级" align="center" prop="level"/> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> @@ -173,30 +173,8 @@ data.expertList = res.data.list.map(item => { return{ ...item, - birthdayName: item.birthday ? item.birthday.slice(0,10) : '', - supportName: item.supportDirectionSafety.split(',') + birthdayName: item.birthday ? item.birthday.slice(0,10) : '' } - }) - data.expertList.forEach(item => { - item.supportName.forEach((s,index) => { - switch (s){ - case '1': - item.supportName[index] = '现场检查' - break; - case '2': - item.supportName[index] = '调查评估' - break; - case '3': - item.supportName[index] = '咨询服务' - break; - case '4': - item.supportName[index] = '教育培训' - break; - case '5': - item.supportName[index] = '其他' - break; - } - }) }) data.total = res.data.total }else{ 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