hefeihvac_web/src/views/base-data/stock/index.vue

327 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- -->
<el-input v-model="query.code" clearable placeholder="代码" style="width: 150px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-select
v-model="query.status"
clearable
size="small"
placeholder="状态"
class="filter-item"
style="width: 150px"
@change="crud.toQuery"
>
<el-option
v-for="item in dict.use_status"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-select
v-model="query.stockTypeCode"
clearable
size="small"
placeholder="容器类型"
class="filter-item"
style="width: 150px"
@change="crud.toQuery"
>
<el-option
v-for="item in stockTypes"
:key="item.code"
:label="item.name"
:value="item.code"
/>
</el-select>
<el-select v-model="query.areaName" style="width: 120px;" clearable placeholder="库区"
@keyup.enter.native="crud.toQuery" class="filter-item" @change="crud.toQuery">
<el-option
v-for="area in areas"
:key="area.id"
:label="area.name"
:value="area.name"
/>
</el-select>
<el-input v-model="query.pointCode" clearable placeholder="点位" style="width: 150px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<rrOperation :crud="crud" />
</div>
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
<crudOperation :permission="permission" :tableKey="this.$options.name" >
<el-upload
class="upload-demo"
slot='right'
style="float: right;padding-left: 5px"
:headers="headers"
:action="stockApi"
:file-list="fileList"
:on-error="handleErr"
:on-success=" (response, file, fileList) => { return handleSuccess(response, file, fileList,crud);}"
:show-file-list="true">
<el-button size="mini" type="success" icon="el-icon-upload2">导入</el-button>
</el-upload>
</crudOperation>
<!--表单组件-->
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="350px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="代码" prop="code">
<el-input v-model="form.code" style="width: 180px;" />
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="form.name" style="width: 180px;" />
</el-form-item>
<el-form-item label="类型" prop="stockType" >
<el-select v-model="form.stockType" value-key="id" filterable placeholder="请选择" style="width: 180px;">
<el-option
v-for="item in stockTypes"
:key="item.id"
:label="item.name"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select
v-model="form.status"
clearable
size="small"
placeholder="状态"
class="filter-item"
style="width: 180px"
>
<el-option
v-for="item in dict.use_status"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="点位" prop="point">
<el-select v-model="form.point" clearable @focus="getPoint" filterable placeholder="请选点位" value-key="id"
style="width: 180px;">
<el-option
v-for="point in points"
:key="point.id"
:label="point.code"
:value="point"
>
<span style="float: left">{{ point.code }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ point.status }}</span>
</el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</el-dialog>
<!--表格渲染-->
<el-table ref="table" height="66vh" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;height: 90%" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="code" label="代码" />
<el-table-column :show-overflow-tooltip="true" prop="stockType" label="类型">
<template slot-scope="scope">
<div>{{ scope.row.stockType.name }}</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="area" label="状态">
<template slot-scope="scope">
{{ dict.label.use_status[scope.row.status] }}
</template>
</el-table-column>
<el-table-column label="启用" align="center" prop="enabled">
<template slot-scope="scope">
<el-switch
v-model="scope.row.enabled"
active-color="#409EFF"
inactive-color="#F56C6C"
@change="changeEnabled(scope.row, scope.row.enabled)"
/>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="point" label="点位">
<template slot-scope="scope">
<span v-if="scope.row.point !=null">{{scope.row.point.name}}</span>
</template>
</el-table-column>
<el-table-column v-if="checkPer(['admin','item:edit'])" label="操作" align="center">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
:show-dle="false"
/>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<div style="float: right;">
<pagination/>
</div>
</div>
</div>
</template>
<script>
import crudStock from '@/api/stock'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import {queryPointList,updatePointOk} from "@/api/point";
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import { getStockTypes } from '@/api/stockType'
import DonMessage from "@/utils/message";
import {getToken} from "@/utils/auth";
import {getAres} from "@/api/area";
import {mapGetters} from "vuex";
const defaultForm = { id: null, status: 'FREE',stockType: null,code: null, pid: null, point: null, subCount: null, name: null, typeId: null, length: null, width: null, height: null, weight: null, size: null, useWeight: null, useSize: null, usageWeight: null, usageSize: null, enabled: 1, createBy: null, updateBy: null, createTime: null, updateTime: null, topId: null}
export default {
name: 'Stock',
components: {pagination, crudOperation, rrOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['base_staus', 'use_status'],
cruds() {
return CRUD({ title: '容器', url: 'api/stock', idField: 'id', sort: 'id,desc', crudMethod: { ...crudStock },
optShow: {
add: true,
edit: false,
del: false,
reset: true,
download: true
},
queryOnPresenterCreated: true
})
},
data() {
return {
points: [],
//地标点数据
fileList:[],
areas:[],
pointListData:[],
headers: { 'Authorization': getToken() },
permission: {
add: ['admin', 'stock:add'],
edit: ['admin', 'stock:edit'],
del: ['admin', 'stock:del']
},
stockTypes: [],
rules: {
id: [
{ required: true, message: '容器ID不能为空', trigger: 'blur' }
],
code: [
{ required: true, message: '容器代码不能为空', trigger: 'blur' }
],
stockType: [
{ required: true, message: '容器类型不能为空', trigger: 'blur' }
]
}
}
},
computed: {
...mapGetters(['stockApi'])
},
mounted() {
this.getArea();
this.getStockType();
//获取点位表的数据
this.getPoint();
},
methods: {
handleSuccess(response, file, fileList,crud) {
let myError = response.toString();//转字符串
DonMessage.success("" + response['message'])
crud.toQuery()
},
handleErr(err, file, fileList) {
let myError = err.toString();//转字符串
myError = myError.replace("Error: ", "") // 去掉前面的" Error: "
myError = JSON.parse(myError);//转对象
DonMessage.error("" + myError['message'])
},
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
getPoint() {
queryPointList().then(res => {
this.points = res
})
},
getStockType() {
getStockTypes({ }).then(res => {
this.stockTypes= res.content.map(function(obj) {
if (obj.hasChildren) {
obj.children = null
}
return obj
})
})
},
//获取点位表的数据
getPointListData(){
queryPointList().then(res=>{
for (const re of res) {
if (re.status==="FREE"&&re.area.name==="轴承座空车区"){
this.pointListData.push(re);
}
}
}).catch(e=>{
DonMessage.error("点位表数据获取失败")
})
},
// 改变状态
changeEnabled(data, val) {
this.$confirm('此操作将 "' + this.dict.label.base_staus[val] + '" ' + data.code + ', 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
crudStock.edit(data).then(res => {
this.crud.notify(this.dict.label.base_staus[val] + '成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(() => {
data.enabled = !data.enabled
})
}).catch(() => {
data.enabled = !data.enabled
})
},
shuaxinContainerList() {
this.crud.toQuery();
},
getArea() {
getAres({}).then(res => {
this.areas = res.content.map(function (obj) {
if (obj.hasChildren) {
obj.children = null
}
return obj
})
})
}
}
}
</script>
<style scoped>
</style>