Browse Source

ui跳转

master
DU 1 month ago
parent
commit
f7c7ee6788
  1. 1463
      docs/api/catalog.json
  2. 20
      src/App.vue
  3. 29
      src/api/points/rule.js
  4. 18
      src/assets/styles/index.scss
  5. 371
      src/assets/styles/prototype-theme.scss
  6. 7
      src/assets/styles/ruoyi.scss
  7. 30
      src/assets/styles/sidebar.scss
  8. 4
      src/assets/styles/variables.scss
  9. 6
      src/components/Breadcrumb/index.vue
  10. 188
      src/components/DataListPanel/index.vue
  11. 6
      src/components/Pagination/index.vue
  12. 12
      src/components/apk/index.vue
  13. 11
      src/layout/components/AppMain.vue
  14. 23
      src/layout/components/Navbar.vue
  15. 4
      src/layout/components/Settings/index.vue
  16. 12
      src/layout/components/Sidebar/Logo.vue
  17. 14
      src/layout/components/message.vue
  18. 3
      src/layout/index.vue
  19. 3
      src/main.js
  20. 2
      src/settings.js
  21. 14
      src/store/modules/settings.js
  22. 42
      src/views/flowable/definition/index.vue
  23. 45
      src/views/flowable/task/form/index.vue
  24. 2
      src/views/hazard/audit/index.vue
  25. 2
      src/views/hazard/ledger/index.vue
  26. 2
      src/views/login.vue
  27. 32
      src/views/monitor/logininfor/index.vue
  28. 31
      src/views/monitor/operlog/index.vue
  29. 615
      src/views/points/management/index.vue
  30. 46
      src/views/system/config/index.vue
  31. 33
      src/views/system/dept/index.vue
  32. 48
      src/views/system/dict/index.vue
  33. 43
      src/views/system/expression/index.vue
  34. 43
      src/views/system/listener/index.vue
  35. 31
      src/views/system/menu/index.vue
  36. 39
      src/views/system/notice/index.vue
  37. 43
      src/views/system/post/index.vue
  38. 374
      src/views/system/role/index.vue
  39. 328
      src/views/system/user/index.vue

1463
docs/api/catalog.json

File diff suppressed because it is too large Load Diff

20
src/App.vue

