Compare commits

...

10 Commits

Author SHA1 Message Date
hekaiyu
24f4459247 hky 2024-06-13 09:43:29 +08:00
hky
a96be0b65d hky 2023-10-18 09:45:23 +08:00
hky
8704a91554 hky 2023-10-12 16:18:47 +08:00
hky
94090bfcb8 hky 2023-10-12 16:18:15 +08:00
hky
3e401eafad hky 2023-10-12 16:17:46 +08:00
hky
efb44660d2 hky 2023-10-12 14:58:04 +08:00
hky
ff0e7ceac7 9.23前后端代码提交
详情见周总结
2023-10-11 08:22:31 +08:00
hky
b1a6e345ac hky 2023-10-09 09:38:03 +08:00
hky
0e9c9ea548 hky 2023-09-27 17:31:02 +08:00
hky
3d9007ecc1 9.23前后端代码提交
详情见周总结
2023-09-23 10:50:31 +08:00
262 changed files with 16712 additions and 3350 deletions

View File

@ -1,5 +1,5 @@
NODE_ENV=development
VUE_APP_API_BASE_URL=http://localhost:8080/jeecg-boot
VUE_APP_API_BASE_URL=http://192.168.0.7:8080/jeecg-boot
VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas
VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview

View File

@ -1,44 +1,44 @@
<template>
<a-config-provider :locale="locale">
<div id="app">
<router-view/>
<router-view />
</div>
</a-config-provider>
</template>
<script>
import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN'
import enquireScreen from '@/utils/device'
import zhCN from 'ant-design-vue/lib/locale-provider/zh_CN'
import enquireScreen from '@/utils/device'
export default {
data () {
return {
locale: zhCN,
}
},
created () {
let that = this
enquireScreen(deviceType => {
// tablet
if (deviceType === 0) {
that.$store.commit('TOGGLE_DEVICE', 'mobile')
that.$store.dispatch('setSidebar', false)
}
// mobile
else if (deviceType === 1) {
that.$store.commit('TOGGLE_DEVICE', 'mobile')
that.$store.dispatch('setSidebar', false)
}
else {
that.$store.commit('TOGGLE_DEVICE', 'desktop')
that.$store.dispatch('setSidebar', true)
}
})
export default {
data() {
return {
locale: zhCN,
}
},
created() {
let that = this
enquireScreen(deviceType => {
// tablet
if (deviceType === 0) {
that.$store.commit('TOGGLE_DEVICE', 'mobile')
that.$store.dispatch('setSidebar', false)
}
// mobile
else if (deviceType === 1) {
that.$store.commit('TOGGLE_DEVICE', 'mobile')
that.$store.dispatch('setSidebar', false)
}
else {
that.$store.commit('TOGGLE_DEVICE', 'desktop')
that.$store.dispatch('setSidebar', true)
}
})
}
}
</script>
<style>
#app {
height: 100%;
}
#app {
height: 100%;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,239 @@
.ant-calendar,
.ant-calendar-panel,
.ant-calendar-header,
.ant-calendar-footer,
.ant-calendar-input-wrap {
background-color: #042b4f !important;
border-color: #1673cb !important;
}
.ant-calendar-column-header-inner,
.ant-calendar-year-select,
.ant-calendar-month-select,
.ant-calendar-date {
color: #fff !important;
}
.ant-calendar-selected-day .ant-calendar-date,
.ant-calendar-date:hover {
background: #1890FF !important;
}
.ant-calendar-input {
background-color: #042b4f !important;
color: #7ba7c6 !important;
}
.ant-calendar-next-month-btn:hover:before,
.ant-calendar-next-year-btn:hover::before,
.ant-calendar-next-year-btn:hover::after,
.ant-calendar-prev-year-btn:hover::before,
.ant-calendar-prev-year-btn:hover::after,
.ant-calendar-prev-month-btn:hover::before {
border-color: #fff !important;
}
.ant-calendar-picker-icon {
color: #1b9ee8 !important;
}
//select
.ant-select-arrow {
color: #00b1ff !important;
}
.ant-select-dropdown-menu-item {
color: #7ba7c6 !important;
}
.ant-select-dropdown-menu-item-selected,
.ant-select-dropdown-menu-item-active {
background-color: #1673cb !important;
}
//ant-tab
.ant-tabs-bar {
border-color: #1673cb !important;
margin: 10px 20px 0px 20px !important;
}
.ant-tabs-nav-wrap
{
margin: 0 !important;
}
.ant-tabs-ink-bar
{
display: none !important;
}
.ant-tabs-nav .ant-tabs-tab {
background-image: linear-gradient(0deg,
#021831 0%,
#064576 60%,
#0971ba 100%),
linear-gradient(#2261a6,
#2261a6);
background-blend-mode: normal,
normal;
border: solid 1px #0a7bc4;
margin: 0 !important;
padding: 6px 31px !important;
color: #9acef7 !important;
}
.ant-tabs-nav .ant-tabs-tab-active {
background-image: linear-gradient(0deg,
#042e5c 0%,
#0262ae 60%,
#0096ff 100%),
linear-gradient(#2261a6,
#2261a6);
background-blend-mode: normal,
normal;
color: #ffffff !important;
}
//input
.ant-select-selection,
.ant-select-dropdown,
.ant-input:not(.logininput) {
background-color: #042b4f !important;
box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.44) !important;
border: solid 1px #1673cb !important;
border-radius: 0 !important;
color: #7ba7c6 !important;
font-size: 16px;
}
.ant-input:hover:not(.logininput) {
background-color: #042b4f !important;
box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.44) !important;
border: solid 1px #1673cb !important;
color: #7ba7c6;
}
.ant-input:focus {
box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.44) !important;
color: #7ba7c6;
}
input:-webkit-autofill {
box-shadow: none !important;
-webkit-text-fill-color: #d32424 !important;
}
.ant-btn-cannel {
width: 60px !important;
height: 30px !important;
background-color: #658199 !important;
border: none !important;
color: #ffffff !important;
border-radius: 0 !important;
}
.ant-btn-ok {
width: 60px !important;
height: 30px !important;
background-color: #1a89e7 !important;
border: none !important;
color: #ffffff !important;
border-radius: 0 !important;
}
.footerButton {
display: flex;
justify-content: center;
align-items: center;
.ant-btn {
margin: 0 10px;
}
}
.ant-table-body table {
border-left: 1px solid #1877d0 !important;
}
.ant-table-tbody tr:nth-child(odd)>th,
.ant-table-tbody tr:nth-child(odd)>td {
background-color: #042b4f;
color: #ffffff;
}
.ant-table-tbody tr:nth-child(even)>th,
.ant-table-tbody tr:nth-child(even)>td {
background-color: #093a68;
color: #ffffff;
}
.ant-table-tbody tr:hover>th,
.ant-table-tbody tr:hover>td {
background-color: #0c4377 !important;
}
.ant-table-placeholder {
background-color: #042b4f !important;
border: 1px solid #1877d0 !important;
border-radius: 0 !important;
}
.ant-table-placeholder .ant-empty-normal {
color: #ffffff !important;
}
.ant-table-align-center,
.ant-table-thead tr th {
background-image: linear-gradient(0deg, #06478a 14%, #00aeff 100%), linear-gradient(#008aff, #008aff) !important;
background-blend-mode: normal,
normal;
color: #ffffff !important;
}
.ant-table-bordered .ant-table-thead>tr>th,
.ant-table-bordered .ant-table-tbody>tr>td,
.ant-table-content .ant-table-thead>tr>th,
.ant-table-content .ant-table-tbody>tr>td {
border-right: 1px solid #1877d0 !important;
border-bottom: 1px solid #1877d0 !important;
line-height: 22px;
font-size: 14px;
border-radius: 0 !important;
}
/* 滚动条优化 start */
::-webkit-scrollbar {
width: 10px;
height: 8px;
}
::-webkit-scrollbar-track {
background: #3a3d4e;
border-radius: 2px;
}
::-webkit-scrollbar-thumb {
background: #717483;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: #717483;
}
::-webkit-scrollbar-corner {
background: #3a3d4e;
}
/* 滚动条优化 end */
.ant-col {
margin-bottom: 6px;
}
body {
// 打开滚动条固定显示
overflow-y: hidden;
&.colorWeak {
filter: invert(80%);
}
}

View File

@ -3,7 +3,7 @@
<!-- update-begin- author:sunjianlei --- date:20191009 --- for: 提升右键菜单的层级 -->
<contextmenu :itemList="menuItemList" :visible.sync="menuVisible" style="z-index: 9999;" @select="onMenuSelect"/>
<!-- update-end- author:sunjianlei --- date:20191009 --- for: 提升右键菜单的层级 -->
<a-tabs
<!-- <a-tabs
@contextmenu.native="e => onContextmenu(e)"
v-if="multipage"
:active-key="activePage"
@ -17,8 +17,8 @@
<a-tab-pane :id="page.fullPath" :key="page.fullPath" v-for="page in pageList" :closable="!(page.meta.title=='首页')">
<span slot="tab" :pagekey="page.fullPath">{{ page.meta.title }}</span>
</a-tab-pane>
</a-tabs>
<div style="margin: 12px 12px 0;">
</a-tabs> -->
<div>
<!-- update-begin-author:taoyan date:20201221 for:此处删掉transition标签 不知道为什么加上后 页面路由切换的时候即1及菜单切到2及菜单的时候 两个菜单页面会同时出现300-500秒左右 -->
<keep-alive v-if="multipage">
<router-view v-if="reloadFlag"/>

View File

@ -1,150 +1,35 @@
<template>
<div id="userLayout" :class="['user-layout-wrapper', device]">
<div class="container">
<div class="top">
<div class="header">
<a href="/">
<img src="~@/assets/logo.svg" class="logo" alt="logo">
<span class="title">Jeecg Boot</span>
</a>
</div>
<div class="desc">
Jeecg Boot 是中国最具影响力的 企业级 低代码平台
</div>
</div>
<route-view></route-view>
<div class="footer">
<div class="links">
<a href="http://doc.jeecg.com" target="_blank">帮助</a>
<a href="https://github.com/zhangdaiscott/jeecg-boot" target="_blank">隐私</a>
<a href="https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE" target="_blank">条款</a>
</div>
<div class="copyright">
Copyright &copy; 2019 <a href="http://www.jeecg.com" target="_blank">JEECG开源社区</a> 出品
</div>
</div>
</div>
</div>
</template>
<script>
import RouteView from "@/components/layouts/RouteView"
import { mixinDevice } from '@/utils/mixin.js'
import RouteView from "@/components/layouts/RouteView"
import { mixinDevice } from '@/utils/mixin.js'
export default {
name: "UserLayout",
components: { RouteView },
mixins: [mixinDevice],
data () {
return {}
},
mounted () {
document.body.classList.add('userLayout')
},
beforeDestroy () {
document.body.classList.remove('userLayout')
},
}
export default {
name: "UserLayout",
components: { RouteView },
mixins: [mixinDevice],
data() {
return {}
},
mounted() {
document.body.classList.add('userLayout')
},
beforeDestroy() {
document.body.classList.remove('userLayout')
},
}
</script>
<style lang="less" scoped>
#userLayout.user-layout-wrapper {
height: 100%;
&.mobile {
.container {
.main {
max-width: 368px;
width: 98%;
}
}
}
.container {
width: 100%;
min-height: 100%;
background: #f0f2f5 url(~@/assets/background.svg) no-repeat 50%;
background-size: 100%;
padding: 110px 0 144px;
position: relative;
a {
text-decoration: none;
}
.top {
text-align: center;
.header {
height: 44px;
line-height: 44px;
.badge {
position: absolute;
display: inline-block;
line-height: 1;
vertical-align: middle;
margin-left: -12px;
margin-top: -10px;
opacity: 0.8;
}
.logo {
height: 44px;
vertical-align: top;
margin-right: 16px;
border-style: none;
}
.title {
font-size: 33px;
color: rgba(0, 0, 0, .85);
font-family: "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-weight: 600;
position: relative;
top: 2px;
}
}
.desc {
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
margin-top: 12px;
margin-bottom: 40px;
}
}
.main {
min-width: 260px;
width: 368px;
margin: 0 auto;
}
.footer {
position: absolute;
width: 100%;
bottom: 0;
padding: 0 16px;
margin: 48px 0 24px;
text-align: center;
.links {
margin-bottom: 8px;
font-size: 14px;
a {
color: rgba(0, 0, 0, 0.45);
transition: all 0.3s;
&:not(:last-child) {
margin-right: 40px;
}
}
}
.copyright {
color: rgba(0, 0, 0, 0.45);
font-size: 14px;
}
}
}
}
<style lang="less">
@import "~@assets/less/sulesss.less";
#userLayout {
height: 100%;
background-image: url(~@/assets/imgs/bg/lgBg.jpg);
}
</style>

View File

@ -1,64 +1,10 @@
<template>
<a-layout class="layout" :class="[device]">
<template v-if="layoutMode === 'sidemenu'">
<a-drawer
v-if="device === 'mobile'"
:wrapClassName="'drawer-sider ' + navTheme"
placement="left"
@close="() => this.collapsed = false"
:closable="false"
:visible="collapsed"
width="200px"
>
<side-menu
mode="inline"
v-if="device === 'mobile'"
:menus="menus"
@menuSelect="menuSelect"
@updateMenuTitle="handleUpdateMenuTitle"
:theme="navTheme"
:collapsed="false"
:collapsible="true"></side-menu>
</a-drawer>
<side-menu
v-show="device === 'desktop'"
mode="inline"
:menus="menus"
@menuSelect="myMenuSelect"
@updateMenuTitle="handleUpdateMenuTitle"
:theme="navTheme"
:collapsed="collapsed"
:collapsible="true"></side-menu>
</template>
<!-- 下次优化这些代码 -->
<template v-else>
<a-drawer
v-if="device === 'mobile'"
:wrapClassName="'drawer-sider ' + navTheme"
placement="left"
@close="() => this.collapsed = false"
:closable="false"
:visible="collapsed"
width="200px"
>
<side-menu
mode="inline"
:menus="menus"
@menuSelect="menuSelect"
@updateMenuTitle="handleUpdateMenuTitle"
:theme="navTheme"
:collapsed="false"
:collapsible="true"></side-menu>
</a-drawer>
</template>
<a-layout
:class="[layoutMode, `content-width-${contentWidth}`]"
:style="{ paddingLeft: fixSiderbar && isDesktop() ? `${sidebarOpened ? 200 : 80}px` : '0' }">
<!-- layout header -->
<global-header
<!-- <global-header
:mode="layoutMode"
:menus="menus"
:theme="navTheme"
@ -66,17 +12,13 @@
:device="device"
@toggle="toggle"
@updateMenuTitle="handleUpdateMenuTitle"
/>
/> -->
<!-- layout content -->
<a-layout-content :style="{ height: '100%', paddingTop: fixedHeader ? '59px' : '0' }">
<slot></slot>
</a-layout-content>
<!-- layout footer -->
<a-layout-footer style="padding: 0px">
<global-footer/>
</a-layout-footer>
</a-layout>
<!-- update-start---- author:os_chengtgen -- date:20190830 -- for:issues/463 -编译主题颜色已生效但还一直转圈显示主题 正在编译 ---- -->

View File

@ -1,41 +1,384 @@
<template>
<div>
<index-chart v-if="indexStyle==1"></index-chart>
<index-bdc v-if="indexStyle==2"></index-bdc>
<index-task v-if="indexStyle==3"></index-task>
<div style="width: 100%;text-align: right;margin-top: 20px">
请选择首页样式
<a-radio-group v-model="indexStyle">
<a-radio :value="1">统计图表</a-radio>
<a-radio :value="2">统计图表2</a-radio>
<a-radio :value="3">任务表格</a-radio>
</a-radio-group>
<div id="homePage">
<div class="bgTop">
<img src="@/assets/imgs/bg/bgTop.png" />
<div class="logo">
<img src="@/assets/imgs/logo.png" />
<div class="centerTitle">{{ content_word.centerTitle }}</div>
</div>
<div class="menuTop">
<div @click="selectMenu('t', 1)" :class="selectMenuIdT == 1 ? 'select menuBgL clickmode' : 'menuBgL clickmode'">
<img src="@/assets/imgs/icon1.png" /><label>{{ content_word.modalname1 }}</label>
</div>
<div @click="selectMenu('t', 2)" :class="selectMenuIdT == 2 ? 'select menuBgL clickmode' : 'menuBgL clickmode'">
<img src="@/assets/imgs/icon2.png" /><label>{{ content_word.modalname2 }}</label>
</div>
<div @click="selectMenu('t', 3)" :class="selectMenuIdT == 3 ? 'select menuBgL clickmode' : 'menuBgL clickmode'">
<img src="@/assets/imgs/icon3.png" /><label>{{ content_word.modalname3 }}</label>
</div>
<div @click="selectMenu('t', 6)" :class="selectMenuIdT == 6 ? 'select menuBgR clickmode' : 'menuBgR clickmode'">
<img src="@/assets/imgs/icon6.png" /><label>{{ content_word.modalname6 }}</label>
</div>
<div @click="selectMenu('t', 5)" :class="selectMenuIdT == 5 ? 'select menuBgR clickmode' : 'menuBgR clickmode'">
<img src="@/assets/imgs/icon5.png" /><label>{{ content_word.modalname5 }}</label>
</div>
<div @click="selectMenu('t', 4)" :class="selectMenuIdT == 4 ? 'select menuBgR clickmode' : 'menuBgR clickmode'">
<img src="@/assets/imgs/icon4.png" /><label>{{ content_word.modalname4 }}</label>
</div>
</div>
<div class="logout" @click="handleLogout">
<img src="@/assets/imgs/usericon.png" /><label>退出登录</label>
</div>
</div>
<div class="mainBg">
<div class="overMpdal"><overview-modal ref="overForm" class="overview"></overview-modal></div>
<div class="bgBottom">
<img src="@/assets/imgs/bg/bgBottom.png" />
<div class="menuBottom">
<div @click="selectMenu('b', 1)" :class="selectMenuIdB == 1 ? 'select clickmode' : ' clickmode'"><img
src="@/assets/imgs/menu1.png" /></div>
<div @click="selectMenu('b', 2)" :class="selectMenuIdB == 2 ? 'select clickmode' : ' clickmode'"><img
src="@/assets/imgs/menu2.png" /></div>
<div @click="selectMenu('b', 3)" :class="selectMenuIdB == 3 ? 'select clickmode' : ' clickmode'"><img
src="@/assets/imgs/menu3.png" /></div>
<div @click="selectMenu('b', 4)" :class="selectMenuIdB == 4 ? 'select clickmode' : ' clickmode'"><img
src="@/assets/imgs/menu4.png" /></div>
<div @click="selectMenu('b', 5)" :class="selectMenuIdB == 5 ? 'select clickmode' : ' clickmode'"><img
src="@/assets/imgs/menu5.png" /></div>
<div @click="selectMenu('b', 6)" :class="selectMenuIdB == 6 ? 'select clickmode' : ' clickmode'"><img
src="@/assets/imgs/menu6.png" /></div>
</div>
</div>
<div class="bgBottom2" v-show="selectMenuIdB == 4">
<img src="@/assets/imgs/bg/menu2Bg.png" />
<div class="menuBottom2">
<img class="clickmode" @click="selectMenu('b', 11)" src="@/assets/imgs/menu2/data1.png" />
<img class="clickmode" @click="selectMenu('b', 12)" src="@/assets/imgs/menu2/data2.png" />
<img class="clickmode" @click="selectMenu('b', 13)" src="@/assets/imgs/menu2/data3.png" />
<img class="clickmode" @click="selectMenu('b', 14)" src="@/assets/imgs/menu2/data4.png" />
<img class="clickmode" @click="selectMenu('b', 15)" src="@/assets/imgs/menu2/data5.png" />
<img class="clickmode" @click="selectMenu('b', 16)" src="@/assets/imgs/menu2/data6.png" />
<img class="clickmode" @click="selectMenu('b', 17)" src="@/assets/imgs/menu2/data7.png" />
</div>
</div>
<div class="bgBottom3" v-show="selectMenuIdB == 5">
<img src="@/assets/imgs/bg/menu3Bg.png" />
<div class="menuBottom2">
<img class="clickmode" @click="selectMenu('b', 21)" src="@/assets/imgs/menu2/system1.png" />
<img class="clickmode" @click="selectMenu('b', 22)" src="@/assets/imgs/menu2/system2.png" />
<img class="clickmode" @click="selectMenu('b', 23)" src="@/assets/imgs/menu2/system3.png" />
<img class="clickmode" @click="selectMenu('b', 24)" src="@/assets/imgs/menu2/system4.png" />
<img class="clickmode" @click="selectMenu('b', 25)" src="@/assets/imgs/menu2/system5.png" />
</div>
</div>
<div class="bgBottom4" v-show="selectMenuIdB == 6">
<img src="@/assets/imgs/bg/menu3Bg.png" />
<div class="menuBottom2">
<img class="clickmode" @click="selectMenu('b', 31)" src="@/assets/imgs/menu2/gis1.png" />
<img class="clickmode" @click="selectMenu('b', 32)" src="@/assets/imgs/menu2/gis2.png" />
<img class="clickmode" @click="selectMenu('b', 33)" src="@/assets/imgs/menu2/gis3.png" />
<img class="clickmode" @click="selectMenu('b', 34)" src="@/assets/imgs/menu2/gis4.png" />
<img class="clickmode" @click="selectMenu('b', 35)" src="@/assets/imgs/menu2/gis5.png" />
</div>
</div>
</div>
</div>
</template>
<script>
import IndexChart from './IndexChart'
import IndexTask from "./IndexTask"
import IndexBdc from './IndexBdc'
export default {
name: "Analysis",
components: {
IndexChart,
IndexTask,
IndexBdc
},
data() {
return {
indexStyle:1
import { mapActions } from 'vuex'
import OverviewModal from './Overview'
import { CONTENT_WORD } from './config'
export default {
name: 'homePage',
components: { OverviewModal },
data() {
return {
bmap: null,
view: '',
selectMenuIdT: 0,
selectMenuIdB: 0,
content_word: {},
}
},
created() {
},
mounted() {
this.content_word = CONTENT_WORD
this.selectMenu('b', 1)
},
computed: {
},
watch: {
},
methods: {
selectMenu(type, menuid) {
if (type == 't') {
this.selectMenuIdT = menuid
}
},
created() {
else if (type == 'b') {
this.selectMenuIdB = menuid
this.$refs.overForm.menuCilck(menuid)
}
},
methods: {
...mapActions(["Logout"]),
handleLogout() {
const that = this
this.$confirm({
title: '提示',
content: '真的要注销登录吗 ?',
onOk() {
return that.Logout({}).then(() => {
window.location.reload()
}).catch(err => {
that.$message.error({
title: '错误',
description: err.message
})
})
},
onCancel() {
},
});
},
}
}
</script>
<style lang="less">
#homePage {
background-color: #052f57;
.bgTop {
height: 8.24vh;
img {
width: 100%;
height: 100%;
}
.logo {
position: absolute;
top: 0;
left: 35vw;
width: 30vw;
height: 64px;
img {
width: auto;
height: auto;
float: left;
margin: 12px 8px 0 36px;
}
.centerTitle {
float: left;
font-family: MicrosoftYaHei-Bold;
font-size: 26px;
line-height: 52px;
letter-spacing: 2px;
color: #ffffff;
}
}
.menuTop {
position: absolute;
top: 3vh;
left: 8vw;
width: 84vw;
label {
font-family: FZZYJW--GB1-0;
font-size: 21px;
line-height: 38px;
letter-spacing: 2px;
color: #ffffff;
font-weight: 600;
}
.menuBgL {
float: left;
width: 189px;
height: 45px;
margin-right: -22px;
background-image: url('~@/assets/imgs/bg/menuBgL.png');
img {
width: auto;
height: auto;
margin: -8px 6px 0 35px;
}
}
.menuBgL.select {
background-image: url('~@/assets/imgs/bg/menuBgLs.png');
}
.menuBgR {
float: right;
width: 189px;
height: 45px;
margin-left: -22px;
background-image: url('~@/assets/imgs/bg/menuBgR.png');
img {
width: auto;
height: auto;
margin: -8px 6px 0 40px;
}
}
}
.logout {
position: absolute;
top: 3vh;
left: 93vw;
width: 7vw;
height: 42px;
display: flex;
justify-content: center;
align-items: center;
img {
width: 26px;
height: 26px;
margin-right: 10px;
}
label {
font-size: 18px;
letter-spacing: 2px;
color: #618ebc;
}
}
}
</script>
.clickmode {
cursor: pointer;
}
.mainBg {
height: 91.76vh;
background-image: url(~@/assets/imgs/bg/background.png);
background-size: cover;
.overMpdal {
height: 81vh;
display: flex;
justify-content: center;
align-items: center;
}
.overview {
margin: 0 auto;
}
.bgBottom {
height: 85px;
position: absolute;
bottom: 1.98vh;
img {
width: 98.33vw;
height: 100%;
}
.menuBottom {
position: absolute;
top: 8px;
left: calc(50vw - 360px);
width: 720px;
margin: 0 auto;
div {
float: left;
width: 68px;
height: 68px;
margin: 0 26px;
background-image: url('~@/assets/imgs/bg/menuBg.png');
background-size: 100% 100%;
background-repeat: no-repeat;
display: flex;
justify-content: center;
align-items: center;
}
div.select {
background-image: url('~@/assets/imgs/bg/menuBgs.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
img {
width: auto;
height: auto;
}
}
}
.bgBottom2 {
width: 440px;
height: 50px;
position: absolute;
left: calc(50vw - 160px);
bottom: calc(2vh + 100px);
.menuBottom2 {
position: absolute;
top: 13px;
left: 66px;
img {
width: auto;
height: auto;
margin: 0 10px;
}
}
}
.bgBottom3 {
width: 360px;
height: 50px;
position: absolute;
left: 50vw;
bottom: calc(2vh + 100px);
.menuBottom2 {
position: absolute;
top: 11px;
left: 64px;
img {
width: auto;
height: auto;
margin: 0 10px;
}
}
}
.bgBottom4 {
width: 360px;
height: 50px;
position: absolute;
left: calc(50vw + 120px);
bottom: calc(2vh + 100px);
.menuBottom2 {
position: absolute;
top: 12px;
left: 70px;
img {
width: auto;
height: 26px;
margin: 0 10px;
}
}
}
}
}
</style>

View File

@ -1,15 +0,0 @@
<template>
<div>
Monitor
</div>
</template>
<script>
export default {
name: "Monitor"
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,991 @@
<template>
<div id="overview" v-show="showModal"
:style="{ width: this.modeWidth, height: this.modeHeight, margintop: this.margintop }">
<div class="top">
<div class="icon"></div>
<div class="name">{{ title }}</div>
<div class="close clickmode" @click="closeModal"></div>
<div class="line"></div>
<!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload> -->
</div>
<div class="main">
<div class="form">
<div class="modeChoose" v-if="modal == 'modeChoose'">
<div class="lines">
<div class="leftline"></div>
<div class="name">{{ content_word.modeChoosename1 }}</div>
<div class="rightline"></div>
</div>
<div class="modes">
<div class="mode mode1 clickmode" @click="selectMode('t', 1)">
<div :class="selectmodeIdT == 1 ? 'unchoose choose' : 'unchoose'">{{ content_word.modename1 }}</div>
</div>
<div class="mode mode2 clickmode" @click="selectMode('t', 2)">
<div :class="selectmodeIdT == 2 ? 'unchoose choose' : 'unchoose'">{{ content_word.modename2 }}</div>
</div>
<div class="mode mode3 clickmode" @click="selectMode('t', 3)">
<div :class="selectmodeIdT == 3 ? 'unchoose choose' : 'unchoose'">{{ content_word.modename3 }}</div>
</div>
<div class="mode mode4 clickmode" @click="selectMode('t', 4)">
<div :class="selectmodeIdT == 4 ? 'unchoose choose' : 'unchoose'">{{ content_word.modename4 }}</div>
</div>
<div class="mode mode5 clickmode" @click="selectMode('t', 5)">
<div :class="selectmodeIdT == 5 ? 'unchoose choose' : 'unchoose'">{{ content_word.modename5 }}</div>
</div>
<div class="mode mode6 clickmode" @click="selectMode('t', 6)">
<div :class="selectmodeIdT == 6 ? 'unchoose choose' : 'unchoose'">{{ content_word.modename6 }}</div>
</div>
</div>
<div class="lines">
<div class="leftline"></div>
<div class="name">{{ content_word.modeChoosename2 }}</div>
<div class="rightline"></div>
</div>
<div class="modes2">
<div class="mode clickmode" @click="selectMode('b', 1)">
<div :class="selectmodeIdB == 1 ? 'unchoose choose' : 'unchoose'">{{ content_word.mode2name1 }}</div>
</div>
<div class="mode clickmode" @click="selectMode('b', 2)">
<div :class="selectmodeIdB == 2 ? 'unchoose choose' : 'unchoose'">{{ content_word.mode2name2 }}</div>
</div>
</div>
</div>
<div class="searchTable" v-if="modal == 'newproject'">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :col="24">
<a-form-item label="工程名称:" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }">
<j-input placeholder="" v-model="queryParam.proname"></j-input>
</a-form-item>
</a-col>
<a-col :col="24">
<a-form-item label="创建人:" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }">
<j-input placeholder="" v-model="queryParam.username"></j-input>
</a-form-item>
</a-col>
<a-col :col="24">
<a-form-item label="创建时间:" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }">
<j-input placeholder="" v-model="queryParam.crateTime"></j-input>
</a-form-item>
</a-col>
<a-col :col="24">
<a-form-item label="备注:" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }">
<a-textarea ref="textarea" :value="inputContent" style="height: 130px" />
</a-form-item>
</a-col>
</a-row>
</a-form>
</div>
<div class="searchTable" v-if="modal == 'openproject'">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="6" :sm="6">
<a-form-item label="工程名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-input placeholder="请输入工程名称" v-model="queryParam.dataTable"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="6">
<a-form-item label="创建时间:" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
<a-date-picker placeholder="请选择创建时间" v-model="queryParam.dataId" format="YYYY-MM-DD" />
</a-form-item>
</a-col>
<a-col :md="6" :sm="6">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="projectcolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'projectcolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</div>
<div class="searchTable" v-if="modal == 'weatherdata'">
<a-tabs @change="wentherChangeTab">
<a-tab-pane tab="历史数据" key="历史数据" :forceRender="true">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="6" :sm="6">
<a-form-item label="气象名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-input placeholder="请输入气象名称" v-model="queryParam.weatherName"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="6">
<a-form-item label="类别" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
<a-select placeholder="请选择" v-model="queryParam.weatherType">
<a-select-option value="0">中国</a-select-option>
<a-select-option value="1">美国</a-select-option>
<a-select-option value="2">欧洲</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="wenthercolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>启用</a>
<a-divider type="vertical" />
<a>下载</a>
</span>
</a-table>
</a-tab-pane>
<a-tab-pane tab="气象预报" key="气象预报" :forceRender="true">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="6" :sm="6">
<a-form-item label="气象名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-input placeholder="请输入气象名称" v-model="queryParam.weatherName"></a-input>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="forecastcolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>启用</a>
<a-divider type="vertical" />
<a>下载</a>
</span>
</a-table>
</a-tab-pane>
</a-tabs>
</div>
<div class="searchTable" v-if="modal == 'nuclidedata'">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="7" :sm="7">
<a-form-item label="XX名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-select placeholder="请选择" v-model="queryParam.nuclideName">
<a-select-option value="0">xxx</a-select-option>
<a-select-option value="1">xxx</a-select-option>
<a-select-option value="2">xxx</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="7" :sm="7">
<a-form-item label="时间:" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
<a-date-picker placeholder="请选择创建时间" v-model="queryParam.dataId" format="YYYY-MM-DD" />
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="nuclidecolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>查看</a>
</span>
</a-table>
</div>
<div class="searchTable" v-if="modal == 'weapondata'">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="7" :sm="7">
<a-form-item label="XX名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-select placeholder="请选择" v-model="queryParam.weaponType">
<a-select-option value="0">xxx</a-select-option>
<a-select-option value="1">xxx</a-select-option>
<a-select-option value="2">xxx</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="7" :sm="7">
<a-form-item label="时间:" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }">
<a-date-picker placeholder="请选择创建时间" v-model="queryParam.dataId" format="YYYY-MM-DD" />
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="weaponcolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'weaponcolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</div>
<div class="searchTable" v-if="modal == 'topographydata'">
<a-tabs @change="topographyChangeTab">
<a-tab-pane tab="地理数据" key="地理数据" :forceRender="true">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="7" :sm="7">
<a-form-item label="地形名称:" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
<a-input placeholder="请输入气象名称" v-model="queryParam.topographyName"></a-input>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="topographycolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>下载</a>
<a-divider type="vertical" />
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'topographycolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</a-tab-pane>
<a-tab-pane tab="本构参数" key="本构参数" :forceRender="true">
</a-tab-pane>
</a-tabs>
</div>
<div class="searchTable" v-if="modal == 'citydata'">
<a-tabs @change="cityChangeTab">
<a-tab-pane tab="城市目标" key="城市目标" :forceRender="true">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="8" :sm="8">
<a-form-item label="城市名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-input placeholder="请输入城市名称" v-model="queryParam.cityName"></a-input>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="citycolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>查看</a>
<a-divider type="vertical" />
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'citycolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</a-tab-pane>
<a-tab-pane tab="设施目标" key="设施目标" :forceRender="true">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="8" :sm="8">
<a-form-item label="气象名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-input placeholder="请输入气象名称" v-model="queryParam.weatherName"></a-input>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="facilitycolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>查看</a>
<a-divider type="vertical" />
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'facilitycolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</a-tab-pane>
</a-tabs>
</div>
<div class="searchTable" v-if="modal == 'equdata'">
<a-tabs @change="equChangeTab">
<a-tab-pane tab="机动装备" key="机动装备" :forceRender="true">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="10" :sm="10">
<a-form-item label="机动装备名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-input placeholder="请输入机动装备名称" v-model="queryParam.weatherName"></a-input>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="equmotcolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>查看</a>
<a-divider type="vertical" />
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'equmotcolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</a-tab-pane>
<a-tab-pane tab="防护装备" key="防护装备" :forceRender="true">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="10" :sm="10">
<a-form-item label="防护装备名称:" :label-col="{ span: 9 }" :wrapper-col="{ span: 15 }">
<a-input placeholder="请输入防护装备名称" v-model="queryParam.weatherName"></a-input>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="equprocolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a>查看</a>
<a-divider type="vertical" />
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'equprocolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</a-tab-pane>
</a-tabs>
</div>
<div class="searchTable" v-if="modal == 'sysuser'">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="7" :sm="7">
<a-form-item label="用户名:" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }">
<a-input placeholder="请输入用户名" v-model="queryParam.username"></a-input>
</a-form-item>
</a-col>
<a-col :md="3" :sm="3">
<a-button type="ok" @click="searchQuery">查询</a-button>
</a-col>
</a-row>
</a-form>
<a-table class="protable" ref="table" size="middle" rowKey="id" :columns="sysusercolumns"
:dataSource="tabledataSource" :pagination="false">
<span slot="action" slot-scope="text, record">
<a-popconfirm title="确定删除吗?" @confirm="() => dataDelete(record.id, 'sysusercolumns')">
<a>删除</a>
</a-popconfirm>
</span>
</a-table>
</div>
<div class="userroles" v-if="modal == 'roleops'">
<div v-for="(roleitem, roleindex) in userroles" :key="roleindex" class="panels">
<div class="rolesname">{{ roleitem }}</div>
<a-checkbox v-for="(role, rolekey) in rolesOptions" :key="rolekey" :value="role">{{ role }}</a-checkbox>
</div>
</div>
<div class="userroles" v-if="modal == 'gisops'">
<div v-for="(gisitem, gisindex) in userroles" :key="gisindex" class="panels">
<div class="rolesname">{{ gisitem }}</div>
<a-checkbox v-for="(gis, giskey) in gisOptions" :key="giskey" :value="gis">{{ gis }}</a-checkbox>
</div>
</div>
</div>
<div class="footerButton" v-if="hasfooterButton">
<a-button type="cannel" @click="closeModal">取消</a-button>
<a-button type="ok" @click="buttonOk">确定</a-button>
</div>
</div>
</div>
</template>
<script>
import { CONTENT_WORD } from './config'
import { getAction, postAction } from '@/api/manage'
export default {
name: "Overview",
props: {
spliter: {
type: String,
required: false,
default: ','
},
},
data() {
return {
title: "",
modal: '',
modeChoosename1: '',
CONTENT_WORD: {},
showModal: false,
hasfooterButton: false,
selectmodeIdT: 1,
selectmodeIdB: 1,
modeWidth: '700px',
modeHeight: '530px',
margintop: '230px',
queryParam: {},
tabaldataurl: '',
deldataurl: '',
editmenuid: 0,
arrayValue: [],
userroles: ['开发维护者', '研究使用者', '普通用户者'],
rolesOptions: ['源项分析', '扩散分析', '剂量计算', '剂量评估', '路径优化', '报表展示', '场景选择', '新建工程', '打开工程', '数据管理', '系统管理', 'GIS工具箱'],
gisOptions: ['地图更换', '放大', '缩小', '标注', '空间测量', '点位测量', '面积测量', '水平距离测量'],
//打开工程表头
projectcolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '工程名称', align: 'center', dataIndex: 'engineeringName' },
{ title: '场景类型', align: 'center', dataIndex: 'sceneType' },
{ title: '创建人', align: 'center', dataIndex: 'createBy' },
{ title: '创建时间', align: 'center', dataIndex: 'createTime' },
{ title: '存放位置', align: 'center', dataIndex: 'engineeringPath' },
{ title: '备注', align: 'center', dataIndex: 'remark' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//气象历史数据
wenthercolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '气象名称', align: 'center', dataIndex: 'weatherName', },
{ title: '类别', align: 'center', dataIndex: 'weatherType' },
{ title: '气象时间', align: 'center', dataIndex: 'weatherTime' },
{ title: '上传日期', align: 'center', dataIndex: 'createTime' },
{ title: '文件路径', align: 'center', dataIndex: 'filePath' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//气象预报数据
forecastcolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '气象名称', align: 'center', dataIndex: 'forecastName', },
{ title: '采集时间', align: 'center', dataIndex: 'gatherTime' },
{ title: '上传日期', align: 'center', dataIndex: 'createTime' },
{ title: '文件路径', align: 'center', dataIndex: 'forecastPath' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//核素模块数据
nuclidecolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: 'xx名称', align: 'center', dataIndex: 'nuclideName', },
{ title: 'Conc.[mBq/m^3]', align: 'center', dataIndex: 'conc' },
{ title: 'Uncertainty', align: 'center', dataIndex: 'uncertainty' },
{ title: 'MDC[mBq/m^3]', align: 'center', dataIndex: 'mdc' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//WQ类型数据
weaponcolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: 'WQ名称', align: 'center', dataIndex: 'weaponName', },
{ title: '裂变材料', align: 'center', dataIndex: 'fission' },
{ title: '分凝温度', align: 'center', dataIndex: 'condensationT' },
{ title: '分凝时间', align: 'center', dataIndex: 'condensationTime' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//地形信息数据
topographycolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '地形名称', align: 'center', dataIndex: 'topographyName', },
{ title: '上传时间', align: 'center', dataIndex: 'createTime' },
{ title: '文件路径', align: 'center', dataIndex: 'topographyPath' },
{ title: '备注', align: 'center', dataIndex: 'remark' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//城市目标数据
citycolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '城市名称', align: 'center', dataIndex: 'cityName', },
{ title: '行政区', align: 'center', dataIndex: 'district' },
{ title: '经维度', align: 'center', dataIndex: 'cityLon', customRender: function (t, r, index) { return r.cityLon + ' , ' + r.cityLat; } },
{ title: '备注', align: 'center', dataIndex: 'remark' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//设施目标数据
facilitycolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '设施名称', align: 'center', dataIndex: 'facilityName', },
{ title: '设施类型', align: 'center', dataIndex: 'facilityType' },
{ title: '国家/地区', align: 'center', dataIndex: 'facilityArea' },
{ title: '经维度', align: 'center', dataIndex: 'cityLon', customRender: function (t, r, index) { return r.facilityLon + ' , ' + r.facilityLat; } },
{ title: '海拔', align: 'center', dataIndex: 'elevation' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//城市目标数据
equmotcolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '机动装备名称', align: 'center', dataIndex: 'motorName', },
{ title: '类型', align: 'center', dataIndex: 'motorType' },
{ title: '速度', align: 'center', dataIndex: 'speed' },
{ title: '备注', align: 'center', dataIndex: 'remark' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//设施目标数据
equprocolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '防护装备名称', align: 'center', dataIndex: 'protectionName', },
{ title: '防护等级', align: 'center', dataIndex: 'protectionLevel' },
{ title: '辐射屏蔽率', align: 'center', dataIndex: 'protectionRate' },
{ title: '备注', align: 'center', dataIndex: 'remark' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
//用户管理
sysusercolumns: [
{ title: '序号', dataIndex: '', key: 'rowIndex', width: "50", align: "center", customRender: function (t, r, index) { return parseInt(index) + 1; } },
{ title: '用户名', align: 'center', dataIndex: 'username', },
{ title: '姓名', align: 'center', dataIndex: 'realname' },
{ title: '所属角色', align: 'center', dataIndex: 'roleName' },
{ title: '操作', dataIndex: 'action', align: "center", scopedSlots: { customRender: 'action' }, },
],
tabledataSource: [],
}
},
computed: {
},
created() {
},
mounted() {
this.content_word = CONTENT_WORD
},
methods: {
selectMode(type, modeid) {
if (type == 't') this.selectmodeIdT = modeid
else if (type == 'b') this.selectmodeIdB = modeid
},
menuCilck(menuid) {
this.hasfooterButton = false
this.editmenuid = menuid
if (menuid == 1) {
this.title = '场景及模式选择'
this.modal = 'modeChoose'
this.resetMode('700px', '530px')
}
else if (menuid == 2) {
this.hasfooterButton = true
this.title = '新建工程'
this.modal = 'newproject'
this.resetMode('700px', '480px')
}
else if (menuid == 3) {
this.hasfooterButton = true
this.title = '打开工程'
this.modal = 'openproject'
this.tabaldataurl = '/bizEngineering/list'
this.deldataurl = ''
this.searchQuery(menuid)
this.resetMode('1240px', '540px')
}
else if (menuid == 12) {
this.title = this.content_word.data2name
this.modal = 'weatherdata'
this.tabaldataurl = '/bizWeatherHistory/bizWeatherHistory/list'
this.deldataurl = ''
this.searchQuery(menuid)
this.resetMode('1200px', '480px')
}
else if (menuid == 13) {
this.title = this.content_word.data3name
this.modal = 'nuclidedata'
this.tabaldataurl = '/bizNuclide/bizNuclide/list'
this.deldataurl = ''
this.searchQuery(menuid)
this.resetMode('900px', '540px')
}
else if (menuid == 14) {
this.title = this.content_word.data4name
this.modal = 'weapondata'
this.tabaldataurl = '/bizWeapon/bizWeapon/list'
this.deldataurl = '/bizWeapon/bizWeapon/delete'
this.deldataurl = ''
this.searchQuery(menuid)
this.resetMode('900px', '540px')
}
else if (menuid == 15) {
this.title = this.content_word.data5name
this.modal = 'topographydata'
this.tabaldataurl = '/bizTopographyInfo/bizTopographyInfo/list'
this.deldataurl = '/bizTopographyInfo/bizTopographyInfo/delete'
this.deldataurl = ''
this.searchQuery(menuid)
this.resetMode('1100px', '540px')
}
else if (menuid == 16) {
this.title = this.content_word.data6name
this.modal = 'citydata'
this.tabaldataurl = '/bizCityAim/bizCityAim/list'
this.deldataurl = '/bizCityAim/bizCityAim/delete'
this.searchQuery(menuid)
this.resetMode('900px', '540px')
}
else if (menuid == 17) {
this.title = this.content_word.data7name
this.modal = 'equdata'
this.tabaldataurl = '/bizEquipmentMotor/bizEquipmentMotor/list'
this.deldataurl = '/bizEquipmentMotor/bizEquipmentMotor/delete'
this.searchQuery(menuid)
this.resetMode('900px', '540px')
}
else if (menuid == 21) {
this.title = this.content_word.system1name
this.modal = 'sysuser'
this.tabaldataurl = '/sys/user/list'
this.deldataurl = '/sys/user/delete'
this.searchQuery(menuid)
this.resetMode('900px', '540px')
}
else if (menuid == 22) {
this.title = this.content_word.system2name
this.modal = 'roleops'
this.resetMode('800px', '540px')
this.hasfooterButton = true
// getAction('/bizRole/bizRole/list').then((res) => {
// if (res.success) {
// this.userrolesdata = res.result.records
// }
// })
}
else if (menuid == 23) {
this.title = this.content_word.system3name
this.modal = 'gisops'
this.resetMode('800px', '540px')
this.hasfooterButton = true
// getAction('/bizRole/bizRole/list').then((res) => {
// if (res.success) {
// this.userrolesdata = res.result.records
// }
// })
}
},
resetMode(width, height) {
this.modeWidth = width
this.modeHeight = height
this.showModal = true
},
closeModal() {
this.showModal = false
},
buttonOk() {
this.showModal = false
if (this.editmenuid == 22) {
// this.userrolesdata
}
else if (this.editmenuid == 23) {
}
},
dataDelete() {
},
wentherChangeTab(key) {
if (key == '气象数据') {
this.tabaldataurl = '/bizWeatherHistory/bizWeatherHistory/list'
this.searchQuery()
}
else {
this.tabaldataurl = '/bizWeatherForecast/bizWeatherForecast/list'
this.searchQuery()
}
},
topographyChangeTab(key) {
if (key == '地理数据') {
this.tabaldataurl = '/bizTopographyInfo/bizTopographyInfo/list'
this.deldataurl = '/bizFacilityAim/bizFacilityAim/delete'
this.searchQuery()
}
else {
}
},
cityChangeTab(key) {
if (key == '城市目标') {
this.tabaldataurl = '/bizCityAim/bizCityAim/list'
this.deldataurl = '/bizCityAim/bizCityAim/delete'
this.searchQuery()
}
else {
this.tabaldataurl = '/bizFacilityAim/bizFacilityAim/list'
this.deldataurl = '/bizFacilityAim/bizFacilityAim/delete'
this.searchQuery()
}
},
equChangeTab(key) {
if (key == '机动装备') {
this.tabaldataurl = '/bizEquipmentMotor/bizEquipmentMotor/list'
this.deldataurl = '/bizEquipmentMotor/bizEquipmentMotor/delete'
this.searchQuery()
}
else {
this.tabaldataurl = '/bizEquipmentProtection/bizEquipmentProtection/list'
this.deldataurl = '/bizEquipmentProtection/bizEquipmentProtection/delete'
this.searchQuery()
}
},
searchQuery(menuid) {
this.tabledataSource = []
getAction(this.tabaldataurl).then((res) => {
if (res.success) {
if (menuid == 3) {
this.tabledataSource = res.result
}
else {
this.tabledataSource = res.result.records
}
} else {
}
})
},
}
}
</script>
<style scoped>
#overview {
.top {
width: 100%;
height: 37px;
background: url(~@/assets/imgs/bg/viewBg.png);
position: relative;
.line {
width: 100%;
height: 3px;
top: 36px;
position: absolute;
background-image: url(~@/assets/imgs/line.png);
background-size: cover;
}
.icon {
width: 30px;
height: 37px;
float: left;
background: url(~@/assets/imgs/viewicon.png) center center no-repeat;
}
.name {
width: 200px;
height: 37px;
float: left;
font-size: 16px;
font-weight: bold;
font-stretch: normal;
letter-spacing: 2px;
color: #ffffff;
line-height: 32px;
}
.close {
width: 30px;
height: 37px;
float: right;
background: url(~@/assets/imgs/close.png) center center no-repeat;
}
}
.clickmode {
cursor: pointer;
}
.main {
width: 100%;
height: calc(100% - 40px);
background-color: #083b67;
border: solid 1px #1673cb;
.footerButton {
width: 100%;
height: 40px;
}
.form {
width: 100%;
height: calc(100% - 60px);
.userroles {
margin: 20px;
background-color: #073e71;
border: solid 1px #1869b6;
height: calc(100% - 20px);
.panels {
padding: 0 20px;
}
.rolesname {
font-size: 16px;
line-height: 50px;
letter-spacing: 2px;
color: #0bd4f2;
border-bottom: solid 1px #1869b6;
margin-bottom: 5px;
}
.ant-checkbox-wrapper {
font-size: 15px;
line-height: 36px;
letter-spacing: 2px;
color: #ffffff;
}
.ant-checkbox-inner {
background-color: #062d51;
border: solid 1px #195b95;
opacity: 0.8;
}
.ant-checkbox-checked .ant-checkbox-inner {
background-color: #1d79dd;
border: solid 1px #1d79dd;
opacity: 0.8;
}
.ant-checkbox-wrapper {
margin: 0 10px 0 0 !important;
min-width: 100px;
}
}
.ant-form-item {
display: block;
margin-top: 20px;
}
.ant-form-item label {
font-size: 16px;
line-height: 39px;
color: #ffffff;
}
.ant-btn.ant-btn-ok {
margin-top: 25px;
}
.ant-divider {
background: transparent;
margin: 0 6px;
}
.modeChoose {
.lines {
width: 100%;
height: 22px;
margin-top: 30px;
display: flex;
justify-content: center;
align-items: center;
.leftline {
width: 291px;
height: 17px;
background: url(~@/assets/imgs/leftline.png);
}
.name {
width: 120px;
text-align: center;
font-size: 22px;
letter-spacing: 2px;
color: #00f6ff;
}
.rightline {
width: 291px;
height: 17px;
background: url(~@/assets/imgs/rightline.png);
}
}
.modes {
width: 660px;
height: 280px;
margin-left: calc(50% - 330px);
.mode {
width: 200px;
height: 120px;
float: left;
margin: 20px 10px 0;
box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.44);
.unchoose {
width: 180px;
height: 24px;
margin: 96px 10px 0;
font-size: 16px;
letter-spacing: 3px;
color: #ffffff;
text-align: center;
background: url(~@/assets/imgs/unchoose16.png) center right no-repeat;
}
.choose {
background: url(~@/assets/imgs/choose16.png) center right no-repeat;
}
}
.mode1 {
background: url(~@/assets/imgs/mode1.png);
}
.mode2 {
background: url(~@/assets/imgs/mode2.png);
}
.mode3 {
background: url(~@/assets/imgs/mode3.png);
}
.mode4 {
background: url(~@/assets/imgs/mode4.png);
}
.mode5 {
background: url(~@/assets/imgs/mode5.png);
}
.mode6 {
background: url(~@/assets/imgs/mode5.png);
}
}
.modes2 {
width: 660px;
height: 40px;
margin-left: calc(50% - 330px);
.mode {
width: 304px;
height: 40px;
float: left;
margin: 20px 10px 0;
background-color: #042b4f;
box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.44);
border: solid 1px #0892da;
.unchoose {
width: 280px;
height: 24px;
margin: 7px 10px 0;
font-size: 16px;
letter-spacing: 3px;
color: #ffffff;
text-align: left;
background: url(~@/assets/imgs/unchoose20.png) center right no-repeat;
}
.choose {
background: url(~@/assets/imgs/choose20.png) center right no-repeat;
}
}
}
}
.protable {
margin: 10px 20px;
}
}
}
}
</style>

