领料数据-弹框

This commit is contained in:
binbin_pan 2024-04-24 10:14:36 +08:00
parent 82ce5836ee
commit bc22b4397e
6 changed files with 449 additions and 3 deletions

View File

@ -0,0 +1,18 @@
import { POST, GET } from './index.js'
const URL_TYPE_LIST = '/screen/material/returnOfMaterialsInfo/getTypeList'
const URL_DETAILS = '/screen/base/largeScreen/home/getMaterialReqData/details'
const URL_UNIT_LIST = '/screen/material/agreementInfo/getUnitList'
const URL_PROJECT_LIST = '/screen/material/agreementInfo/getProjectList'
// 设备类型
export const getTypeList = params => GET(URL_TYPE_LIST, params)
// 详情
export const getDetails = data => POST(URL_DETAILS, data)
// 往来单位-下拉
export const getUnitList = params => GET(URL_UNIT_LIST, params)
// 工程名称-下拉
export const getProjectList = params => GET(URL_PROJECT_LIST, params)

View File

@ -0,0 +1,118 @@
<template>
<div :class="{'hidden':hidden}" class="pagination-container">
<el-pagination
:background="background"
:current-page.sync="currentPage"
:page-size.sync="pageSize"
:layout="layout"
:page-sizes="pageSizes"
:pager-count="pagerCount"
:total="total"
v-bind="$attrs"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</template>
<script>
import { scrollTo } from '../../untils/scroll-to.js'
export default {
name: 'Pagination',
props: {
total: {
required: true,
type: Number
},
page: {
type: Number,
default: 1
},
limit: {
type: Number,
default: 20
},
pageSizes: {
type: Array,
default() {
return [10, 20, 30, 50]
}
},
// 5
pagerCount: {
type: Number,
default: document.body.clientWidth < 992 ? 5 : 7
},
layout: {
type: String,
default: 'total, sizes, prev, pager, next, jumper'
},
background: {
type: Boolean,
default: true
},
autoScroll: {
type: Boolean,
default: true
},
hidden: {
type: Boolean,
default: false
}
},
data() {
return {
};
},
computed: {
currentPage: {
get() {
return this.page
},
set(val) {
this.$emit('update:page', val)
}
},
pageSize: {
get() {
return this.limit
},
set(val) {
this.$emit('update:limit', val)
}
}
},
methods: {
handleSizeChange(val) {
if (this.currentPage * val > this.total) {
this.currentPage = 1
}
this.$emit('pagination', { page: this.currentPage, limit: val })
if (this.autoScroll) {
scrollTo(0, 800)
}
},
handleCurrentChange(val) {
this.$emit('pagination', { page: val, limit: this.pageSize })
if (this.autoScroll) {
scrollTo(0, 800)
}
}
}
}
</script>
<style scoped>
.pagination-container {
margin-top: 20px;
background: #fff;
padding: 32px 16px;
display: flex;
justify-content: end;
align-items: center;
}
.pagination-container.hidden {
display: none;
}
</style>

View File

