页面
This commit is contained in:
parent
aa5e175c77
commit
2d38600dbb
44
src/api/system/goods.js
Normal file
44
src/api/system/goods.js
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】列表
|
||||||
|
export function listGoods(query) {
|
||||||
|
return request({
|
||||||
|
url: '/system/goods/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】详细
|
||||||
|
export function getGoods(goodsId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/goods/' + goodsId,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增【请填写功能名称】
|
||||||
|
export function addGoods(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/goods',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改【请填写功能名称】
|
||||||
|
export function updateGoods(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/goods',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除【请填写功能名称】
|
||||||
|
export function delGoods(goodsId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/goods/' + goodsId,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
44
src/api/system/led.js
Normal file
44
src/api/system/led.js
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】列表
|
||||||
|
export function listConfig(query) {
|
||||||
|
return request({
|
||||||
|
url: '/system/led/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】详细
|
||||||
|
export function getConfig(ledId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/led/' + ledId,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增【请填写功能名称】
|
||||||
|
export function addConfig(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/led',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改【请填写功能名称】
|
||||||
|
export function updateConfig(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/led',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除【请填写功能名称】
|
||||||
|
export function delConfig(ledId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/led/' + ledId,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
44
src/api/system/location.js
Normal file
44
src/api/system/location.js
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】列表
|
||||||
|
export function listLocation(query) {
|
||||||
|
return request({
|
||||||
|
url: '/system/location/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】详细
|
||||||
|
export function getLocation(locationId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/location/' + locationId,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增【请填写功能名称】
|
||||||
|
export function addLocation(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/location',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改【请填写功能名称】
|
||||||
|
export function updateLocation(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/location',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除【请填写功能名称】
|
||||||
|
export function delLocation(locationId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/location/' + locationId,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
44
src/api/system/stand.js
Normal file
44
src/api/system/stand.js
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】列表
|
||||||
|
export function listStand(query) {
|
||||||
|
return request({
|
||||||
|
url: '/system/stand/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询【请填写功能名称】详细
|
||||||
|
export function getStand(standId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/stand/' + standId,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增【请填写功能名称】
|
||||||
|
export function addStand(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/stand',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改【请填写功能名称】
|
||||||
|
export function updateStand(data) {
|
||||||
|
return request({
|
||||||
|
url: '/system/stand',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除【请填写功能名称】
|
||||||
|
export function delStand(standId) {
|
||||||
|
return request({
|
||||||
|
url: '/system/stand/' + standId,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
672
src/views/system/goods/index.vue
Normal file
672
src/views/system/goods/index.vue
Normal file
|
|
@ -0,0 +1,672 @@
|
||||||
|
<template>
|
||||||
|
<div class="task-management">
|
||||||
|
<!-- 配置抽屉 -->
|
||||||
|
<el-drawer
|
||||||
|
title="页面配置"
|
||||||
|
:visible.sync="configDrawer"
|
||||||
|
direction="rtl"
|
||||||
|
size="300px"
|
||||||
|
>
|
||||||
|
<div class="drawer-content">
|
||||||
|
<h3 class="drawer-section-title">显示字段</h3>
|
||||||
|
<el-checkbox-group v-model="visibleColumns" class="column-checkboxes">
|
||||||
|
<el-checkbox
|
||||||
|
v-for="col in allColumns"
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.prop"
|
||||||
|
>
|
||||||
|
{{ col.label }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
|
||||||
|
<h3 class="drawer-section-title">表格密度</h3>
|
||||||
|
<el-radio-group v-model="tableSize" class="density-radio">
|
||||||
|
<el-radio-button label="medium">默认</el-radio-button>
|
||||||
|
<el-radio-button label="small">紧凑</el-radio-button>
|
||||||
|
<el-radio-button label="mini">超紧凑</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
|
</el-drawer>
|
||||||
|
|
||||||
|
<!-- 搜索区域 -->
|
||||||
|
<div class="search-container" :class="{ collapsed: !showSearch }">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="84px" :size="formSize">
|
||||||
|
<div class="search-form-content" :class="{ 'is-advanced': isAdvanced }">
|
||||||
|
<template v-if="isAdvanced">
|
||||||
|
<el-form-item label="物料编号" prop="goodsId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.goodsId"
|
||||||
|
placeholder="请输入物料编号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料名称" prop="goodsName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.goodsName"
|
||||||
|
placeholder="请输入物料名称"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="单位" prop="goodsUnit">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.goodsUnit"
|
||||||
|
placeholder="请输入单位"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料类型" prop="goodsType">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.goodsType"
|
||||||
|
placeholder="请输入物料类型"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="通用容器类型" prop="normalVehicleType">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.normalVehicleType"
|
||||||
|
placeholder="请输入通用容器类型"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料状态" prop="goodsStatus">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.goodsStatus"
|
||||||
|
placeholder="请输入物料状态"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="最近更新用户" prop="lastUpdateUser">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.lastUpdateUser"
|
||||||
|
placeholder="请输入最近更新用户"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<div class="search-form-footer">
|
||||||
|
<div class="left">
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
@click="toggleAdvanced"
|
||||||
|
class="advanced-toggle"
|
||||||
|
>
|
||||||
|
{{ isAdvanced ? '收起' : '展开' }}
|
||||||
|
<i :class="['el-icon-arrow-' + (isAdvanced ? 'up' : 'down')]"></i>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-s-operation"
|
||||||
|
@click="toggleSearch"
|
||||||
|
circle
|
||||||
|
size="mini"
|
||||||
|
></el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<div class="toolbar-container">
|
||||||
|
<div class="left">
|
||||||
|
<el-button-group>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
icon="el-icon-plus"
|
||||||
|
size="mini"
|
||||||
|
@click="handleAdd"
|
||||||
|
v-hasPermi="['system:goods:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="single"
|
||||||
|
@click="handleUpdate"
|
||||||
|
v-hasPermi="['system:goods:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="multiple"
|
||||||
|
@click="handleDelete"
|
||||||
|
v-hasPermi="['system:goods:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-tooltip content="导出数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
icon="el-icon-download"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['system:goods:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="导入数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleImport"
|
||||||
|
v-hasPermi="['system:goods:import']"
|
||||||
|
>导入</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="列设置" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-setting"
|
||||||
|
@click="configDrawer = true"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="刷新" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-refresh"
|
||||||
|
@click="getList"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="table-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="messageList"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
border
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
@sort-change="handleSortChange"
|
||||||
|
:size="tableSize"
|
||||||
|
:max-height="tableHeight"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55" align="center" fixed="left"/>
|
||||||
|
<template v-for="col in tableColumns">
|
||||||
|
<el-table-column
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.label"
|
||||||
|
:prop="col.prop"
|
||||||
|
:width="col.width"
|
||||||
|
:min-width="col.minWidth"
|
||||||
|
align="center"
|
||||||
|
:sortable="col.sortable"
|
||||||
|
:show-overflow-tooltip="col.tooltip"
|
||||||
|
v-if="isColumnVisible(col.prop)"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<template v-if="col.type === 'dict'">
|
||||||
|
<dict-tag :options="dict.type[col.dict]" :value="scope.row[col.prop]"/>
|
||||||
|
</template>
|
||||||
|
<template v-if="col.prop === 'sts'">
|
||||||
|
<dict-tag :options="dict.type.kc_sts" :value="scope.row.sts"/>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'number'">
|
||||||
|
<span class="number-column">{{ scope.row[col.prop] }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'datetime'">
|
||||||
|
<span>{{ parseTime(scope.row[col.prop]) }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ scope.row[col.prop] }}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</template>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 弹窗 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body destroy-on-close>
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
|
|
||||||
|
<el-form-item label="物料名称" prop="goodsName">
|
||||||
|
<el-input v-model="form.goodsName" placeholder="请输入物料名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="单位" prop="goodsUnit">
|
||||||
|
<el-input v-model="form.goodsUnit" placeholder="请输入单位" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料类型" prop="goodsType">
|
||||||
|
<el-input v-model="form.goodsType" placeholder="请输入物料类型" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="通用容器类型" prop="normalVehicleType">
|
||||||
|
<el-input v-model="form.normalVehicleType" placeholder="请输入通用容器类型" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="物料状态" prop="goodsStatus">
|
||||||
|
<el-input v-model="form.goodsStatus" placeholder="请输入物料状态" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="最近更新用户" prop="lastUpdateUser">
|
||||||
|
<el-input v-model="form.lastUpdateUser" placeholder="请输入最近更新用户" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="最近更新时间" prop="lastUpdateTime">
|
||||||
|
<el-date-picker clearable
|
||||||
|
v-model="form.lastUpdateTime"
|
||||||
|
type="date"
|
||||||
|
value-format="yyyy-MM-dd"
|
||||||
|
placeholder="请选择最近更新时间">
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 导入 -->
|
||||||
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||||
|
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress"
|
||||||
|
:on-success="handleFileSuccess" :auto-upload="false" drag>
|
||||||
|
<i class="el-icon-upload"></i>
|
||||||
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||||
|
<div class="el-upload__tip text-center" slot="tip">
|
||||||
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||||
|
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
|
||||||
|
</div>
|
||||||
|
</el-upload>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||||
|
<el-button @click="upload.open = false">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import {addMessage, updateMessage} from "@/api/system/message";
|
||||||
|
import {getToken} from "@/utils/auth";
|
||||||
|
import {addGoods, delGoods, getGoods, listGoods, updateGoods} from "@/api/system/goods";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "goods",
|
||||||
|
dicts: ['kc_sts','site_type'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
upload: {
|
||||||
|
open: false,
|
||||||
|
title: '上传文件',
|
||||||
|
headers: { Authorization: 'Bearer ' + getToken() },
|
||||||
|
url: process.env.VUE_APP_BASE_API + '/system/site/importData', // 确保这里填写正确的上传URL
|
||||||
|
isUploading: false
|
||||||
|
},
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 是否显示高级搜索
|
||||||
|
isAdvanced: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 任务表格数据
|
||||||
|
messageList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 日期范围
|
||||||
|
daterangeCreateTime: [],
|
||||||
|
// 配置抽屉显示状态
|
||||||
|
configDrawer: false,
|
||||||
|
// 表格大小
|
||||||
|
tableSize: 'small',
|
||||||
|
// 表单大小
|
||||||
|
formSize: 'small',
|
||||||
|
// 表格高度
|
||||||
|
tableHeight: window.innerHeight - 300,
|
||||||
|
// 可见列
|
||||||
|
visibleColumns: [],
|
||||||
|
// 所有列配置
|
||||||
|
allColumns: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
goodsId: null,
|
||||||
|
goodsName: null,
|
||||||
|
goodsUnit: null,
|
||||||
|
goodsType: null,
|
||||||
|
normalVehicleType: null,
|
||||||
|
goodsStatus: null,
|
||||||
|
lastUpdateUser: null,
|
||||||
|
lastUpdateTime: null
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
goodsUnit: [
|
||||||
|
{ required: true, message: "单位,不能为空不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
goodsStatus: [
|
||||||
|
{ required: true, message: "物料状态,不可为空不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 当前可见的表格列
|
||||||
|
tableColumns() {
|
||||||
|
return this.allColumns.filter(col => this.isColumnVisible(col.prop));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
this.initTableHeight();
|
||||||
|
window.addEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
window.removeEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 初始化表格高度
|
||||||
|
initTableHeight() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 处理窗口大小变化
|
||||||
|
handleResize() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 检查列是否可见
|
||||||
|
isColumnVisible(prop) {
|
||||||
|
return this.visibleColumns.includes(prop);
|
||||||
|
},
|
||||||
|
// 切换搜索区域显示
|
||||||
|
toggleSearch() {
|
||||||
|
this.showSearch = !this.showSearch;
|
||||||
|
},
|
||||||
|
/** 查询任务明细
|
||||||
|
列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.params = {};
|
||||||
|
if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
|
||||||
|
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
|
||||||
|
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
|
||||||
|
}
|
||||||
|
listGoods(this.queryParams).then(response => {
|
||||||
|
this.allColumns = response.columns
|
||||||
|
console.log('All columns:', this.allColumns);
|
||||||
|
this.allColumns.forEach((column) => {
|
||||||
|
this.visibleColumns.push(column.prop)
|
||||||
|
});
|
||||||
|
this.messageList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
goodsId: null,
|
||||||
|
goodsName: null,
|
||||||
|
goodsUnit: null,
|
||||||
|
goodsType: null,
|
||||||
|
normalVehicleType: null,
|
||||||
|
goodsStatus: null,
|
||||||
|
remark: null,
|
||||||
|
lastUpdateUser: null,
|
||||||
|
lastUpdateTime: null
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.daterangeCreateTime = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.goodsId)
|
||||||
|
this.single = selection.length !== 1
|
||||||
|
this.multiple = !selection.length
|
||||||
|
},
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd() {
|
||||||
|
this.reset();
|
||||||
|
this.open = true;
|
||||||
|
this.title = "添加物料信息";
|
||||||
|
},
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.reset();
|
||||||
|
const materialCode = this.ids
|
||||||
|
getGoods(materialCode).then(response => {
|
||||||
|
this.form = response.data;
|
||||||
|
this.open = true;
|
||||||
|
this.title = "修改物料信息";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.form.goodsId != null) {
|
||||||
|
updateGoods(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addGoods(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("新增成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const materialCodes = row.goodsId || this.ids;
|
||||||
|
this.$modal.confirm('是否确认删除物料编号为"' + materialCodes + '"的数据项?').then(function () {
|
||||||
|
return delGoods(materialCodes);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).catch(() => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('system/goods/export', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `goods_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
handleImport() {
|
||||||
|
this.upload.title = '导入';
|
||||||
|
this.upload.open = true;
|
||||||
|
},
|
||||||
|
/** 下载模板操作 */
|
||||||
|
importTemplate() {
|
||||||
|
this.download('/system/goods/importTemplate', {}, `bas_goods_${new Date().getTime()}.xlsx`);
|
||||||
|
},
|
||||||
|
// 文件上传中处理
|
||||||
|
handleFileUploadProgress(event, file, fileList) {
|
||||||
|
this.upload.isUploading = true;
|
||||||
|
},
|
||||||
|
// 文件上传成功处理
|
||||||
|
handleFileSuccess(response, file, fileList) {
|
||||||
|
this.upload.open = false;
|
||||||
|
this.upload.isUploading = false;
|
||||||
|
this.$refs.upload.clearFiles();
|
||||||
|
this.$alert(
|
||||||
|
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||||
|
response.msg +
|
||||||
|
'</div>',
|
||||||
|
'导入结果',
|
||||||
|
{ dangerouslyUseHTMLString: true },
|
||||||
|
);
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 提交上传文件
|
||||||
|
submitFileForm() {
|
||||||
|
this.$refs.upload.submit();
|
||||||
|
},
|
||||||
|
/** 排序触发事件 */
|
||||||
|
handleSortChange({ prop, order }) {
|
||||||
|
this.queryParams.orderByColumn = prop;
|
||||||
|
this.queryParams.isAsc = order === 'ascending' ? 'asc' : 'desc';
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 切换高级搜索 */
|
||||||
|
toggleAdvanced() {
|
||||||
|
this.isAdvanced = !this.isAdvanced;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.task-management {
|
||||||
|
padding: 16px;
|
||||||
|
background: #f5f7fa;
|
||||||
|
min-height: calc(100vh - 84px);
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
padding: 0;
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-content {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 16px;
|
||||||
|
transition: all 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 16px;
|
||||||
|
border-top: 1px solid #ebeef5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 8px 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.left {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
// 数字列样式
|
||||||
|
.number-column {
|
||||||
|
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-container {
|
||||||
|
margin-top: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置抽屉样式
|
||||||
|
.drawer-content {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.drawer-section-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin: 0 0 16px;
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-checkboxes {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.density-radio {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.el-radio-button {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
652
src/views/system/led/index.vue
Normal file
652
src/views/system/led/index.vue
Normal file
|
|
@ -0,0 +1,652 @@
|
||||||
|
<template>
|
||||||
|
<div class="task-management">
|
||||||
|
<!-- 配置抽屉 -->
|
||||||
|
<el-drawer
|
||||||
|
title="页面配置"
|
||||||
|
:visible.sync="configDrawer"
|
||||||
|
direction="rtl"
|
||||||
|
size="300px"
|
||||||
|
>
|
||||||
|
<div class="drawer-content">
|
||||||
|
<h3 class="drawer-section-title">显示字段</h3>
|
||||||
|
<el-checkbox-group v-model="visibleColumns" class="column-checkboxes">
|
||||||
|
<el-checkbox
|
||||||
|
v-for="col in allColumns"
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.prop"
|
||||||
|
>
|
||||||
|
{{ col.label }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
|
||||||
|
<h3 class="drawer-section-title">表格密度</h3>
|
||||||
|
<el-radio-group v-model="tableSize" class="density-radio">
|
||||||
|
<el-radio-button label="medium">默认</el-radio-button>
|
||||||
|
<el-radio-button label="small">紧凑</el-radio-button>
|
||||||
|
<el-radio-button label="mini">超紧凑</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
|
</el-drawer>
|
||||||
|
|
||||||
|
<!-- 搜索区域 -->
|
||||||
|
<div class="search-container" :class="{ collapsed: !showSearch }">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="84px" :size="formSize">
|
||||||
|
<div class="search-form-content" :class="{ 'is-advanced': isAdvanced }">
|
||||||
|
<template v-if="isAdvanced">
|
||||||
|
<!-- <el-form-item label="站台名称" prop="standName">-->
|
||||||
|
<!-- <el-input-->
|
||||||
|
<!-- v-model="queryParams.standName"-->
|
||||||
|
<!-- placeholder="请输入站台名称"-->
|
||||||
|
<!-- clearable-->
|
||||||
|
<!-- @keyup.enter.native="handleQuery"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="站台区域" prop="standArea">-->
|
||||||
|
<!-- <el-input-->
|
||||||
|
<!-- v-model="queryParams.standArea"-->
|
||||||
|
<!-- placeholder="请输入站台区域"-->
|
||||||
|
<!-- clearable-->
|
||||||
|
<!-- @keyup.enter.native="handleQuery"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="站台属性" prop="standProperty">-->
|
||||||
|
<!-- <el-input-->
|
||||||
|
<!-- v-model="queryParams.standProperty"-->
|
||||||
|
<!-- placeholder="请输入站台属性"-->
|
||||||
|
<!-- clearable-->
|
||||||
|
<!-- @keyup.enter.native="handleQuery"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="是否锁定" prop="isLock">-->
|
||||||
|
<!-- <el-input-->
|
||||||
|
<!-- v-model="queryParams.isLock"-->
|
||||||
|
<!-- placeholder="请输入是否锁定"-->
|
||||||
|
<!-- clearable-->
|
||||||
|
<!-- @keyup.enter.native="handleQuery"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<div class="search-form-footer">
|
||||||
|
<div class="left">
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
@click="toggleAdvanced"
|
||||||
|
class="advanced-toggle"
|
||||||
|
>
|
||||||
|
{{ isAdvanced ? '收起' : '展开' }}
|
||||||
|
<i :class="['el-icon-arrow-' + (isAdvanced ? 'up' : 'down')]"></i>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-s-operation"
|
||||||
|
@click="toggleSearch"
|
||||||
|
circle
|
||||||
|
size="mini"
|
||||||
|
></el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<div class="toolbar-container">
|
||||||
|
<div class="left">
|
||||||
|
<el-button-group>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
icon="el-icon-plus"
|
||||||
|
size="mini"
|
||||||
|
@click="handleAdd"
|
||||||
|
v-hasPermi="['system:led:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="single"
|
||||||
|
@click="handleUpdate"
|
||||||
|
v-hasPermi="['system:led:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="multiple"
|
||||||
|
@click="handleDelete"
|
||||||
|
v-hasPermi="['system:led:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-tooltip content="导出数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
icon="el-icon-download"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['system:led:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="导入数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleImport"
|
||||||
|
v-hasPermi="['system:led:import']"
|
||||||
|
>导入</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="列设置" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-setting"
|
||||||
|
@click="configDrawer = true"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="刷新" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-refresh"
|
||||||
|
@click="getList"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="table-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="messageList"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
border
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
@sort-change="handleSortChange"
|
||||||
|
:size="tableSize"
|
||||||
|
:max-height="tableHeight"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55" align="center" fixed="left"/>
|
||||||
|
<template v-for="col in tableColumns">
|
||||||
|
<el-table-column
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.label"
|
||||||
|
:prop="col.prop"
|
||||||
|
:width="col.width"
|
||||||
|
:min-width="col.minWidth"
|
||||||
|
align="center"
|
||||||
|
:sortable="col.sortable"
|
||||||
|
:show-overflow-tooltip="col.tooltip"
|
||||||
|
v-if="isColumnVisible(col.prop)"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<template v-if="col.type === 'dict'">
|
||||||
|
<dict-tag :options="dict.type[col.dict]" :value="scope.row[col.prop]"/>
|
||||||
|
</template>
|
||||||
|
<template v-if="col.prop === 'sts'">
|
||||||
|
<dict-tag :options="dict.type.kc_sts" :value="scope.row.sts"/>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'number'">
|
||||||
|
<span class="number-column">{{ scope.row[col.prop] }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'datetime'">
|
||||||
|
<span>{{ parseTime(scope.row[col.prop]) }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ scope.row[col.prop] }}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</template>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 弹窗 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body destroy-on-close>
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
|
|
||||||
|
<!-- <el-form-item label="站台名称" prop="standName">-->
|
||||||
|
<!-- <el-input v-model="form.standName" placeholder="请输入站台名称" />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="站台区域" prop="standArea">-->
|
||||||
|
<!-- <el-input v-model="form.standArea" placeholder="请输入站台区域" />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="站台类型" prop="standType">-->
|
||||||
|
<!-- <el-select v-model="form.standType" placeholder="请选择站台类型">-->
|
||||||
|
<!-- <el-option-->
|
||||||
|
<!-- v-for="dict in dict.type.site_type"-->
|
||||||
|
<!-- :key="dict.value"-->
|
||||||
|
<!-- :label="dict.label"-->
|
||||||
|
<!-- :value="dict.value"-->
|
||||||
|
<!-- ></el-option>-->
|
||||||
|
<!-- </el-select>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="站台状态" prop="standStatus">-->
|
||||||
|
<!-- <el-select v-model="form.standStatus" placeholder="请选择站台状态">-->
|
||||||
|
<!-- <el-option-->
|
||||||
|
<!-- v-for="dict in dict.type.site_status"-->
|
||||||
|
<!-- :key="dict.value"-->
|
||||||
|
<!-- :label="dict.label"-->
|
||||||
|
<!-- :value="dict.value"-->
|
||||||
|
<!-- ></el-option>-->
|
||||||
|
<!-- </el-select>-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="站台属性" prop="standProperty">-->
|
||||||
|
<!-- <el-input v-model="form.standProperty" placeholder="请输入站台属性" />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
<!-- <el-form-item label="是否锁定" prop="isLock">-->
|
||||||
|
<!-- <el-input v-model="form.isLock" placeholder="请输入是否锁定" />-->
|
||||||
|
<!-- </el-form-item>-->
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 导入 -->
|
||||||
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||||
|
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress"
|
||||||
|
:on-success="handleFileSuccess" :auto-upload="false" drag>
|
||||||
|
<i class="el-icon-upload"></i>
|
||||||
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||||
|
<div class="el-upload__tip text-center" slot="tip">
|
||||||
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||||
|
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
|
||||||
|
</div>
|
||||||
|
</el-upload>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||||
|
<el-button @click="upload.open = false">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {listConfig, getConfig, addConfig, updateConfig, delConfig,} from "@/api/system/led";
|
||||||
|
// import {addMessage, updateMessage} from "@/api/system/message";
|
||||||
|
import {getToken} from "@/utils/auth";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "led",
|
||||||
|
dicts: ['kc_sts','site_type'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
upload: {
|
||||||
|
open: false,
|
||||||
|
title: '上传文件',
|
||||||
|
headers: { Authorization: 'Bearer ' + getToken() },
|
||||||
|
url: process.env.VUE_APP_BASE_API + '/system/led/importData', // 确保这里填写正确的上传URL
|
||||||
|
isUploading: false
|
||||||
|
},
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 是否显示高级搜索
|
||||||
|
isAdvanced: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 任务表格数据
|
||||||
|
messageList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 日期范围
|
||||||
|
daterangeCreateTime: [],
|
||||||
|
// 配置抽屉显示状态
|
||||||
|
configDrawer: false,
|
||||||
|
// 表格大小
|
||||||
|
tableSize: 'small',
|
||||||
|
// 表单大小
|
||||||
|
formSize: 'small',
|
||||||
|
// 表格高度
|
||||||
|
tableHeight: window.innerHeight - 300,
|
||||||
|
// 可见列
|
||||||
|
visibleColumns: [],
|
||||||
|
// 所有列配置
|
||||||
|
allColumns: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
// standName: [
|
||||||
|
// { required: true, message: "站台名称,不能为空不能为空", trigger: "blur" }
|
||||||
|
// ],
|
||||||
|
// standArea: [
|
||||||
|
// { required: true, message: "站台区域,不可为空不能为空", trigger: "blur" }
|
||||||
|
// ],
|
||||||
|
// standType: [
|
||||||
|
// { required: true, message: "站台类型,不能为空不能为空", trigger: "change" }
|
||||||
|
// ],
|
||||||
|
// standStatus: [
|
||||||
|
// { required: true, message: "站台状态,不能为空不能为空", trigger: "change" }
|
||||||
|
// ],
|
||||||
|
// standProperty: [
|
||||||
|
// { required: true, message: "站台属性,不能为空不能为空", trigger: "change" }
|
||||||
|
// ],
|
||||||
|
// isLock: [
|
||||||
|
// { required: true, message: "是否锁定,不能为空不能为空", trigger: "change" }
|
||||||
|
// ],
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 当前可见的表格列
|
||||||
|
tableColumns() {
|
||||||
|
return this.allColumns.filter(col => this.isColumnVisible(col.prop));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
this.initTableHeight();
|
||||||
|
window.addEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
window.removeEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 初始化表格高度
|
||||||
|
initTableHeight() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 处理窗口大小变化
|
||||||
|
handleResize() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 检查列是否可见
|
||||||
|
isColumnVisible(prop) {
|
||||||
|
return this.visibleColumns.includes(prop);
|
||||||
|
},
|
||||||
|
// 切换搜索区域显示
|
||||||
|
toggleSearch() {
|
||||||
|
this.showSearch = !this.showSearch;
|
||||||
|
},
|
||||||
|
/** 查询任务明细
|
||||||
|
列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.params = {};
|
||||||
|
if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
|
||||||
|
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
|
||||||
|
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
|
||||||
|
}
|
||||||
|
listConfig(this.queryParams).then(response => {
|
||||||
|
this.allColumns = response.columns
|
||||||
|
console.log('All columns:', this.allColumns);
|
||||||
|
this.allColumns.forEach((column) => {
|
||||||
|
this.visibleColumns.push(column.prop)
|
||||||
|
});
|
||||||
|
this.messageList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
// standName: null,
|
||||||
|
// standType: null,
|
||||||
|
// standArea: null,
|
||||||
|
// standProperty: null,
|
||||||
|
// standStatus: null,
|
||||||
|
// isLock: null,
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.daterangeCreateTime = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.ledId)
|
||||||
|
this.single = selection.length !== 1
|
||||||
|
this.multiple = !selection.length
|
||||||
|
},
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd() {
|
||||||
|
this.reset();
|
||||||
|
this.open = true;
|
||||||
|
this.title = "添加LED显示";
|
||||||
|
},
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.reset();
|
||||||
|
const materialCode = this.ids
|
||||||
|
getConfig(materialCode).then(response => {
|
||||||
|
this.form = response.data;
|
||||||
|
this.open = true;
|
||||||
|
this.title = "修改LED显示";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.form.materialCode != null) {
|
||||||
|
updateConfig(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addConfig(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("新增成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const materialCodes = row.ledId || this.ids;
|
||||||
|
this.$modal.confirm('是否确认删除id编号为"' + materialCodes + '"的数据项?').then(function () {
|
||||||
|
return delConfig(materialCodes);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).catch(() => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('system/led/export', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `led_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
handleImport() {
|
||||||
|
this.upload.title = '导入';
|
||||||
|
this.upload.open = true;
|
||||||
|
},
|
||||||
|
/** 下载模板操作 */
|
||||||
|
importTemplate() {
|
||||||
|
this.download('/system/led/importTemplate', {}, `bas_led_${new Date().getTime()}.xlsx`);
|
||||||
|
},
|
||||||
|
// 文件上传中处理
|
||||||
|
handleFileUploadProgress(event, file, fileList) {
|
||||||
|
this.upload.isUploading = true;
|
||||||
|
},
|
||||||
|
// 文件上传成功处理
|
||||||
|
handleFileSuccess(response, file, fileList) {
|
||||||
|
this.upload.open = false;
|
||||||
|
this.upload.isUploading = false;
|
||||||
|
this.$refs.upload.clearFiles();
|
||||||
|
this.$alert(
|
||||||
|
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||||
|
response.msg +
|
||||||
|
'</div>',
|
||||||
|
'导入结果',
|
||||||
|
{ dangerouslyUseHTMLString: true },
|
||||||
|
);
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 提交上传文件
|
||||||
|
submitFileForm() {
|
||||||
|
this.$refs.upload.submit();
|
||||||
|
},
|
||||||
|
/** 排序触发事件 */
|
||||||
|
handleSortChange({ prop, order }) {
|
||||||
|
this.queryParams.orderByColumn = prop;
|
||||||
|
this.queryParams.isAsc = order === 'ascending' ? 'asc' : 'desc';
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 切换高级搜索 */
|
||||||
|
toggleAdvanced() {
|
||||||
|
this.isAdvanced = !this.isAdvanced;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.task-management {
|
||||||
|
padding: 16px;
|
||||||
|
background: #f5f7fa;
|
||||||
|
min-height: calc(100vh - 84px);
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
padding: 0;
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-content {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 16px;
|
||||||
|
transition: all 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 16px;
|
||||||
|
border-top: 1px solid #ebeef5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 8px 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.left {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
// 数字列样式
|
||||||
|
.number-column {
|
||||||
|
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-container {
|
||||||
|
margin-top: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置抽屉样式
|
||||||
|
.drawer-content {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.drawer-section-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin: 0 0 16px;
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-checkboxes {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.density-radio {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.el-radio-button {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
784
src/views/system/location/index.vue
Normal file
784
src/views/system/location/index.vue
Normal file
|
|
@ -0,0 +1,784 @@
|
||||||
|
<template>
|
||||||
|
<div class="task-management">
|
||||||
|
<!-- 配置抽屉 -->
|
||||||
|
<el-drawer
|
||||||
|
title="页面配置"
|
||||||
|
:visible.sync="configDrawer"
|
||||||
|
direction="rtl"
|
||||||
|
size="300px"
|
||||||
|
>
|
||||||
|
<div class="drawer-content">
|
||||||
|
<h3 class="drawer-section-title">显示字段</h3>
|
||||||
|
<el-checkbox-group v-model="visibleColumns" class="column-checkboxes">
|
||||||
|
<el-checkbox
|
||||||
|
v-for="col in allColumns"
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.prop"
|
||||||
|
>
|
||||||
|
{{ col.label }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
|
||||||
|
<h3 class="drawer-section-title">表格密度</h3>
|
||||||
|
<el-radio-group v-model="tableSize" class="density-radio">
|
||||||
|
<el-radio-button label="medium">默认</el-radio-button>
|
||||||
|
<el-radio-button label="small">紧凑</el-radio-button>
|
||||||
|
<el-radio-button label="mini">超紧凑</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
|
</el-drawer>
|
||||||
|
|
||||||
|
<!-- 搜索区域 -->
|
||||||
|
<div class="search-container" :class="{ collapsed: !showSearch }">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="84px" :size="formSize">
|
||||||
|
<div class="search-form-content" :class="{ 'is-advanced': isAdvanced }">
|
||||||
|
<template v-if="isAdvanced">
|
||||||
|
<el-form-item label="库位号" prop="locationId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.locationId"
|
||||||
|
placeholder="请输入库位号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库位类型" prop="locationType">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.locationType"
|
||||||
|
placeholder="请输入库位类型"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库位状态" prop="locationStatus">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.locationStatus"
|
||||||
|
placeholder="请输入库位状态"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="外部库位号" prop="outerId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.outerId"
|
||||||
|
placeholder="请输入外部库位号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库区号" prop="areaId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.areaId"
|
||||||
|
placeholder="请输入库区号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="巷道号" prop="tunnelId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.tunnelId"
|
||||||
|
placeholder="请输入巷道号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="设备号" prop="equipmentId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.equipmentId"
|
||||||
|
placeholder="请输入设备号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排" prop="wRow">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.wRow"
|
||||||
|
placeholder="请输入排"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="列" prop="wCol">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.wCol"
|
||||||
|
placeholder="请输入列"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="层" prop="wLayer">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.wLayer"
|
||||||
|
placeholder="请输入层"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="深度" prop="wDepth">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.wDepth"
|
||||||
|
placeholder="请输入深度"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否锁定" prop="isLock">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.isLock"
|
||||||
|
placeholder="请输入是否锁定"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="载具号" prop="vehicleId">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.vehicleId"
|
||||||
|
placeholder="请输入载具号"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否正在工作" prop="isWorking">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.isWorking"
|
||||||
|
placeholder="请输入是否正在工作"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<div class="search-form-footer">
|
||||||
|
<div class="left">
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
@click="toggleAdvanced"
|
||||||
|
class="advanced-toggle"
|
||||||
|
>
|
||||||
|
{{ isAdvanced ? '收起' : '展开' }}
|
||||||
|
<i :class="['el-icon-arrow-' + (isAdvanced ? 'up' : 'down')]"></i>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-s-operation"
|
||||||
|
@click="toggleSearch"
|
||||||
|
circle
|
||||||
|
size="mini"
|
||||||
|
></el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<div class="toolbar-container">
|
||||||
|
<div class="left">
|
||||||
|
<el-button-group>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
icon="el-icon-plus"
|
||||||
|
size="mini"
|
||||||
|
@click="handleAdd"
|
||||||
|
v-hasPermi="['system:location:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="single"
|
||||||
|
@click="handleUpdate"
|
||||||
|
v-hasPermi="['system:location:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="multiple"
|
||||||
|
@click="handleDelete"
|
||||||
|
v-hasPermi="['system:location:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-tooltip content="导出数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
icon="el-icon-download"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['system:location:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="导入数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleImport"
|
||||||
|
v-hasPermi="['system:location:import']"
|
||||||
|
>导入</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="列设置" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-setting"
|
||||||
|
@click="configDrawer = true"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="刷新" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-refresh"
|
||||||
|
@click="getList"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="table-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="messageList"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
border
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
@sort-change="handleSortChange"
|
||||||
|
:size="tableSize"
|
||||||
|
:max-height="tableHeight"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55" align="center" fixed="left"/>
|
||||||
|
<template v-for="col in tableColumns">
|
||||||
|
<el-table-column
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.label"
|
||||||
|
:prop="col.prop"
|
||||||
|
:width="col.width"
|
||||||
|
:min-width="col.minWidth"
|
||||||
|
align="center"
|
||||||
|
:sortable="col.sortable"
|
||||||
|
:show-overflow-tooltip="col.tooltip"
|
||||||
|
v-if="isColumnVisible(col.prop)"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<template v-if="col.type === 'dict'">
|
||||||
|
<dict-tag :options="dict.type[col.dict]" :value="scope.row[col.prop]"/>
|
||||||
|
</template>
|
||||||
|
<template v-if="col.prop === 'sts'">
|
||||||
|
<dict-tag :options="dict.type.kc_sts" :value="scope.row.sts"/>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'number'">
|
||||||
|
<span class="number-column">{{ scope.row[col.prop] }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'datetime'">
|
||||||
|
<span>{{ parseTime(scope.row[col.prop]) }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ scope.row[col.prop] }}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</template>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 弹窗 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body destroy-on-close>
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="库位号" prop="locationId">
|
||||||
|
<el-input v-model="form.locationId" placeholder="请输入库位号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库位类型" prop="locationType">
|
||||||
|
<el-input v-model="form.locationType" placeholder="请输入库位类型" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库位状态" prop="locationStatus">
|
||||||
|
<el-input v-model="form.locationStatus" placeholder="请输入库位状态" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="外部库位号" prop="outerId">
|
||||||
|
<el-input v-model="form.outerId" placeholder="请输入外部库位号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="库区号" prop="areaId">
|
||||||
|
<el-input v-model="form.areaId" placeholder="请输入库区号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="巷道号" prop="tunnelId">
|
||||||
|
<el-input v-model="form.tunnelId" placeholder="请输入巷道号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="设备号" prop="equipmentId">
|
||||||
|
<el-input v-model="form.equipmentId" placeholder="请输入设备号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="排" prop="wRow">
|
||||||
|
<el-input v-model="form.wRow" placeholder="请输入排" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="列" prop="wCol">
|
||||||
|
<el-input v-model="form.wCol" placeholder="请输入列" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="层" prop="wLayer">
|
||||||
|
<el-input v-model="form.wLayer" placeholder="请输入层" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="深度" prop="wDepth">
|
||||||
|
<el-input v-model="form.wDepth" placeholder="请输入深度" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否锁定" prop="isLock">
|
||||||
|
<el-input v-model="form.isLock" placeholder="请输入是否锁定" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="载具号" prop="vehicleId">
|
||||||
|
<el-input v-model="form.vehicleId" placeholder="请输入载具号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否正在工作" prop="isWorking">
|
||||||
|
<el-input v-model="form.isWorking" placeholder="请输入是否正在工作" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 导入 -->
|
||||||
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||||
|
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress"
|
||||||
|
:on-success="handleFileSuccess" :auto-upload="false" drag>
|
||||||
|
<i class="el-icon-upload"></i>
|
||||||
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||||
|
<div class="el-upload__tip text-center" slot="tip">
|
||||||
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||||
|
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
|
||||||
|
</div>
|
||||||
|
</el-upload>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||||
|
<el-button @click="upload.open = false">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {listLocation, getLocation, addLocation, updateLocation, delLocation} from "@/api/system/location";
|
||||||
|
// import {addMessage, updateMessage} from "@/api/system/message";
|
||||||
|
import {getToken} from "@/utils/auth";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "location",
|
||||||
|
dicts: ['kc_sts','site_type'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
upload: {
|
||||||
|
open: false,
|
||||||
|
title: '上传文件',
|
||||||
|
headers: { Authorization: 'Bearer ' + getToken() },
|
||||||
|
url: process.env.VUE_APP_BASE_API + '/system/location/importData', // 确保这里填写正确的上传URL
|
||||||
|
isUploading: false
|
||||||
|
},
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 是否显示高级搜索
|
||||||
|
isAdvanced: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 任务表格数据
|
||||||
|
messageList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 日期范围
|
||||||
|
daterangeCreateTime: [],
|
||||||
|
// 配置抽屉显示状态
|
||||||
|
configDrawer: false,
|
||||||
|
// 表格大小
|
||||||
|
tableSize: 'small',
|
||||||
|
// 表单大小
|
||||||
|
formSize: 'small',
|
||||||
|
// 表格高度
|
||||||
|
tableHeight: window.innerHeight - 300,
|
||||||
|
// 可见列
|
||||||
|
visibleColumns: [],
|
||||||
|
// 所有列配置
|
||||||
|
allColumns: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
locationType: null,
|
||||||
|
locationStatus: null,
|
||||||
|
outerId: null,
|
||||||
|
areaId: null,
|
||||||
|
tunnelId: null,
|
||||||
|
equipmentId: null,
|
||||||
|
wRow: null,
|
||||||
|
wCol: null,
|
||||||
|
wLayer: null,
|
||||||
|
wDepth: null,
|
||||||
|
isLock: null,
|
||||||
|
vehicleId: null,
|
||||||
|
isWorking: null
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
locationId: [
|
||||||
|
{ required: true, message: "库位号不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
locationType: [
|
||||||
|
{ required: true, message: "库位类型不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
locationStatus: [
|
||||||
|
{ required: true, message: "库位状态不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
areaId: [
|
||||||
|
{ required: true, message: "库区号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
tunnelId: [
|
||||||
|
{ required: true, message: "巷道号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
equipmentId: [
|
||||||
|
{ required: true, message: "设备号不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
wRow: [
|
||||||
|
{ required: true, message: "排不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
wCol: [
|
||||||
|
{ required: true, message: "列不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
wLayer: [
|
||||||
|
{ required: true, message: "层不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
wDepth: [
|
||||||
|
{ required: true, message: "深度不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
isLock: [
|
||||||
|
{ required: true, message: "是否锁定不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
isWorking: [
|
||||||
|
{ required: true, message: "是否正在工作不能为空", trigger: "blur" }
|
||||||
|
]
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 当前可见的表格列
|
||||||
|
tableColumns() {
|
||||||
|
return this.allColumns.filter(col => this.isColumnVisible(col.prop));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
this.initTableHeight();
|
||||||
|
window.addEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
window.removeEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 初始化表格高度
|
||||||
|
initTableHeight() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 处理窗口大小变化
|
||||||
|
handleResize() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 检查列是否可见
|
||||||
|
isColumnVisible(prop) {
|
||||||
|
return this.visibleColumns.includes(prop);
|
||||||
|
},
|
||||||
|
// 切换搜索区域显示
|
||||||
|
toggleSearch() {
|
||||||
|
this.showSearch = !this.showSearch;
|
||||||
|
},
|
||||||
|
/** 查询任务明细
|
||||||
|
列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.params = {};
|
||||||
|
if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
|
||||||
|
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
|
||||||
|
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
|
||||||
|
}
|
||||||
|
listLocation(this.queryParams).then(response => {
|
||||||
|
this.allColumns = response.columns
|
||||||
|
console.log('All columns:', this.allColumns);
|
||||||
|
this.allColumns.forEach((column) => {
|
||||||
|
this.visibleColumns.push(column.prop)
|
||||||
|
});
|
||||||
|
this.messageList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
locationId: null,
|
||||||
|
locationType: null,
|
||||||
|
locationStatus: null,
|
||||||
|
outerId: null,
|
||||||
|
areaId: null,
|
||||||
|
tunnelId: null,
|
||||||
|
equipmentId: null,
|
||||||
|
wRow: null,
|
||||||
|
wCol: null,
|
||||||
|
wLayer: null,
|
||||||
|
wDepth: null,
|
||||||
|
isLock: null,
|
||||||
|
vehicleId: null,
|
||||||
|
remark: null,
|
||||||
|
isWorking: null
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.daterangeCreateTime = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.locationId)
|
||||||
|
this.single = selection.length !== 1
|
||||||
|
this.multiple = !selection.length
|
||||||
|
},
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd() {
|
||||||
|
this.reset();
|
||||||
|
this.open = true;
|
||||||
|
this.title = "添加库位";
|
||||||
|
},
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.reset();
|
||||||
|
const materialCode = this.ids
|
||||||
|
getLocation(materialCode).then(response => {
|
||||||
|
this.form = response.data;
|
||||||
|
this.open = true;
|
||||||
|
this.title = "修改库位";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.form.materialCode != null) {
|
||||||
|
updateLocation(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addLocation(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("新增成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const materialCodes = row.locationId || this.ids;
|
||||||
|
this.$modal.confirm('是否确认删除库位号为"' + materialCodes + '"的数据项?').then(function () {
|
||||||
|
return delLocation(materialCodes);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).catch(() => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('system/location/export', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `location_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
handleImport() {
|
||||||
|
this.upload.title = '导入';
|
||||||
|
this.upload.open = true;
|
||||||
|
},
|
||||||
|
/** 下载模板操作 */
|
||||||
|
importTemplate() {
|
||||||
|
this.download('/system/location/importTemplate', {}, `bas_location_${new Date().getTime()}.xlsx`);
|
||||||
|
},
|
||||||
|
// 文件上传中处理
|
||||||
|
handleFileUploadProgress(event, file, fileList) {
|
||||||
|
this.upload.isUploading = true;
|
||||||
|
},
|
||||||
|
// 文件上传成功处理
|
||||||
|
handleFileSuccess(response, file, fileList) {
|
||||||
|
this.upload.open = false;
|
||||||
|
this.upload.isUploading = false;
|
||||||
|
this.$refs.upload.clearFiles();
|
||||||
|
this.$alert(
|
||||||
|
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||||
|
response.msg +
|
||||||
|
'</div>',
|
||||||
|
'导入结果',
|
||||||
|
{ dangerouslyUseHTMLString: true },
|
||||||
|
);
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 提交上传文件
|
||||||
|
submitFileForm() {
|
||||||
|
this.$refs.upload.submit();
|
||||||
|
},
|
||||||
|
/** 排序触发事件 */
|
||||||
|
handleSortChange({ prop, order }) {
|
||||||
|
this.queryParams.orderByColumn = prop;
|
||||||
|
this.queryParams.isAsc = order === 'ascending' ? 'asc' : 'desc';
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 切换高级搜索 */
|
||||||
|
toggleAdvanced() {
|
||||||
|
this.isAdvanced = !this.isAdvanced;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.task-management {
|
||||||
|
padding: 16px;
|
||||||
|
background: #f5f7fa;
|
||||||
|
min-height: calc(100vh - 84px);
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
padding: 0;
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-content {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 16px;
|
||||||
|
transition: all 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 16px;
|
||||||
|
border-top: 1px solid #ebeef5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 8px 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.left {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
// 数字列样式
|
||||||
|
.number-column {
|
||||||
|
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-container {
|
||||||
|
margin-top: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置抽屉样式
|
||||||
|
.drawer-content {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.drawer-section-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin: 0 0 16px;
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-checkboxes {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.density-radio {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.el-radio-button {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
657
src/views/system/stand/index.vue
Normal file
657
src/views/system/stand/index.vue
Normal file
|
|
@ -0,0 +1,657 @@
|
||||||
|
<template>
|
||||||
|
<div class="task-management">
|
||||||
|
<!-- 配置抽屉 -->
|
||||||
|
<el-drawer
|
||||||
|
title="页面配置"
|
||||||
|
:visible.sync="configDrawer"
|
||||||
|
direction="rtl"
|
||||||
|
size="300px"
|
||||||
|
>
|
||||||
|
<div class="drawer-content">
|
||||||
|
<h3 class="drawer-section-title">显示字段</h3>
|
||||||
|
<el-checkbox-group v-model="visibleColumns" class="column-checkboxes">
|
||||||
|
<el-checkbox
|
||||||
|
v-for="col in allColumns"
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.prop"
|
||||||
|
>
|
||||||
|
{{ col.label }}
|
||||||
|
</el-checkbox>
|
||||||
|
</el-checkbox-group>
|
||||||
|
|
||||||
|
<h3 class="drawer-section-title">表格密度</h3>
|
||||||
|
<el-radio-group v-model="tableSize" class="density-radio">
|
||||||
|
<el-radio-button label="medium">默认</el-radio-button>
|
||||||
|
<el-radio-button label="small">紧凑</el-radio-button>
|
||||||
|
<el-radio-button label="mini">超紧凑</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
|
</el-drawer>
|
||||||
|
|
||||||
|
<!-- 搜索区域 -->
|
||||||
|
<div class="search-container" :class="{ collapsed: !showSearch }">
|
||||||
|
<el-form :model="queryParams" ref="queryForm" :inline="true" label-width="84px" :size="formSize">
|
||||||
|
<div class="search-form-content" :class="{ 'is-advanced': isAdvanced }">
|
||||||
|
<template v-if="isAdvanced">
|
||||||
|
<el-form-item label="站台名称" prop="standName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.standName"
|
||||||
|
placeholder="请输入站台名称"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="站台区域" prop="standArea">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.standArea"
|
||||||
|
placeholder="请输入站台区域"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="站台属性" prop="standProperty">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.standProperty"
|
||||||
|
placeholder="请输入站台属性"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否锁定" prop="isLock">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.isLock"
|
||||||
|
placeholder="请输入是否锁定"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<div class="search-form-footer">
|
||||||
|
<div class="left">
|
||||||
|
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||||
|
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button
|
||||||
|
type="text"
|
||||||
|
@click="toggleAdvanced"
|
||||||
|
class="advanced-toggle"
|
||||||
|
>
|
||||||
|
{{ isAdvanced ? '收起' : '展开' }}
|
||||||
|
<i :class="['el-icon-arrow-' + (isAdvanced ? 'up' : 'down')]"></i>
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-s-operation"
|
||||||
|
@click="toggleSearch"
|
||||||
|
circle
|
||||||
|
size="mini"
|
||||||
|
></el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<!-- 工具栏 -->
|
||||||
|
<div class="toolbar-container">
|
||||||
|
<div class="left">
|
||||||
|
<el-button-group>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
icon="el-icon-plus"
|
||||||
|
size="mini"
|
||||||
|
@click="handleAdd"
|
||||||
|
v-hasPermi="['system:site:add']"
|
||||||
|
>新增</el-button>
|
||||||
|
<el-button
|
||||||
|
type="success"
|
||||||
|
plain
|
||||||
|
icon="el-icon-edit"
|
||||||
|
size="mini"
|
||||||
|
:disabled="single"
|
||||||
|
@click="handleUpdate"
|
||||||
|
v-hasPermi="['system:site:edit']"
|
||||||
|
>修改</el-button>
|
||||||
|
<el-button
|
||||||
|
type="danger"
|
||||||
|
plain
|
||||||
|
icon="el-icon-delete"
|
||||||
|
size="mini"
|
||||||
|
:disabled="multiple"
|
||||||
|
@click="handleDelete"
|
||||||
|
v-hasPermi="['system:site:remove']"
|
||||||
|
>删除</el-button>
|
||||||
|
</el-button-group>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<el-tooltip content="导出数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
icon="el-icon-download"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['system:site:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="导入数据" placement="top">
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleImport"
|
||||||
|
v-hasPermi="['system:location:import']"
|
||||||
|
>导入</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="列设置" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-setting"
|
||||||
|
@click="configDrawer = true"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="刷新" placement="top">
|
||||||
|
<el-button
|
||||||
|
icon="el-icon-refresh"
|
||||||
|
@click="getList"
|
||||||
|
circle
|
||||||
|
></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 表格 -->
|
||||||
|
<div class="table-container">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="messageList"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
border
|
||||||
|
stripe
|
||||||
|
highlight-current-row
|
||||||
|
@sort-change="handleSortChange"
|
||||||
|
:size="tableSize"
|
||||||
|
:max-height="tableHeight"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55" align="center" fixed="left"/>
|
||||||
|
<template v-for="col in tableColumns">
|
||||||
|
<el-table-column
|
||||||
|
:key="col.prop"
|
||||||
|
:label="col.label"
|
||||||
|
:prop="col.prop"
|
||||||
|
:width="col.width"
|
||||||
|
:min-width="col.minWidth"
|
||||||
|
align="center"
|
||||||
|
:sortable="col.sortable"
|
||||||
|
:show-overflow-tooltip="col.tooltip"
|
||||||
|
v-if="isColumnVisible(col.prop)"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<template v-if="col.type === 'dict'">
|
||||||
|
<dict-tag :options="dict.type[col.dict]" :value="scope.row[col.prop]"/>
|
||||||
|
</template>
|
||||||
|
<template v-if="col.prop === 'sts'">
|
||||||
|
<dict-tag :options="dict.type.kc_sts" :value="scope.row.sts"/>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'number'">
|
||||||
|
<span class="number-column">{{ scope.row[col.prop] }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else-if="col.type === 'datetime'">
|
||||||
|
<span>{{ parseTime(scope.row[col.prop]) }}</span>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
{{ scope.row[col.prop] }}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</template>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination
|
||||||
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 弹窗 -->
|
||||||
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body destroy-on-close>
|
||||||
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||||
|
|
||||||
|
<el-form-item label="站台名称" prop="standName">
|
||||||
|
<el-input v-model="form.standName" placeholder="请输入站台名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="站台区域" prop="standArea">
|
||||||
|
<el-input v-model="form.standArea" placeholder="请输入站台区域" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="站台类型" prop="standType">
|
||||||
|
<el-select v-model="form.standType" placeholder="请选择站台类型">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in dict.type.site_type"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="站台状态" prop="standStatus">
|
||||||
|
<el-select v-model="form.standStatus" placeholder="请选择站台状态">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in dict.type.site_status"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="站台属性" prop="standProperty">
|
||||||
|
<el-input v-model="form.standProperty" placeholder="请输入站台属性" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="是否锁定" prop="isLock">
|
||||||
|
<el-input v-model="form.isLock" placeholder="请输入是否锁定" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 导入 -->
|
||||||
|
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||||
|
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress"
|
||||||
|
:on-success="handleFileSuccess" :auto-upload="false" drag>
|
||||||
|
<i class="el-icon-upload"></i>
|
||||||
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||||
|
<div class="el-upload__tip text-center" slot="tip">
|
||||||
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||||
|
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
|
||||||
|
</div>
|
||||||
|
</el-upload>
|
||||||
|
<div slot="footer" class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||||
|
<el-button @click="upload.open = false">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {listStand, getStand, delStand, addStand, updateStand} from "@/api/system/stand";
|
||||||
|
// import {addMessage, updateMessage} from "@/api/system/message";
|
||||||
|
import {getToken} from "@/utils/auth";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "stand",
|
||||||
|
dicts: ['kc_sts','site_type'],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
upload: {
|
||||||
|
open: false,
|
||||||
|
title: '上传文件',
|
||||||
|
headers: { Authorization: 'Bearer ' + getToken() },
|
||||||
|
url: process.env.VUE_APP_BASE_API + '/system/site/importData', // 确保这里填写正确的上传URL
|
||||||
|
isUploading: false
|
||||||
|
},
|
||||||
|
// 遮罩层
|
||||||
|
loading: true,
|
||||||
|
// 选中数组
|
||||||
|
ids: [],
|
||||||
|
// 非单个禁用
|
||||||
|
single: true,
|
||||||
|
// 非多个禁用
|
||||||
|
multiple: true,
|
||||||
|
// 是否显示高级搜索
|
||||||
|
isAdvanced: true,
|
||||||
|
// 显示搜索条件
|
||||||
|
showSearch: true,
|
||||||
|
// 总条数
|
||||||
|
total: 0,
|
||||||
|
// 任务表格数据
|
||||||
|
messageList: [],
|
||||||
|
// 弹出层标题
|
||||||
|
title: "",
|
||||||
|
// 是否显示弹出层
|
||||||
|
open: false,
|
||||||
|
// 日期范围
|
||||||
|
daterangeCreateTime: [],
|
||||||
|
// 配置抽屉显示状态
|
||||||
|
configDrawer: false,
|
||||||
|
// 表格大小
|
||||||
|
tableSize: 'small',
|
||||||
|
// 表单大小
|
||||||
|
formSize: 'small',
|
||||||
|
// 表格高度
|
||||||
|
tableHeight: window.innerHeight - 300,
|
||||||
|
// 可见列
|
||||||
|
visibleColumns: [],
|
||||||
|
// 所有列配置
|
||||||
|
allColumns: [],
|
||||||
|
// 查询参数
|
||||||
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
standName: null,
|
||||||
|
standType: null,
|
||||||
|
standArea: null,
|
||||||
|
standProperty: null,
|
||||||
|
standStatus: null,
|
||||||
|
isLock: null,
|
||||||
|
},
|
||||||
|
// 表单参数
|
||||||
|
form: {},
|
||||||
|
// 表单校验
|
||||||
|
rules: {
|
||||||
|
standName: [
|
||||||
|
{ required: true, message: "站台名称,不能为空不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
standArea: [
|
||||||
|
{ required: true, message: "站台区域,不可为空不能为空", trigger: "blur" }
|
||||||
|
],
|
||||||
|
standType: [
|
||||||
|
{ required: true, message: "站台类型,不能为空不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
standStatus: [
|
||||||
|
{ required: true, message: "站台状态,不能为空不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
standProperty: [
|
||||||
|
{ required: true, message: "站台属性,不能为空不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
isLock: [
|
||||||
|
{ required: true, message: "是否锁定,不能为空不能为空", trigger: "change" }
|
||||||
|
],
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
// 当前可见的表格列
|
||||||
|
tableColumns() {
|
||||||
|
return this.allColumns.filter(col => this.isColumnVisible(col.prop));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getList();
|
||||||
|
this.initTableHeight();
|
||||||
|
window.addEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
beforeDestroy() {
|
||||||
|
window.removeEventListener('resize', this.handleResize);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 初始化表格高度
|
||||||
|
initTableHeight() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 处理窗口大小变化
|
||||||
|
handleResize() {
|
||||||
|
this.tableHeight = window.innerHeight - 300;
|
||||||
|
},
|
||||||
|
// 检查列是否可见
|
||||||
|
isColumnVisible(prop) {
|
||||||
|
return this.visibleColumns.includes(prop);
|
||||||
|
},
|
||||||
|
// 切换搜索区域显示
|
||||||
|
toggleSearch() {
|
||||||
|
this.showSearch = !this.showSearch;
|
||||||
|
},
|
||||||
|
/** 查询任务明细
|
||||||
|
列表 */
|
||||||
|
getList() {
|
||||||
|
this.loading = true;
|
||||||
|
this.queryParams.params = {};
|
||||||
|
if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
|
||||||
|
this.queryParams.params["beginCreateTime"] = this.daterangeCreateTime[0];
|
||||||
|
this.queryParams.params["endCreateTime"] = this.daterangeCreateTime[1];
|
||||||
|
}
|
||||||
|
listStand(this.queryParams).then(response => {
|
||||||
|
this.allColumns = response.columns
|
||||||
|
console.log('All columns:', this.allColumns);
|
||||||
|
this.allColumns.forEach((column) => {
|
||||||
|
this.visibleColumns.push(column.prop)
|
||||||
|
});
|
||||||
|
this.messageList = response.rows;
|
||||||
|
this.total = response.total;
|
||||||
|
this.loading = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 取消按钮
|
||||||
|
cancel() {
|
||||||
|
this.open = false;
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
// 表单重置
|
||||||
|
reset() {
|
||||||
|
this.form = {
|
||||||
|
standName: null,
|
||||||
|
standType: null,
|
||||||
|
standArea: null,
|
||||||
|
standProperty: null,
|
||||||
|
standStatus: null,
|
||||||
|
isLock: null,
|
||||||
|
};
|
||||||
|
this.resetForm("form");
|
||||||
|
},
|
||||||
|
/** 搜索按钮操作 */
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 重置按钮操作 */
|
||||||
|
resetQuery() {
|
||||||
|
this.daterangeCreateTime = [];
|
||||||
|
this.resetForm("queryForm");
|
||||||
|
this.handleQuery();
|
||||||
|
},
|
||||||
|
// 多选框选中数据
|
||||||
|
handleSelectionChange(selection) {
|
||||||
|
this.ids = selection.map(item => item.id)
|
||||||
|
this.single = selection.length !== 1
|
||||||
|
this.multiple = !selection.length
|
||||||
|
},
|
||||||
|
/** 新增按钮操作 */
|
||||||
|
handleAdd() {
|
||||||
|
this.reset();
|
||||||
|
this.open = true;
|
||||||
|
this.title = "添加站点";
|
||||||
|
},
|
||||||
|
/** 修改按钮操作 */
|
||||||
|
handleUpdate(row) {
|
||||||
|
this.reset();
|
||||||
|
const materialCode = this.ids
|
||||||
|
getStand(materialCode).then(response => {
|
||||||
|
this.form = response.data;
|
||||||
|
this.open = true;
|
||||||
|
this.title = "修改站点";
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 提交按钮 */
|
||||||
|
submitForm() {
|
||||||
|
this.$refs["form"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.form.materialCode != null) {
|
||||||
|
updateStand(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("修改成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
addStand(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("新增成功");
|
||||||
|
this.open = false;
|
||||||
|
this.getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 删除按钮操作 */
|
||||||
|
handleDelete(row) {
|
||||||
|
const materialCodes = row.materialCode || this.ids;
|
||||||
|
this.$modal.confirm('是否确认删除id编号为"' + materialCodes + '"的数据项?').then(function () {
|
||||||
|
return delStand(materialCodes);
|
||||||
|
}).then(() => {
|
||||||
|
this.getList();
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
}).catch(() => {
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/** 导出按钮操作 */
|
||||||
|
handleExport() {
|
||||||
|
this.download('system/site/export', {
|
||||||
|
...this.queryParams
|
||||||
|
}, `material_${new Date().getTime()}.xlsx`)
|
||||||
|
},
|
||||||
|
handleImport() {
|
||||||
|
this.upload.title = '导入';
|
||||||
|
this.upload.open = true;
|
||||||
|
},
|
||||||
|
/** 下载模板操作 */
|
||||||
|
importTemplate() {
|
||||||
|
this.download('/system/site/importTemplate', {}, `bas_site_${new Date().getTime()}.xlsx`);
|
||||||
|
},
|
||||||
|
// 文件上传中处理
|
||||||
|
handleFileUploadProgress(event, file, fileList) {
|
||||||
|
this.upload.isUploading = true;
|
||||||
|
},
|
||||||
|
// 文件上传成功处理
|
||||||
|
handleFileSuccess(response, file, fileList) {
|
||||||
|
this.upload.open = false;
|
||||||
|
this.upload.isUploading = false;
|
||||||
|
this.$refs.upload.clearFiles();
|
||||||
|
this.$alert(
|
||||||
|
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
|
||||||
|
response.msg +
|
||||||
|
'</div>',
|
||||||
|
'导入结果',
|
||||||
|
{ dangerouslyUseHTMLString: true },
|
||||||
|
);
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
// 提交上传文件
|
||||||
|
submitFileForm() {
|
||||||
|
this.$refs.upload.submit();
|
||||||
|
},
|
||||||
|
/** 排序触发事件 */
|
||||||
|
handleSortChange({ prop, order }) {
|
||||||
|
this.queryParams.orderByColumn = prop;
|
||||||
|
this.queryParams.isAsc = order === 'ascending' ? 'asc' : 'desc';
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
/** 切换高级搜索 */
|
||||||
|
toggleAdvanced() {
|
||||||
|
this.isAdvanced = !this.isAdvanced;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.task-management {
|
||||||
|
padding: 16px;
|
||||||
|
background: #f5f7fa;
|
||||||
|
min-height: calc(100vh - 84px);
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 24px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&.collapsed {
|
||||||
|
padding: 0;
|
||||||
|
height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-content {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 16px;
|
||||||
|
transition: all 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-form-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding-top: 16px;
|
||||||
|
border-top: 1px solid #ebeef5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 8px 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.left {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-container {
|
||||||
|
background: #fff;
|
||||||
|
padding: 16px;
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
// 数字列样式
|
||||||
|
.number-column {
|
||||||
|
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
|
||||||
|
color: #409eff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-container {
|
||||||
|
margin-top: 16px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 配置抽屉样式
|
||||||
|
.drawer-content {
|
||||||
|
padding: 20px;
|
||||||
|
|
||||||
|
.drawer-section-title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin: 0 0 16px;
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
margin-top: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-checkboxes {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.density-radio {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.el-radio-button {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
Reference in New Issue
Block a user