bonus-ui/src/views/materialsStation/toolsLease/outBound/component/homeApply.vue

503 lines
18 KiB
Vue

<template>
<div>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="申请时间" prop="time">
<el-date-picker
v-model="queryParams.time"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 240px"
></el-date-picker>
</el-form-item>
<el-form-item label="关键字" prop="keyWord">
<el-input
v-model="queryParams.keyWord"
placeholder="请输入关键字"
clearable
maxlength="50"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="状态" prop="taskStatus">
<el-select v-model="queryParams.taskStatus" placeholder="请选择状态" clearable filterable style="width: 240px">
<el-option
v-for="dict in dict.type.clz_lease_apply_task_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">领料申请</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="typeList">
<el-table-column width="60" align="center" label="序号" type="index">
<template slot-scope="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="申请时间" align="center" prop="createTime" width="100" />
<el-table-column label="申请人" align="center" prop="createBy" width="90" :show-overflow-tooltip="true" />
<el-table-column label="领料班组" align="center" prop="teamName" width="200" />
<el-table-column label="租赁工程" align="center" prop="projectName" width="200" />
<el-table-column
label="领料工器具类型"
align="center"
prop="maTypeNames"
:show-overflow-tooltip="true"
></el-table-column>
<el-table-column label="班组长" align="center" prop="leasePerson" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="taskStatus" :show-overflow-tooltip="true" width="150">
<template slot-scope="scope">
<dict-tag :options="dict.type.clz_lease_apply_task_status" :value="scope.row.taskStatus" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" width="100" prop="remark" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" width="300" fixed="right">
<template slot-scope="scope">
<el-button size="mini" style="margin-bottom: 10px" type="normal" @click="handleView(scope.row)">
查看
</el-button>
<el-button
size="mini"
style="margin-bottom: 10px"
type="primary"
@click="handleUpdate(scope.row)"
v-if="scope.row.taskStatus == 1"
>
出库
</el-button>
<el-button size="mini" type="warning" v-if="scope.row.taskStatus != 1" @click="handleLld(scope.row)">
领料单
</el-button>
<el-button
size="mini"
type="danger"
@click="handleDeletePurchase(scope.row)"
v-if="scope.row.taskStatus == 1"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 领料单弹窗 -->
<el-dialog :visible.sync="open" width="800px" :title="title" append-to-body>
<div style="height: 500px; overflow-y: scroll; padding: 0 20px">
<vue-easy-print tableShow ref="remarksPrintRef">
<div id="checkIdTwo" class="print-table">
<div class="title" style="text-align: center; font-weight: 600; font-size: 16px">领料单</div>
<div class="info" style="margin-top: 10px; display: flex; flex-wrap: wrap">
<div class="item" style="width: 50%; flex-shrink: 0; margin-bottom: 5px; font-size: 14px">
<span>领料班组:</span>
{{ leaseApplyData.teamName }}
</div>
<div class="item" style="width: 50%; flex-shrink: 0; margin-bottom: 5px; font-size: 14px">
<span>工程名称:</span>
{{ leaseApplyData.projectName }}
</div>
<div class="item" style="width: 50%; flex-shrink: 0; margin-bottom: 5px; font-size: 14px">
<span>时间:</span>
<span v-if="leaseApplyData.createTime">{{ leaseApplyData.createTime.split(' ')[0] }}</span>
</div>
<div class="item" style="width: 50%; flex-shrink: 0; margin-bottom: 5px; font-size: 14px">
<span>编号:</span>
{{ leaseApplyData.code }}
</div>
</div>
<!-- <el-table :data="leaseApplyDetails" class="table" border style="width: 100%">
<el-table-column label="序号" align="center" type="index" width="60px" />
<el-table-column label="类型名称" align="center" prop="maTypeName" />
<el-table-column label="规格型号" align="center" prop="typeName" />
<el-table-column label="计量单位" align="center" prop="unitName" />
<el-table-column label="预领数量" align="center" prop="preNum" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="出库方式" align="center" prop="manageType">
<template slot-scope="scope">
<span v-if="scope.row.manageType == 0" style="color: blue" @click="codeInfo(scope.row)">编码出库</span>
<span v-if="scope.row.manageType == 1">数量出库</span>
</template>
</el-table-column>
</el-table> -->
<table border="1" style="width: 100%; border-collapse: collapse">
<thead>
<tr align="center">
<th style="width: 60px">序号</th>
<th>类型名称</th>
<th>规格型号</th>
<th>计量单位</th>
<th>领料数量</th>
<th>备注</th>
<th>出库方式</th>
</tr>
</thead>
<tbody>
<tr v-for="(row, index) in leaseApplyDetails" :key="index" align="center">
<td>{{ index + 1 }}</td>
<td>{{ row.maTypeName }}</td>
<td>{{ row.typeName }}</td>
<td>{{ row.unitName }}</td>
<td>{{ row.preNum }}</td>
<td>{{ row.remark }}</td>
<td>
<span v-if="row.manageType == 0" style="color: blue; cursor: pointer" @click="codeInfo(row)">
编码出库
</span>
<span v-else-if="row.manageType == 1">数量出库</span>
</td>
</tr>
</tbody>
</table>
<div class="fillIn" style="margin-top: 30px; display: flex; justify-content: space-between">
<div class="item" style="width: 24%; display: flex; align-items: center; flex-wrap: wrap">
<div style="width: 50%">发料:</div>
<img
v-if="leaseApplyOutData.outSignUrl"
:src="leaseApplyOutData.outSignUrl"
style="width: 40px; height: 90px"
:style="{ transform: leaseApplyOutData.outSignType == 0 ? 'rotate(-90deg)' : '' }"
alt=""
/>
</div>
<div class="item" style="width: 50%; display: flex; align-items: center; flex-wrap: wrap">
<div style="display: flex; align-items: center">
<div style="width: 50px; margin-right: 18px">领料:</div>
<img
v-if="leaseApplyData.leaseSignUrl"
:src="leaseApplyData.leaseSignUrl"
style="width: 40px; height: 90px"
:style="{ transform: leaseApplyData.leaseSignType == 0 ? 'rotate(-90deg)' : '' }"
alt=""
/>
</div>
</div>
</div>
</div>
</vue-easy-print>
</div>
<div slot="footer" class="dialog-footer" style="text-align: center">
<el-button type="primary" @click="print">打 印</el-button>
<el-button @click="open = false">关 闭</el-button>
</div>
</el-dialog>
<!-- 编码管理查看弹窗 -->
<el-dialog :title="titleView" :visible.sync="showView" width="800px" append-to-body>
<div style="overflow-y: scroll">
<vue-easy-print tableShow ref="remarksPrintRefView" class="print-table">
<div class="title" style="text-align: center; font-weight: 600; font-size: 16px; margin-bottom: 20px">
领料单编号明细
</div>
<!-- <el-table :data="getListViewInfo" style="padding: 1px">
<el-table-column align="center" label="序号" type="index" width="55" />
<el-table-column label="类型名称" align="center" prop="materialName" :show-overflow-tooltip="true" />
<el-table-column label="规格型号" align="center" prop="materialModel" :show-overflow-tooltip="true" />
<el-table-column label="设备编码" align="center" prop="maCode" :show-overflow-tooltip="true" />
</el-table> -->
<table border="1" style="width: 100%; border-collapse: collapse">
<thead>
<tr align="center">
<th>序号</th>
<th>类型名称</th>
<th>规格型号</th>
<th>设备编码</th>
</tr>
</thead>
<tbody>
<tr v-for="(row, index) in getListViewInfo" :key="index" align="center">
<td>{{ index + 1 }}</td>
<td :title="row.materialName">{{ row.materialName }}</td>
<td :title="row.typeName">{{ row.typeName }}</td>
<td :title="row.maCode">{{ row.maCode }}</td>
</tr>
</tbody>
</table>
</vue-easy-print>
</div>
<div slot="footer" class="dialog-footer" style="text-align: center">
<el-button type="primary" @click="printView">打 印</el-button>
<el-button @click="showView = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getListLeaseApply, getPickListApi, applyRemove } from '@/api/materialsStation'
import vueEasyPrint from 'vue-easy-print'
import printJS from 'print-js'
export default {
name: 'Home',
dicts: ['clz_lease_apply_task_status', 'ma_type_manage_type'],
components: { vueEasyPrint },
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 字典表格数据
typeList: [],
// 弹出层标题
title: '',
// 日期范围
dateRange: [],
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
time: null, //申请时间
keyWord: '',
taskStatus: null //申请时间
},
openPrint: false,
open: false,
printTableData: [],
checkDataInfo: {},
//领料单
leaseApplyDetails: [],
// 领料任务详情数据
leaseApplyData: {},
leaseApplyOutData: {},
// 编码管理查看弹窗
showView: false,
titleView: '',
getListViewInfo: []
}
},
created() {
const end = new Date()
let start = new Date()
start.setMonth(start.getMonth() - 1)
this.queryParams.time = [this.format(start), this.format(end)]
this.getList()
},
methods: {
format(date) {
const y = date.getFullYear()
const m = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
return `${y}-${m}-${day}`
},
getList() {
this.loading = true
const params = {
keyWord: this.queryParams.keyWord,
taskStatus: this.queryParams.taskStatus,
startTime: this.queryParams.time && this.queryParams.time[0],
endTime: this.queryParams.time && this.queryParams.time[1],
pageSize: this.queryParams.pageSize,
pageNum: this.queryParams.pageNum
// statusList: this.queryParams.taskStatus ? [this.queryParams.taskStatus]:[1,2,3,4]
}
getListLeaseApply(params)
.then(response => {
this.typeList = response.data.rows
this.total = response.data.total
this.loading = false
})
.catch(error => {
console.log('🚀 ~ getList ~ error:', error)
this.loading = false
})
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
const end = new Date()
let start = new Date()
start.setMonth(start.getMonth() - 1)
this.queryParams.time = [this.format(start), this.format(end)]
this.resetForm('queryForm')
this.queryParams.keyWord = ''
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd() {
this.$emit('addTools')
},
/** 查看按钮操作 */
handleView(row) {
this.$emit('queryTools', row.taskId, row.id)
},
/** 修改按钮操作 */
handleUpdate(row) {
this.$emit('editTools', row.taskId, row.id)
},
/** 导出按钮操作 */
handleExportCheck() {
this.download(
'/material/material_lease_apply_info/exportInfo',
{ id: this.idTemp },
`出库检验单_${new Date().getTime()}.xlsx`
)
},
//打开领料单
async handleLld(row) {
this.leaseApplyDetails = []
this.leaseApplyData = {}
this.title = '领料单'
this.open = true
const res = await getPickListApi({ id: row.id })
this.leaseApplyDetails = res.data.leaseApplyDetailsList
this.leaseApplyData = res.data.leaseApplyInfo
this.leaseApplyOutData = res.data.leaseOutSign
},
//出库检验单打印
printCheck() {
printJS({
printable: 'checkId',
type: 'html',
targetStyles: ['*'],
maxWidth: '1400'
// 其他配置选项
})
},
// 关闭弹窗并刷新页面
closeDialogAndRefresh() {
this.openPrint = false
},
codeInfo(row) {
console.log('🚀 ~ codeInfo ~ row:', row)
this.showView = true
this.titleView = '查看'
this.getListViewInfo = row.maCodeVoList
},
//打印
printView() {
this.$refs.remarksPrintRefView.print()
},
//打印
print() {
this.$refs.remarksPrintRef.print()
// printJS({
// printable: 'checkIdTwo',
// type: 'html',
// targetStyles: ['*'],
// maxWidth: '1400'
// // 其他配置选项
// })
},
/** 删除按钮操作 */
handleDeletePurchase(row) {
// console.log(row)
let ids = []
ids.push(row.id)
console.log('ids', ids)
this.$modal
.confirm('是否确认删除所选择的数据项?')
.then(function () {
return applyRemove(ids)
})
.then(() => {
this.getList()
this.$modal.msgSuccess('删除成功')
})
.catch(() => {})
},
/** 导出按钮操作 */
handleExport() {
const params = {
keyWord: this.queryParams.keyWord,
taskStatus: this.queryParams.taskStatus,
startTime: this.queryParams.time && this.queryParams.time[0],
endTime: this.queryParams.time && this.queryParams.time[1],
pageSize: this.queryParams.pageSize,
pageNum: this.queryParams.pageNum,
statusList: this.queryParams.taskStatus ? [this.queryParams.taskStatus] : [1, 2, 3, 4]
}
this.download(
'/material/material_lease_apply_info/export',
{ ...params },
`领料申请_${new Date().getTime()}.xlsx`
)
}
},
watch: {
$route: {
handler(to) {
if (to.query.keyWord) {
this.queryParams.keyWord = to.query.keyWord
}
},
deep: true,
immediate: true
}
}
}
</script>
<style lang="scss" scoped>
.image-type {
/* 旋转图片 */
transform: rotate(-90deg);
/* 确保旋转后的图片不会超出容器 */
max-width: 100%;
/* 保持图片的宽高比 */
width: 40px;
height: 100px;
}
.sign-type {
width: 100px;
height: 40px;
}
.print-table {
table,
th,
td {
border: 1.5px solid black;
border-collapse: collapse;
}
}
</style>