39 changed files with 3020 additions and 1019 deletions
@ -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 }) |
||||||
|
} |
||||||
@ -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; |
||||||
|
} |
||||||
|
} |
||||||
@ -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> |
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue