src/api/home/homePage.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/images/avator.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/styles/sidebar.scss | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/layout/components/Navbar.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/layout/components/Register/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/components/details.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/components/home.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/components/laws.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/components/loginForm.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/components/notice.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/components/publish.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/homePage.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/home/homePage.js
@@ -9,6 +9,15 @@ }) } // 获取详情 export function getNoticeDetails(params) { return request({ url: '/system/notice/getNoticeById', method: 'get', params: params }) } // 获取分页 export function getLaws(params) { return request({ @@ -18,6 +27,15 @@ }) } // 获取详情 export function getLawsDetails(params) { return request({ url: '/system/law/getLawById', method: 'get', params: params }) } // 获取分页 export function getPublish(params) { return request({ @@ -25,4 +43,13 @@ method: 'get', params: params }) } // 获取详情 export function getPublishDetails(params) { return request({ url: '/system/agency/getAgencyById', method: 'get', params: params }) } src/assets/images/avator.png
src/assets/styles/sidebar.scss
@@ -120,7 +120,7 @@ } .main-container { margin-left: 54px; margin-left: 84px; } .sub-menu-title-noDropdown { src/layout/components/Navbar.vue
@@ -25,7 +25,8 @@ <div class="avatar-container"> <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click"> <div class="avatar-wrapper"> <img :src="userStore.avatar" class="user-avatar" /> <!-- <img :src="userStore.avatar" class="user-avatar" />--> <img src="../../assets/images/avator.png" class="user-avatar" /> <el-icon><caret-bottom /></el-icon> </div> <template #dropdown> src/layout/components/Register/index.vue
@@ -179,12 +179,12 @@ </el-col> <el-col :span="8"> <el-form-item prop="agency.business" label="申请的法定安全评价业务范围"> <el-select v-model="registerForm.agency.business" placeholder="请选择业务范围" size="large" style="width: 100%"> <el-select v-model="registerForm.agency.business" placeholder="请选择业务范围" multiple size="large" style="width: 100%"> <el-option v-for="item in state.busList" :key="item.id" :label="item.label" :value="item.label" :value="item.id" /> </el-select> </el-form-item> @@ -516,6 +516,7 @@ loading.value = true; const {confirmPassword, ...data} = registerForm.value data.password = Base64.encode(data.password) data.agency.business = data.agency.business.join(',') delete data.agency.area register(data).then(res => { if(res.code == 200){ src/views/components/details.vue
@@ -6,34 +6,95 @@ <Location /> </el-icon> <span>我的位置:</span> <el-breadcrumb :separator-icon="ArrowRight"> <el-breadcrumb-item><a href="#" @click="back">{{ state.firstClass }}</a></el-breadcrumb-item> <el-breadcrumb-item>查看详情</el-breadcrumb-item> </el-breadcrumb> </div> <el-breadcrumb :separator-icon="ArrowRight"> <el-breadcrumb-item>{{ state.firstClass }}</el-breadcrumb-item> <el-breadcrumb-item>{{state.firstClass}}</el-breadcrumb-item> </el-breadcrumb> <div> <el-button plain @click="back">返回上级</el-button> </div> </div> <div class="main"> <div class="main" v-if="state.firstClass == '通知公告'"> <div class="title">{{state.content.title}}</div> <el-divider border-style="dashed"/> <div class="time">更新时间:{{state.content.updateTime?state.content.updateTime:state.content.createTime}}</div> <div v-html="state.content.content"></div> </div> <div class="main" v-if="state.firstClass == '法律法规'"> <div class="title">{{state.content.title}}</div> <div class="sub-title">{{state.content.subTitle}}</div> <div class="info"><span>法律法规类别:{{state.content.lawType}}</span><span>颁布机构:{{state.content.pubAgency}}</span><span>颁布日期:{{state.content.pubDate}}</span></div> <el-divider border-style="dashed"/> <div class="time">更新时间:{{state.content.updateTime?state.content.updateTime:state.content.createTime}}</div> <div v-html="state.content.content"></div> </div> <div class="main" v-if="state.firstClass == '机构公示'"> <div class="title">{{state.content.name}}</div> <el-divider border-style="dashed"/> <div class="time">更新时间:{{state.content.updateTime?state.content.updateTime:state.content.createTime}}</div> <el-row> <el-col :span="4">所在地区:</el-col> <el-col :span="8">{{state.content.province}}<span v-if="state.content.province&&state.content.city">/</span>{{state.content.city}}<span v-if="state.content.city&&state.content.district">/</span>{{state.content.district}}</el-col> <el-col :span="4">详细地址:</el-col> <el-col :span="8">{{state.content.address}}</el-col> </el-row> <el-row> <el-col :span="4">社会信用代码:</el-col> <el-col :span="8">{{state.content.creditCode}}</el-col> <el-col :span="4">资质证书编号:</el-col> <el-col :span="8">{{state.content.certNumber}}</el-col> </el-row> <el-row> <el-col :span="4">发证日期:</el-col> <el-col :span="8">{{state.content.issueDate}}</el-col> <el-col :span="4">有效日期:</el-col> <el-col :span="8">{{state.content.validDate}}</el-col> </el-row> <el-row> <el-col :span="4">办公场所面积:</el-col> <el-col :span="8">{{state.content.workArea}}㎡</el-col> <el-col :span="4">档案室面积:</el-col> <el-col :span="8">{{state.content.archiveArea}}㎡</el-col> </el-row> <el-row> <el-col :span="4">法定代表人:</el-col> <el-col :span="8">{{state.content.legalPerson}}</el-col> <el-col :span="4">法人电话:</el-col> <el-col :span="8">{{state.content.legalPhone}}</el-col> </el-row> <el-row> <el-col :span="4">机构负责人:</el-col> <el-col :span="8">{{state.content.manager}}</el-col> <el-col :span="4">负责人电话:</el-col> <el-col :span="8">{{state.content.managerPhone}}</el-col> </el-row> <el-row> <el-col :span="4">业务范围:</el-col> <el-col :span="20">{{state.content.business}}</el-col> </el-row> </div> </div> </template> <script setup> import {onMounted, ref, reactive, watch, onUnmounted, defineExpose} from "vue" import {onMounted, ref, reactive, watch, onUnmounted, defineExpose, defineEmits} from "vue" import { ArrowRight } from '@element-plus/icons-vue' import {ElMessage} from "element-plus"; import {getLawsDetails, getNoticeDetails, getPublishDetails} from "../../api/home/homePage"; import { getDict } from "@/api/login" const route = useRoute() const router = useRouter() const redirect = ref(undefined); const state = reactive({ firstClass: '第一级菜单' firstClass: '', content: {}, busList: [] }) const emit = defineEmits(['backJump']) onMounted(()=>{ getBusiness() }) onUnmounted(()=>{ @@ -44,9 +105,76 @@ redirect.value = newRoute.query && newRoute.query.redirect; }, { immediate: true }); const openDetail = async (type,id)=>{ state.content = {} state.firstClass = type if(type == '通知公告'){ const res = await getNoticeDetails({noticeId: id}) if(res.code == 200){ state.content = res.data if(state.content.updateTime){state.content.updateTime.substring(0.,16)} state.content.createTime = state.content.createTime.substring(0.,16) }else{ ElMessage.warning(res.message) } } if(type == '法律法规'){ const res = await getLawsDetails({lawId: id}) if(res.code == 200){ state.content = res.data if(state.content.updateTime){state.content.updateTime.substring(0.,16)} state.content.createTime = state.content.createTime.substring(0.,16) }else{ ElMessage.warning(res.message) } } if(type == '机构公示'){ const res = await getPublishDetails({agencyId: id}) if(res.code == 200){ state.content = res.data if(state.content.updateTime){state.content.updateTime.substring(0.,16)} state.content.createTime = state.content.createTime.substring(0.,16) state.content.issueDate = state.content.issueDate.substring(0,10) state.content.validDate = state.content.validDate.substring(0,10) state.content.business = getName(state.content.business) }else{ ElMessage.warning(res.message) } } } const back = ()=>{ if(state.firstClass == '通知公告'){ emit('backJump',2) } if(state.firstClass == '法律法规'){ emit('backJump',3) } if(state.firstClass == '机构公示'){ emit('backJump',4) } } const getBusiness = async ()=>{ const res = await getDict({dictType: 'sys_business_scope'}) if(res.code == 200){ state.busList = res.data }else{ ElMessage.warning(res.message) } } const getName = (str)=>{ const arr = str.split(',') const newArr = arr.map((item)=>{ return state.busList.find(i=>i.id == Number(item))?.label }) return newArr.join(',') } defineExpose({ openDetail }) </script> @@ -58,13 +186,85 @@ flex-direction: column; align-items: center; margin-top: 170px; .header{ width: 1200px; height: 60px; margin: 20px 0 0; padding: 0 15px; border-radius: 4px; background: #f5f5f5; display: flex; align-items: center; justify-content: space-between; &>div{ display: flex; align-items: center; } } .main{ width: 1200px; border-radius: 4px; box-shadow: 1px 1px 3px rgba(0,0,0,.04); padding: 20px 15px 40px; background: #fff; max-height: calc(100vh - 330px); overflow-y: auto; .title{ font-size: 1.8rem; color: #333; font-weight: bolder; text-align: center; } .sub-title{ font-size: 1.6rem; color: #333; text-align: center; margin: 10px 0; } .info{ display: flex; align-items: center; justify-content: space-around; text-align: center; font-size: 15px; color: #666; } .time{ display: flex; align-items: center; justify-content: space-around; text-align: center; font-size: 15px; color: #666; margin-bottom: 15px; } .el-row{ border: 1px solid #e6e6e6; border-bottom: none; font-size: 18px; color: #333; font-weight: 600; font-family: "PingFang SC"; &:last-of-type{ border-bottom: 1px solid #e6e6e6; } .el-col{ padding: 15px; border-right: 1px solid #e6e6e6; &:last-of-type{ border-right: none; } } .el-col-4{ color: #666; font-weight: normal; } } } } </style> src/views/components/home.vue
@@ -10,11 +10,11 @@ <el-button plain @click="toMore(2)">查看更多</el-button> </div> <div class="list"> <div v-for="item in state.noticeList"> <div v-for="item in state.noticeList" @click="openDetails('通知公告',item.id)"> <div><img src="src/assets/images/notice.png"></div> <div> <div>{{item.title}}</div> <span>{{item.updateTime}}</span> <span>{{(item.updateTime?item.updateTime:item.createTime).substring(0,16)}}</span> </div> </div> </div> @@ -28,11 +28,11 @@ <el-button plain @click="toMore(3)">查看更多</el-button> </div> <div class="list"> <div v-for="item in state.lawsList"> <div v-for="item in state.lawsList" @click="openDetails('法律法规',item.id)"> <div><img src="src/assets/images/laws.png"></div> <div> <div>{{item.title}}</div> <span>{{item.updateTime}}</span> <span>{{(item.updateTime?item.updateTime:item.createTime).substring(0,16)}}</span> </div> </div> </div> @@ -46,11 +46,11 @@ <el-button plain @click="toMore(4)">查看更多</el-button> </div> <div class="list"> <div v-for="item in state.pubList"> <div v-for="item in state.pubList" @click="openDetails('机构公示',item.id)"> <div><img src="src/assets/images/section.png"></div> <div> <div>{{item.name}}</div> <span>{{item.updateTime}}</span> <span>{{(item.updateTime?item.updateTime:item.createTime).substring(0,16)}}</span> </div> </div> </div> @@ -94,7 +94,7 @@ lawsList: [], pubList: [] }) const emit = defineEmits(["toMore"]) const emit = defineEmits(['toMore','openDetails']) const redirect = ref(undefined); onMounted(()=>{ @@ -115,6 +115,10 @@ emit('toMore',num) } const openDetails = (type,id)=>{ emit('openDetails',type,id) } const getNoticeList = async ()=>{ const res = await getNotice({title: '', content: '', pageNum: 1, pageSize: 5}) if(res.code == 200){ src/views/components/laws.vue
@@ -11,17 +11,17 @@ <el-button type="primary" :icon="Refresh" class="resetBtn">重置</el-button> </div> <div class="list"> <div v-for="item in state.dataList"> <div v-for="item in state.dataList" @click="openDetails('法律法规',item.id)"> <div> <div><img src="src/assets/images/article.png"></div> <div>{{item.title}}</div> </div> <span> {{item.updateTime}} {{(item.updateTime?item.updateTime:item.createTime).substring(0,16)}} </span> </div> </div> <div class="pag-container"> <div class="pag-container" v-if="state.total&&state.total>0"> <el-pagination v-model:current-page="state.querys.pageNum" v-model:page-size="state.querys.pageSize" @@ -37,12 +37,12 @@ </template> <script setup> import {onMounted, ref, reactive, watch, onUnmounted, defineExpose} from "vue" import {onMounted, ref, reactive, watch, onUnmounted, defineExpose, defineEmits} from "vue" import { getLaws } from '@/api/home/homePage' import useUserStore from '@/store/modules/user' import { Search, Refresh } from '@element-plus/icons-vue' import {ElMessage} from "element-plus"; const emit = defineEmits(['openDetails']) const route = useRoute() const router = useRouter() @@ -88,6 +88,10 @@ const handleCurrentChange = (val) => { state.querys.pageNum = val getData() } const openDetails = (type,id)=>{ emit('openDetails',type,id) } defineExpose({ @@ -142,6 +146,8 @@ .list{ padding: 15px 0; max-height: calc(100vh - 402px); overflow-y: auto; &>div{ display: flex; @@ -171,7 +177,7 @@ } } div:last-of-type{ width: 1000px; width: 900px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; src/views/components/loginForm.vue
@@ -134,22 +134,21 @@ // 调用action的登录方法 loginForm.value.password = Base64.encode(loginForm.value.password) userStore.login(loginForm.value).then(() => { const query = route.query; const otherQueryParams = Object.keys(query).reduce((acc, cur) => { if (cur !== "redirect") { acc[cur] = query[cur]; // const query = route.query; // const otherQueryParams = Object.keys(query).reduce((acc, cur) => { // if (cur !== "redirect") { // acc[cur] = query[cur]; // } // return acc; // }, {}); const userInfo = JSON.parse(Cookies.get('userInfo')) if(userInfo.identity === 0) { sidebarRouters.value = menu.adminMenu Cookies.set('routers',JSON.stringify(sidebarRouters.value)) } return acc; }, {}); const userInfo = JSON.parse(Cookies.get('userInfo')) if(userInfo.identity === 0) { sidebarRouters.value = menu.adminMenu Cookies.set('routers',JSON.stringify(sidebarRouters.value)) } console.log("sidebarRouters.value",sidebarRouters.value) router.push({ path: sidebarRouters.value[0].path }) router.push({ path: sidebarRouters.value[0].path }) // router.push({ path: redirect.value || "/", query: otherQueryParams }); }).catch(() => { loading.value = false; src/views/components/notice.vue
@@ -2,17 +2,17 @@ <div class="container"> <div class="main-content"> <div class="list"> <div v-for="item in state.dataList"> <div v-for="item in state.dataList" @click="openDetails('通知公告',item.id)"> <div> <div><img src="src/assets/images/article.png"></div> <div>{{item.title}}</div> </div> <span> {{item.updateTime}} {{(item.updateTime?item.updateTime:item.createTime).substring(0,16)}} </span> </div> </div> <div class="pag-container"> <div class="pag-container" v-if="state.total&&state.total>0"> <el-pagination v-model:current-page="state.querys.pageNum" v-model:page-size="state.querys.pageSize" @@ -28,11 +28,11 @@ </template> <script setup> import {onMounted, ref, reactive, watch, onUnmounted, defineExpose} from "vue" import {onMounted, ref, reactive, watch, onUnmounted, defineExpose, defineEmits} from "vue" import { getNotice } from '@/api/home/homePage' import useUserStore from '@/store/modules/user' import {ElMessage} from "element-plus"; const emit = defineEmits(['openDetails']) const route = useRoute() const router = useRouter() @@ -78,6 +78,10 @@ }else{ ElMessage.warning(res.message) } } const openDetails = (type,id)=>{ emit('openDetails',type,id) } defineExpose({ @@ -135,7 +139,7 @@ } } div:last-of-type{ width: 1000px; width: 900px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; src/views/components/publish.vue
@@ -23,17 +23,17 @@ <el-button type="primary" :icon="Refresh" class="resetBtn">重置</el-button> </div> <div class="list"> <div v-for="item in state.dataList"> <div v-for="item in state.dataList" @click="openDetails('机构公示',item.id)"> <div> <div><img src="src/assets/images/article.png"></div> <div>{{item.title}}</div> <div>{{item.name}}</div> </div> <span> {{item.updateTime}} {{(item.updateTime?item.updateTime:item.createTime).substring(0,16)}} </span> </div> </div> <div class="pag-container"> <div class="pag-container" v-if="state.total&&state.total>0"> <el-pagination v-model:current-page="state.querys.pageNum" v-model:page-size="state.querys.pageSize" @@ -49,11 +49,11 @@ </template> <script setup> import {onMounted, ref, reactive, watch, onUnmounted, defineExpose} from "vue" import {onMounted, ref, reactive, watch, onUnmounted, defineExpose, defineEmits} from "vue" import { getPublish } from '@/api/home/homePage' import { Search, Refresh } from '@element-plus/icons-vue' import {ElMessage} from "element-plus"; const emit = defineEmits(['openDetails']) const route = useRoute() const router = useRouter() @@ -100,6 +100,10 @@ const handleCurrentChange = (val) => { state.querys.pageNum = val getData() } const openDetails = (type,id)=>{ emit('openDetails',type,id) } defineExpose({ @@ -154,6 +158,8 @@ .list{ padding: 15px 0; max-height: calc(100vh - 402px); overflow-y: auto; &>div{ display: flex; @@ -183,7 +189,7 @@ } } div:last-of-type{ width: 1000px; width: 900px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; src/views/homePage.vue
@@ -34,16 +34,16 @@ </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> </div> <div class="content"> <Home v-if="state.activeMenu==1" ref="homeRef" @toMore="changeTab"/> <Notice v-if="state.activeMenu==2" ref="noticeRef"/> <Laws v-if="state.activeMenu==3" ref="lawsRef"/> <Publish v-if="state.activeMenu==4" ref="publishRef"/> <Details ref="detailsRef"></Details> <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> <!-- 底部 --> @@ -60,8 +60,8 @@ import Notice from './components/notice' import Laws from './components/laws' import Publish from './components/publish' import Details from './components/details' import Details from './components/details.vue' const { proxy } = getCurrentInstance() const route = useRoute() const router = useRouter() // 时间格式化 @@ -79,7 +79,7 @@ const noticeRef = ref(null) const lawsRef = ref(null) const publishRef = ref(null) const detailsRef = ref(null) const state = reactive({ activeMenu: 1, date: '', @@ -130,21 +130,15 @@ const changeTab=(num)=>{ state.activeMenu = num console.log(state.activeMenu) // if(num == 1){ // homeRef.value.getNoticeList() // homeRef.value.getLawsList() // homeRef.value.getPubList() // } // if(num == 2){ // noticeRef.value.getData() // } // if(num == 3){ // lawsRef.value.getData() // } // if(num == 4){ // publishRef.value.getData() // } } const openDetails=(type,id)=>{ state.activeMenu = 0 nextTick(() => { proxy.$refs.detailsRef.openDetail(type,id) }) // detailsRef.value.openDetail(type,id) } </script>