ZhongWei-DuoChaXun/DuoChaXun-Web/src/views/business-data/asnDetail/index.vue

324 lines
12 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">
<!-- 搜索 -->
<el-input v-model="query.itemCode" clearable placeholder="物料代码" style="width: 140px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-input v-model="query.itemName" clearable placeholder="物料名称" style="width: 140px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-input v-model="query.po" clearable placeholder="MO票" style="width: 140px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
<el-select
v-model="query.status"
clearable
size="small"
placeholder="状态"
class="filter-item"
style="width: 100px"
@change="crud.toQuery"
>
<el-option
v-for="item in dict.asn_status"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
<date-range-picker v-model="query.createTime" class="date-item" style="width: 100px" />
<rrOperation :crud="crud" />
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'-->
<crudOperation :permission="permission" >
<el-button
slot="right"
v-permission="permission.checkAsn"
class="filter-item"
type="primary"
size="mini"
@click="collectMO = true"
icon="el-icon-document-add"
>
MO票采集
</el-button>
<el-button
slot="right"
v-permission="permission.checkAsn"
class="filter-item"
size="mini"
type="primary"
icon="el-icon-bottom-right"
:disabled="crud.selections.length === 0"
@click="checkAsn(crud.selections)"
>
收 货
</el-button>
<el-button
slot="right"
class="filter-item"
size="mini"
type="info"
icon="el-icon-s-order"
@click="doAsnTask(crud.selections[0].id)"
:disabled="crud.selections.length !== 1"
>收货详情</el-button>
<el-upload
class="upload-demo"
slot='right'
style="float: right;padding-left: 5px"
:headers="headers"
action="/api/asnDetail/import_mo"
: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>
<AsnTask ref="asnTask" />
</div>
<!--MO票采集表单组件-->
<el-dialog title="MO票采集" :visible.sync="collectMO" width="400px">
<el-form ref="form2" :model="form2" :rules="rules" size="small" label-width="80px">
<el-form-item label="MO票" prop="po">
<el-input v-model="form2.po" style="width: 200px;" />
</el-form-item>
<el-form-item label="容器" prop="stock">
<el-select v-model="form2.stock" @focus="getStock" value-key="id" filterable placeholder="请选择容器" style="width: 200px;">
<el-option
v-for="item in stocks"
:key="item.id"
:label="item.code"
:value="item"
/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="collectMO= false">取 消</el-button>
<el-button type="primary" @click="collectMO2()">确 定</el-button>
</div>
</el-dialog>
<!--表单组件-->
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="400px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="物料" prop="item">
<el-select v-model="form.item" @focus="getItem" value-key="id" filterable placeholder="请选择物料" style="width: 200px;">
<el-option
v-for="item in items"
:key="item.id"
:label="item.code"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="容器" prop="stock">
<el-select v-model="form.stock" @focus="getStock" value-key="id" filterable placeholder="请选择容器" style="width: 200px;">
<el-option
v-for="item in stocks"
:key="item.id"
:label="item.code"
:value="item"
/>
</el-select>
</el-form-item>
<el-form-item label="订单数量">
<el-input v-model="form.orderQty" style="width: 200px;" />
</el-form-item>
<el-form-item label="批次号">
<el-input v-model="form.propC1" style="width: 200px;" />
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" style="width: 200px;" />
</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="68vh" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler" >
<el-table-column type="selection" width="55" />
<el-table-column type="index" :index="indexMethod" label="序号"/>
<el-table-column :show-overflow-tooltip="true" prop="itemCode" label="物料编码">
<template slot-scope="scope">
<div>{{ scope.row.item.code }}</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="itemName" label="物料名称">
<template slot-scope="scope">
<div>{{ scope.row.item.name }}</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="true" prop="stock" label="容器">
<template slot-scope="scope">
<div>{{ scope.row.stock.code }}</div>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" >
<template slot-scope="scope">
{{ dict.label.asn_status[scope.row.status] }}
</template>
</el-table-column>
<el-table-column prop="orderQty" label="订单数量" />
<el-table-column prop="receivedQty" label="收货数量" />
<el-table-column prop="propC1" label="批次号" />
<el-table-column prop="po" label="MO票" width="200"/>
<el-table-column prop="remark" label="备注" />
<el-table-column prop="createBy" label="创建人" />
<el-table-column prop="createTime" label="创建时间" width="135" sortable/>
</el-table>
<!--分页组件-->
<div style="float: right;">
<pagination/>
</div>
</div>
</template>
<script>
import crudAsnDetail, {add} from '@/api/asnDetail'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import {getItems} from "@/api/item"
import {queryKyStockList} from "@/api/stock"
import Treeselect from '@riophae/vue-treeselect'
import Search from "@/views/monitor/log/search.vue"
import AsnTask from "@/views/business-data/asnDetail/viewAsnTask"
import DonMessage from "@/utils/message";
import DateRangePicker from "@/components/DateRangePicker/index.vue";
import {getToken} from "@/utils/auth";
const defaultForm = { id: null, asnId: null, item: null, stock: null, lineNo: null, po: null, status: 'OPEN', orderQty: 0, receivedQty: 0, moveQty: 0, putQty: 0, weight: 0, volume: 0, remark: null, propC1: null, propC2: null, propC3: null, propC4: null, propC5: null, propC6: null, propD1: null, propD2: null, deptId: null, sourceName: null, sourceId: null, createBy: null, updateBy: null, createTime: null, updateTime: null }
export default {
name: 'AsnDetail',
components: {DateRangePicker, AsnTask, Search, Treeselect, pagination, crudOperation, rrOperation, udOperation},
mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['asn_status'],
cruds() {
return CRUD({ title: '收货数据', url: 'api/asnDetail', idField: 'id', sort: 'id,desc', crudMethod: { ...crudAsnDetail }})
},
data() {
return {
headers: { 'Authorization': getToken() },
items: [],
stocks: [],
form2: {po: null,stock: null},
permission: {
add: ['admin', 'asnDetail:add'],
edit: ['admin', 'asnDetail:edit'],
del: ['admin', 'asnDetail:del'],
checkAsn: ['admin', 'asnDetail:checkAsn']
},
rules: {
item: [
{ required: true, message: '物料不能为空', trigger: 'blur' }
],
stock: [
{ required: true, message: '容器不能为空', trigger: 'blur' }
],
po: [
{ required: true, message: 'MO票不能为空', trigger: 'blur' }
]
},
queryTypeOptions: [
{ key: 'itemCode', display_name: '物料代码' },
{ key: 'itemName', display_name: '物料名称' },
{ key: 'po', display_name: 'MO票' },
{ key: 'status', display_name: '状态' }
],
collectMO: false
}
},
mounted() {
//初始化数据
},
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
},
getItem() {
getItems({ }).then(res => {
this.items= res.content.map(function(obj) {
if (obj.hasChildren) {
obj.children = null
}
return obj
})
})
},
getStock() {
queryKyStockList({ }).then(res => {
this.stocks= res.map(function(obj) {
if (obj.hasChildren) {
obj.children = null
}
return obj
})
})
},
indexMethod(index) {
return index * 1+1;
},
checkAsn(datas) {
this.$confirm(`选中的${datas.length}条数据收货确认?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const ids = []
for (let i = 0; i < datas.length; i++) {
ids.push(datas[i].id)
}
crudAsnDetail.doCheckAsn(ids).then(res => {
DonMessage.success('收货成功!');
this.crud.toQuery()
this.getStock()
})
}).catch(() => {
DonMessage.success('收货失败!');
})
},
collectMO2() {
crudAsnDetail.collectMOCreate(this.form2).then(res => {
this.collectMO=false
this.crud.toQuery()
this.getStock()
this.resetForm()
}).catch(() => {
})
},
// 显示日志
doAsnTask(id) {
this.$refs.asnTask.dialog = true
this.$refs.asnTask.doInit(id)
},
//重置表单
resetForm() {
this.$refs["form2"].resetFields();
this.$data.form2=JSON.parse(JSON.stringify(this.$options.data().form2))
}
}
}
</script>
<style scoped>
</style>