@ -25,11 +25,17 @@
</div>
<div v-if="suffix" class="count-flop-unit">{{ suffix }}</div>
</div>
<getMaterialsDialog ref="materialsDialog"></getMaterialsDialog>
</div>
</template>
<script>
import getMaterialsDialog from './getMaterialsDialog.vue'
export default {
name: 'countFlop',
components: {
getMaterialsDialog
},
data() {
return {
value: [],
@ -47,6 +53,17 @@ export default {
mounted() {
this.value = this.val.toString().split("");
},
methods: {
handleClick(val) {
console.log('🚀 ~ handleClick ~ val:', val);
const params = {
open: true,
toolPutOut: true,
maType: val
}
this.$refs.materialsDialog.setOpen(params);
}
}
};
</script>
<style scoped lang="scss">

View File

@ -0,0 +1,230 @@
<template>
<div>
<el-dialog
title=""
:visible.sync="open"
width="85%"
append-to-body
:close-on-click-modal="false"
>
<div class="content">
<el-form :model="formData" ref="form" label-width="80px" :inline="false" size="small" inline>
<el-form-item label="领料单号" size="small" prop="materialReqNo">
<el-input v-model="formData.materialReqNo" placeholder="请输入领料单号" size="small" clearable filterable></el-input>
</el-form-item>
<el-form-item label="单位名称" size="small" prop="materialReqUnitValue">
<el-select v-model="formData.materialReqUnitValue" placeholder="请选择单位" size="small" clearable filterable @change="handleUnit">
<el-option
v-for="item in formData.materialReqUnitList"
:key="item.unitId"
:label="item.unitName"
:value="item.unitId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="工程名称" size="small" prop="materialReqProjectValue">
<el-select v-model="formData.materialReqProjectValue" placeholder="请选择工程名称" size="small" clearable filterable @change="handleProject">
<el-option
v-for="item in formData.materialReqProjectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="设备类型" size="small" prop="materialReqTypeValue">
<el-select v-model="formData.materialReqTypeValue" placeholder="请选择设备类型" size="small" clearable filterable @change="handleType">
<el-option v-for="item in formData.materialReqTypeList"
:key="item.typeId"
:label="item.typeName"
:value="item.typeId">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="small" @click="handleSearch">查询</el-button>
<el-button icon="el-icon-refresh" size="small" @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData" style="width: 100%">
<el-table-column
v-for="item in tableColumn"
:prop="item.prop"
:label="item.label"
:width="item.width"
:key="item.prop"
:align="item.align"
:type="item.type"
>
</el-table-column>
</el-table>
<Pagination
v-show="total > 0"
:total="total"
:page="queryParams.pageNum"
:limit="queryParams.pageSize"
@pagination="getList"
/>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="open = false"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import Pagination from '../Pagination/index.vue'
import { getTypeList, getDetails, getUnitList, getProjectList } from '../../api/dialog'
export default {
name: 'getMaterialsDialog',
components: {
Pagination
},
data() {
return {
open: false,
material: false, //
formData: {
materialReqNo: '',
materialReqUnitValue: '',
materialReqProjectValue: '',
materialReqTypeValue: '',
materialReqUnitList: [],
materialReqProjectList: [],
materialReqTypeList: [],
},
tableData: [],
tableColumn: [
{
label: '序号',
type: 'index',
width: 60,
align: 'center'
},
{
label: '出库时间',
prop: 'materialTime',
align: 'center'
},
{
label: '设备类型',
prop: 'typeName',
align: 'center'
},
{
label: '规格型号',
prop: 'typeModelName',
align: 'center'
},
{
label: '出库数量',
prop: 'num',
align: 'center'
},
{
label: '设备负责人',
prop: 'userName',
align: 'center'
},
{
label: '领料单号',
prop: 'materialCode',
align: 'center'
},
{
label: '领料申请单位',
prop: 'unitName',
align: 'center'
},
{
label: '领料申请工程',
prop: 'projectName',
align: 'center'
}
],
total: 0,
queryParams: {
pageNum: 1,
pageSize: 10
},
maType: 1
};
},
created() {
this.getUnit()
this.getProject()
this.getType()
},
methods: {
setOpen(params) {
this.open = params.open,
this.maType = params.maType,
this.tableData = []
setTimeout(() => {
this.$refs.form.resetFields()
this.getList()
}, 100)
},
getList() {
const params = {
pageNum: this.queryParams.pageNum,
pageSize: this.queryParams.pageSize,
maType: this.maType,
materialCode: this.formData.materialReqNo.trim(),
unitId: this.formData.materialReqUnitValue,
projectId: this.formData.materialReqProjectValue,
typeId: this.formData.materialReqTypeValue
}
getDetails(params).then(({data}) => {
this.tableData = data.rows
this.total = data.total
})
},
getUnit() {
getUnitList().then(res => {
this.formData.materialReqUnitList = res.data
})
},
handleUnit(val) {
this.formData.materialReqUnitValue = val
},
getProject() {
getProjectList().then(res => {
this.formData.materialReqProjectList = res.data
})
},
handleProject(val) {
this.formData.materialReqProjectValue = val
},
getType() {
getTypeList({ level: '3' }).then(res => {
this.formData.materialReqTypeList = res.data
})
},
handleType(val) {
this.formData.materialReqTypeValue = val
},
handleSearch() {
this.queryParams.pageNum = 1
this.getList()
},
handleReset() {
this.$refs.form.resetFields()
this.getList()
}
}
}
</script>
<style lang="scss" scoped>
.content{
padding: 20px;
}
</style>

View File

@ -4,9 +4,11 @@
<div class="access-rate-box-title-bg">
<h5 class="access-rate-box-title">领料数据</h5>
</div>
<div @click="handleClick(1)">
<CountFlopOne :val="num" sonTitle="施工工具今日出库"></CountFlopOne>
<div class="access-rate-box-top">
<CountFlopOne :val="num2" sonTitle="工器具今日出库"></CountFlopOne>
</div>
<div class="access-rate-box-top" @click="handleClick(2)">
<CountFlopOne :val="num2" sonTitle="工器具今日出库" ref="countFlopOne"></CountFlopOne>
</div>
</div>
</div>
@ -52,6 +54,9 @@ export default {
} else {
return str.replace(/(\d{3})(?=\d)/g, '$1,'); //
}
},
handleClick(maType) {
this.$refs.countFlopOne.handleClick(maType)
}
}
}

View File

@ -0,0 +1,58 @@
Math.easeInOutQuad = function(t, b, c, d) {
t /= d / 2
if (t < 1) {
return c / 2 * t * t + b
}
t--
return -c / 2 * (t * (t - 2) - 1) + b
}
// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts
var requestAnimFrame = (function() {
return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
})()
/**
* Because it's so fucking difficult to detect the scrolling element, just move them all
* @param {number} amount
*/
function move(amount) {
document.documentElement.scrollTop = amount
document.body.parentNode.scrollTop = amount
document.body.scrollTop = amount
}
function position() {
return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
}
/**
* @param {number} to
* @param {number} duration
* @param {Function} callback
*/
export function scrollTo(to, duration, callback) {
const start = position()
const change = to - start
const increment = 20
let currentTime = 0
duration = (typeof (duration) === 'undefined') ? 500 : duration
var animateScroll = function() {
// increment the time
currentTime += increment
// find the value with the quadratic in-out easing function
var val = Math.easeInOutQuad(currentTime, start, change, duration)
// move the document.body
move(val)
// do the animation unless its over
if (currentTime < duration) {
requestAnimFrame(animateScroll)
} else {
if (callback && typeof (callback) === 'function') {
// the animation is done so lets callback
callback()
}
}
}
animateScroll()
}