View File

@ -0,0 +1,36 @@
export const CONTENT_WORD = {
centerTitle: '计算软件计算软件计算软件计算软件',
modalname1: '源项分析',
modalname2: '扩散分析',
modalname3: '剂量计算',
modalname4: '剂量评估',
modalname5: '路径优化',
modalname6: '报表展示',
modeChoosename1: '场景选择',
modename1: 'HXX',
modename2: 'HXX',
modename3: 'HXX',
modename4: '泄露',
modename5: '待开发',
modename6: '待开发',
modeChoosename2: '模式选择',
mode2name1: '精细模拟',
mode2name2: '快速评估',
data1name: '模板参数配置',
data2name: '气象数据管理',
data3name: 'xx模块',
data4name: 'WQ类型数据管理',
data5name: '地形数据管理',
data6name: '目标管理',
data7name: '机动与防护装备管理',
system1name: '用户管理',
system2name: '角色管理',
system3name: 'GIS工具箱管理',
system4name: '服务器监控',
system5name: '帮助文档',
gis1name: '待开发',
gis2name: '待开发',
gis3name: '待开发',
gis4name: '待开发',
gis5name: '待开发',
}

View File

@ -1,214 +1,177 @@
<template>
<div class="main">
<a-form-model class="user-layout-login" @keyup.enter.native="handleSubmit">
<a-tabs :activeKey="customActiveKey" :tabBarStyle="{ textAlign: 'center', borderBottom: 'unset' }" @change="handleTabClick">
<a-tab-pane key="tab1" tab="账号密码登录">
<login-account ref="alogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-account>
</a-tab-pane>
<a-tab-pane key="tab2" tab="手机号登录">
<login-phone ref="plogin" @validateFail="validateFail" @success="requestSuccess" @fail="requestFailed"></login-phone>
</a-tab-pane>
</a-tabs>
<a-form-model-item>
<a-checkbox @change="handleRememberMeChange" default-checked>自动登录</a-checkbox>
<router-link :to="{ name: 'alteration'}" class="forge-password" style="float: right;">
忘记密码
</router-link>
<router-link :to="{ name: 'register'}" class="forge-password" style="float: right;margin-right: 10px" >
注册账户
</router-link>
</a-form-model-item>
<a-form-item style="margin-top:24px">
<a-button size="large" type="primary" htmlType="submit" class="login-button" :loading="loginBtn" @click.stop.prevent="handleSubmit" :disabled="loginBtn">确定
<a-form-item>
<div class="loginlogo">计算软件计算软件计算软件计算软件</div>
</a-form-item>
<a-form-item>
<div class="logintitle">用户登录</div>
</a-form-item>
<a-form-item>
<div class="loginLabel">用户名:</div>
<a-input class="logininput" v-model="model.username" />
</a-form-item>
<a-form-item>
<div class="loginLabel">密码:</div>
<a-input class="logininput" v-model="model.password" type="password" />
</a-form-item>
<a-form-item>
<div class="loginLabel">角色选择:</div>
<a-input class="logininput" v-model="model.inputCode" />
</a-form-item>
<a-form-item>
<a-button type="primary" htmlType="submit" class="login-button clickmode" :loading="loginBtn"
@click.stop.prevent="handleSubmit" :disabled="loginBtn">确定
</a-button>
</a-form-item>
</a-form-model>
<two-step-captcha v-if="requiredTwoStepCaptcha" :visible="stepCaptchaVisible" @success="stepCaptchaSuccess" @cancel="stepCaptchaCancel"></two-step-captcha>
<login-select-tenant ref="loginSelect" @success="loginSelectOk"></login-select-tenant>
<third-login ref="thirdLogin"></third-login>
</div>
</template>
<script>
import Vue from 'vue'
import { ACCESS_TOKEN, ENCRYPTED_STRING } from '@/store/mutation-types'
import ThirdLogin from './third/ThirdLogin'
import LoginSelectTenant from './LoginSelectTenant'
import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
import { getEncryptedString } from '@/utils/encryption/aesEncrypt'
import { timeFix } from '@/utils/util'
import LoginAccount from './LoginAccount'
import LoginPhone from './LoginPhone'
import { mapActions } from 'vuex'
export default {
components: {
LoginSelectTenant,
TwoStepCaptcha,
ThirdLogin,
LoginAccount,
LoginPhone
},
data () {
return {
customActiveKey: 'tab1',
rememberMe: true,
loginBtn: false,
requiredTwoStepCaptcha: false,
stepCaptchaVisible: false,
encryptedString:{
key:"",
iv:"",
},
}
},
created() {
Vue.ls.remove(ACCESS_TOKEN)
this.getRouterData();
this.rememberMe = true
},
methods:{
handleTabClick(key){
this.customActiveKey = key
components: {
},
data() {
return {
rememberMe: false,
loginBtn: false,
model: {
username: 'admin',
password: '123456',
inputCode: '请选择'
},
handleRememberMeChange(e){
this.rememberMe = e.target.checked
},
/**跳转到登录页面的参数-账号获取*/
getRouterData(){
this.$nextTick(() => {
let temp = this.$route.params.username || this.$route.query.username || ''
if (temp) {
this.$refs.alogin.acceptUsername(temp)
}
})
},
//登录
handleSubmit () {
this.loginBtn = true;
if (this.customActiveKey === 'tab1') {
// 使用账户密码登录
this.$refs.alogin.handleLogin(this.rememberMe)
} else {
//手机号码登录
this.$refs.plogin.handleLogin(this.rememberMe)
}
},
// 校验失败
validateFail(){
this.loginBtn = false;
},
// 登录后台成功
requestSuccess(loginResult){
this.$refs.loginSelect.show(loginResult)
},
//登录后台失败
requestFailed (err) {
let description = ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试"
this.$notification[ 'error' ]({
message: '登录失败',
description: description,
duration: 4,
});
//账户密码登录错误后更新验证码
if(this.customActiveKey === 'tab1' && description.indexOf('密码错误')>0){
this.$refs.alogin.handleChangeCheckCode()
}
this.loginBtn = false;
},
loginSelectOk(){
this.loginSuccess()
},
//登录成功
loginSuccess () {
this.$router.push({ path: "/dashboard/analysis" }).catch(()=>{
console.log('登录跳转首页出错,这个错误从哪里来的')
})
this.$notification.success({
message: '欢迎',
description: `${timeFix()}欢迎回来`,
});
},
stepCaptchaSuccess () {
this.loginSuccess()
},
stepCaptchaCancel () {
this.Logout().then(() => {
this.loginBtn = false
this.stepCaptchaVisible = false
})
},
//获取密码加密规则
getEncrypte(){
var encryptedString = Vue.ls.get(ENCRYPTED_STRING);
if(encryptedString == null){
getEncryptedString().then((data) => {
this.encryptedString = data
});
}else{
this.encryptedString = encryptedString;
}
}
}
},
created() {
Vue.ls.remove(ACCESS_TOKEN)
},
methods: {
...mapActions(['Login']),
//登录
handleSubmit() {
this.loginBtn = true;
let loginParams = {
username: 'admin',
password: '123456',
captcha: '',
checkKey: new Date().getTime(),
remember_me: this.rememberMe,
}
this.Login(loginParams).then((res) => {
this.loginSuccess()
}).catch((err) => {
this.requestFailed(err)
});
},
//登录后台失败
requestFailed(err) {
let description = ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试"
this.$notification['error']({
message: '登录失败',
description: description,
duration: 4,
});
//账户密码登录错误后更新验证码
if (this.customActiveKey === 'tab1' && description.indexOf('密码错误') > 0) {
this.$refs.alogin.handleChangeCheckCode()
}
this.loginBtn = false;
},
//登录成功
loginSuccess() {
this.$router.push({ path: "/dashboard/analysis" }).catch(() => {
})
this.$notification.success({
message: '欢迎',
description: `${timeFix()}欢迎回来`,
});
},
//获取密码加密规则
getEncrypte() {
var encryptedString = Vue.ls.get(ENCRYPTED_STRING);
if (encryptedString == null) {
getEncryptedString().then((data) => {
this.encryptedString = data
});
} else {
this.encryptedString = encryptedString;
}
},
}
}
</script>
<style lang="less" scoped>
.user-layout-login {
label {
font-size: 14px;
}
.getCaptcha {
display: block;
width: 100%;
height: 40px;
}
.forge-password {
font-size: 14px;
}
button.login-button {
padding: 0 15px;
font-size: 16px;
height: 40px;
width: 100%;
}
.user-login-other {
text-align: left;
margin-top: 24px;
line-height: 22px;
.item-icon {
font-size: 24px;
color: rgba(0,0,0,.2);
margin-left: 16px;
vertical-align: middle;
cursor: pointer;
transition: color .3s;
&:hover {
color: #1890ff;
}
}
.register {
float: right;
}
}
.user-layout-login {
width: 620px;
height: 620px;
background: url(~@/assets/imgs/bg/loginBg.png) center bottom no-repeat;
position: absolute;
left: calc(50vw - 310px);
top: calc(50vh - 350px);
.clickmode{
cursor: pointer;
}
</style>
<style>
.valid-error .ant-select-selection__placeholder{
color: #f5222d;
.loginlogo {
height: 73PX;
background: url(~@/assets/imgs/loginlogo.png) left center no-repeat;
font-family: 'Microsoft YaHei';
font-size: 30px;
letter-spacing: 2px;
color: #ffffff;
padding: 10px 0 0 105px;
}
.logintitle {
font-family: 'Microsoft YaHei';
font-size: 28px;
font-weight: bold;
font-style: italic;
font-stretch: normal;
line-height: 39px;
letter-spacing: 3px;
color: #ffffff;
padding-left: 130px;
}
.loginLabel {
font-family: 'Microsoft YaHei';
font-size: 18px;
letter-spacing: 2px;
color: #ffffff;
padding-left: 130px;
}
.logininput {
background: url(~@/assets/imgs/bg/lginputBg.png) left center no-repeat;
width: 381px;
height: 50px;
border: none !important;
margin: 4px 0 -4px 120px;
padding-left: 14px;
color: #00deff;
font-size: 16px;
}
button.login-button {
padding: 0 15px;
font-size: 16px;
width: 375px;
height: 50px;
background: url(~@/assets/imgs/bg/loginbtnBg.png) left center no-repeat;
margin: 20px 0 0 120px;
}
}
</style>

View File

@ -108,7 +108,7 @@ module.exports = {
/* 注意jeecgboot前端做了改造此处不需要配置跨域和后台接口只需要改.env相关配置文件即可
issues/3462 很多人此处做了配置导致刷新前端404问题请一定注意*/
'/jeecg-boot': {
target: 'http://localhost:8080',
target: 'http://192.168.0.7:8080',
ws: false,
changeOrigin: true
},

View File

@ -97,9 +97,10 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/sys/getLoginQrcode/**", "anon"); //登录二维码
filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //监听扫码
filterChainDefinitionMap.put("/sys/checkAuth", "anon"); //授权接口排除
filterChainDefinitionMap.put("/bizCmaq/**", "anon"); //授权接口排除
// filterChainDefinitionMap.put("/bizEngineering/**", "anon"); //授权接口排除
// filterChainDefinitionMap.put("/**/*", "anon");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/doc.html", "anon");
filterChainDefinitionMap.put("/**/*.js", "anon");

View File

@ -56,6 +56,16 @@
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
<dependency>
<groupId>edu.ucar</groupId>
<artifactId>netcdf4</artifactId>
<version>4.5.5</version>
</dependency>
<dependency>
<groupId>edu.ucar</groupId>
<artifactId>grib</artifactId>
<version>4.5.5</version>
</dependency>
<!-- 积木报表 mongo redis 支持包
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
@ -65,11 +75,6 @@
<dependencyManagement>
<dependencies>
<!-- 读取 .nc 文件 -->
<dependency>
<groupId>edu.ucar</groupId>
<artifactId>netcdf4</artifactId>
<version>4.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>

View File

@ -0,0 +1,20 @@
package org.jeecg.modules.constants;
public class EnginConstants {
public static final int MODE_WRF_NUMBER = 2; // wrf程序数量
public static final int MODE_CMAQ_NUMBER = 2; // cmaq施程序数量
public static final int MODE_OPENFOAM_NUMBER = 2; // openfoam程序数量
public static final int MODE_CALPUFF_NUMBER = 2; // calpuff程序数量
public static final String MODE_WRF_NAMES = "WPS,WRF,"; // wrf程序名称
public static final String MODE_CMAQ_NAMES = "MCIP,EMIS,ICON,BCON,CCTM,"; // cmaq施程序名称
public static final String MODE_OPENFOAM_NAMES = ""; // openfoam程序名称
public static final String MODE_CALPUFF_NAMES = ""; // calpuff程序名称
public static final String SHELL_WRF_NAMES = "geogrid,ungrib,metgrid,real,"; // wrf脚本名称
public static final String SHELL_CMAQ_NAMES = "MCIP,EMIS,ICON,BCON,CCTM,"; // cmaq施程序名称
public static final String SHELL_OPENFOAM_NAMES = ""; // openfoam程序名称
public static final String SHELL_CALPUFF_NAMES = ""; // calpuff程序名称
}

View File

@ -0,0 +1,6 @@
package org.jeecg.modules.constants;
public class FacilityConstants {
/** sys_user 表 username 唯一键索引 */
public static final String SQL_INDEX_UNIQ_FACILITY_NAME = "uniq_facility_name";
}

View File

@ -0,0 +1,7 @@
package org.jeecg.modules.constants;
public class GriddConstants {
public static final double NY_GRIDD_RADII = 1.0742; // 纽约网格半径()
}

View File

@ -0,0 +1,5 @@
package org.jeecg.modules.constants;
public class RedisConstants {
public static final long TWO_DAYS_SECS = 60 * 60 * 6;
}

View File

@ -0,0 +1,102 @@
package org.jeecg.modules.listener;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class FileListener extends FileAlterationListenerAdaptor {
/**
* 文件创建执行
*/
public void onFileCreate(File file) {
//也可以打印日志
System.out.println("文件[新建]:" + file.getAbsolutePath());
}
/**
* 文件创建修改
*/
public void onFileChange(File file) {
System.out.println("文件[修改]:" + file.getAbsolutePath());
//目标文件路径
String str = "d:\\test\\est.txt";
//如果被修改的是目标文件执行自己的业务操作
if(str.equals(file.getAbsolutePath())){
// try {
// readTest.readAW();
// } catch (IOException e) {
// e.printStackTrace();
// }
}
}
/**
* 文件删除
*/
public void onFileDelete(File file) {
System.out.println("文件[删除]:" + file.getAbsolutePath());
}
/**
* 目录创建
*/
public void onDirectoryCreate(File directory) {
System.out.println("[新建]:" + directory.getAbsolutePath());
}
/**
* 目录修改
*/
public void onDirectoryChange(File directory) {
System.out.println("[修改]:" + directory.getAbsolutePath());
}
/**
* 目录删除
*/
public void onDirectoryDelete(File directory) {
System.out.println("[删除]:" + directory.getAbsolutePath());
}
public void onStart(FileAlterationObserver observer) {
// TODO Auto-generated method stub
super.onStart(observer);
}
public void onStop(FileAlterationObserver observer) {
// TODO Auto-generated method stub
super.onStop(observer);
}
public static void main(String[] args) throws Exception{
// 监控目录
String rootDir = "D://test";
// 轮询间隔
long interval = TimeUnit.SECONDS.toMillis(1);
// 创建过滤器
IOFileFilter directories = FileFilterUtils.and(
// 只监听文件夹目录
FileFilterUtils.directoryFileFilter(),
// 此过滤器接受File隐藏的
HiddenFileFilter.VISIBLE);
IOFileFilter files = FileFilterUtils.and(
// 只监听文件
FileFilterUtils.fileFileFilter(),
// 只监听文件后缀为txt的文件
FileFilterUtils.suffixFileFilter(".txt"));
IOFileFilter filter = FileFilterUtils.or(directories, files);
// 使用过滤器
FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter);
//不使用过滤器
//FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir));
observer.addListener(new FileListener());
//创建文件变化监听器
FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
// 开始监控
monitor.start();
}
}

View File

@ -0,0 +1,26 @@
package org.jeecg.modules.listener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class ReadTest {
//设置变量 记录上次读取位置
private long num = 0;
public void readAW() throws IOException {
File file = new File("d://test//est.txt");
RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw");
//将文件定位到偏移量所指位置在该位置发生下一个读取或写入操作
randomAccessFile.seek(num);
//获取按行读取的数据并落库
String s = randomAccessFile.readLine();
for(;s!= null;s = randomAccessFile.readLine()){
// User user = new User();
// user.setUserName(s);
// userServer.insertUser(user);
}
//重新计算偏移量做下一次读取时的初始偏移量
num= randomAccessFile.length();
}
}

View File

@ -0,0 +1,57 @@
package org.jeecg.modules.project.baseAPI.calculateAPI.service;
import java.io.IOException;
import java.util.List;
/**
* @Description: 通用API
* @Author: jeecg-boot
* @Date: 2023-09-20
* @Version: V1.0
*/
public interface IBizBaseAPIService {
/**
* 以北为0度获取目标方向可拿到方位角
* 也可以求风向
* @param centerLon
* @param centerLat
* @param targetLon
* @param targetLat
* @param u(风在x方向风向)
* @param v(风在y方向风向)
*/
String calcAngle(Double centerLon, Double centerLat, Double targetLon, Double targetLat,Double u,Double v);
/**
* 获取两点之间的距离
* @param latx
* @param lonx
* @param laty
* @param lony
*/
double regDistance(double latx,double lonx,double laty,double lony);
/**
* 判断经纬度是否在范围内
* @param lat
* @param lon
* @param minLat
* @param maxLat
* @param minLon
* @param maxLon
*/
boolean isWithinRange(double lat, double lon, double minLat, double maxLat, double minLon, double maxLon);
/**
* 根据中心经纬度与网格间距获取矩形网格
* @param centerLongitude
* @param centerLatitude
* @param distance
* @param rows
* @param cols
*/
List<List<double[]>> generateGrid(double centerLongitude, double centerLatitude, double distance, int rows, int cols);
}

View File

@ -0,0 +1,163 @@
package org.jeecg.modules.project.baseAPI.calculateAPI.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.modules.project.baseAPI.calculateAPI.service.IBizBaseAPIService;
import org.jeecg.modules.project.baseConfig.bizEngineering.entity.BizEngineering;
import org.jeecg.modules.project.baseConfig.bizEngineering.service.IBizEngineeringService;
import org.jeecg.modules.project.calculateConfig.bizWrf.entity.BizWrf;
import org.jeecg.modules.project.calculateConfig.bizWrf.mapper.BizWrfMapper;
import org.jeecg.modules.util.NcUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import ucar.nc2.dataset.NetcdfDataset;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static java.lang.Math.PI;
import static java.lang.Math.toRadians;
/**
* @Description: 通用API
* @Author: jeecg-boot
* @Date: 2023-09-20
* @Version: V1.0
*/
@Service
public class BizBaseAPIServiceImpl implements IBizBaseAPIService {
@Override
public String calcAngle(Double centerLon, Double centerLat, Double targetLon, Double targetLat,Double u,Double v) {
String direction = "";
double subLat;
double subLon;
if(null != u && v != null){
subLat = v; //v
subLon = u; //u
}else{
//差值
// subLat = centerLon - targetLon;
// subLon = centerLat - targetLat;
subLat = centerLat - targetLat;
subLon = targetLon - centerLon;
}
double angle = 0; // 角度
if (subLon == 0) {
// 经度差值为0 说明点在y轴上方或者y轴下方
if (subLat > 0) {
// y轴上方
angle = 0;
direction = "正北";
} else if (subLat < 0) {
// y轴下方
angle = 180;
direction = "正南";
}
} else {
// 根据tan的值求角度 subLon不能为0 纬度差值 除以 经度差值 = tan的值
double tanValue = subLat / subLon;
angle = Math.atan(tanValue) * 180 / Math.PI;
// 将angle转换为正数
if (angle < 0) {
angle += 360;
}
// 将角度转换为16个方向
if (angle >= 11.25 && angle < 33.75) {
direction = "东北偏北";
} else if (angle >= 33.75 && angle < 56.25) {
direction = "东北";
} else if (angle >= 56.25 && angle < 78.75) {
direction = "东北偏东";
} else if (angle >= 78.75 && angle < 101.25) {
direction = "正东";
} else if (angle >= 101.25 && angle < 123.75) {
direction = "东南偏东";
} else if (angle >= 123.75 && angle < 146.25) {
direction = "东南";
} else if (angle >= 146.25 && angle < 168.75) {
direction = "东南偏南";
} else if (angle >= 168.75 && angle < 191.25) {
direction = "正南";
} else if (angle >= 191.25 && angle < 213.75) {
direction = "西南偏南";
} else if (angle >= 213.75 && angle < 236.25) {
direction = "西南";
} else if (angle >= 236.25 && angle < 258.75) {
direction = "西南偏西";
} else if (angle >= 258.75 && angle < 281.25) {
direction = "正西";
} else if (angle >= 281.25 && angle < 303.75) {
direction = "西北偏西";
} else if (angle >= 303.75 && angle < 326.25) {
direction = "西北";
} else if (angle >= 326.25 && angle < 348.75) {
direction = "西北偏北";
} else {
direction = "正北";
}
}
return direction;
}
@Override
public double regDistance(double latx, double lonx, double laty, double lony) {
return 111.71269150641055729984301412873 * 180 * Math.acos(
Math.cos(toRadians(latx)) * Math.cos(toRadians(laty)) *
Math.cos(toRadians(lonx) - toRadians(lony)) +
Math.sin(toRadians(latx)) * Math.sin(toRadians(laty))) / Math.PI;
}
@Override
public List<List<double[]>> generateGrid(double centerLongitude, double centerLatitude, double distance, int rows, int cols) {
List<List<double[]>> results = new ArrayList<>();
// 地球半径单位公里
double earthRadius = 6371.0;
// 转换为弧度
double centerLatRad = Math.toRadians(centerLatitude);
// 计算纬度的每个弧度对应的纬度圈的周长
double circumference = 2 * Math.PI * earthRadius * Math.cos(centerLatRad);
// 计算每度对应的距离
double degreesPerKm = 360.0 / circumference;
// 将距离从公里转换为度
double distanceInDegrees = distance * degreesPerKm;
// 计算网格起始点的经纬度
double startLongitude = centerLongitude - (cols / 2.0) * distanceInDegrees;
double startLatitude = centerLatitude - (rows / 2.0) * distanceInDegrees;
// 生成网格
for (int i = 0; i < rows; i++) {
List<double[]> gridCoordinates = new ArrayList<>();
for (int j = 0; j < cols; j++) {
double longitude = startLongitude + j * distanceInDegrees;
double latitude = startLatitude + i * distanceInDegrees;
if (longitude >= -180 && longitude <= 180 && latitude >= -90 && latitude <= 90) {
double[] coordinate = {longitude, latitude};
gridCoordinates.add(coordinate);
}
}
results.add(gridCoordinates);
}
return results;
}
@Override
public boolean isWithinRange(double lat, double lon, double minLat, double maxLat, double minLon, double maxLon) {
return (lat >= minLat && lat <= maxLat && lon >= minLon && lon <= maxLon);
}
}

View File

@ -0,0 +1,30 @@
package org.jeecg.modules.project.baseAPI.sftpAPI;
import java.io.IOException;
/**
* @Description: 通用API
* @Author: jeecg-boot
* @Date: 2023-09-20
* @Version: V1.0
*/
public interface IBizSftpAPIService {
/**
* sftp上传文件
* @param file
* @param cshFilePath
* @param fileName
*/
void sftpUpload(String file, String cshFilePath, String fileName);
/**
* sftp下载文件
*
* @param directory 下载目录
* @param downloadFile 下载的文件
* @param saveFile 存在本地的路径
*/
void download(String directory, String downloadFile, String saveFile);
}

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.util;
package org.jeecg.modules.project.baseAPI.sftpAPI;
import com.jcraft.jsch.*;
import org.springframework.beans.factory.annotation.Value;
import java.io.*;
import java.util.ArrayList;
@ -13,16 +14,18 @@ public class SFTPUtil {
private ChannelSftp sftp;
private Session session;
// SFTP 登录用户名
// private String username = "xiongzheng";
//SFTP 登录密码
// private String password = "512109";
@Value("${spring.Linux.ip}")
private String host;
@Value("${spring.Linux.username}")
private String username;
@Value("${spring.Linux.password}")
private String password;
@Value("${spring.Linux.port}")
private Integer port;
//私钥
private String privateKey;
//SFTP 服务器地址IP地址
// private String host = "192.168.8.114";
//SFTP 端口
// private int port = 22;
/**
@ -47,6 +50,38 @@ public class SFTPUtil {
public SFTPUtil() { }
/**
* 连接sftp服务器
*/
public void login() {
try {
JSch jsch = new JSch();
if (privateKey != null) {
jsch.addIdentity(privateKey);// 设置私钥
}
session = jsch.getSession(username, host, port);
if (password != null) {
session.setPassword(password);
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect(60 * 1000 * 10);
System.out.println("session:"+session);
Channel channel = session.openChannel("sftp");
channel.connect(60 * 1000 * 10);
sftp = (ChannelSftp) channel;
System.out.println("login-sftp:" + sftp);
} catch (JSchException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}
}
/**
* 连接sftp服务器

View File

@ -0,0 +1,56 @@
package org.jeecg.modules.project.baseAPI.sftpAPI.impl;
import org.jeecg.modules.project.baseAPI.sftpAPI.IBizSftpAPIService;
import org.jeecg.modules.project.baseAPI.sftpAPI.SFTPUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* @Description: 通用API
* @Author: jeecg-boot
* @Date: 2023-09-20
* @Version: V1.0
*/
@Service
public class BizSftpAPIServiceImpl implements IBizSftpAPIService {
@Value("${spring.Linux.ip}")
private String ip;
@Value("${spring.Linux.username}")
private String username;
@Value("${spring.Linux.password}")
private String password;
@Value("${spring.Linux.port}")
private Integer port;
@Override
public void sftpUpload(String file, String cshFilePath, String fileName) {
try{
SFTPUtil sftpUtil = new SFTPUtil();
sftpUtil.login(username, password,ip,port);
InputStream inputStream = new FileInputStream(file);
sftpUtil.upload(cshFilePath,fileName,inputStream);
sftpUtil.logout();
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void download(String directory, String downloadFile, String saveFile) {
try{
SFTPUtil sftpUtil = new SFTPUtil();
sftpUtil.login(username, password,ip,port);
sftpUtil.download(directory,downloadFile,saveFile);
sftpUtil.logout();
}catch (Exception e){
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,20 @@
package org.jeecg.modules.project.baseConfig.bizAim.VO;
import lombok.Data;
import org.jeecg.modules.project.baseConfig.bizAim.bizCityAim.entity.BizCityAim;
import org.jeecg.modules.project.baseConfig.bizAim.bizFacilityAim.entity.BizFacilityAim;
import java.util.List;
@Data
public class FacilityAimVo {
//设施名称
List<String> facilityNames;
//城市信息
BizCityAim bizCityAim;
//目标方向
String direction;
//目标距离
double distance;
}

View File

@ -50,7 +50,7 @@ public class BizCityAimController extends JeecgController<BizCityAim, IBizCityAi
@GetMapping(value = "/list")
public Result<IPage<BizCityAim>> queryPageList(BizCityAim bizCityAim,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
@RequestParam(name="pageSize", defaultValue="10000") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<BizCityAim> queryWrapper = QueryGenerator.initQueryWrapper(bizCityAim, req.getParameterMap());
Page<BizCityAim> page = new Page<BizCityAim>(pageNo, pageSize);
@ -66,7 +66,6 @@ public class BizCityAimController extends JeecgController<BizCityAim, IBizCityAi
*/
@AutoLog(value = "城市目标表-添加")
@ApiOperation(value="城市目标表-添加", notes="城市目标表-添加")
@RequiresPermissions("bizCityAim:biz_city_aim:add")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody BizCityAim bizCityAim) {
bizCityAimService.save(bizCityAim);
@ -81,7 +80,6 @@ public class BizCityAimController extends JeecgController<BizCityAim, IBizCityAi
*/
@AutoLog(value = "城市目标表-编辑")
@ApiOperation(value="城市目标表-编辑", notes="城市目标表-编辑")
@RequiresPermissions("bizCityAim:biz_city_aim:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody BizCityAim bizCityAim) {
bizCityAimService.updateById(bizCityAim);
@ -96,7 +94,6 @@ public class BizCityAimController extends JeecgController<BizCityAim, IBizCityAi
*/
@AutoLog(value = "城市目标表-通过id删除")
@ApiOperation(value="城市目标表-通过id删除", notes="城市目标表-通过id删除")
@RequiresPermissions("bizCityAim:biz_city_aim:delete")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
bizCityAimService.removeById(id);
@ -111,7 +108,6 @@ public class BizCityAimController extends JeecgController<BizCityAim, IBizCityAi
*/
@AutoLog(value = "城市目标表-批量删除")
@ApiOperation(value="城市目标表-批量删除", notes="城市目标表-批量删除")
@RequiresPermissions("bizCityAim:biz_city_aim:deleteBatch")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.bizCityAimService.removeByIds(Arrays.asList(ids.split(",")));
@ -141,7 +137,6 @@ public class BizCityAimController extends JeecgController<BizCityAim, IBizCityAi
* @param request
* @param bizCityAim
*/
@RequiresPermissions("bizCityAim:biz_city_aim:exportXls")
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, BizCityAim bizCityAim) {
return super.exportXls(request, bizCityAim, BizCityAim.class, "城市目标表");
@ -154,7 +149,6 @@ public class BizCityAimController extends JeecgController<BizCityAim, IBizCityAi
* @param response
* @return
*/
@RequiresPermissions("bizCityAim:biz_city_aim:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, BizCityAim.class);

View File

@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@ -69,4 +70,9 @@ public class BizCityAim implements Serializable {
@Excel(name = "备注", width = 15)
@ApiModelProperty(value = "备注")
private String remark;
/**距离目标公里数*/
@TableField(exist = false)
private Double distance;
}

View File

@ -0,0 +1,20 @@
package org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.VO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventType.entity.BizEventType;
import org.jeecg.modules.project.baseConfig.bizAim.bizSourceItem.entity.BizSourceItem;
import java.util.List;
import java.util.Map;
@Data
public class EventCoefficientResultVO {
@ApiModelProperty(value = "设施id")
String facilityId;
@ApiModelProperty(value = "核素名称集合")
List<String> bizSourceItems;
@ApiModelProperty(value = "系数集合")
List<Map<String,String>> resultMaps;
}

View File

@ -0,0 +1,45 @@
package org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.VO;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
@Data
public class SourceItemVO {
@Excel(name = "EventType", width = 15)
private String EventType;
private String Kr83m;
private String Kr85;
private String Kr85m;
private String Kr87;
private String Kr88;
private String Kr89;
private String Xe131m;
private String Xe133;
private String Xe133m;
private String Xe135;
private String Xe135m;
private String Xe137;
private String Xe138;
private String I131;
private String I132;
private String I133;
private String I134;
private String I135;
private String Cs134;
private String Cs136;
private String Cs137;
private String Te127;
private String Te127m;
private String Te129;
private String Te129m;
private String Te132;
private String Sb125;
private String Sr89;
private String Sr90;
private String Ru103;
private String Ru105;
private String Ba140;
private String Rh105;
private String Ce144;
}

View File

@ -0,0 +1,418 @@
package org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.controller;
import java.util.*;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbookFactory;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.constants.FacilityConstants;
import org.jeecg.modules.project.baseConfig.bizAim.bizCityAim.entity.BizCityAim;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.VO.EventCoefficientResultVO;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.VO.SourceItemVO;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.entity.BizEventCoefficient;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.service.IBizEventCoefficientService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventType.entity.BizEventType;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventType.service.IBizEventTypeService;
import org.jeecg.modules.project.baseConfig.bizAim.bizFacilityAim.entity.BizFacilityAim;
import org.jeecg.modules.project.baseConfig.bizAim.bizFacilityAim.mapper.BizFacilityAimMapper;
import org.jeecg.modules.project.baseConfig.bizAim.bizFacilityAim.service.IBizFacilityAimService;
import org.jeecg.modules.project.baseConfig.bizAim.bizSourceItem.entity.BizSourceItem;
import org.jeecg.modules.project.baseConfig.bizAim.bizSourceItem.service.IBizSourceItemService;
import org.jeecg.modules.project.baseConfig.bizEngineering.mapper.BizEngineeringMapper;
import org.jeecg.modules.project.baseConfig.bizEngineering.service.IBizEngineeringService;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 事故比例系数表
* @Author: jeecg-boot
* @Date: 2023-10-23
* @Version: V1.0
*/
@Api(tags="事故比例系数表")
@RestController
@RequestMapping("/bizEventCoefficient/bizEventCoefficient")
@Slf4j
public class BizEventCoefficientController extends JeecgController<BizEventCoefficient, IBizEventCoefficientService> {
@Autowired
private IBizEventCoefficientService bizEventCoefficientService;
@Autowired
private IBizSourceItemService bizSourceItemService;
@Autowired
private IBizEventTypeService bizEventCoefficient;
@Autowired
private IBizFacilityAimService bizFacilityAimService;
/**
* 分页列表查询
*
* @param bizEventCoefficient
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "事故比例系数表-分页列表查询")
@ApiOperation(value="事故比例系数表-分页列表查询", notes="事故比例系数表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<BizEventCoefficient>> queryPageList(BizEventCoefficient bizEventCoefficient,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10000") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<BizEventCoefficient> queryWrapper = QueryGenerator.initQueryWrapper(bizEventCoefficient, req.getParameterMap());
Page<BizEventCoefficient> page = new Page<BizEventCoefficient>(pageNo, pageSize);
IPage<BizEventCoefficient> pageList = bizEventCoefficientService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 查询系数表格
*
* @param facilityId
* @return
*/
//@AutoLog(value = "事故比例系数表-查询系数表格")
@ApiOperation(value="事故比例系数表-查询系数表格", notes="事故比例系数表-查询系数表格")
@GetMapping(value = "/queryCoefficientTable")
public Result<EventCoefficientResultVO> queryCoefficientTable(String facilityId) {
EventCoefficientResultVO eventCoefficientResultVO = new EventCoefficientResultVO();
List<BizSourceItem> bizSourceItems = bizSourceItemService.querySourceItemInfo();
List<BizEventType> bizEventTypes = bizEventCoefficient.queryEventTypeInfo();
LambdaQueryWrapper<BizEventCoefficient> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BizEventCoefficient::getFacilityId,facilityId);
queryWrapper.orderByAsc(BizEventCoefficient::getId);
List<BizEventCoefficient> bizEvents = bizEventCoefficientService.list(queryWrapper);
if(bizEvents == null || bizEvents.isEmpty()) {
return Result.error("未找到对应数据");
}
Map<String, List<BizEventCoefficient>> map = bizEvents.stream().collect(Collectors.groupingBy(ord -> ord.getEventTypeId()));
List<List<Double>> coefficients = new ArrayList<>();
for (BizEventType bizEventType : bizEventTypes) {
List<BizEventCoefficient> bizEventCoefficients = map.get(bizEventType.getId());
List<Double> eventCoefficient = bizEventCoefficients.stream().map(BizEventCoefficient::getNuclideCoefficient).collect(Collectors.toList());
coefficients.add(eventCoefficient);
}
List<Map<String,String>> resultMaps = new ArrayList<>();
for (int j = 0; j < coefficients.size(); j++) {
List<Double> coefficientValues = coefficients.get(j);
Map<String,String> resultMap = new HashMap<>();
resultMap.put("eventType",bizEventTypes.get(j).getEventName());
for (int i = 0; i < coefficientValues.size(); i++) {
resultMap.put(bizSourceItems.get(i).getNuclideType(),String.format("%.2E",coefficientValues.get(i)));
}
resultMaps.add(resultMap);
}
eventCoefficientResultVO.setResultMaps(resultMaps);
eventCoefficientResultVO.setBizSourceItems(bizSourceItems.stream().map(BizSourceItem::getNuclideType).collect(Collectors.toList()));
return Result.OK(eventCoefficientResultVO);
}
/**
* 添加
*
* @param eventCoefficientResultVO
* @return
*/
@AutoLog(value = "事故比例系数表-添加")
@ApiOperation(value="事故比例系数表-添加", notes="事故比例系数表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody EventCoefficientResultVO eventCoefficientResultVO) {
if(null == eventCoefficientResultVO){
return Result.error("系数信息为空!");
}
String facilityId = eventCoefficientResultVO.getFacilityId();
List<BizEventCoefficient> eventCoefficients = bizEventCoefficientService.list(new LambdaQueryWrapper<BizEventCoefficient>().eq(BizEventCoefficient::getFacilityId, facilityId));
List<Map<String,String>> coefficients = eventCoefficientResultVO.getResultMaps();
List<BizEventCoefficient> bizEventCoefficients = new ArrayList<>();
List<BizSourceItem> bizSourceItems = bizSourceItemService.querySourceItemInfo();
List<BizEventType> bizEventTypes = bizEventCoefficient.queryEventTypeInfo();
for (int i = 0; i < coefficients.size(); i++) {
String eventTypeId = bizEventTypes.get(i).getId();
Map<String, String> maps = coefficients.get(i);
for (BizSourceItem bizSourceItem : bizSourceItems) {
try {
Double value = Double.valueOf(maps.get(bizSourceItem.getNuclideType()));
BizEventCoefficient bizEventCoefficient = new BizEventCoefficient();
bizEventCoefficient.setNuclideTypeId(bizSourceItem.getId());
bizEventCoefficient.setNuclideCoefficient(value);
bizEventCoefficient.setFacilityId(facilityId);
bizEventCoefficient.setEventTypeId(eventTypeId);
bizEventCoefficients.add(bizEventCoefficient);
}catch (NumberFormatException e){
e.printStackTrace();
Result<String> result = new Result();
result.setCode(20001);
result.setMessage(String.format("保存失败,%s事故的%s核素值不是有效数字",bizEventTypes.get(i).getId(),bizSourceItem.getNuclideType()));
result.setSuccess(false);
return result;
}catch (Exception e){
return Result.error("保存失败,未知异常,请查看系统日志!");
}
}
}
for (BizEventCoefficient bizEventCoefficient : bizEventCoefficients) {
for (int j = 0; j < eventCoefficients.size(); j++) {
BizEventCoefficient oldDatas = eventCoefficients.get(j);
if(bizEventCoefficient.getEventTypeId().equals(oldDatas.getEventTypeId()) && bizEventCoefficient.getNuclideTypeId().equals(oldDatas.getNuclideTypeId())){
bizEventCoefficient.setId(oldDatas.getId());
break;
}
}
}
// bizEventCoefficientService.remove(new LambdaQueryWrapper<BizEventCoefficient>().eq(BizEventCoefficient::getFacilityId,facilityId));
bizEventCoefficientService.updateBatchById(bizEventCoefficients);
return Result.OK("保存成功!");
}
/**
* 编辑
*
* @param bizEventCoefficient
* @return
*/
@AutoLog(value = "事故比例系数表-编辑")
@ApiOperation(value="事故比例系数表-编辑", notes="事故比例系数表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody BizEventCoefficient bizEventCoefficient) {
bizEventCoefficientService.updateById(bizEventCoefficient);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "事故比例系数表-通过id删除")
@ApiOperation(value="事故比例系数表-通过id删除", notes="事故比例系数表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
bizEventCoefficientService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "事故比例系数表-批量删除")
@ApiOperation(value="事故比例系数表-批量删除", notes="事故比例系数表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.bizEventCoefficientService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 封装三维Echarts数据
*
* @param facilityId
* @return
*/
//@AutoLog(value = "事故比例系数表-封装三维Echarts数据")
// @ApiOperation(value="事故比例系数表-封装三维Echarts数据", notes="事故比例系数表-封装三维Echarts数据")
// @GetMapping(value = "/echarts3dData")
// public Result<Map<String,Collection>> echarts3dData(@RequestParam String facilityId) {
// List<BizEventCoefficient> bizEvents = bizEventCoefficientService.list(new LambdaQueryWrapper<BizEventCoefficient>().eq(BizEventCoefficient::getFacilityId,facilityId));
// if(bizEvents==null || bizEvents.isEmpty()) {
// return Result.error("未找到对应数据");
// }
// Set<String> nuclideNames = bizEvents.stream().map(BizEventCoefficient::getNuclideTypeId).collect(Collectors.toSet());
// List<List<String>> resultValues = new ArrayList<>();
// List<String> eventTypes = new ArrayList<>();
// String eventType = "";
// for (BizEventCoefficient bizEvent : bizEvents) {
// if(StringUtils.isBlank(eventType)){
// eventType = bizEvent.getEventType();
// eventTypes.add(eventType);
// }else if(!eventType.equals(bizEvent.getEventType())){
// eventType = bizEvent.getEventType();
// eventTypes.add(eventType);
// }
// List<String> values = new ArrayList<>();
// values.add(bizEvent.getNuclideName());
// values.add(bizEvent.getEventType());
// values.add(bizEvent.getNuclideCoefficient() + "");
// resultValues.add(values);
// }
//
// List<Double> coefficients = bizEvents.stream().map(BizEventCoefficient::getNuclideCoefficient).collect(Collectors.toList());
// List<Double> max = new ArrayList<>();
// max.add(Math.rint(coefficients.stream().max(Double::compareTo).orElse(0D)));
// List<Double> min = new ArrayList<>();
// min.add(Math.rint(coefficients.stream().min(Double::compareTo).orElse(0D)));
//
// Map<String,Collection> resultMap = new HashMap<>();
// resultMap.put("nuclideNames",nuclideNames);
// resultMap.put("eventTypes",eventTypes);
// resultMap.put("max",max);
// resultMap.put("min",min);
// resultMap.put("values",resultValues);
// return Result.OK(resultMap);
// }
/**
* 根据事故类型查询系数
*
* @param facilityId
* @param eventType
* @return
*/
//@AutoLog(value = "事故比例系数表-通过id查询")
// @ApiOperation(value="事故比例系数表-根据事故类型查询数据", notes="事故比例系数表-根据事故类型查询数据")
// @GetMapping(value = "/getCoefficientByEventType")
// public Result<List<BizEventCoefficient>> getCoefficientByEventType(@RequestParam String facilityId,@RequestParam String eventType) {
// List<BizEventCoefficient> bizEventCoefficients = bizEventCoefficientService.list(new LambdaQueryWrapper<BizEventCoefficient>().
// eq(BizEventCoefficient::getEventType,eventType).
// eq(BizEventCoefficient::getFacilityId,facilityId));
// if(bizEventCoefficients == null || !bizEventCoefficients.isEmpty()) {
// return Result.error("未找到对应数据");
// }
// return Result.OK(bizEventCoefficients);
// }
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "事故比例系数表-通过id查询")
@ApiOperation(value="事故比例系数表-通过id查询", notes="事故比例系数表-通过id查询")
@GetMapping(value = "/queryById")
public Result<BizEventCoefficient> queryById(@RequestParam(name="id",required=true) String id) {
BizEventCoefficient bizEventCoefficient = bizEventCoefficientService.getById(id);
if(bizEventCoefficient==null) {
return Result.error("未找到对应数据");
}
return Result.OK(bizEventCoefficient);
}
/**
* 导出excel
*
* @param request
* @param bizEventCoefficient
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, BizEventCoefficient bizEventCoefficient) {
return super.exportXls(request, bizEventCoefficient, BizEventCoefficient.class, "事故比例系数表");
}
// /**
// * 通过excel导入数据
// *
// * @param request
// * @param facilityId
// * @return
// */
// @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
// public Result<?> importExcel(HttpServletRequest request, String facilityId)throws IOException {
// MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
// // 错误信息
// List<String> errorMessage = new ArrayList<>();
// for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// MultipartFile file = entity.getValue();// 获取上传文件对象
// try {
// List<String> nuclideNames = new ArrayList<>();
// List<BizEventCoefficient> bizEventCoefficients = new ArrayList<>();
// Workbook workbook = HSSFWorkbookFactory.create(file.getInputStream());
// XSSFSheet sheet = (XSSFSheet)workbook.getSheetAt(0);
// for (int i = 0; i <= sheet.getLastRowNum(); i++) {
// XSSFRow row = sheet.getRow(i);
// if(i == 0){
// for (int j = 1; j < row.getLastCellNum(); j++) {
// nuclideNames.add(row.getCell(j).getStringCellValue());
// }
// }else{
// String eventType = "";
// for (int j = 0; j < row.getLastCellNum(); j++) {
// if(j == 0){
// eventType = row.getCell(0).getStringCellValue();
// }else{
// BizEventCoefficient bizEventCoefficient = new BizEventCoefficient();
// bizEventCoefficient.setFacilityId(facilityId);
// bizEventCoefficient.setEventType(eventType);
// bizEventCoefficient.setNuclideName(nuclideNames.get(j-1));
// bizEventCoefficient.setNuclideCoefficient(row.getCell(j).getNumericCellValue());
// bizEventCoefficients.add(bizEventCoefficient);
// }
// }
// }
// }
// bizEventCoefficientService.saveBatch(bizEventCoefficients);
// } catch (Exception e) {
// errorMessage.add("发生异常:" + e.getMessage());
// log.error(e.getMessage(), e);
// } finally {
// try {
// file.getInputStream().close();
// } catch (IOException e) {
// log.error(e.getMessage(), e);
// }
// }
// }
// return Result.ok("导入成功!");
//// return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
// }
public double calculateActivity(int power,int runTime,double halfLife,double heatSpectrum){
double activity;
if(halfLife < power){
activity = 310 * heatSpectrum * 100 * power * 1000000000000l;
}else{
activity = 210 * heatSpectrum * 100 * runTime * power * 1000000000000l / halfLife;
}
return activity;
}
public static void main(String[] args) {
System.out.println(Double.valueOf("1.34E"));
}
}

View File

@ -0,0 +1,81 @@
package org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 事故比例系数表
* @Author: jeecg-boot
* @Date: 2023-12-12
* @Version: V1.0
*/
@Data
@TableName("biz_event_coefficient")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="biz_event_coefficient对象", description="事故比例系数表")
public class BizEventCoefficient implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
/**设施id*/
@Excel(name = "设施id", width = 15)
@ApiModelProperty(value = "设施id")
private String facilityId;
/**事故类型id*/
@Excel(name = "事故类型id", width = 15)
@ApiModelProperty(value = "事故类型id")
private String eventTypeId;
/**核素种类id*/
@Excel(name = "核素种类id", width = 15)
@ApiModelProperty(value = "核素种类id")
private String nuclideTypeId;
/**半衰期*/
@Excel(name = "半衰期", width = 15)
@ApiModelProperty(value = "半衰期")
private Double halfLife;
/**热谱*/
@Excel(name = "热谱", width = 15)
@ApiModelProperty(value = "热谱")
private Double heatSpectrum;
/**核素系数*/
@Excel(name = "核素系数", width = 15)
@ApiModelProperty(value = "核素系数")
private Double nuclideCoefficient;
@TableField(exist = false)
private String eventType;
}

View File

@ -0,0 +1,17 @@
package org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.entity.BizEventCoefficient;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 事故比例系数表
* @Author: jeecg-boot
* @Date: 2023-10-23
* @Version: V1.0
*/
public interface BizEventCoefficientMapper extends BaseMapper<BizEventCoefficient> {
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.project.baseConfig.bizAim.bizEventCoefficient.mapper.BizEventCoefficientMapper">
</mapper>

Some files were not shown because too many files have changed in this diff Show More