| | |
| | | .el-button { |
| | | border-radius: 12px; |
| | | font-weight: 600; |
| | | box-shadow: none !important; |
| | | } |
| | | |
| | | .el-button--primary { |
| | |
| | | --el-button-hover-border-color: var(--el-color-primary-light-3); |
| | | --el-button-active-bg-color: var(--el-color-primary-dark-2); |
| | | --el-button-active-border-color: var(--el-color-primary-dark-2); |
| | | box-shadow: 0 10px 24px color-mix(in srgb, var(--el-color-primary) 18%, transparent); |
| | | } |
| | | |
| | | .el-input__wrapper, |
| | |
| | | .el-table { |
| | | --el-table-border-color: var(--surface-border); |
| | | --el-table-header-bg-color: var(--surface-soft); |
| | | --el-table-row-hover-bg-color: rgba(0, 47, 167, 0.04); |
| | | --el-table-current-row-bg-color: rgba(0, 47, 167, 0.08); |
| | | --el-table-row-hover-bg-color: #f1f6f4; |
| | | --el-table-current-row-bg-color: #e9f0ed; |
| | | border-radius: 18px; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .el-table th.el-table__cell { |
| | |
| | | font-weight: 600; |
| | | } |
| | | |
| | | .el-table tr, |
| | | .el-table td.el-table__cell, |
| | | .el-table__body tr > td.el-table__cell { |
| | | background: var(--surface-base) !important; |
| | | } |
| | | |
| | | .el-table .el-table__body tr:hover > td.el-table__cell { |
| | | background: var(--el-table-row-hover-bg-color) !important; |
| | | } |
| | | |
| | | .el-table .el-table__body tr.current-row > td.el-table__cell { |
| | | background: var(--el-table-current-row-bg-color) !important; |
| | | } |
| | | |
| | | .el-pagination { |
| | | margin-top: 18px; |
| | | } |
| | |
| | | @import './btn.scss';
|
| | | @import './ruoyi.scss';
|
| | |
|
| | | body { |
| | | height: 100%; |
| | | margin: 0; |
| | | -moz-osx-font-smoothing: grayscale; |
| | | -webkit-font-smoothing: antialiased; |
| | | text-rendering: optimizeLegibility; |
| | | font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; |
| | | background: |
| | | radial-gradient(circle at top left, rgba(214, 226, 219, 0.8), transparent 28%), |
| | | linear-gradient(180deg, #f7faf8 0%, var(--app-bg) 100%); |
| | | color: var(--text-primary); |
| | | } |
| | | body {
|
| | | height: 100%;
|
| | | margin: 0;
|
| | | -moz-osx-font-smoothing: grayscale;
|
| | | -webkit-font-smoothing: antialiased;
|
| | | text-rendering: optimizeLegibility;
|
| | | font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
|
| | | background:
|
| | | radial-gradient(circle at top left, rgba(214, 226, 219, 0.8), transparent 28%),
|
| | | linear-gradient(180deg, #f7faf8 0%, var(--app-bg) 100%);
|
| | | color: var(--text-primary);
|
| | | }
|
| | |
|
| | | label { |
| | | font-weight: 600; |
| | | color: var(--text-secondary); |
| | | } |
| | | label {
|
| | | font-weight: 600;
|
| | | color: var(--text-secondary);
|
| | | }
|
| | |
|
| | | html {
|
| | | height: 100%;
|
| | | box-sizing: border-box;
|
| | | }
|
| | |
|
| | | #app { |
| | | height: 100%; |
| | | } |
| | | |
| | | html, |
| | | body, |
| | | #app { |
| | | background-color: var(--app-bg); |
| | | } |
| | | #app {
|
| | | height: 100%;
|
| | | }
|
| | |
|
| | | html,
|
| | | body,
|
| | | #app {
|
| | | background-color: var(--app-bg);
|
| | | }
|
| | |
|
| | | *,
|
| | | *:before,
|
| | |
| | | }
|
| | |
|
| | | //main-container全局样式
|
| | | .app-container { |
| | | padding: 20px 24px 24px; |
| | | } |
| | | .search_form { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | .search_title { |
| | | font-size: 14px; |
| | | font-weight: 600; |
| | | letter-spacing: 0.04em; |
| | | color: var(--text-secondary); |
| | | } |
| | | } |
| | | .table_list { |
| | | height: calc(100vh - 11em); |
| | | margin-top: 20px; |
| | | background: rgba(255, 255, 255, 0.88); |
| | | border: 1px solid var(--surface-border); |
| | | border-radius: var(--radius-md); |
| | | box-shadow: var(--shadow-sm); |
| | | padding: 18px; |
| | | } |
| | | .app-container {
|
| | | padding: 20px 24px 24px;
|
| | | }
|
| | | .search_form {
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: space-between;
|
| | | .search_title {
|
| | | font-size: 14px;
|
| | | font-weight: 600;
|
| | | letter-spacing: 0.04em;
|
| | | color: var(--text-secondary);
|
| | | }
|
| | | }
|
| | | .table_list {
|
| | | margin-top: 20px;
|
| | | background: rgba(255, 255, 255, 0.88);
|
| | | border: 1px solid var(--surface-border);
|
| | | border-radius: var(--radius-md);
|
| | | box-shadow: var(--shadow-sm);
|
| | | padding: 18px;
|
| | | }
|
| | | .components-container {
|
| | | margin: 30px 50px;
|
| | | position: relative;
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | .link-type, |
| | | .link-type:focus { |
| | | color: var(--el-color-primary); |
| | | cursor: pointer; |
| | | |
| | | &:hover { |
| | | color: #165e57; |
| | | } |
| | | } |
| | | .link-type,
|
| | | .link-type:focus {
|
| | | color: var(--el-color-primary);
|
| | | cursor: pointer;
|
| | |
|
| | | .filter-container { |
| | | padding-bottom: 10px; |
| | | &:hover {
|
| | | color: #165e57;
|
| | | }
|
| | | }
|
| | |
|
| | | .filter-container {
|
| | | padding-bottom: 10px;
|
| | |
|
| | | .filter-item {
|
| | | display: inline-block;
|
| | | vertical-align: middle;
|
| | | margin-bottom: 10px;
|
| | | } |
| | | } |
| | | |
| | | .app-container, |
| | | .table_list, |
| | | .components-container { |
| | | .el-card, |
| | | .el-dialog, |
| | | .el-drawer, |
| | | .el-table, |
| | | .el-descriptions, |
| | | .el-collapse-item__wrap, |
| | | .el-tabs__content { |
| | | border-radius: var(--radius-md); |
| | | } |
| | | } |
| | | }
|
| | | }
|
| | |
|
| | | .app-container,
|
| | | .table_list,
|
| | | .components-container {
|
| | | .el-card,
|
| | | .el-dialog,
|
| | | .el-drawer,
|
| | | .el-table,
|
| | | .el-descriptions,
|
| | | .el-collapse-item__wrap,
|
| | | .el-tabs__content {
|
| | | border-radius: var(--radius-md);
|
| | | }
|
| | | }
|
| | |
| | | $menuLightActiveText: #1f7a72; |
| | | |
| | | // layout |
| | | $base-sidebar-width: 200px; |
| | | $sideBarWidth: 200px; |
| | | $base-sidebar-width: 216px; |
| | | $sideBarWidth: 216px; |
| | | |
| | | // sidebar |
| | | $base-menu-color: #677287; |
| | |
| | | :width="item.width" |
| | | > |
| | | <template #header="scope"> |
| | | <div class="pim-table-header-cell"> |
| | | <div class="pim-table-header-cell" :class="{ 'has-extra': item.headerSlot }"> |
| | | <div class="pim-table-header-title"> |
| | | {{ item.label }} |
| | | </div> |
| | |
| | | .pim-table-header-extra :deep(.el-input), |
| | | .pim-table-header-extra :deep(.el-select) { |
| | | width: 100%; |
| | | } |
| | | |
| | | .pim-table-header-cell { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | gap: 10px; |
| | | } |
| | | |
| | | .pim-table-header-title { |
| | |
| | | <style scoped> |
| | | .pagination-container { |
| | | background: #fff; |
| | | padding: 16px 0; |
| | | margin-top: 0; |
| | | } |
| | | .pagination-container.hidden { |
| | |
| | | </script>
|
| | |
|
| | | <style lang="scss" scoped>
|
| | | .app-main { |
| | | .app-main {
|
| | | /* 50= navbar 50 */
|
| | | min-height: calc(100vh - 50px);
|
| | | width: 100%;
|
| | | position: relative;
|
| | | overflow: hidden;
|
| | | background: transparent; |
| | | } |
| | | |
| | | .route-view-wrapper { |
| | | width: 100%; |
| | | height: 100%; |
| | | padding: 108px 16px 24px 0; |
| | | } |
| | | |
| | | .fixed-header + .app-main { |
| | | padding-top: 0; |
| | | } |
| | | background: transparent;
|
| | | }
|
| | |
|
| | | .route-view-wrapper {
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | padding: 120px 16px 24px 0;
|
| | | }
|
| | |
|
| | | .fixed-header + .app-main {
|
| | | padding-top: 0;
|
| | | }
|
| | |
|
| | | .hasTagsView {
|
| | | .app-main {
|
| | |
| | | min-height: calc(100vh - 84px);
|
| | | }
|
| | |
|
| | | .fixed-header + .app-main { |
| | | padding-top: 0; |
| | | } |
| | | } |
| | | .fixed-header + .app-main {
|
| | | padding-top: 0;
|
| | | }
|
| | | }
|
| | | </style>
|
| | |
|
| | | <style lang="scss">
|
| | |
| | | height: 6px;
|
| | | }
|
| | |
|
| | | ::-webkit-scrollbar-track { |
| | | background-color: rgba(218, 225, 220, 0.8); |
| | | } |
| | | |
| | | ::-webkit-scrollbar-thumb { |
| | | background-color: #b2bdb5; |
| | | border-radius: 3px; |
| | | } |
| | | ::-webkit-scrollbar-track {
|
| | | background-color: rgba(218, 225, 220, 0.8);
|
| | | }
|
| | |
|
| | | ::-webkit-scrollbar-thumb {
|
| | | background-color: #b2bdb5;
|
| | | border-radius: 3px;
|
| | | }
|
| | | </style>
|
| | |
|
| | |
| | | <transition name="sidebarLogoFade">
|
| | | <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
|
| | | <img v-if="logoUrl" :src="logoUrl" class="sidebar-logo" @error="handleImageError" alt="公司Logo" />
|
| | | <h1 v-if="!logoUrl" class="sidebar-title">{{ title }}</h1> |
| | | <h1 v-if="!logoUrl" class="sidebar-title">{{ title }}</h1>
|
| | | </router-link>
|
| | | <router-link v-else key="expand" class="sidebar-logo-link" to="/">
|
| | | <img v-if="logoUrl" :src="logoUrl" class="sidebar-logo" @error="handleImageError" alt="公司Logo" />
|
| | | <h1 v-if="!logoUrl" class="sidebar-title">{{ title }}</h1> |
| | | <h1 v-if="!logoUrl" class="sidebar-title">{{ title }}</h1>
|
| | | </router-link>
|
| | | </transition>
|
| | | </div>
|
| | |
| | | opacity: 0;
|
| | | }
|
| | |
|
| | | .sidebar-logo-container { |
| | | position: relative; |
| | | width: 100% !important; |
| | | height: 56px !important; |
| | | line-height: 56px; |
| | | background: rgba(255, 255, 255, 0.78); |
| | | border: 1px solid var(--surface-border); |
| | | border-radius: 0 22px 22px 0; |
| | | text-align: center; |
| | | overflow: hidden; |
| | | box-shadow: var(--shadow-sm); |
| | | |
| | | & .sidebar-logo-link { |
| | | height: 100%; |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | padding: 0 18px 0 14px; |
| | | |
| | | & .sidebar-logo { |
| | | width: auto; |
| | | max-width: 132px; |
| | | max-height: 34px; |
| | | height: auto; |
| | | vertical-align: middle; |
| | | object-fit: contain; |
| | | object-position: center; |
| | | } |
| | | |
| | | & .sidebar-title { |
| | | display: inline-block; |
| | | margin: 0; |
| | | color: var(--text-primary); |
| | | font-weight: 600; |
| | | line-height: 1.2; |
| | | font-size: 14px; |
| | | font-family: "Segoe UI", "PingFang SC", sans-serif; |
| | | vertical-align: middle; |
| | | } |
| | | } |
| | | .sidebar-logo-container {
|
| | | position: relative;
|
| | | width: 100% !important;
|
| | | height: 56px !important;
|
| | | line-height: 56px;
|
| | | background: rgba(255, 255, 255, 0.78);
|
| | | border: 1px solid var(--surface-border);
|
| | | border-radius: 0 22px 22px 0;
|
| | | text-align: center;
|
| | | overflow: hidden;
|
| | | box-shadow: var(--shadow-sm);
|
| | |
|
| | | & .sidebar-logo-link {
|
| | | height: 100%;
|
| | | width: 100%;
|
| | | display: flex;
|
| | | align-items: center;
|
| | | justify-content: center;
|
| | | padding: 0 18px 0 14px;
|
| | |
|
| | | & .sidebar-logo {
|
| | | width: auto;
|
| | | max-width: 250px;
|
| | | max-height: 50px;
|
| | | height: auto;
|
| | | vertical-align: middle;
|
| | | object-fit: contain;
|
| | | object-position: center;
|
| | | }
|
| | |
|
| | | & .sidebar-title {
|
| | | display: inline-block;
|
| | | margin: 0;
|
| | | color: var(--text-primary);
|
| | | font-weight: 600;
|
| | | line-height: 1.2;
|
| | | font-size: 14px;
|
| | | font-family: "Segoe UI", "PingFang SC", sans-serif;
|
| | | vertical-align: middle;
|
| | | }
|
| | | }
|
| | |
|
| | | &.collapse {
|
| | | .sidebar-logo-link { |
| | | padding: 0; |
| | | } |
| | | |
| | | .sidebar-logo { |
| | | max-width: 30px; |
| | | max-height: 30px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | .sidebar-logo-link {
|
| | | padding: 0;
|
| | | }
|
| | |
|
| | | .sidebar-logo {
|
| | | max-width: 30px;
|
| | | max-height: 30px;
|
| | | }
|
| | | }
|
| | | }
|
| | | </style>
|
| | |
| | | @import "@/assets/styles/mixin.scss";
|
| | | @import "@/assets/styles/variables.module.scss";
|
| | |
|
| | | .app-wrapper { |
| | | @include clearfix; |
| | | position: relative; |
| | | height: 100%; |
| | | width: 100%; |
| | | background: |
| | | radial-gradient(circle at top, rgba(223, 232, 226, 0.95), transparent 32%), |
| | | linear-gradient(180deg, #f7faf8 0%, var(--app-bg) 100%); |
| | | .app-wrapper {
|
| | | @include clearfix;
|
| | | position: relative;
|
| | | height: 100%;
|
| | | width: 100%;
|
| | | background:
|
| | | radial-gradient(circle at top, rgba(223, 232, 226, 0.95), transparent 32%),
|
| | | linear-gradient(180deg, #f7faf8 0%, var(--app-bg) 100%);
|
| | |
|
| | | &.mobile.openSidebar {
|
| | | position: fixed;
|
| | |
| | | z-index: 999;
|
| | | }
|
| | |
|
| | | .fixed-header { |
| | | position: fixed; |
| | | top: 12px; |
| | | right: 16px; |
| | | z-index: 9; |
| | | width: calc(100% - #{$base-sidebar-width} - 32px); |
| | | transition: width 0.28s, right 0.28s; |
| | | padding-bottom: 8px; |
| | | } |
| | | |
| | | .hideSidebar .fixed-header { |
| | | width: calc(100% - 70px); |
| | | } |
| | | |
| | | .sidebarHide .fixed-header { |
| | | width: calc(100% - 32px); |
| | | } |
| | | .fixed-header {
|
| | | position: fixed;
|
| | | top: 12px;
|
| | | right: 16px;
|
| | | z-index: 9;
|
| | | width: calc(100% - #{$base-sidebar-width} - 32px);
|
| | | transition: width 0.28s, right 0.28s;
|
| | | padding-bottom: 8px;
|
| | | }
|
| | |
|
| | | .hideSidebar .fixed-header {
|
| | | width: calc(100% - 70px);
|
| | | }
|
| | |
|
| | | .sidebarHide .fixed-header {
|
| | | width: calc(100% - 32px);
|
| | | }
|
| | |
|
| | | .mobile .fixed-header {
|
| | | width: 100%;
|
| | | }
|
| | | </style> |
| | | </style>
|
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: right; |
| | | text-align: center; |
| | | } |
| | | |
| | | .notice-type-container { |
| | |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 10px; |
| | | text-align: center; |
| | | } |
| | | </style> |
| | |
| | | |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="minutesDialogVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="submitMinutes">保 存</el-button> |
| | | <el-button @click="minutesDialogVisible = false">取 消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 10px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .content-section h4 { |
| | |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" @click="submitRegulation">发布制度</el-button> |
| | | <el-button @click="showRegulationDialog = false">取消</el-button> |
| | | <el-button type="primary" |
| | | @click="submitRegulation">发布制度</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 10px; |
| | | text-align: center; |
| | | } |
| | | </style> |
| | |
| | | >重置</el-button |
| | | > |
| | | </div> |
| | | <div class="table_actions"> |
| | | <el-button type="primary" @click="openForm('add')">新增</el-button> |
| | | <el-button type="danger" @click="handleDelete">删除</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table_actions" style="margin-bottom: 10px;"> |
| | | <el-button type="primary" @click="openForm('add')">新增</el-button> |
| | | <el-button type="danger" @click="handleDelete">删除</el-button> |
| | | </div> |
| | | |
| | | <div class="table_list"> |
| | | <PIMTable |
| | | rowKey="id" |
| | |
| | | |
| | | .table_list { |
| | | height: calc(100vh - 380px); |
| | | min-height: 360px; |
| | | background: #fff; |
| | | margin-top: 20px; |
| | | display: flex; |
| | |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="cancel">取消</el-button> |
| | | <el-button type="primary" @click="submitForm">保存</el-button> |
| | | <el-button @click="cancel">取消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | <el-form-item label="设备名称"> |
| | | <el-input |
| | | v-model="filters.deviceName" |
| | | style="width: 240px" |
| | | style="width: 200px" |
| | | placeholder="请输入设备名称" |
| | | clearable |
| | | @change="getTableData" |
| | |
| | | <el-form-item label="规格型号"> |
| | | <el-input |
| | | v-model="filters.deviceModel" |
| | | style="width: 240px" |
| | | style="width: 200px" |
| | | placeholder="请输入规格型号" |
| | | clearable |
| | | @change="getTableData" |
| | |
| | | <el-form-item label="供应商"> |
| | | <el-input |
| | | v-model="filters.supplierName" |
| | | style="width: 240px" |
| | | style="width: 200px" |
| | | placeholder="请输入供应商" |
| | | clearable |
| | | @change="getTableData" |
| | |
| | | <el-button type="primary" @click="addCategory">新增</el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="columns" |
| | | :tableData="renderTableData" |
| | | :tableLoading="loading" |
| | | :page="pagination" |
| | | :isShowPagination="true" |
| | | @pagination="handleSizeChange" |
| | | > |
| | | <template #status="{ row }"> |
| | | <el-tag type="success" size="small">{{ row.status }}</el-tag> |
| | | </template> |
| | | </PIMTable> |
| | | <div class="table_list"> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="columns" |
| | | :tableData="renderTableData" |
| | | :tableLoading="loading" |
| | | :page="pagination" |
| | | :isShowPagination="true" |
| | | @pagination="handleSizeChange" |
| | | > |
| | | <template #status="{ row }"> |
| | | <el-tag type="success" size="small">{{ row.status }}</el-tag> |
| | | </template> |
| | | </PIMTable> |
| | | </div> |
| | | |
| | | <el-dialog title="分类管理" v-model="dialogVisible" width="60%"> |
| | | <el-form :model="form" :rules="rules" ref="formRef" label-width="100px"> |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <PIMTable |
| | | rowKey="rowKey" |
| | | :column="usageColumns" |
| | | :tableData="usageTableData" |
| | | :tableLoading="usageLoading" |
| | | :page="usagePagination" |
| | | :isShowPagination="true" |
| | | @pagination="handleUsagePageChange" |
| | | /> |
| | | <div class="table_list"> |
| | | <PIMTable |
| | | rowKey="rowKey" |
| | | :column="usageColumns" |
| | | :tableData="usageTableData" |
| | | :tableLoading="usageLoading" |
| | | :page="usagePagination" |
| | | :isShowPagination="true" |
| | | @pagination="handleUsagePageChange" |
| | | /> |
| | | </div> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | padding: 16px 0; |
| | | } |
| | | |
| | | .el-table__header-wrapper th { |
| | |
| | | </el-tree> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="keepVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="keepVisible = false" >确 定</el-button> |
| | | <el-button @click="keepVisible = false">取 消</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | </el-row> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="warehouseVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="confirmWarehouse" :loading="upLoadWarehouse">确 定</el-button> |
| | | <el-button @click="warehouseVisible = false">取 消</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | </el-row> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="shelvesVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="confirmShelves" :loading="upLoadShelves">确 定</el-button> |
| | | <el-button @click="shelvesVisible = false">取 消</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: right; |
| | | text-align: center; |
| | | } |
| | | |
| | | :deep(.el-form-item__label) { |
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: right; |
| | | text-align: center; |
| | | } |
| | | |
| | | .operation-column { |
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: right; |
| | | text-align: center; |
| | | } |
| | | |
| | | :deep(.el-form-item__label) { |
| | |
| | | |
| | | /* 页面背景 */ |
| | | main { |
| | | background: #f5f5f5; |
| | | padding: 0; |
| | | margin: 0 -20px; |
| | | padding: 0 20px 20px; |
| | |
| | | <style scoped> |
| | | .analytics-container { |
| | | padding: 20px; |
| | | background-color: #f5f7fa; |
| | | min-height: 100vh; |
| | | } |
| | | |
| | |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm" v-if="operationType !== 'view'">确定</el-button> |
| | | <el-button @click="dialogVisible = false">取消</el-button> |
| | | <el-button type="primary" |
| | | @click="submitForm" |
| | | v-if="operationType !== 'view'"> |
| | | 确定 |
| | | </el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | .mb16 { |
| | | margin-bottom: 16px; |
| | | } |
| | |
| | | <div class="search-actions"> |
| | | <el-button size="small" |
| | | type="primary" |
| | | @click="refreshTable()" |
| | | :icon="Search"> |
| | | @click="refreshTable()"> |
| | | 查询 |
| | | </el-button> |
| | | <el-button size="small" |
| | | @click="refresh()" |
| | | :icon="Refresh" |
| | | style="margin-left: 8px"> |
| | | 重置 |
| | | </el-button> |
| | |
| | | <div class="search-buttons"> |
| | | <el-button size="small" |
| | | type="primary" |
| | | @click="configTime" |
| | | :icon="Setting"> |
| | | @click="configTime"> |
| | | 班次配置 |
| | | </el-button> |
| | | <el-button size="small" |
| | | type="success" |
| | | @click="handleDown" |
| | | :loading="downLoading" |
| | | :icon="Download" |
| | | style="margin-left: 8px"> |
| | | 导出 |
| | | </el-button> |
| | | <el-button size="small" |
| | | type="warning" |
| | | @click="schedulingVisible = true" |
| | | :icon="Calendar" |
| | | style="margin-left: 8px"> |
| | | 排班 |
| | | </el-button> |
| | |
| | | entryDateStart: undefined, |
| | | entryDateEnd: undefined, |
| | | }, |
| | | deptOptions: { type: Array, default: () => [] }, |
| | | deptOptions: [], |
| | | }); |
| | | const { searchForm, deptOptions } = toRefs(data); |
| | | const isShowRenewContractModal = ref(false); |
| | |
| | | </div> |
| | | </div> |
| | | <div class="table_list"> |
| | | <div style="margin-bottom: 10px"> |
| | | <div style="margin-bottom: 10px;text-align: right"> |
| | | <el-button type="primary" @click="openForm('add')">新建工资表</el-button> |
| | | <el-button @click="handleDelete">删除</el-button> |
| | | <el-button @click="openBankSetting">设置银行</el-button> |
| | |
| | | getList() |
| | | }) |
| | | </script> |
| | | <style scoped> |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | </style> |
| | | |
| | |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped></style> |
| | | <style scoped> |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div style="text-align: right; margin-bottom: 10px;"> |
| | | <el-button type="info" plain icon="Upload" @click="handleImport" |
| | | v-hasPermi="['product:bom:import']">导入</el-button> |
| | | <el-button type="warning" plain icon="Download" @click="handleExport" :disabled="selectedRows.length !== 1" |
| | | v-hasPermi="['product:bom:export']">导出</el-button> |
| | | <el-button type="primary" @click="handleAdd">新增</el-button> |
| | | <el-button type="danger" plain @click="handleBatchDelete" :disabled="selectedRows.length === 0">删除</el-button> |
| | | </div> |
| | | <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true" |
| | | @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination"> |
| | | <template #detail="{ row }"> |
| | | <el-button type="primary" text @click="showDetail(row)">{{ row.bomNo }} |
| | | </el-button> |
| | | </template> |
| | | </PIMTable> |
| | | <div class="table_list"> |
| | | <div style="text-align: right; margin-bottom: 10px;"> |
| | | <el-button type="primary" @click="handleAdd">新增</el-button> |
| | | <el-button type="info" plain icon="Upload" @click="handleImport" |
| | | v-hasPermi="['product:bom:import']">导入</el-button> |
| | | <el-button type="warning" plain icon="Download" @click="handleExport" :disabled="selectedRows.length !== 1" |
| | | v-hasPermi="['product:bom:export']">导出</el-button> |
| | | <el-button type="danger" plain @click="handleBatchDelete" :disabled="selectedRows.length === 0">删除</el-button> |
| | | </div> |
| | | <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true" |
| | | @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination"> |
| | | <template #detail="{ row }"> |
| | | <el-button type="primary" text @click="showDetail(row)">{{ row.bomNo }} |
| | | </el-button> |
| | | </template> |
| | | </PIMTable> |
| | | </div> |
| | | <StructureEdit v-if="showEdit" v-model:show-model="showEdit" :record="currentRow" /> |
| | | |
| | | <!-- 新增/编辑弹窗 --> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-row :gutter="16" class="content-row"> |
| | | <!-- 左侧台账 + 顶部筛选 --> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8" class="left-col"> |
| | | <div class="left-panel"> |
| | | <div class="left-header"> |
| | | <el-form :model="searchForm" inline> |
| | | <el-form-item prop="dateType"> |
| | | <el-radio-group v-model="searchForm.dateType" size="small" @change="handleDateTypeChange"> |
| | | <el-radio-button label="day">日</el-radio-button> |
| | | <el-radio-button label="month">月</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="日期:" prop="dateRange"> |
| | | <el-date-picker |
| | | v-model="searchForm.dateRange" |
| | | :type="searchForm.dateType === 'day' ? 'date' : 'daterange'" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | style="width: 200px" |
| | | @change="handleDateRangeChange" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="leftTableColumn" |
| | | :tableData="leftTableData" |
| | | :tableLoading="tableLoading" |
| | | :page="page" |
| | | @row-click="handleLeftRowClick" |
| | | @pagination="pagination" |
| | | ></PIMTable> |
| | | </div> |
| | | </el-col> |
| | | |
| | | <!-- 右侧明细 --> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16" class="right-col"> |
| | | <div class="right-panel"> |
| | | <div class="table_list"> |
| | | <el-row :gutter="16" class="content-row"> |
| | | <!-- 左侧台账 + 顶部筛选 --> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8" class="left-col"> |
| | | <div class="left-panel"> |
| | | <div class="left-header"> |
| | | <el-form :model="searchForm" inline> |
| | | <el-form-item prop="dateType"> |
| | | <el-radio-group v-model="searchForm.dateType" size="small" @change="handleDateTypeChange"> |
| | | <el-radio-button label="day">日</el-radio-button> |
| | | <el-radio-button label="month">月</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="日期:" prop="dateRange"> |
| | | <el-date-picker |
| | | v-model="searchForm.dateRange" |
| | | :type="searchForm.dateType === 'day' ? 'date' : 'daterange'" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | format="YYYY-MM-DD" |
| | | value-format="YYYY-MM-DD" |
| | | style="width: 200px" |
| | | @change="handleDateRangeChange" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="leftTableColumn" |
| | | :tableData="leftTableData" |
| | | :tableLoading="tableLoading" |
| | | :page="page" |
| | | @row-click="handleLeftRowClick" |
| | | @pagination="pagination" |
| | | ></PIMTable> |
| | | </div> |
| | | </el-col> |
| | | |
| | | <el-form inline> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="handleOut">导出</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="tableColumn" |
| | | :tableData="tableData" |
| | | :page="page1" |
| | | :tableLoading="tableLoading1" |
| | | style="margin-right: 20px;" |
| | | @pagination="pagination1" |
| | | ></PIMTable> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- 右侧明细 --> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16" class="right-col"> |
| | | <div class="right-panel"> |
| | | |
| | | <el-form inline> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="handleOut">导出</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <PIMTable |
| | | rowKey="id" |
| | | :column="tableColumn" |
| | | :tableData="tableData" |
| | | :page="page1" |
| | | :tableLoading="tableLoading1" |
| | | style="margin-right: 20px;" |
| | | @pagination="pagination1" |
| | | ></PIMTable> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | :deep(.purple){ |
| | | background-color: #F4DEFA; |
| | | } |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | </style> |
| | |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped></style> |
| | | <style scoped> |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | </style> |
| | |
| | | border-radius: 4px; |
| | | } |
| | | .table-actions { |
| | | margin-bottom: 15px; |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 10px; |
| | | text-align: right; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |
| | |
| | | |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button @click="visible = false">取消</el-button> |
| | | <el-button type="primary" @click="submitForm">提交</el-button> |
| | | <el-button @click="visible = false">取消</el-button> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | } |
| | | |
| | | .dialog-footer { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 15px; |
| | | padding-top: 10px; |
| | | text-align: center; |
| | | } |
| | | .top-tip { |
| | | |
| | |
| | | |
| | | <style scoped lang="scss"> |
| | | .app-container { |
| | | background-color: #f5f7fa; |
| | | height: calc(100vh - 84px); |
| | | padding: 20px; |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | </el-row> |
| | | |
| | | <!-- 表格数据 --> |
| | | <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="角色编号" prop="no" /> |
| | | <el-table-column label="角色名称" prop="name" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="状态" align="center" width="100"> |
| | | <template #default="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"> |
| | | <template #default="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="操作" align="center" width="120"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1"> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']"></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top" v-if="scope.row.roleId !== 1"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']"></el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.current" |
| | | v-model:limit="queryParams.size" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <div class="table_list"> |
| | | <el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="角色编号" prop="no" /> |
| | | <el-table-column label="角色名称" prop="name" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="状态" align="center" width="100"> |
| | | <template #default="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"> |
| | | <template #default="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="操作" align="center" width="120"> |
| | | <template #default="scope"> |
| | | <el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1"> |
| | | <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']"></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="删除" placement="top" v-if="scope.row.roleId !== 1"> |
| | | <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']"></el-button> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.current" |
| | | v-model:limit="queryParams.size" |
| | | @pagination="getList" |
| | | /> |
| | | </div> |
| | | <!-- 添加或修改角色配置对话框 --> |
| | | <el-dialog :title="title" v-model="open" width="500px" append-to-body> |
| | | <el-form ref="roleRef" :model="form" :rules="rules" label-width="100px"> |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .metric-binding { |
| | | padding: 0; |
| | | } |
| | | |
| | | .metric-binding-row { |
| | | width: 100%; |
| | | } |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .metric-maintenance { |
| | | padding: 0; |
| | | min-width: 0; |
| | | } |
| | | |
| | | .metric-maintenance-row { |
| | | width: 100%; |
| | | } |
| | |
| | | <style scoped> |
| | | .report-management { |
| | | padding: 20px; |
| | | background-color: #f5f5f5; |
| | | min-height: 100vh; |
| | | /* height: 87vh; |
| | | overflow: hidden; */ |
| | |
| | | <style scoped lang="scss"> |
| | | .indicator-stats { |
| | | padding: 20px; |
| | | background: #f5f7fa; |
| | | min-height: calc(100vh - 84px); |
| | | } |
| | | |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="search-wrapper"> |
| | | <el-form :model="searchForm" class="demo-form-inline"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="4"> |
| | | <el-form-item label="退货单号"> |
| | | <el-input v-model="searchForm.returnNo" placeholder="请输入退货单号" clearable /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item label="客户名称"> |
| | | <el-input v-model="searchForm.customerName" placeholder="客户名称" clearable /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item label="销售单号"> |
| | | <el-input v-model="searchForm.salesContractNo" placeholder="销售单号" clearable /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item label="关联出库单号"> |
| | | <el-input v-model="searchForm.shippingNo" placeholder="关联出库单号" clearable /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="handleQuery">搜索</el-button> |
| | | <el-button @click="handleReset">重置</el-button> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <div class="search_form"> |
| | | <el-form :model="searchForm" class="demo-form-inline" :inline="true"> |
| | | <el-form-item label="退货单号"> |
| | | <el-input v-model="searchForm.returnNo" placeholder="请输入退货单号" clearable /> |
| | | </el-form-item> |
| | | <el-form-item label="客户名称"> |
| | | <el-input v-model="searchForm.customerName" placeholder="客户名称" clearable /> |
| | | </el-form-item> |
| | | <el-form-item label="销售单号"> |
| | | <el-input v-model="searchForm.salesContractNo" placeholder="销售单号" clearable /> |
| | | </el-form-item> |
| | | <el-form-item label="关联出库单号"> |
| | | <el-input v-model="searchForm.shippingNo" placeholder="关联出库单号" clearable /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="handleQuery">搜索</el-button> |
| | | <el-button @click="handleReset">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="table_list"> |
| | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .search-wrapper { |
| | | background: white; |
| | | padding: 1rem 1rem 0 1rem; |
| | | border: 8px; |
| | | border-radius: 16px; |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | </style> |