@ -1,26 +1,16 @@
<template> <template>
<!-- <div id="app">
width 宽度 默认 1920 <router-view />
height 高度 默认 1080 <theme-picker />
bgc 背景颜色 默认 "transparent" </div>
delay自适应缩放防抖延迟时间(ms) 默认 100
isFlat是否启用拉伸模式 默认 false
-->
<ScaleBox :width="1920" :height="1080" :delay="100" :isFlat="true">
<div id="app">
<router-view />
<theme-picker />
</div>
</ScaleBox>
</template> </template>
<script> <script>
import ScaleBox from 'vue2-scale-box'
import ThemePicker from "@/components/ThemePicker"; import ThemePicker from "@/components/ThemePicker";
export default { export default {
name: "App", name: "App",
components: { ThemePicker, ScaleBox }, components: { ThemePicker },
metaInfo() { metaInfo() {
return { return {
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title, title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,

29
src/api/points/rule.js

@ -0,0 +1,29 @@
import request from '@/utils/request'
export function listPointsRules(params) {
return request({ url: '/business/points/rule/list', method: 'get', params })
}
export function listFactoryDepartments() {
return request({ url: '/system/dept/factoryList', method: 'get' })
}
export function togglePointsRule(id, enabled) {
return request({
url: '/business/points/rule/toggleEnabled',
method: 'post',
params: { id, enabled }
})
}
export function deletePointsRule(id) {
return request({ url: '/business/points/rule/deleteById', method: 'get', params: { id }})
}
export function getPointsRule(id) {
return request({ url: '/business/points/rule/info', method: 'get', params: { id }})
}
export function addPointsRule(data) {
return request({ url: '/business/points/rule/add', method: 'post', data })
}

18
src/assets/styles/index.scss

@ -7,14 +7,18 @@
body { body {
height: 100%; height: 100%;
margin: 0;
color: #1a1a2e;
background: #f0f2f5;
font-size: 13px;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility; text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
} }
label { label {
font-weight: 700; font-weight: 500;
} }
html { html {
@ -121,11 +125,9 @@ aside {
//main-container全局样式 //main-container全局样式
.app-container { .app-container {
padding: 15px; min-height: 100%;
height: 100%; padding: 16px 20px 40px;
background-color: #fff; background-color: #f0f2f5;
background-clip: padding-box;
border: 15px solid #edf2f8;
} }
.components-container { .components-container {
@ -250,4 +252,4 @@ aside {
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
} }
} }

371
src/assets/styles/prototype-theme.scss

@ -0,0 +1,371 @@
/*
* Shared visual baseline derived from the delivered light management prototype.
* Keep business-page layout rules local; this file only normalizes the shell
* and Element UI components used across the administration system.
*/
:root {
--prototype-bg: #f0f2f5;
--prototype-panel: #ffffff;
--prototype-panel-soft: #fafbfc;
--prototype-hover: #f5f7fa;
--prototype-text: #1a1a2e;
--prototype-text-secondary: #5a5a72;
--prototype-text-muted: #9898ae;
--prototype-border: #e5e7eb;
--prototype-divider: #f0f0f2;
--prototype-primary: #1890ff;
--prototype-radius: 8px;
}
#app,
.app-wrapper,
.main-container,
.app-main {
color: var(--prototype-text);
background: var(--prototype-bg);
}
.el-card {
color: var(--prototype-text);
border: 1px solid var(--prototype-divider);
border-radius: var(--prototype-radius);
box-shadow: none;
}
.el-card__header {
min-height: 46px;
padding: 14px 16px 10px;
border-bottom-color: var(--prototype-divider);
font-size: 14px;
font-weight: 600;
}
.el-card__body {
padding: 14px 16px 16px;
}
.el-tabs__header {
margin-bottom: 14px;
}
.el-tabs__nav-wrap::after {
height: 1px;
background-color: var(--prototype-divider);
}
.el-tabs__item {
height: 36px;
padding: 0 16px;
color: var(--prototype-text-secondary);
font-size: 13px;
line-height: 36px;
}
.el-tabs__item.is-active {
color: var(--prototype-primary);
font-weight: 600;
}
.el-tabs__active-bar {
height: 2px;
background-color: var(--prototype-primary);
}
.el-table {
color: var(--prototype-text);
font-size: var(--table-font-size, 12px);
}
.el-table::before,
.el-table--border::after,
.el-table--group::after {
background-color: var(--prototype-divider);
}
.el-table th.el-table__cell {
height: 36px;
padding: 0;
color: var(--prototype-text-secondary);
background: var(--prototype-panel-soft);
border-bottom-color: var(--prototype-divider);
font-size: 12px;
font-weight: 600;
}
.el-table td.el-table__cell {
padding: 8px 0;
border-bottom-color: var(--prototype-divider);
}
.el-table .cell {
padding-right: 10px;
padding-left: 10px;
line-height: 19px;
}
.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell {
background: #fcfcfd;
}
.el-table__body tr.hover-row > td.el-table__cell,
.el-table__body tr:hover > td.el-table__cell {
background-color: var(--prototype-hover);
}
.el-form-item {
margin-bottom: 14px;
}
.el-form-item__label,
.el-form-item__content,
.el-radio,
.el-checkbox {
color: var(--prototype-text-secondary);
font-size: 12px;
}
.el-form-item__label {
font-weight: 500;
}
.el-input,
.el-select,
.el-textarea,
.el-input-number {
font-size: 12px;
}
.el-input__inner,
.el-textarea__inner {
color: var(--prototype-text);
border-color: var(--prototype-border);
border-radius: 6px;
background: var(--prototype-panel-soft);
}
.el-input__inner {
height: 34px;
line-height: 34px;
}
.el-input--medium .el-input__inner {
height: 34px;
line-height: 34px;
}
.el-input--small .el-input__inner,
.el-range-editor--small.el-input__inner {
height: 32px;
line-height: 32px;
}
.el-input__inner:focus,
.el-textarea__inner:focus,
.el-select .el-input.is-focus .el-input__inner {
border-color: var(--prototype-primary);
}
.el-button {
padding: 9px 16px;
border-radius: 6px;
font-size: 12px;
font-weight: 500;
}
.el-button--medium {
padding: 9px 16px;
font-size: 12px;
}
.el-button--primary {
color: #fff;
border-color: #1890ff;
background: #1890ff;
}
.el-button--primary:focus,
.el-button--primary:hover {
border-color: #40a9ff;
background: #40a9ff;
}
.el-button--danger {
color: #fff;
border-color: #d64550;
background: #d64550;
}
.el-button--danger:focus,
.el-button--danger:hover {
border-color: #e06871;
background: #e06871;
}
.el-button--default {
color: var(--prototype-text, #1a1a2e);
border-color: var(--prototype-border, #e5e7eb);
background: #fff;
}
.el-button--default:focus,
.el-button--default:hover {
color: #1890ff;
border-color: #91d5ff;
background: #f0f8ff;
}
.el-button.is-disabled,
.el-button.is-disabled:focus,
.el-button.is-disabled:hover {
color: #b8bbc4;
border-color: #e5e7eb;
background: #f5f5f5;
}
.el-button--small {
padding: 7px 12px;
font-size: 12px;
}
.el-button--mini {
padding: 5px 10px;
font-size: 11px;
}
.el-button--text {
padding-right: 0;
padding-left: 0;
}
.el-tag {
border-radius: 8px;
font-weight: 500;
}
.el-tag--small {
height: 20px;
padding: 0 8px;
font-size: 11px;
line-height: 18px;
}
.el-tag--success {
color: #2d8a4e;
border-color: #c6e3ce;
background: #ebf5ec;
}
.el-tag--warning {
color: #c97e24;
border-color: #f5d3a8;
background: #fff4ec;
}
.el-tag--danger {
color: #d64550;
border-color: #f3c2c6;
background: #fef0f0;
}
.el-tag--info {
color: #5a5a72;
border-color: #e0e0e0;
background: #f5f5f5;
}
.el-dialog {
border: 1px solid var(--prototype-border);
border-radius: 12px;
box-shadow: 0 16px 48px rgba(0, 0, 0, .18);
}
.el-dialog__header {
padding: 20px 22px 12px;
}
.el-dialog__title {
color: var(--prototype-text);
font-size: 16px;
font-weight: 600;
}
.el-dialog__body {
padding: 10px 22px 18px;
color: var(--prototype-text-secondary);
font-size: 13px;
}
.el-dialog__footer {
padding: 10px 22px 20px;
}
.el-message-box {
border-color: var(--prototype-border);
border-radius: 12px;
}
.el-switch__core {
width: 38px !important;
height: 22px;
border-radius: 11px;
}
.el-switch__core::after {
width: 16px;
height: 16px;
top: 2px;
}
.el-switch.is-checked .el-switch__core::after {
margin-left: -18px;
}
.el-pagination,
.el-pagination button,
.el-pagination span:not([class*=suffix]) {
color: var(--prototype-text-secondary);
font-size: 12px;
font-weight: 400;
}
.el-pagination.is-background .btn-next,
.el-pagination.is-background .btn-prev,
.el-pagination.is-background .el-pager li {
min-width: 26px;
height: 26px;
margin: 0 3px;
border: 1px solid var(--prototype-border);
border-radius: 4px;
background: var(--prototype-panel-soft);
line-height: 24px;
}
.el-pagination.is-background .el-pager li:not(.disabled).active {
border-color: var(--prototype-primary);
background: var(--prototype-primary);
}
.el-descriptions {
color: var(--prototype-text);
font-size: 12px;
}
.el-descriptions-item__label.is-bordered-label {
color: var(--prototype-text-secondary);
background: var(--prototype-panel-soft);
}
.el-empty__description p {
color: var(--prototype-text-muted);
font-size: 12px;
}
@media (max-width: 768px) {
.app-container {
padding: 12px;
}
.el-dialog {
width: calc(100% - 24px) !important;
}
}

7
src/assets/styles/ruoyi.scss

@ -118,10 +118,9 @@
/** 表格布局 **/ /** 表格布局 **/
.pagination-container { .pagination-container {
position: relative; position: relative;
height: 25px; min-height: 36px;
margin-bottom: 10px; margin: 12px 0 0;
margin-top: 15px; padding: 4px 0 0 !important;
padding: 10px 20px !important;
} }
/* tree border */ /* tree border */

30
src/assets/styles/sidebar.scss

@ -24,8 +24,9 @@
left: 0; left: 0;
z-index: 1001; z-index: 1001;
overflow: hidden; overflow: hidden;
-webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); border-right: 1px solid #f0f0f2;
box-shadow: 2px 0 6px rgba(0,21,41,.35); -webkit-box-shadow: none;
box-shadow: none;
// reset element-ui css // reset element-ui css
.horizontal-collapse-transition { .horizontal-collapse-transition {
@ -46,7 +47,7 @@
&.has-logo { &.has-logo {
.el-scrollbar { .el-scrollbar {
height: calc(100% - 50px); height: calc(100% - 52px);
} }
} }
@ -61,7 +62,7 @@
} }
.svg-icon { .svg-icon {
margin-right: 16px; margin-right: 8px;
} }
.el-menu { .el-menu {
@ -71,6 +72,11 @@
} }
.el-menu-item, .el-submenu__title { .el-menu-item, .el-submenu__title {
height: 40px;
line-height: 40px;
padding: 0 16px !important;
border-left: 3px solid transparent;
font-size: 13px;
overflow: hidden !important; overflow: hidden !important;
text-overflow: ellipsis !important; text-overflow: ellipsis !important;
white-space: nowrap !important; white-space: nowrap !important;
@ -84,6 +90,18 @@
} }
} }
.theme-light {
.el-menu-item.is-active {
border-left-color: var(--current-color, #1890ff);
background-color: rgba(24, 144, 255, .08) !important;
font-weight: 600;
}
.el-submenu.is-active > .el-submenu__title {
color: var(--current-color, #1890ff) !important;
}
}
& .theme-dark .is-active > .el-submenu__title { & .theme-dark .is-active > .el-submenu__title {
color: $base-menu-color-active !important; color: $base-menu-color-active !important;
} }
@ -91,6 +109,10 @@
& .nest-menu .el-submenu>.el-submenu__title, & .nest-menu .el-submenu>.el-submenu__title,
& .el-submenu .el-menu-item { & .el-submenu .el-menu-item {
min-width: $base-sidebar-width !important; min-width: $base-sidebar-width !important;
height: 34px;
line-height: 34px;
padding-left: 42px !important;
font-size: 12px;
&:hover { &:hover {
background-color: rgba(0, 0, 0, 0.06) !important; background-color: rgba(0, 0, 0, 0.06) !important;

4
src/assets/styles/variables.scss

@ -15,7 +15,7 @@ $base-menu-color-active:#f4f4f5;
$base-menu-background:#0b1026; $base-menu-background:#0b1026;
$base-logo-title-color: #ffffff; $base-logo-title-color: #ffffff;
$base-menu-light-color:rgba(0,0,0,.70); $base-menu-light-color:#5A5A72;
$base-menu-light-background:#ffffff; $base-menu-light-background:#ffffff;
$base-logo-light-title-color: #001529; $base-logo-light-title-color: #001529;
@ -37,7 +37,7 @@ $base-sub-menu-background:#000c17;
$base-sub-menu-hover:#001528; $base-sub-menu-hover:#001528;
*/ */
$base-sidebar-width: 200px; $base-sidebar-width: 212px;
// the :export directive is the magic sauce for webpack // the :export directive is the magic sauce for webpack
// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass

6
src/components/Breadcrumb/index.vue

@ -62,12 +62,12 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.app-breadcrumb.el-breadcrumb { .app-breadcrumb.el-breadcrumb {
display: inline-block; display: inline-block;
font-size: 14px; font-size: 12px;
line-height: 50px; line-height: 52px;
margin-left: 8px; margin-left: 8px;
.no-redirect { .no-redirect {
color: #97a8be; color: #5a5a72;
cursor: text; cursor: text;
} }
} }

188
src/components/DataListPanel/index.vue

@ -0,0 +1,188 @@
<template>
<section class="data-list-panel">
<div v-if="$slots.filters || $slots.actions" class="data-list-panel__toolbar">
<div v-if="$slots.filters" class="data-list-panel__filters">
<slot name="filters" />
</div>
<div v-if="$slots.actions" class="data-list-panel__actions">
<slot name="actions" />
</div>
</div>
<div class="data-list-panel__card">
<div v-if="$slots.header" class="data-list-panel__header">
<slot name="header" />
</div>
<div class="data-list-panel__table">
<slot />
</div>
<div v-if="$slots.footer" class="data-list-panel__footer">
<slot name="footer" />
</div>
</div>
</section>
</template>
<script>
export default {
name: 'DataListPanel'
}
</script>
<style lang="scss" scoped>
.data-list-panel {
width: 100%;
}
.data-list-panel__toolbar {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16px;
margin-bottom: 12px;
}
.data-list-panel__filters {
min-width: 0;
flex: 1;
}
.data-list-panel__actions {
display: flex;
align-items: center;
justify-content: flex-end;
flex: 0 0 auto;
}
.data-list-panel__card {
overflow: hidden;
padding: 14px 16px 10px;
border: 1px solid var(--prototype-divider, #f0f0f2);
border-radius: 8px;
background: #fff;
}
.data-list-panel__header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
color: var(--prototype-text, #1a1a2e);
font-size: 14px;
font-weight: 600;
}
.data-list-panel__footer {
min-height: 36px;
}
::v-deep .data-list-panel__table .el-table,
::v-deep .data-list-panel__table .el-table__expanded-cell {
background: transparent;
}
::v-deep .data-list-panel__table .el-table--border,
::v-deep .data-list-panel__table .el-table--group {
border: 0;
}
::v-deep .data-list-panel__table .el-table--border::after,
::v-deep .data-list-panel__table .el-table--group::after,
::v-deep .data-list-panel__table .el-table__cell {
border-right: 0;
}
::v-deep .data-list-panel__table .el-table::before {
height: 1px;
background: var(--prototype-divider, #f0f0f2);
}
::v-deep .data-list-panel__table th.el-table__cell {
background: #fafbfc;
}
::v-deep .data-list-filter-form {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
::v-deep .data-list-filter-form .el-form-item {
margin: 0;
}
::v-deep .data-list-filter-form .el-form-item__label {
display: none;
}
::v-deep .data-list-filter-form .el-input,
::v-deep .data-list-filter-form .el-select {
width: 168px !important;
}
::v-deep .data-list-filter-form .el-date-editor {
width: 218px !important;
}
::v-deep .data-list-actions {
display: flex;
align-items: center;
margin: 0 !important;
white-space: nowrap;
}
::v-deep .data-list-actions .el-col {
float: none;
width: auto;
padding-right: 0 !important;
padding-left: 6px !important;
}
::v-deep .data-list-actions .el-col:first-child {
padding-left: 0 !important;
}
::v-deep .data-list-actions .top-right-btn {
float: none;
margin-left: 8px;
}
::v-deep .data-list-table .data-list-operation-column .cell {
white-space: nowrap;
}
@media (max-width: 1200px) {
.data-list-panel__toolbar {
flex-direction: column;
}
.data-list-panel__actions {
width: 100%;
justify-content: flex-start;
}
}
@media (max-width: 768px) {
.data-list-panel__card {
padding: 10px;
}
::v-deep .data-list-filter-form,
::v-deep .data-list-actions {
width: 100%;
}
::v-deep .data-list-actions {
flex-wrap: wrap;
gap: 8px 0;
}
::v-deep .data-list-filter-form .el-form-item,
::v-deep .data-list-filter-form .el-input,
::v-deep .data-list-filter-form .el-select,
::v-deep .data-list-filter-form .el-date-editor {
width: 100% !important;
}
}
</style>

6
src/components/Pagination/index.vue

@ -105,8 +105,10 @@ export default {
<style scoped> <style scoped>
.pagination-container { .pagination-container {
background: #fff; min-height: 36px;
padding: 32px 16px; margin: 12px 0 0;
padding: 4px 0 0;
background: transparent;
} }
.pagination-container.hidden { .pagination-container.hidden {
display: none; display: none;

12
src/components/apk/index.vue

@ -48,13 +48,13 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.right-menu-message { .right-menu-message {
position: relative; position: static;
top: -42%; display: inline-flex;
left: -30px; align-items: center;
transform: translateY(30%);
.el-dropdown-link { .el-dropdown-link {
font-size: 18px; font-size: 12px;
color: var(--navbar-text-color, #606266); color: var(--navbar-text-color, #5a5a72);
cursor: pointer;
} }
.el-icon-arrow-down { .el-icon-arrow-down {
font-size: 12px; font-size: 12px;

11
src/layout/components/AppMain.vue

@ -28,25 +28,24 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.app-main { .app-main {
/* 50= navbar 50 */ min-height: 100vh;
height: calc(100% - 0px);
width: 100%; width: 100%;
position: relative; position: relative;
overflow-y: auto; overflow-y: auto;
} }
.fixed-header + .app-main { .fixed-header + .app-main {
padding-top: 50px; padding-top: 52px;
} }
.hasTagsView { .hasTagsView {
.app-main { .app-main {
/* 84 = navbar + tags-view = 50 + 34 */ /* 86 = navbar + tags-view = 52 + 34 */
min-height: calc(100vh - 84px); min-height: calc(100vh - 86px);
} }
.fixed-header + .app-main { .fixed-header + .app-main {
padding-top: 84px; padding-top: 86px;
} }
} }
</style> </style>

23
src/layout/components/Navbar.vue

@ -119,18 +119,19 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.navbar { .navbar {
height: 50px; height: 52px;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
// background: #000; // background: #000;
box-shadow: 0 1px 4px rgba(0,21,41,.08); border-bottom: 1px solid #f0f0f2;
box-shadow: 0 1px 4px rgba(0, 0, 0, .06);
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
color: var(--navbar-text-color); color: var(--navbar-text-color);
.hamburger-container { .hamburger-container {
line-height: 46px; line-height: 52px;
height: 100%; height: 100%;
// float: left; // float: left;
cursor: pointer; cursor: pointer;
@ -152,9 +153,11 @@ export default {
} }
.right-menu { .right-menu {
float: right;
margin-left: auto; margin-left: auto;
height: 100%; height: 100%;
display: flex;
align-items: center;
gap: 14px;
&:focus { &:focus {
outline: none; outline: none;
@ -164,8 +167,8 @@ export default {
display: inline-block; display: inline-block;
padding: 0 8px; padding: 0 8px;
height: 100%; height: 100%;
font-size: 18px; font-size: 14px;
color: #5a5e66; color: #5a5a72;
vertical-align: text-bottom; vertical-align: text-bottom;
&.hover-effect { &.hover-effect {
@ -179,7 +182,7 @@ export default {
} }
.avatar-container { .avatar-container {
margin-right: 30px; margin-right: 20px;
.avatar-wrapper { .avatar-wrapper {
position: relative; position: relative;
@ -201,8 +204,8 @@ export default {
} }
.user-name { .user-name {
font-size: 20px; font-size: 12px;
margin: 0 10px; margin: 0 8px;
color: var(--navbar-text-color); color: var(--navbar-text-color);
} }
@ -220,7 +223,7 @@ export default {
} }
.el-icon-caret-bottom { .el-icon-caret-bottom {
font-size: 24px; font-size: 12px;
color: var(--navbar-text-color); color: var(--navbar-text-color);
} }

4
src/layout/components/Settings/index.vue

@ -164,12 +164,14 @@ export default {
"layout-setting", "layout-setting",
`{ `{
"layoutMode":"left-menu", "layoutMode":"left-menu",
"layoutVersion":"prototype-v1",
"tagsView":${this.tagsView}, "tagsView":${this.tagsView},
"fixedHeader":${this.fixedHeader}, "fixedHeader":${this.fixedHeader},
"sidebarLogo":${this.sidebarLogo}, "sidebarLogo":${this.sidebarLogo},
"dynamicTitle":${this.dynamicTitle}, "dynamicTitle":${this.dynamicTitle},
"sideTheme":"${this.sideTheme}", "sideTheme":"${this.sideTheme}",
"theme":"${this.theme}" "theme":"${this.theme}",
"fontSize":${this.fontSize}
}` }`
); );
setTimeout(this.$modal.closeLoading(), 1000) setTimeout(this.$modal.closeLoading(), 1000)

12
src/layout/components/Sidebar/Logo.vue

@ -53,8 +53,8 @@ export default {
.sidebar-logo-container { .sidebar-logo-container {
position: relative; position: relative;
width: 100%; width: 100%;
height: 50px; height: 52px;
line-height: 50px; line-height: 52px;
background: #2b2f3a; background: #2b2f3a;
text-align: center; text-align: center;
overflow: hidden; overflow: hidden;
@ -65,10 +65,12 @@ export default {
& .sidebar-logo { & .sidebar-logo {
max-width: 100%; max-width: 100%;
height: 50px; width: 100%;
height: 52px;
vertical-align: middle; vertical-align: middle;
margin-right: 0; margin-right: 0;
object-fit: cover; object-fit: contain;
padding: 7px 12px;
} }
& .sidebar-title { & .sidebar-title {
@ -76,7 +78,7 @@ export default {
margin: 0; margin: 0;
color: #fff; color: #fff;
font-weight: 600; font-weight: 600;
line-height: 50px; line-height: 52px;
font-size: 14px; font-size: 14px;
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
vertical-align: middle; vertical-align: middle;

14
src/layout/components/message.vue

@ -130,10 +130,16 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.right-menu-message { .right-menu-message {
position: relative; position: static;
top: -50%; display: inline-flex;
left: -80px; align-items: center;
transform: translateY(30%);
::v-deep .el-button {
padding: 5px 10px;
border-color: #e5e7eb;
color: #5a5a72;
background: #fafbfc;
}
} }
.right-menu-item { .right-menu-item {

3
src/layout/index.vue

@ -1,5 +1,5 @@
<template> <template>
<div :class="classObj" class="app-wrapper" :style="{'--current-color': theme}"> <div :class="classObj" class="app-wrapper" :style="{'--current-color': theme, '--table-font-size': fontSize + 'px'}">
<div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/> <div v-if="device==='mobile'&&sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
<sidebar v-if="!sidebar.hide" class="sidebar-container"/> <sidebar v-if="!sidebar.hide" class="sidebar-container"/>
<div :class="{hasTagsView:needTagsView,sidebarHide:sidebar.hide}" class="main-container"> <div :class="{hasTagsView:needTagsView,sidebarHide:sidebar.hide}" class="main-container">
@ -36,6 +36,7 @@ export default {
computed: { computed: {
...mapState({ ...mapState({
theme: state => state.settings.theme, theme: state => state.settings.theme,
fontSize: state => state.settings.fontSize,
sideTheme: state => state.settings.sideTheme, sideTheme: state => state.settings.sideTheme,
sidebar: state => state.app.sidebar, sidebar: state => state.app.sidebar,
device: state => state.app.device, device: state => state.app.device,

3
src/main.js

@ -7,6 +7,7 @@ import './assets/styles/element-variables.scss'
import '@/assets/styles/index.scss' // global css import '@/assets/styles/index.scss' // global css
import '@/assets/styles/ruoyi.scss' // ruoyi css import '@/assets/styles/ruoyi.scss' // ruoyi css
import '@/assets/styles/prototype-theme.scss' // management prototype visual baseline
import App from './App' import App from './App'
import store from './store' import store from './store'
import router from './router' import router from './router'
@ -33,6 +34,7 @@ import ImageUpload from "@/components/ImageUpload"
import ImagePreview from "@/components/ImagePreview" import ImagePreview from "@/components/ImagePreview"
// 字典标签组件 // 字典标签组件
import DictTag from '@/components/DictTag' import DictTag from '@/components/DictTag'
import DataListPanel from '@/components/DataListPanel'
// 头部标签组件 // 头部标签组件
import VueMeta from 'vue-meta' import VueMeta from 'vue-meta'
// 字典数据组件 // 字典数据组件
@ -59,6 +61,7 @@ Vue.prototype.handleTree = handleTree
// 全局组件挂载 // 全局组件挂载
Vue.component('DictTag', DictTag) Vue.component('DictTag', DictTag)
Vue.component('DataListPanel', DataListPanel)
Vue.component('ThreeDictTag', ThreeDictTag) Vue.component('ThreeDictTag', ThreeDictTag)
Vue.component('Pagination', Pagination) Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar) Vue.component('RightToolbar', RightToolbar)

2
src/settings.js

@ -37,7 +37,7 @@ module.exports = {
/** /**
* 表格字体大小 * 表格字体大小
*/ */
fontSize: 14, fontSize: 12,
/** /**
* @type {string | array} 'production' | ['production', 'development'] * @type {string | array} 'production' | ['production', 'development']

14
src/store/modules/settings.js

@ -3,22 +3,22 @@ import defaultSettings from '@/settings'
const { sideTheme, showSettings, tagsView, fixedHeader, sidebarLogo, dynamicTitle, fontSize } = defaultSettings const { sideTheme, showSettings, tagsView, fixedHeader, sidebarLogo, dynamicTitle, fontSize } = defaultSettings
const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
const isLeftMenuLayout = storageSetting.layoutMode === 'left-menu' const isPrototypeLayout = storageSetting.layoutVersion === 'prototype-v1'
const state = { const state = {
title: '', title: '',
theme: storageSetting.theme || '#3650da', // #409EFF theme: isPrototypeLayout ? (storageSetting.theme || '#1890ff') : '#1890ff',
// Old saved settings belong to the former top-navigation layout. Start the // Old saved settings belong to the former top-navigation layout. Start the
// new left-menu layout with the light theme, then persist later selections. // new left-menu layout with the light theme, then persist later selections.
sideTheme: isLeftMenuLayout ? (storageSetting.sideTheme || sideTheme) : sideTheme, sideTheme: isPrototypeLayout ? (storageSetting.sideTheme || sideTheme) : sideTheme,
showSettings: showSettings, showSettings: showSettings,
// The project now uses a fixed left navigation layout. Ignore the old // The project now uses a fixed left navigation layout. Ignore the old
// persisted TopNav value so existing users are switched to the new layout. // persisted TopNav value so existing users are switched to the new layout.
topNav: false, topNav: false,
tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, tagsView: isPrototypeLayout && storageSetting.tagsView !== undefined ? storageSetting.tagsView : tagsView,
fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, fixedHeader: isPrototypeLayout && storageSetting.fixedHeader !== undefined ? storageSetting.fixedHeader : fixedHeader,
sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, sidebarLogo: isPrototypeLayout && storageSetting.sidebarLogo !== undefined ? storageSetting.sidebarLogo : sidebarLogo,
dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle, dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
fontSize: storageSetting.fontSize === undefined ? fontSize : storageSetting.fontSize fontSize: isPrototypeLayout && storageSetting.fontSize !== undefined ? storageSetting.fontSize : fontSize
} }
const mutations = { const mutations = {
CHANGE_SETTING: (state, { key, value }) => { CHANGE_SETTING: (state, { key, value }) => {

42
src/views/flowable/definition/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input <el-input
v-model="queryParams.name" v-model="queryParams.name"
@ -23,8 +25,10 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<!-- <el-col :span="1.5">--> <!-- <el-col :span="1.5">-->
<!-- <el-button--> <!-- <el-button-->
<!-- type="primary"--> <!-- type="primary"-->
@ -36,19 +40,15 @@
<!-- </el-col>--> <!-- </el-col>-->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleLoadXml" @click="handleLoadXml"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:deployment:remove']" v-hasPermi="['system:deployment:remove']"
@ -56,6 +56,8 @@
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<template #header>
<el-alert title="流程设计说明" type="success"> <el-alert title="流程设计说明" type="success">
<template slot='title'> <template slot='title'>
<p>流程设计说明:</p> <p>流程设计说明:</p>
@ -65,8 +67,9 @@
<div>4、id参数设置为{processDefinitionKey}:{processDefinitionVersion}:{generated-id},其中generated-id是一个唯一数字,用以保证在集群环境下,流程定义缓存中,流程id的唯一性。</div> <div>4、id参数设置为{processDefinitionKey}:{processDefinitionVersion}:{generated-id},其中generated-id是一个唯一数字,用以保证在集群环境下,流程定义缓存中,流程id的唯一性。</div>
</template> </template>
</el-alert> </el-alert>
<el-table v-loading="loading" fit :data="definitionList" border @selection-change="handleSelectionChange"> </template>
<el-table-column type="selection" width="55" align="center" /> <el-table v-loading="loading" fit :data="definitionList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="流程编号" align="center" prop="deploymentId" :show-overflow-tooltip="true"/> <el-table-column label="流程编号" align="center" prop="deploymentId" :show-overflow-tooltip="true"/>
<el-table-column label="流程标识" align="center" prop="flowKey" :show-overflow-tooltip="true" /> <el-table-column label="流程标识" align="center" prop="flowKey" :show-overflow-tooltip="true" />
<el-table-column label="流程分类" align="center" prop="category" /> <el-table-column label="流程分类" align="center" prop="category" />
@ -97,17 +100,18 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="部署时间" align="center" prop="deploymentTime" width="180"/> <el-table-column label="部署时间" align="center" prop="deploymentTime" width="180"/>
<el-table-column label="操作" width="250" fixed="right"class-name="small-padding fixed-width"> <el-table-column label="操作" width="330" fixed="right" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button @click="handleLoadXml(scope.row)" icon="el-icon-edit-outline" type="text" size="small">设计</el-button> <el-button @click="handleLoadXml(scope.row)" size="mini">设计</el-button>
<el-button @click="handleAddForm(scope.row)" icon="el-icon-edit-el-icon-s-promotion" type="text" size="small" v-if="scope.row.formId == null">配置主表单</el-button> <el-button @click="handleAddForm(scope.row)" size="mini" v-if="scope.row.formId == null">配置主表单</el-button>
<el-button @click="handleUpdateSuspensionState(scope.row)" icon="el-icon-video-pause" type="text" size="small" v-if="scope.row.suspensionState === 1">挂起</el-button> <el-button @click="handleUpdateSuspensionState(scope.row)" size="mini" v-if="scope.row.suspensionState === 1">挂起</el-button>
<el-button @click="handleUpdateSuspensionState(scope.row)" icon="el-icon-video-play" type="text" size="small" v-if="scope.row.suspensionState === 2">激活</el-button> <el-button @click="handleUpdateSuspensionState(scope.row)" type="primary" size="mini" v-if="scope.row.suspensionState === 2">激活</el-button>
<el-button @click="handleDelete(scope.row)" icon="el-icon-delete" type="text" size="small" v-hasPermi="['system:deployment:remove']">删除</el-button> <el-button @click="handleDelete(scope.row)" type="danger" size="mini" v-hasPermi="['system:deployment:remove']">删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -115,6 +119,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改流程定义对话框 --> <!-- 添加或修改流程定义对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>

45
src/views/flowable/task/form/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="表单名称" prop="formName"> <el-form-item label="表单名称" prop="formName">
<el-input <el-input
v-model="queryParams.formName" v-model="queryParams.formName"
@ -15,24 +17,22 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['flowable:form:add']" v-hasPermi="['flowable:form:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['flowable:form:edit']" v-hasPermi="['flowable:form:edit']"
@ -41,9 +41,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['flowable:form:remove']" v-hasPermi="['flowable:form:remove']"
@ -51,41 +49,35 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['flowable:form:export']" v-hasPermi="['flowable:form:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table v-loading="loading" :data="formList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="formList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="表单主键" align="center" prop="formId" /> <el-table-column label="表单主键" align="center" prop="formId" />
<el-table-column label="表单名称" align="center" prop="formName" /> <el-table-column label="表单名称" align="center" prop="formName" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="220" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)" @click="handleDetail(scope.row)"
>详情</el-button> >详情</el-button>
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['flowable:form:edit']" v-hasPermi="['flowable:form:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['flowable:form:remove']" v-hasPermi="['flowable:form:remove']"
>删除</el-button> >删除</el-button>
@ -93,6 +85,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -100,6 +93,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改流程表单对话框 --> <!-- 添加或修改流程表单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>

2
src/views/hazard/audit/index.vue

@ -181,7 +181,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.hazard-audit-page { min-height: calc(100vh - 84px); padding: 16px; background: #f3f5f8; } .hazard-audit-page { min-height: calc(100vh - 52px); padding: 16px 20px 40px; background: #f0f2f5; }
.page-header { margin-bottom: 14px; padding: 14px 18px; border-radius: 8px; background: #fff; } .page-header { margin-bottom: 14px; padding: 14px 18px; border-radius: 8px; background: #fff; }
.route-alert { margin-bottom: 14px; } .route-alert { margin-bottom: 14px; }
.audit-content { display: grid; grid-template-columns: minmax(330px, 1.05fr) minmax(540px, 1.9fr) minmax(280px, .9fr); align-items: start; gap: 14px; min-height: 280px; } .audit-content { display: grid; grid-template-columns: minmax(330px, 1.05fr) minmax(540px, 1.9fr) minmax(280px, .9fr); align-items: start; gap: 14px; min-height: 280px; }

2
src/views/hazard/ledger/index.vue

@ -51,5 +51,5 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.hazard-ledger { min-height: calc(100vh - 84px); background: #f3f5f8; }.filter-bar { display: flex; align-items: center; flex-wrap: wrap; margin-bottom: 14px; padding: 16px 18px 2px; background: #fff; border-radius: 8px; }.filter-control { width: 170px; }.name-control { width: 210px; }.summary-inline { display: flex; align-items: center; gap: 20px; margin: 0 0 14px auto; padding: 0 6px; color: #909399; font-size: 13px; white-space: nowrap; }.summary-inline b { margin-left: 3px; color: #303133; }.warning-text { color: #e6a23c !important; }.success-text { color: #67c23a !important; }.danger-text { color: #f56c6c !important; }.table-card { border: 0; border-radius: 8px; }.table-note { margin-top: 12px; color: #909399; font-size: 12px; line-height: 1.6; }.retry-button { color: #e6a23c; }.detail-dialog { min-height: 250px; max-height: 68vh; overflow-y: auto; padding: 2px 2px 8px; }.detail-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }.detail-no { margin-right: 14px; color: #909399; font-size: 13px; }.detail-name { color: #303133; font-size: 18px; font-weight: 600; }.detail-tags { display: flex; gap: 8px; }.detail-section, .text-section, .attachment-section { margin-top: 16px; }.section-title { margin-bottom: 8px; color: #606266; font-weight: 600; }.text-row { display: grid; grid-template-columns: 90px 1fr; gap: 10px; padding: 7px 0; border-bottom: 1px solid #f0f2f5; font-size: 13px; }.text-row > span { color: #909399; }.text-row p { margin: 0; color: #303133; white-space: pre-wrap; word-break: break-word; }.attachment-tag { margin: 0 8px 8px 0; }.muted { color: #c0c4cc; font-size: 13px; }@media (max-width: 800px) { .summary-inline { width: 100%; justify-content: flex-end; flex-wrap: wrap; gap: 8px 16px; margin: 0 0 10px; white-space: normal; }.filter-control, .name-control { width: 100%; }.filter-bar .el-form-item { width: 100%; margin-right: 0; } } .hazard-ledger { min-height: calc(100vh - 52px); background: #f0f2f5; }.filter-bar { display: flex; align-items: center; flex-wrap: wrap; margin-bottom: 14px; padding: 14px 16px 0; background: #fff; border: 1px solid #f0f0f2; border-radius: 8px; }.filter-control { width: 170px; }.name-control { width: 210px; }.summary-inline { display: flex; align-items: center; gap: 20px; margin: 0 0 14px auto; padding: 0 6px; color: #9898ae; font-size: 12px; white-space: nowrap; }.summary-inline b { margin-left: 3px; color: #1a1a2e; }.warning-text { color: #c97e24 !important; }.success-text { color: #2d8a4e !important; }.danger-text { color: #d64550 !important; }.table-card { border: 1px solid #f0f0f2; border-radius: 8px; }.table-note { margin-top: 12px; color: #9898ae; font-size: 11px; line-height: 1.5; }.retry-button { color: #c97e24; }.detail-dialog { min-height: 250px; max-height: 68vh; overflow-y: auto; padding: 2px 2px 8px; }.detail-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }.detail-no { margin-right: 14px; color: #9898ae; font-size: 12px; }.detail-name { color: #1a1a2e; font-size: 16px; font-weight: 600; }.detail-tags { display: flex; gap: 8px; }.detail-section, .text-section, .attachment-section { margin-top: 16px; }.section-title { margin-bottom: 8px; color: #5a5a72; font-size: 13px; font-weight: 600; }.text-row { display: grid; grid-template-columns: 90px 1fr; gap: 10px; padding: 7px 0; border-bottom: 1px solid #f0f0f2; font-size: 12px; }.text-row > span { color: #9898ae; }.text-row p { margin: 0; color: #1a1a2e; white-space: pre-wrap; word-break: break-word; }.attachment-tag { margin: 0 8px 8px 0; }.muted { color: #9898ae; font-size: 12px; }@media (max-width: 800px) { .summary-inline { width: 100%; justify-content: flex-end; flex-wrap: wrap; gap: 8px 16px; margin: 0 0 10px; white-space: normal; }.filter-control, .name-control { width: 100%; }.filter-bar .el-form-item { width: 100%; margin-right: 0; } }
</style> </style>

2
src/views/login.vue

@ -13,7 +13,7 @@
<i class="el-icon-user" style="color: #fff; font-size: 25px;"></i> <i class="el-icon-user" style="color: #fff; font-size: 25px;"></i>
</template> </template>
</el-input> </el-input>
<el-input show-password v-model="loginForm.password" class="password" type="password" placeholder="请输入密码"> <el-input show-password v-model="loginForm.password" id="psd" class="password" type="password" placeholder="请输入密码">
<template #prepend> <template #prepend>
<i class="el-icon-lock" style="color: #fff; font-size: 25px;"></i> <i class="el-icon-lock" style="color: #fff; font-size: 25px;"></i>
</template> </template>

32
src/views/monitor/logininfor/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="登录地址" prop="ipaddr"> <el-form-item label="登录地址" prop="ipaddr">
<el-input <el-input
v-model="queryParams.ipaddr" v-model="queryParams.ipaddr"
@ -51,14 +53,14 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['monitor:logininfor:remove']" v-hasPermi="['monitor:logininfor:remove']"
@ -67,9 +69,8 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="small"
@click="handleClean" @click="handleClean"
v-hasPermi="['monitor:logininfor:remove']" v-hasPermi="['monitor:logininfor:remove']"
>清空</el-button> >清空</el-button>
@ -77,9 +78,8 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain
icon="el-icon-unlock" icon="el-icon-unlock"
size="mini" size="small"
:disabled="single" :disabled="single"
@click="handleUnlock" @click="handleUnlock"
v-hasPermi="['monitor:logininfor:unlock']" v-hasPermi="['monitor:logininfor:unlock']"
@ -87,19 +87,18 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['monitor:logininfor:export']" v-hasPermi="['monitor:logininfor:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange"> <el-table ref="tables" v-loading="loading" :data="list" class="data-list-table" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="访问编号" align="center" prop="infoId" /> <el-table-column label="访问编号" align="center" prop="infoId" />
<el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" /> <el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" /> <el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
@ -119,6 +118,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -126,6 +126,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
</div> </div>
</template> </template>

31
src/views/monitor/operlog/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="操作地址" prop="operIp"> <el-form-item label="操作地址" prop="operIp">
<el-input <el-input
v-model="queryParams.operIp" v-model="queryParams.operIp"
@ -75,14 +77,14 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['monitor:operlog:remove']" v-hasPermi="['monitor:operlog:remove']"
@ -91,27 +93,25 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain
icon="el-icon-delete" icon="el-icon-delete"
size="mini" size="small"
@click="handleClean" @click="handleClean"
v-hasPermi="['monitor:operlog:remove']" v-hasPermi="['monitor:operlog:remove']"
>清空</el-button> >清空</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['monitor:operlog:export']" v-hasPermi="['monitor:operlog:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange"> <el-table ref="tables" v-loading="loading" :data="list" class="data-list-table" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="50" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="日志编号" align="center" prop="operId" /> <el-table-column label="日志编号" align="center" prop="operId" />
<el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" /> <el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
@ -138,12 +138,10 @@
<span>{{ scope.row.costTime }}毫秒</span> <span>{{ scope.row.costTime }}毫秒</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="90" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-view"
@click="handleView(scope.row,scope.index)" @click="handleView(scope.row,scope.index)"
v-hasPermi="['monitor:operlog:query']" v-hasPermi="['monitor:operlog:query']"
>详细</el-button> >详细</el-button>
@ -151,6 +149,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -158,6 +157,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 操作日志详细 --> <!-- 操作日志详细 -->
<el-dialog title="操作日志详细" :visible.sync="open" width="800px" append-to-body> <el-dialog title="操作日志详细" :visible.sync="open" width="800px" append-to-body>

615
src/views/points/management/index.vue

File diff suppressed because one or more lines are too long

46
src/views/system/config/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="参数名称" prop="configName"> <el-form-item label="参数名称" prop="configName">
<el-input <el-input
v-model="queryParams.configName" v-model="queryParams.configName"
@ -45,24 +47,22 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:config:add']" v-hasPermi="['system:config:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:config:edit']" v-hasPermi="['system:config:edit']"
@ -71,9 +71,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:config:remove']" v-hasPermi="['system:config:remove']"
@ -81,10 +79,8 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:config:export']" v-hasPermi="['system:config:export']"
>导出</el-button> >导出</el-button>
@ -92,18 +88,18 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain
icon="el-icon-refresh" icon="el-icon-refresh"
size="mini" size="small"
@click="handleRefreshCache" @click="handleRefreshCache"
v-hasPermi="['system:config:remove']" v-hasPermi="['system:config:remove']"
>刷新缓存</el-button> >刷新缓存</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="configList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="参数主键" align="center" prop="configId" /> <el-table-column label="参数主键" align="center" prop="configId" />
<el-table-column label="参数名称" align="center" prop="configName" :show-overflow-tooltip="true" /> <el-table-column label="参数名称" align="center" prop="configName" :show-overflow-tooltip="true" />
<el-table-column label="参数键名" align="center" prop="configKey" :show-overflow-tooltip="true" /> <el-table-column label="参数键名" align="center" prop="configKey" :show-overflow-tooltip="true" />
@ -119,19 +115,16 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="150" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:config:edit']" v-hasPermi="['system:config:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:config:remove']" v-hasPermi="['system:config:remove']"
>删除</el-button> >删除</el-button>
@ -139,6 +132,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -146,6 +140,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改参数配置对话框 --> <!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>

33
src/views/system/dept/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="部门名称" prop="deptName"> <el-form-item label="部门名称" prop="deptName">
<el-input <el-input
v-model="queryParams.deptName" v-model="queryParams.deptName"
@ -24,29 +26,28 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dept:add']" v-hasPermi="['system:dept:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="info"
plain
icon="el-icon-sort" icon="el-icon-sort"
size="mini" size="small"
@click="toggleExpandAll" @click="toggleExpandAll"
>展开/折叠</el-button> >展开/折叠</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table <el-table
v-if="refreshTable" v-if="refreshTable"
@ -55,6 +56,7 @@
row-key="deptId" row-key="deptId"
:default-expand-all="isExpandAll" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
class="data-list-table"
> >
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column> <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
<el-table-column prop="orderNum" label="排序" width="200"></el-table-column> <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
@ -63,38 +65,35 @@
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="200"> <el-table-column label="创建时间" align="center" prop="createTime" min-width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="220" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:dept:edit']" v-hasPermi="['system:dept:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="primary"
icon="el-icon-plus"
@click="handleAdd(scope.row)" @click="handleAdd(scope.row)"
v-hasPermi="['system:dept:add']" v-hasPermi="['system:dept:add']"
>新增</el-button> >新增</el-button>
<el-button <el-button
v-if="scope.row.parentId != 0" v-if="scope.row.parentId != 0"
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:dept:remove']" v-hasPermi="['system:dept:remove']"
>删除</el-button> >删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</data-list-panel>
<!-- 添加或修改部门对话框 --> <!-- 添加或修改部门对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>

48
src/views/system/dict/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="字典名称" prop="dictName"> <el-form-item label="字典名称" prop="dictName">
<el-input <el-input
v-model="queryParams.dictName" v-model="queryParams.dictName"
@ -50,24 +52,22 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dict:add']" v-hasPermi="['system:dict:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:dict:edit']" v-hasPermi="['system:dict:edit']"
@ -76,9 +76,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
@ -86,10 +84,8 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:dict:export']" v-hasPermi="['system:dict:export']"
>导出</el-button> >导出</el-button>
@ -97,18 +93,18 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain
icon="el-icon-refresh" icon="el-icon-refresh"
size="mini" size="small"
@click="handleRefreshCache" @click="handleRefreshCache"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
>刷新缓存</el-button> >刷新缓存</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="typeList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="字典编号" align="center" prop="dictId" /> <el-table-column label="字典编号" align="center" prop="dictId" />
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" /> <el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" />
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"> <el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
@ -129,19 +125,16 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="150" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:dict:edit']" v-hasPermi="['system:dict:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
>删除</el-button> >删除</el-button>
@ -149,6 +142,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -156,6 +150,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改参数配置对话框 --> <!-- 添加或修改参数配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
@ -344,4 +340,4 @@ export default {
} }
} }
}; };
</script> </script>

43
src/views/system/expression/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input <el-input
v-model="queryParams.name" v-model="queryParams.name"
@ -24,24 +26,22 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:expression:add']" v-hasPermi="['system:expression:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:expression:edit']" v-hasPermi="['system:expression:edit']"
@ -50,9 +50,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:expression:remove']" v-hasPermi="['system:expression:remove']"
@ -60,36 +58,32 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:expression:export']" v-hasPermi="['system:expression:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table v-loading="loading" :data="expressionList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="expressionList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="主键" align="center" prop="id" /> <el-table-column label="主键" align="center" prop="id" />
<el-table-column label="名称" align="center" prop="name" /> <el-table-column label="名称" align="center" prop="name" />
<el-table-column label="表达式内容" align="center" prop="expression" /> <el-table-column label="表达式内容" align="center" prop="expression" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="150" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:expression:edit']" v-hasPermi="['system:expression:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:expression:remove']" v-hasPermi="['system:expression:remove']"
>删除</el-button> >删除</el-button>
@ -97,6 +91,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -104,6 +99,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改流程达式对话框 --> <!-- 添加或修改流程达式对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>

43
src/views/system/listener/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input <el-input
v-model="queryParams.name" v-model="queryParams.name"
@ -24,24 +26,22 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:listener:add']" v-hasPermi="['system:listener:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:listener:edit']" v-hasPermi="['system:listener:edit']"
@ -50,9 +50,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:listener:remove']" v-hasPermi="['system:listener:remove']"
@ -60,19 +58,18 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:listener:export']" v-hasPermi="['system:listener:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table v-loading="loading" :data="listenerList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="listenerList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="名称" align="center" prop="name" /> <el-table-column label="名称" align="center" prop="name" />
<el-table-column label="监听类型" align="center" prop="type"> <el-table-column label="监听类型" align="center" prop="type">
<template slot-scope="scope"> <template slot-scope="scope">
@ -86,19 +83,16 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="执行内容" align="center" prop="value" /> <el-table-column label="执行内容" align="center" prop="value" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="150" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:listener:edit']" v-hasPermi="['system:listener:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:listener:remove']" v-hasPermi="['system:listener:remove']"
>删除</el-button> >删除</el-button>
@ -106,6 +100,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -113,6 +108,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改流程监听对话框 --> <!-- 添加或修改流程监听对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>

31
src/views/system/menu/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="菜单名称" prop="menuName"> <el-form-item label="菜单名称" prop="menuName">
<el-input <el-input
v-model="queryParams.menuName" v-model="queryParams.menuName"
@ -24,29 +26,28 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:menu:add']" v-hasPermi="['system:menu:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="info"
plain
icon="el-icon-sort" icon="el-icon-sort"
size="mini" size="small"
@click="toggleExpandAll" @click="toggleExpandAll"
>展开/折叠</el-button> >展开/折叠</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table <el-table
v-if="refreshTable" v-if="refreshTable"
@ -55,6 +56,7 @@
row-key="menuId" row-key="menuId"
:default-expand-all="isExpandAll" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
class="data-list-table"
> >
<el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column> <el-table-column prop="menuName" label="菜单名称" :show-overflow-tooltip="true" width="160"></el-table-column>
<el-table-column prop="icon" label="图标" align="center" width="100"> <el-table-column prop="icon" label="图标" align="center" width="100">
@ -75,32 +77,29 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="220" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:menu:edit']" v-hasPermi="['system:menu:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="primary"
icon="el-icon-plus"
@click="handleAdd(scope.row)" @click="handleAdd(scope.row)"
v-hasPermi="['system:menu:add']" v-hasPermi="['system:menu:add']"
>新增</el-button> >新增</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:menu:remove']" v-hasPermi="['system:menu:remove']"
>删除</el-button> >删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</data-list-panel>
<!-- 添加或修改菜单对话框 --> <!-- 添加或修改菜单对话框 -->
<el-dialog :title="title" :visible.sync="open" width="680px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="680px" append-to-body>

39
src/views/system/notice/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="公告标题" prop="noticeTitle"> <el-form-item label="公告标题" prop="noticeTitle">
<el-input <el-input
v-model="queryParams.noticeTitle" v-model="queryParams.noticeTitle"
@ -32,24 +34,22 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:notice:add']" v-hasPermi="['system:notice:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:notice:edit']" v-hasPermi="['system:notice:edit']"
@ -58,9 +58,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:notice:remove']" v-hasPermi="['system:notice:remove']"
@ -68,9 +66,10 @@
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="noticeList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="序号" align="center" prop="noticeId" width="100" /> <el-table-column label="序号" align="center" prop="noticeId" width="100" />
<el-table-column <el-table-column
label="公告标题" label="公告标题"
@ -94,19 +93,16 @@
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="150" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:notice:edit']" v-hasPermi="['system:notice:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:notice:remove']" v-hasPermi="['system:notice:remove']"
>删除</el-button> >删除</el-button>
@ -114,6 +110,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -121,6 +118,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改公告对话框 --> <!-- 添加或修改公告对话框 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="780px" append-to-body>

43
src/views/system/post/index.vue

@ -1,6 +1,8 @@
<template> <template>
<div class="app-container"> <div class="app-container system-list-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<template #filters>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" class="data-list-filter-form">
<el-form-item label="岗位编码" prop="postCode"> <el-form-item label="岗位编码" prop="postCode">
<el-input <el-input
v-model="queryParams.postCode" v-model="queryParams.postCode"
@ -32,24 +34,22 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-row :gutter="10" class="data-list-actions">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:post:add']" v-hasPermi="['system:post:add']"
>新增</el-button> >新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:post:edit']" v-hasPermi="['system:post:edit']"
@ -58,9 +58,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:post:remove']" v-hasPermi="['system:post:remove']"
@ -68,19 +66,18 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:post:export']" v-hasPermi="['system:post:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template>
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="postList" class="data-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="岗位编号" align="center" prop="postId" /> <el-table-column label="岗位编号" align="center" prop="postId" />
<el-table-column label="岗位编码" align="center" prop="postCode" /> <el-table-column label="岗位编码" align="center" prop="postCode" />
<el-table-column label="岗位名称" align="center" prop="postName" /> <el-table-column label="岗位名称" align="center" prop="postName" />
@ -95,19 +92,16 @@
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="150" class-name="data-list-operation-column">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']" v-hasPermi="['system:post:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']" v-hasPermi="['system:post:remove']"
>删除</el-button> >删除</el-button>
@ -115,6 +109,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -122,6 +117,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
<!-- 添加或修改岗位对话框 --> <!-- 添加或修改岗位对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>

374
src/views/system/role/index.vue

@ -1,159 +1,166 @@
<template> <template>
<div class="app-container"> <div class="app-container role-management-page">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <data-list-panel>
<el-form-item label="角色名称" prop="roleName"> <template #filters>
<el-input <el-form
v-model="queryParams.roleName" v-show="showSearch"
placeholder="请输入角色名称" ref="queryForm"
clearable :model="queryParams"
style="width: 240px" size="small"
@keyup.enter.native="handleQuery" :inline="true"
/> class="role-filter-form"
</el-form-item>
<el-form-item label="权限字符" prop="roleKey">
<el-input
v-model="queryParams.roleKey"
placeholder="请输入权限字符"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="角色状态"
clearable
style="width: 240px"
> >
<el-option <el-form-item prop="roleName">
v-for="dict in dict.type.sys_normal_disable" <el-input
:key="dict.value" v-model="queryParams.roleName"
:label="dict.label" placeholder="角色名称"
:value="dict.value" clearable
/> class="filter-role-name"
</el-select> @keyup.enter.native="handleQuery"
</el-form-item> />
<el-form-item label="创建时间"> </el-form-item>
<el-date-picker <el-form-item prop="roleKey">
v-model="dateRange" <el-input
style="width: 240px" v-model="queryParams.roleKey"
value-format="yyyy-MM-dd" placeholder="权限字符"
type="daterange" clearable
range-separator="-" class="filter-role-key"
start-placeholder="开始日期" @keyup.enter.native="handleQuery"
end-placeholder="结束日期" />
></el-date-picker> </el-form-item>
</el-form-item> <el-form-item prop="status">
<el-form-item> <el-select
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> v-model="queryParams.status"
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> placeholder="全部状态"
</el-form-item> clearable
</el-form> class="filter-status"
>
<el-row :gutter="10" class="mb8"> <el-option
<el-col :span="1.5"> v-for="dict in dict.type.sys_normal_disable"
<el-button :key="dict.value"
type="primary" :label="dict.label"
plain :value="dict.value"
icon="el-icon-plus" />
size="mini" </el-select>
@click="handleAdd" </el-form-item>
v-hasPermi="['system:role:add']" <el-form-item>
>新增</el-button> <el-date-picker
</el-col> v-model="dateRange"
<el-col :span="1.5"> class="filter-date"
<el-button value-format="yyyy-MM-dd"
type="success" type="daterange"
plain range-separator="至"
icon="el-icon-edit" start-placeholder="开始日期"
size="mini" end-placeholder="结束日期"
:disabled="single" ></el-date-picker>
@click="handleUpdate" </el-form-item>
v-hasPermi="['system:role:edit']" <el-form-item class="filter-buttons">
>修改</el-button> <el-button type="primary" size="small" @click="handleQuery">搜索</el-button>
</el-col> <el-button size="small" @click="resetQuery">重置</el-button>
<el-col :span="1.5"> </el-form-item>
<el-button </el-form>
type="danger" </template>
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:role:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:role:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> <template #actions>
<el-table-column type="selection" width="55" align="center" /> <div class="role-list-actions">
<el-table-column label="角色编号" prop="roleId" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
<el-table-column label="显示顺序" prop="roleSort" width="100" />
<el-table-column label="状态" align="center" width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
active-value="0"
inactive-value="1"
@change="handleStatusChange(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope" v-if="scope.row.roleId !== 1">
<el-button <el-button
size="mini" type="primary"
type="text" size="small"
icon="el-icon-edit" @click="handleAdd"
@click="handleUpdate(scope.row)" v-hasPermi="['system:role:add']"
>新增</el-button>
<el-button
type="primary"
size="small"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:role:edit']" v-hasPermi="['system:role:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" type="danger"
type="text" size="small"
icon="el-icon-delete" :disabled="multiple"
@click="handleDelete(scope.row)" @click="handleDelete"
v-hasPermi="['system:role:remove']" v-hasPermi="['system:role:remove']"
>删除</el-button> >删除</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> <el-button
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> icon="el-icon-download"
<el-dropdown-menu slot="dropdown"> size="small"
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" @click="handleExport"
v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item> v-hasPermi="['system:role:export']"
<el-dropdown-item command="handleAuthUser" icon="el-icon-user" >导出</el-button>
v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item> <right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
</el-dropdown-menu> </div>
</el-dropdown> </template>
</template>
</el-table-column> <el-table
</el-table> v-loading="loading"
:data="roleList"
class="role-list-table"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="角色编号" prop="roleId" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" min-width="160" />
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" min-width="160" />
<el-table-column label="显示顺序" prop="roleSort" width="120" />
<el-table-column label="状态" align="center" width="120">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
active-value="0"
inactive-value="1"
@change="handleStatusChange(scope.row)"
></el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="220" class-name="role-operation-column">
<template slot-scope="scope" v-if="scope.row.roleId !== 1">
<el-button
size="mini"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:role:edit']"
>修改</el-button>
<el-button
size="mini"
type="danger"
@click="handleDelete(scope.row)"
v-hasPermi="['system:role:remove']"
>删除</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']">
<el-button size="mini" type="primary">更多<i class="el-icon-arrow-down el-icon--right" /></el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
command="handleDataScope"
icon="el-icon-circle-check"
v-hasPermi="['system:role:edit']"
>数据权限</el-dropdown-item>
<el-dropdown-item
command="handleAuthUser"
icon="el-icon-user"
v-hasPermi="['system:role:edit']"
>分配用户</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<pagination <template #footer>
v-show="total>0" <pagination
:total="total" v-show="total>0"
:page.sync="queryParams.pageNum" :total="total"
:limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNum"
@pagination="getList" :limit.sync="queryParams.pageSize"
/> @pagination="getList"
/>
</template>
</data-list-panel>
<!-- 添加或修改角色配置对话框 --> <!-- 添加或修改角色配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
@ -602,4 +609,77 @@ export default {
} }
} }
}; };
</script> </script>
<style lang="scss" scoped>
.role-management-page {
min-height: calc(100vh - 52px);
}
.role-filter-form {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.role-filter-form .el-form-item {
margin: 0;
}
.filter-role-name,
.filter-role-key {
width: 168px;
}
.filter-status {
width: 112px;
}
.filter-date {
width: 218px;
}
.filter-buttons {
white-space: nowrap;
}
.role-list-actions {
display: flex;
align-items: center;
gap: 0;
white-space: nowrap;
}
::v-deep .role-list-table .role-operation-column .cell {
white-space: nowrap;
}
::v-deep .role-list-table .role-operation-column .el-dropdown {
margin-left: 6px;
}
::v-deep .role-list-actions .top-right-btn {
float: none;
margin-left: 8px;
}
@media (max-width: 768px) {
.role-filter-form,
.role-list-actions {
width: 100%;
}
.role-list-actions {
flex-wrap: wrap;
gap: 8px 0;
}
.filter-role-name,
.filter-role-key,
.filter-status,
.filter-date {
width: 100%;
}
}
</style>

328
src/views/system/user/index.vue

@ -1,59 +1,59 @@
<template> <template>
<div class="app-container"> <div class="app-container user-management-page">
<el-row :gutter="20"> <el-row :gutter="14" class="user-management-layout">
<!--部门数据--> <el-col :span="4" :xs="24" class="department-column">
<el-col :span="4" :xs="24"> <aside class="department-card">
<div class="head-container">
<el-input <el-input
v-model="deptName" v-model="deptName"
placeholder="请输入部门名称" placeholder="请输入部门名称"
clearable clearable
size="small" size="small"
prefix-icon="el-icon-search" prefix-icon="el-icon-search"
style="margin-bottom: 20px" class="department-search"
/> />
</div>
<div class="head-container">
<el-tree <el-tree
ref="tree"
:data="deptOptions" :data="deptOptions"
:props="defaultProps" :props="defaultProps"
:expand-on-click-node="false" :expand-on-click-node="false"
:filter-node-method="filterNode" :filter-node-method="filterNode"
ref="tree"
node-key="id" node-key="id"
default-expand-all default-expand-all
highlight-current highlight-current
class="department-tree"
@node-click="handleNodeClick" @node-click="handleNodeClick"
/> />
</div> </aside>
</el-col> </el-col>
<!--用户数据-->
<el-col :span="20" :xs="24"> <el-col :span="20" :xs="24" class="user-list-column">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <data-list-panel>
<el-form-item label="用户名称" prop="userName"> <template #filters>
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true" class="user-filter-form">
<el-form-item prop="userName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入用户名称" placeholder="用户账号"
clearable clearable
style="width: 240px" class="filter-item filter-account"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phonenumber"> <el-form-item prop="phonenumber">
<el-input <el-input
v-model="queryParams.phonenumber" v-model="queryParams.phonenumber"
placeholder="请输入手机号码" placeholder="手机号码"
clearable clearable
style="width: 240px" class="filter-item filter-phone"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item prop="status">
<el-select <el-select
v-model="queryParams.status" v-model="queryParams.status"
placeholder="用户状态" placeholder="全部状态"
clearable clearable
style="width: 240px" class="filter-item filter-status"
> >
<el-option <el-option
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
@ -63,134 +63,116 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="创建时间"> <el-form-item>
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
style="width: 240px" class="filter-date"
value-format="yyyy-MM-dd" value-format="yyyy-MM-dd"
type="daterange" type="daterange"
range-separator="-" range-separator="至"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="岗位名称" prop="postNames"> <el-form-item prop="postNames">
<el-input <el-input
v-model="queryParams.postNames" v-model="queryParams.postNames"
placeholder="请输入岗位名称" placeholder="岗位名称"
clearable clearable
style="width: 240px" class="filter-post"
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item class="filter-buttons">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" size="small" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button size="small" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</template>
<el-row :gutter="10" class="mb8"> <template #actions>
<el-col :span="1.5"> <div class="user-list-actions">
<el-button <el-button
type="primary" type="primary"
plain size="small"
icon="el-icon-plus"
size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:user:add']" v-hasPermi="['system:user:add']"
>新增</el-button> >新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button <el-button
type="success" type="primary"
plain size="small"
icon="el-icon-edit"
size="mini"
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:user:edit']" v-hasPermi="['system:user:edit']"
>修改</el-button> >修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button <el-button
type="danger" type="danger"
plain size="small"
icon="el-icon-delete"
size="mini"
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:user:remove']" v-hasPermi="['system:user:remove']"
>删除</el-button> >删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button <el-button
type="info"
plain
icon="el-icon-upload2" icon="el-icon-upload2"
size="mini" size="small"
@click="handleImport" @click="handleImport"
v-hasPermi="['system:user:import']" v-hasPermi="['system:user:import']"
>导入</el-button> >一键导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button <el-button
type="warning"
plain
icon="el-icon-download" icon="el-icon-download"
size="mini" size="small"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:user:export']" v-hasPermi="['system:user:export']"
>导出</el-button> >一键导出</el-button>
</el-col> <right-toolbar :show-search.sync="showSearch" :columns="columns" @queryTable="getList" />
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> </div>
</el-row> </template>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="userList" class="user-list-table" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" /> <el-table-column v-if="columns[0].visible" key="userId" label="用户编号" prop="userId" width="105" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" /> <el-table-column v-if="columns[1].visible" key="userName" label="用户账号" prop="userName" min-width="120" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" /> <el-table-column v-if="columns[2].visible" key="nickName" label="用户昵称" prop="nickName" min-width="120" :show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" /> <el-table-column v-if="columns[3].visible" key="deptName" label="部门" prop="dept.deptName" min-width="180" :show-overflow-tooltip="true" />
<el-table-column label="岗位" align="center" key="postNames" prop="postNames" /> <el-table-column key="postNames" label="岗位" prop="postNames" min-width="130" :show-overflow-tooltip="true" />
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" /> <el-table-column v-if="columns[4].visible" key="phonenumber" label="手机号码" prop="phonenumber" width="135" />
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible"> <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
<template slot-scope="scope"> <template slot-scope="scope">
<el-switch <el-popover trigger="hover" placement="top" content="点击切换用户状态">
v-model="scope.row.status" <el-tag
active-value="0" slot="reference"
inactive-value="1" :type="scope.row.status === '0' ? 'success' : 'info'"
@change="handleStatusChange(scope.row)" size="small"
></el-switch> class="status-tag"
@click="handleStatusChange(scope.row, true)"
>{{ scope.row.status === '0' ? '正常' : '停用' }}</el-tag>
</el-popover>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160"> <el-table-column v-if="columns[6].visible" label="创建时间" prop="createTime" width="170">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="操作" label="操作"
align="center" width="200"
width="160" class-name="user-operation-column"
class-name="small-padding fixed-width"
> >
<template slot-scope="scope" v-if="scope.row.userId !== 1"> <template slot-scope="scope" v-if="scope.row.userId !== 1">
<el-button <el-button
size="mini" size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:user:edit']" v-hasPermi="['system:user:edit']"
>修改</el-button> >修改</el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:user:remove']" v-hasPermi="['system:user:remove']"
>删除</el-button> >删除</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']"> <el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:user:resetPwd', 'system:user:edit']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> <el-button size="mini" type="primary">更多<i class="el-icon-arrow-down el-icon--right" /></el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleResetPwd" icon="el-icon-key" <el-dropdown-item command="handleResetPwd" icon="el-icon-key"
v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item> v-hasPermi="['system:user:resetPwd']">重置密码</el-dropdown-item>
@ -200,8 +182,9 @@
</el-dropdown> </el-dropdown>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer>
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
@ -209,6 +192,8 @@
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</template>
</data-list-panel>
</el-col> </el-col>
</el-row> </el-row>
@ -382,7 +367,7 @@ export default {
deptOptions: undefined, deptOptions: undefined,
// 是否显示弹出层 // 是否显示弹出层
open: false, open: false,
// 部门名称 // 左侧部门树搜索名称
deptName: undefined, deptName: undefined,
// 默认密码 // 默认密码
initPassword: undefined, initPassword: undefined,
@ -420,7 +405,8 @@ export default {
userName: undefined, userName: undefined,
phonenumber: undefined, phonenumber: undefined,
status: undefined, status: undefined,
deptId: undefined deptId: undefined,
postNames: undefined
}, },
// 列信息 // 列信息
columns: [ columns: [
@ -463,7 +449,7 @@ export default {
}; };
}, },
watch: { watch: {
// 根据名称筛选部门树 // 根据名称筛选左侧部门树
deptName(val) { deptName(val) {
this.$refs.tree.filter(val); this.$refs.tree.filter(val);
} }
@ -492,25 +478,29 @@ export default {
this.deptOptions = response.data; this.deptOptions = response.data;
}); });
}, },
// 筛选节点 // 部门树节点过滤
filterNode(value, data) { filterNode(value, data) {
if (!value) return true; if (!value) return true;
return data.label.indexOf(value) !== -1; return data.label.indexOf(value) !== -1;
}, },
// 节点单击事件 // 点击部门后按原 deptId 参数查询用户
handleNodeClick(data) { handleNodeClick(data) {
this.queryParams.deptId = data.id; this.queryParams.deptId = data.id;
this.handleQuery(); this.handleQuery();
}, },
// 用户状态修改 // 用户状态修改
handleStatusChange(row) { handleStatusChange(row, toggleStatus) {
const previousStatus = row.status;
if (toggleStatus) {
row.status = row.status === "0" ? "1" : "0";
}
let text = row.status === "0" ? "启用" : "停用"; let text = row.status === "0" ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() { this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
return changeUserStatus(row.userId, row.status); return changeUserStatus(row.userId, row.status);
}).then(() => { }).then(() => {
this.$modal.msgSuccess(text + "成功"); this.$modal.msgSuccess(text + "成功");
}).catch(function() { }).catch(function() {
row.status = row.status === "0" ? "1" : "0"; row.status = previousStatus;
}); });
}, },
// 取消按钮 // 取消按钮
@ -546,6 +536,7 @@ export default {
this.dateRange = []; this.dateRange = [];
this.resetForm("queryForm"); this.resetForm("queryForm");
this.queryParams.deptId = undefined; this.queryParams.deptId = undefined;
this.deptName = undefined;
this.$refs.tree.setCurrentKey(null); this.$refs.tree.setCurrentKey(null);
this.handleQuery(); this.handleQuery();
}, },
@ -677,4 +668,155 @@ export default {
} }
} }
}; };
</script> </script>
<style lang="scss" scoped>
.user-management-page {
min-height: calc(100vh - 52px);
}
.user-management-layout {
display: flex;
align-items: stretch;
}
.department-column,
.user-list-column {
min-width: 0;
}
.department-card {
height: 100%;
min-height: 420px;
margin: 0;
padding: 14px 12px;
overflow: hidden;
border: 1px solid #f0f0f2;
border-radius: 8px;
background: #fff;
line-height: normal;
}
.department-search {
margin-bottom: 12px;
}
.department-tree {
max-height: calc(100vh - 148px);
overflow: auto;
color: #5a5a72;
background: transparent;
font-size: 12px;
}
::v-deep .department-tree .el-tree-node__content {
height: 32px;
border-radius: 5px;
}
::v-deep .department-tree .el-tree-node__content:hover {
background: #f5f7fa;
}
::v-deep .department-tree.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
color: #1890ff;
background: rgba(24, 144, 255, .08);
font-weight: 600;
}
.user-filter-form {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.user-filter-form .el-form-item {
margin: 0;
}
.filter-account {
width: 168px;
}
.filter-phone {
width: 168px;
}
.filter-status {
width: 112px;
}
.filter-date {
width: 218px;
}
.filter-post {
width: 150px;
}
.filter-buttons {
white-space: nowrap;
}
.user-list-actions {
display: flex;
align-items: center;
gap: 0;
white-space: nowrap;
}
.status-tag {
cursor: pointer;
user-select: none;
}
::v-deep .user-list-table .user-operation-column .cell {
white-space: nowrap;
}
::v-deep .user-list-table .user-operation-column .el-dropdown {
margin-left: 6px;
}
::v-deep .user-list-actions .top-right-btn {
float: none;
margin-left: 8px;
}
@media (max-width: 768px) {
.user-management-layout {
display: block;
}
.department-column {
margin-bottom: 12px;
}
.department-card {
min-height: 0;
}
.department-tree {
max-height: 260px;
}
.user-filter-form,
.user-list-actions {
width: 100%;
}
.user-list-actions {
flex-wrap: wrap;
gap: 8px 0;
}
.filter-account,
.filter-phone,
.filter-status,
.filter-date,
.filter-post {
width: 100%;
}
}
</style>

Loading…
Cancel
Save