35 changed files with 2035 additions and 390 deletions
After Width: | Height: | Size: 109 KiB |
@ -0,0 +1,598 @@
|
||||
<template> |
||||
<basic-container> |
||||
<div class="avue-crud"> |
||||
<!-- 搜索模块 --> |
||||
<el-row v-if="!search"> |
||||
<!-- 查询模块 --> |
||||
<el-form :inline="true" :model="query" class="el-fr-d"> |
||||
<el-form-item label="扫码时间:" class="el-times"> |
||||
<el-date-picker |
||||
v-model="stockupDate" |
||||
type="daterange" |
||||
unlink-panels |
||||
range-separator="至" |
||||
start-placeholder="开始时间" |
||||
end-placeholder="结束时间" |
||||
:shortcuts="shortcuts" |
||||
clearable |
||||
/> |
||||
</el-form-item> |
||||
|
||||
<el-form-item label="卸车时间:" class="el-times"> |
||||
<el-date-picker |
||||
v-model="stockupDate" |
||||
type="daterange" |
||||
unlink-panels |
||||
range-separator="至" |
||||
start-placeholder="开始时间" |
||||
end-placeholder="结束时间" |
||||
:shortcuts="shortcuts" |
||||
clearable |
||||
/> |
||||
</el-form-item> |
||||
|
||||
<!-- 查询按钮 --> |
||||
<el-form-item class="el-btn"> |
||||
<el-button type="primary" icon="el-icon-search" @click="searchChange">搜 索</el-button> |
||||
<el-button icon="el-icon-delete" @click="searchReset()">清 空</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</el-row> |
||||
|
||||
<!-- 控件模块 --> |
||||
<el-row> |
||||
<div class="avue-crud__header"> |
||||
<!-- 头部左侧按钮模块 --> |
||||
<div class="avue-crud__left"> |
||||
<el-button type="primary" icon="Edit" @click="handleShowTransfer('add')" |
||||
>计划仓更改 |
||||
</el-button> |
||||
<el-button type="primary" icon="List" @click="searchReset()">批量卸车</el-button> |
||||
<el-button type="primary" icon="Delete" @click="searchReset()">删除</el-button> |
||||
<el-button type="primary" icon="Printer" @click="searchReset()">二维码</el-button> |
||||
</div> |
||||
<!-- 头部右侧按钮模块 --> |
||||
<div class="avue-crud__right"> |
||||
<el-button icon="el-icon-refresh" @click="searchChange" circle></el-button> |
||||
<el-button icon="Operation" @click="showdrawer(true)" circle></el-button> |
||||
<el-button icon="el-icon-search" @click="searchHide" circle></el-button> |
||||
</div> |
||||
</div> |
||||
</el-row> |
||||
|
||||
<!-- 表格 --> |
||||
<el-row> |
||||
<!-- 列表模块 --> |
||||
<tablecmt |
||||
:columnList="details.detailsColumnList" |
||||
:tableData="data" |
||||
:loading="loadingObj.list" |
||||
@inputTxt="inputsc" |
||||
@timeCheck="timesc" |
||||
@btnCheck="btnsc" |
||||
@selectCheck="selectsc" |
||||
@selection="selectionChange" |
||||
> |
||||
<template #default="slotProps"> </template> |
||||
</tablecmt> |
||||
</el-row> |
||||
|
||||
<!-- 分页模块 --> |
||||
<el-row class="el-fy"> |
||||
<div class="avue-crud__pagination flex-c-sb" style="width: 100%"> |
||||
<div style="font-size: 14px">勾选数量: {{ selectionList.length }}</div> |
||||
<!-- 分页模块 --> |
||||
<el-pagination |
||||
align="right" |
||||
background |
||||
@size-change="sizeChange" |
||||
@current-change="currentChange" |
||||
:current-page="page.currentPage" |
||||
:page-sizes="[30, 50, 80, 120]" |
||||
:page-size="page.pageSize" |
||||
layout="total, sizes, prev, pager, next, jumper" |
||||
:total="page.total" |
||||
> |
||||
</el-pagination> |
||||
</div> |
||||
</el-row> |
||||
</div> |
||||
</basic-container> |
||||
|
||||
<!-- 列表配置显示 --> |
||||
<edittablehead |
||||
@setcolum="setnewcolum" |
||||
@closce="showdrawer" |
||||
:drawerShow="drawerShow" |
||||
:columnList="details.editColumnList" |
||||
></edittablehead> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
import { ref, reactive, toRefs, computed, onMounted, nextTick } from 'vue'; |
||||
import functions from '@/utils/functions'; |
||||
import dayjs from 'dayjs'; |
||||
import { mapGetters } from 'vuex'; |
||||
/** 获取字典 */ |
||||
import { getDictionaryBiz } from '@/api/system/dict'; |
||||
import { downloadXls } from '@/utils/util'; |
||||
import { detailsColumnList } from '@/option/distribution/TripartiteTransfer'; |
||||
import { useRouter } from 'vue-router'; |
||||
|
||||
// 获取路由实例 |
||||
const $router = useRouter(); |
||||
|
||||
const details = reactive<any>({ |
||||
/** 是否开启搜索 */ |
||||
search: true, |
||||
/** 表格搜索条件 */ |
||||
query: {}, |
||||
/** 时间快捷选择设置 */ |
||||
shortcuts: [ |
||||
{ |
||||
text: '最近一周', |
||||
value: () => { |
||||
const end = new Date(); |
||||
const start = new Date(); |
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); |
||||
return [start, end]; |
||||
}, |
||||
}, |
||||
{ |
||||
text: '最近一个月', |
||||
value: () => { |
||||
const end = new Date(); |
||||
const start = new Date(); |
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); |
||||
return [start, end]; |
||||
}, |
||||
}, |
||||
{ |
||||
text: '最近三个月', |
||||
value: () => { |
||||
const end = new Date(); |
||||
const start = new Date(); |
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); |
||||
return [start, end]; |
||||
}, |
||||
}, |
||||
], |
||||
/** 时间选择器数据 */ |
||||
stockupDate: [], |
||||
/** 装车明细表头信息 */ |
||||
detailsColumnList, |
||||
/** 列表数据 */ |
||||
data: [{}], |
||||
/** 页面loading */ |
||||
loadingObj: { |
||||
/** 列表加载loading */ |
||||
list: false, |
||||
}, |
||||
/** 列表复选框选中的数据 */ |
||||
selectionList: [], |
||||
/** 是否显示设置表格 */ |
||||
drawerShow: false, |
||||
/** 分页参数 */ |
||||
page: { |
||||
currentPage: 1, |
||||
pageSize: 30, |
||||
total: 0, |
||||
}, |
||||
/** 弹出层显示 */ |
||||
popUpShow: { |
||||
/** 装车详情 */ |
||||
truckLoadingDetailVisited: false, |
||||
/** 零担补录 */ |
||||
transferVisited: false, |
||||
}, |
||||
/** 列表Dom节点 */ |
||||
listNode: '', |
||||
form: {}, |
||||
}); |
||||
|
||||
const { |
||||
search, |
||||
query, |
||||
shortcuts, |
||||
stockupDate, |
||||
data, |
||||
loadingObj, |
||||
selectionList, |
||||
drawerShow, |
||||
page, |
||||
trickleLoadingPage, |
||||
} = toRefs(details); |
||||
|
||||
/** vuex */ |
||||
const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList'])); |
||||
console.log('permission :>> ', permission); |
||||
|
||||
onMounted(() => { |
||||
const timer = setTimeout(() => { |
||||
details.listNode = document.querySelector('.maboxhi'); |
||||
details.listNode.style.transition = 'all .5s ease-out'; |
||||
console.log('details.listNode :>> ', details.listNode); |
||||
clearTimeout(timer); |
||||
}, 100); |
||||
|
||||
/** |
||||
* 初始化获取本地缓存的编辑隐藏的列表 |
||||
* 固定搭配,不能更改 |
||||
*/ |
||||
let checkListnewarr = functions.getStorage(window.location.pathname + 'checkList'); |
||||
let flexListnewarr = functions.getStorage(window.location.pathname + 'flexList'); |
||||
let sortlistnewarr = functions.getStorage(window.location.pathname + 'sortlist'); |
||||
if (checkListnewarr) { |
||||
details.columnList.map(item => { |
||||
item.head = false; |
||||
}); |
||||
checkListnewarr.map(ite => { |
||||
details.columnList.map(item => { |
||||
if (ite == item.label) { |
||||
item.head = true; |
||||
} |
||||
}); |
||||
}); |
||||
} else { |
||||
let arr = []; |
||||
details.columnList.map(item => { |
||||
if (item.head) { |
||||
arr.push(item.label); |
||||
} |
||||
}); |
||||
functions.setStorage(window.location.pathname + 'checkList', arr); |
||||
} |
||||
if (flexListnewarr) { |
||||
details.columnList.map(item => { |
||||
item.fixed = false; |
||||
}); |
||||
flexListnewarr.map(ite => { |
||||
details.columnList.map(item => { |
||||
if (ite == item.label) { |
||||
if (item.type == 6) { |
||||
item.fixed = 'right'; |
||||
} else { |
||||
item.fixed = true; |
||||
} |
||||
} |
||||
}); |
||||
}); |
||||
} else { |
||||
let arr = []; |
||||
details.columnList.map(item => { |
||||
if (item.fixed) { |
||||
arr.push(item.label); |
||||
} |
||||
}); |
||||
functions.setStorage(window.location.pathname + 'flexList', arr); |
||||
} |
||||
if (sortlistnewarr) { |
||||
details.columnList.map(item => { |
||||
item.sortable = false; |
||||
}); |
||||
sortlistnewarr.map(ite => { |
||||
details.columnList.map(item => { |
||||
if (ite == item.label) { |
||||
item.sortable = true; |
||||
} |
||||
}); |
||||
}); |
||||
} else { |
||||
let arr = []; |
||||
details.columnList.map(item => { |
||||
if (item.sortable) { |
||||
arr.push(item.label); |
||||
} |
||||
}); |
||||
functions.setStorage(window.location.pathname + 'sortlist', arr); |
||||
} |
||||
}); |
||||
|
||||
/** 请求页面数据 */ |
||||
const onLoad = (page: any) => {}; |
||||
|
||||
/** 搜索 */ |
||||
const searchChange = () => { |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 清空表单 */ |
||||
const searchReset = () => { |
||||
details.query = {}; |
||||
details.stockupDate = []; |
||||
details.page.currentPage = 1; |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 展开列表控件 */ |
||||
const showdrawer = (_flag?: boolean, _type?: string) => { |
||||
switch (_type) { |
||||
case 'truckLoadingDetail': |
||||
details.editColumnList = details.detailsColumnList; |
||||
break; |
||||
|
||||
default: |
||||
console.log('123 :>> ', 123); |
||||
details.editColumnList = details.columnList; |
||||
break; |
||||
// details. |
||||
} |
||||
details.drawerShow = _flag; |
||||
}; |
||||
|
||||
/** 是否开启搜索区 */ |
||||
const searchHide = () => { |
||||
function getWinHight() { |
||||
var windowHight = 0; |
||||
if (document.body.clientHeight && document.documentElement.clientHeight) { |
||||
windowHight = |
||||
document.body.clientHeight < document.documentElement.clientHeight |
||||
? document.body.clientHeight |
||||
: document.documentElement.clientHeight; |
||||
} else { |
||||
} |
||||
return document.documentElement.clientHeight; |
||||
} |
||||
details.search = !details.search; |
||||
const timer = setTimeout(() => { |
||||
details.listNode.style.height = |
||||
getWinHight() - details.listNode.getBoundingClientRect().top - 70 + 'px'; |
||||
clearTimeout(timer); |
||||
}, 10); |
||||
}; |
||||
|
||||
/** 表格表头输入框搜索 */ |
||||
const inputsc = (index, row) => { |
||||
details.query[row.prop] = index; |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 表格表头时间选择 */ |
||||
const timesc = (index, row) => { |
||||
console.log(index, row); |
||||
if (!!index) { |
||||
index = dayjs(index).format('YYYY-MM-DD'); |
||||
} |
||||
details.query[row.prop] = index; |
||||
if (!index) { |
||||
delete details.query[row.prop]; |
||||
} |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 表格表头输入框搜索 */ |
||||
const btnsc = () => {}; |
||||
|
||||
/** 表格表头下拉框选择 */ |
||||
const selectsc = (index, row) => { |
||||
details.query[row.prop] = index; |
||||
if (!index) delete details.query[row.prop]; |
||||
if (row.prop === 'certificateTypeName') { |
||||
details.query['certificateType'] = index; |
||||
if (!index) delete details.query['certificateType']; |
||||
} |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 表格表头复选框选择 */ |
||||
const selectionChange = (list: any) => { |
||||
details.selectionList = list; |
||||
}; |
||||
|
||||
/** 表格表头输入框搜索 */ |
||||
const newInputsc = (index, row) => { |
||||
details.newQuery[row.prop] = index; |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 表格表头时间选择 */ |
||||
const newTimesc = (index, row) => { |
||||
console.log(index, row); |
||||
if (!!index) { |
||||
index = dayjs(index).format('YYYY-MM-DD'); |
||||
} |
||||
details.newQuery[row.prop] = index; |
||||
if (!index) { |
||||
delete details.newQuery[row.prop]; |
||||
} |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 表格表头输入框搜索 */ |
||||
const newBtnsc = () => {}; |
||||
|
||||
/** 表格表头下拉框选择 */ |
||||
const newSelectsc = (index, row) => { |
||||
details.newQuery[row.prop] = index; |
||||
if (!index) delete details.newQuery[row.prop]; |
||||
if (row.prop === 'certificateTypeName') { |
||||
details.newQuery['certificateType'] = index; |
||||
if (!index) delete details.newQuery['certificateType']; |
||||
} |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 表格表头复选框选择 */ |
||||
const newSelectionChange = (list: any) => { |
||||
details.newSelectionList = list; |
||||
}; |
||||
|
||||
/** 每页数量改变执行的回调 */ |
||||
const sizeChange = (pageSize: number) => { |
||||
details.page.pageSize = pageSize; |
||||
onLoad(details.page); |
||||
}; |
||||
|
||||
/** 页码改变执行的回调 */ |
||||
const currentChange = () => {}; |
||||
|
||||
/** |
||||
* 设置列表 -- 固定函数 |
||||
* 弹窗的勾选回调,用于更改头部数组 |
||||
* 固定搭配,只需要更换 columnList |
||||
* */ |
||||
const setnewcolum = (newarr, headarr, type) => { |
||||
if (type == 1) { |
||||
details.editColumnList = newarr; |
||||
functions.setStorage(window.location.pathname + 'checkList', headarr); |
||||
} else if (type == 2) { |
||||
details.editColumnList = newarr; |
||||
functions.setStorage(window.location.pathname + 'flexList', headarr); |
||||
} else if (type == 3) { |
||||
details.editColumnList = newarr; |
||||
functions.setStorage(window.location.pathname + 'sortlist', headarr); |
||||
} |
||||
}; |
||||
|
||||
/** 弹出层开启前清除数据 */ |
||||
const beforeClose = done => { |
||||
done(); |
||||
details.form = {}; |
||||
details.view = false; |
||||
}; |
||||
|
||||
/** 显示装车详情 */ |
||||
const handleShowTruckLoadingDetails = ({ row }) => { |
||||
details.popUpShow.truckLoadingDetailVisited = true; |
||||
|
||||
nextTick(() => { |
||||
// 获取弹窗内表格元素节点, 并设置高度 |
||||
const _node = document.querySelector('.truckLoadingDetailPopUp .maboxhi'); |
||||
_node.style.height = '550px'; |
||||
console.log('_node :>> ', _node); |
||||
}); |
||||
}; |
||||
|
||||
/** 跳转零担补录 */ |
||||
const handleShowzeroAdditionalRecording = ({ row }) => { |
||||
// 跳转到零担补录页面 |
||||
$router.push('/distribution/artery/zeroAdditionalRecording'); |
||||
}; |
||||
|
||||
/** 新增中转 */ |
||||
const addTransfer = async () => { |
||||
return null; |
||||
}; |
||||
|
||||
/** 修改中转 */ |
||||
const editTransfer = async () => { |
||||
return null; |
||||
}; |
||||
|
||||
/** 显示新增或修改中转弹窗 */ |
||||
const handleShowTransfer = async (_type: string) => { |
||||
switch (_type) { |
||||
// 新增 |
||||
case 'add': |
||||
await addTransfer(); |
||||
break; |
||||
|
||||
// 修改 |
||||
case 'edit': |
||||
await editTransfer(); |
||||
break; |
||||
|
||||
default: |
||||
break; |
||||
} |
||||
details.popUpShow.transferVisited = true; |
||||
|
||||
nextTick(() => { |
||||
// 获取弹窗内表格元素节点, 并设置高度 |
||||
const _nodeList = document.querySelectorAll('.transferPopUp .maboxhi'); |
||||
_nodeList.forEach(val => (val.style.height = '300px')); |
||||
}); |
||||
}; |
||||
|
||||
/** 添加运单 */ |
||||
const handleAddWaybill = () => { |
||||
// if (this.addInfo.oldSelectionList.length === 0) return this.$message.warning('最少选择一条运单'); |
||||
// this.addInfo.newData = [...this.addInfo.newData, ...this.addInfo.oldSelectionList]; |
||||
// this.addInfo.haveIds = this.addInfo.map(val => val.id); |
||||
}; |
||||
/** 移除运单 */ |
||||
const handleRemoveWaybill = () => { |
||||
// if (this.addInfo.newSelectionList.length === 0) return this.$message.warning('最少选择一条运单'); |
||||
// this.addInfo.newData = [...this.addInfo.newData, ...this.addInfo.oldSelectionList]; |
||||
// this.addInfo.haveIds = this.addInfo.map(val => val.id); |
||||
}; |
||||
</script> |
||||
|
||||
<style scoped lang="scss"> |
||||
.fo-fl { |
||||
display: flex; |
||||
flex-wrap: wrap; |
||||
zoom: 0.9; |
||||
} |
||||
|
||||
// 日期选择器 |
||||
:deep(.el-date-editor.el-input) { |
||||
height: 100% !important; |
||||
width: 100% !important; |
||||
} |
||||
|
||||
:deep(.el-range-editor.el-input__wrapper) { |
||||
height: 100% !important; |
||||
} |
||||
|
||||
// 新增行 |
||||
.add_row { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
} |
||||
|
||||
.add_row_title { |
||||
text-align: center; |
||||
margin-bottom: 10px; |
||||
font-size: 18px; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
// 统计行 |
||||
.statistics_row { |
||||
margin: 10px 0; |
||||
font-size: 14px; |
||||
zoom: 0.9; |
||||
display: flex; |
||||
|
||||
> div { |
||||
margin-right: 20px; |
||||
} |
||||
} |
||||
|
||||
// 卡片容器 |
||||
.crad_container { |
||||
display: flex; |
||||
|
||||
.card_container_item { |
||||
flex: 1; |
||||
// padding: 10px; |
||||
border-radius: 5px; |
||||
box-shadow: 0 0 5px #ccc; |
||||
|
||||
&:first-child { |
||||
margin-right: 20px; |
||||
} |
||||
|
||||
.card_container_item_title { |
||||
padding: 10px; |
||||
border-bottom: 1px solid #ccc; |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
} |
||||
|
||||
.card_container_item_box { |
||||
padding: 10px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.pointer { |
||||
cursor: pointer; |
||||
} |
||||
|
||||
.transferPopUp :deep(.el-textarea) { |
||||
width: 500px; |
||||
} |
||||
</style> |
Loading…
Reference in new issue