You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

544 lines
15 KiB

<template>
<basic-container>
<!-- 首页表格 -->
<div class="avue-crud">
<!-- 搜索模块 -->
<div v-h5uShow="search">
<!-- 查询模块 -->
<el-form :inline="true" :model="TopQuery" class="header_search">
<el-form-item label="最新入库时间">
<el-date-picker
v-model="TopQuery.warehouseEntryTime"
type="datetimerange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:shortcuts="shortcuts"
:default-time="defaultTime2"
/>
</el-form-item>
<el-form-item label="签收扫描日期">
<el-date-picker
v-model="TopQuery.scanSingnTime"
type="datetimerange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:shortcuts="shortcuts"
:default-time="defaultTime2"
/>
</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>
</div>
<!-- 控件模块 -->
<el-row>
<div class="avue-crud__header">
<!-- 头部左侧按钮模块 -->
<div class="avue-crud__left">
<el-button type="primary" @click="exportExcel"
><el-icon><Download /></el-icon>导出</el-button
>
</div>
<!-- 头部右侧按钮模块 -->
<div class="avue-crud__right">
<el-button icon="el-icon-refresh" @click="searchChangeS" circle></el-button>
<el-button icon="Operation" @click="showdrawer(true)" circle></el-button>
<el-button icon="Search" @click="searchHide" circle></el-button>
</div>
</div>
</el-row>
<!-- 首页表格 -->
<el-row>
<!-- 列表模块 -->
<tablecmt
class="tableNode"
:columnList="columnList"
:tableData="data"
:loading="loadingObj.list"
:initFn="getrain"
@inputTxt="inputsc"
@timeCheck="timesc"
@btnCheck="btnsc"
@selectCheck="selectsc"
@selection="selectionChange"
>
<template #default="slotProps">
<template v-if="slotProps.scope.column.label === '订单自编号'">
<el-text class="el_textBtn" @click="OrdernumberClick(slotProps.scope.row)">
{{
slotProps.scope.column.label === '订单自编号' ? slotProps.scope.row.orderCode : ''
}}
</el-text>
</template>
<!-- <template v-if="slotProps.scope.column.label === '预约信息'">
<el-text
class="el_textBtn"
v-for="(item, index) in slotProps.scope.row.reservationInfo.split(',')"
:key="index"
@click="informationClick(item.trim(), slotProps.scope.row)"
>
{{ `${item}` }}
</el-text>
</template> -->
<template v-if="slotProps.scope.column.label === '操作'">
<div class="ElBtnClass">
<el-button @click="view(slotProps.scope)">详情</el-button>
</div>
</template>
</template>
</tablecmt>
</el-row>
<!-- 分页模块 -->
<el-row class="el-fy">
<div class="avue-crud__pagination flex-c-sb" style="width: 100%">
<div></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
@closce="showdrawer"
:drawerShow="drawerShow"
:columnList="details.columnList"
v-model="details.columnList"
></edittablehead>
</template>
<script setup>
import { ref, reactive, toRefs, computed, onMounted, nextTick, watch } from 'vue';
import { columnList } from '@/option/warehouse/distributionStockArticle.js';
import { getDictionaryBiz } from '@/api/system/dict'; //字典
import { handleClearTableQuery, processRowProperty, setNodeHeight } from '@/utils/util';
import {
$_signforList,
$_signforDistributionStockArticleList,
} from '@/api/distribution/distributionStockArticle.js';
import { ElMessageBox, ElMessage } from 'element-plus';
import { downloadXls } from '@/utils/util';
const $router = useRouter(); //跳转
import { useStore } from 'vuex';
import dayjs from 'dayjs';
const TopQuery = ref({});
const queryCarn = ref({});
const details = reactive({
/** 是否开启搜索 */
search: false,
/** 表格搜索条件 */
query: {},
/** 时间快捷选择设置 */
defaultTime2: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)], // '12:00:00', '08:00:00'
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];
},
},
],
/** 列表 */
columnList,
/** 列表数据 */
data: [],
/** 页面loading */
loadingObj: {
/** 列表加载loading */
list: false,
packageListLoading: false,
},
/** 列表复选框选中的数据 */
selectionList: [],
/** 是否显示设置表格 */
drawerShow: false,
/** 分页参数 */
page: {
currentPage: 1,
pageSize: 50,
total: 0,
},
/** 弹出层显示 */
popUpShow: {
/** 包件明细 */
packageOrderListlVisited: false,
/** 二维码 */
QRCodeVisible: false,
/** 修改客户信息 */
editClientInfoVisible: false,
},
/** 列表Dom节点 */
listNode: '',
form: {},
/** 全屏 */
fullscreenObj: {
/** 包明细 */
packageOrderListlVisited: false,
},
});
const {
search,
query,
shortcuts,
data,
loadingObj,
selectionList,
defaultTime2,
drawerShow,
page,
trickleLoadingPage,
zeroAdditionalRecordingInfo,
popUpShow,
recorddata,
} = toRefs(details);
/** 展开列表控件 */
const showdrawer = _flag => {
details.drawerShow = _flag;
};
/** 表格表头输入框搜索 */
const inputsc = (index, row) => {
details.query[row.prop] = index;
processRowProperty(index, row, details);
};
// 实例函数
const informationClick = (item, row) => {
const cleanedItem = item.replace(/\([^)]*\)/g, '');
console.log(cleanedItem, 'cleanedItem');
console.log(row, 'row');
// 尝试使用 HTML 字符串
const message = `将跳转预约信息为 <b><span style="color: red;">${cleanedItem}</span></b>是否确认!`;
ElMessageBox.confirm(message, '提示', {
dangerouslyUseHTMLString: true,
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
let data = row.info.find(res => res.reservationCode == cleanedItem);
$router.push({
path: '/distribution/signfor/distributionSignforedt',
query: {
id: data.id,
reservationId: data.reservationId,
name: `${data.reservationCode}待签收查看`,
isZero: 0,
},
});
})
.catch(() => {});
};
/** 表格表头时间选择 */
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];
}
};
/** 表格表头输入框搜索 */
const btnsc = val => {
console.log(val);
};
/** 表格表头下拉框选择 */
const selectsc = (index, row) => {
processRowProperty(index, row, details);
};
/** 表格表头复选框选择 */
const selectionChange = list => {
console.log(list);
details.selectionList = list;
};
// 网页顶部搜索按钮
const searchChange = () => {
// 日期处理
if (TopQuery.value.warehouseEntryTime) {
queryCarn.value.warehouseEntryTimeStart = dayjs(TopQuery.value.warehouseEntryTime[0]).format(
'YYYY-MM-DD HH:mm:ss'
); //开始日期
queryCarn.value.warehouseEntryTimeEnd = dayjs(TopQuery.value.warehouseEntryTime[1]).format(
'YYYY-MM-DD HH:mm:ss'
); //结束日期
} else {
delete queryCarn.value.warehouseEntryTimeStart;
delete queryCarn.value.warehouseEntryTimeEnd;
}
if (TopQuery.value.signinTime) {
queryCarn.value.signingTimeStart = dayjs(TopQuery.value.signinTime[0]).format(
'YYYY-MM-DD HH:mm:ss'
); //开始日期
queryCarn.value.signingTimeEnd = dayjs(TopQuery.value.signinTime[1]).format(
'YYYY-MM-DD HH:mm:ss'
); //结束日期
} else {
delete queryCarn.value.signingTimeStart;
delete queryCarn.value.signingTimeEnd;
}
// 签收扫描时间
if (TopQuery.value.scanSingnTime) {
queryCarn.value.scanSigningTimeStart = dayjs(TopQuery.value.scanSingnTime[0]).format(
'YYYY-MM-DD HH:mm:ss'
); //开始日期
queryCarn.value.scanSigningTimeEnd = dayjs(TopQuery.value.scanSingnTime[1]).format(
'YYYY-MM-DD HH:mm:ss'
); //结束日期
} else {
delete queryCarn.value.scanSigningTimeStart;
delete queryCarn.value.scanSigningTimeEnd;
}
getrain();
};
// 每页多少条
const sizeChange = val => {
page.value.pageSize = val;
getrain();
};
/** 页码改变执行的回调 */
const currentChange = val => {
page.value.currentPage = val;
getrain();
};
// 刷新按钮
const searchChangeS = () => {
details.search = false; //关闭搜索
getrain();
};
// 顶部搜索
const searchHide = () => {
console.log(details);
details.search = !details.search;
const _node = document.querySelector('.tableNode');
setNodeHeight(_node, '', true);
};
// 导出
const exportExcel = () => {
if (!Object.values(queryCarn.value).length && !Object.values(details.query).length) {
ElMessage({
message: '请输入查询条件',
type: 'warning',
});
return;
}
ElMessageBox.confirm('是否导出数据?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
details.loadingObj.list = true;
let data = {
current: details.page.currentPage,
size: details.page.pageSize,
...details.query,
...queryCarn.value,
};
$_signforDistributionStockArticleList(data).then(res => {
details.loadingObj.list = false;
downloadXls(res.data, `已签订单.xlsx`);
ElMessage({
message: '导出成功',
type: 'success',
});
});
})
.catch(() => {});
};
// 清空
const searchReset = () => {
TopQuery.value = {};
details.query = {};
handleClearTableQuery(details.columnList);
details.page.total = 0;
details.data = [];
};
// 字典公共函数
function updateDictionary(targetArray, dictionaryType) {
getDictionaryBiz(dictionaryType).then(res => {
console.log(res, '字典');
res.data.data.forEach(item => {
targetArray.push({
value: item.dictKey,
label: item.dictValue,
});
});
});
}
// 页面初始化方法
// const onLoad = () => {
// warehouseList.value = [];
// columnList.find(res => res.label == '配送类型').checkarr = [];
// columnList.find(res => res.label == '配送类型').checkarr = DeliveryTypeList.value;
// columnList.find(res => res.label == '配送种类').checkarr = [];
// columnList.find(res => res.label == '配送种类').checkarr = DeliverygenericList.value;
// columnList.find(res => res.label == '仓库').checkarr = [];
// columnList.find(res => res.label == '仓库').checkarr = warehouseList.value;
// console.log(columnList, 'columnList');
// // 获取仓库
// $_getMyWarehouseList().then(res => {
// console.log(res, '仓库列表');
// if (res.data.data.length)
// res.data.data.forEach(item => {
// warehouseList.value.push({
// value: item.name,
// label: item.name,
// });
// });
// });
// };
// onLoad();
// 获取数据
const getrain = () => {
if (details.loadingObj.list) return;
if (Object.keys(details.query).length === 0 && Object.keys(queryCarn.value).length === 0) {
details.page.total = 0;
details.data = [];
return;
}
let data = {
current: details.page.currentPage,
size: details.page.pageSize,
...details.query,
...queryCarn.value,
};
details.loadingObj.list = true;
$_signforList(data)
.then(res => {
const { code, data } = res.data;
if (code !== 200) return;
console.log(res, '当前参数');
details.page.total = data ? data.total || 0 : 0;
details.data = data ? data.records || [] : 0;
})
.catch(() => {})
.finally(() => {
details.loadingObj.list = false;
});
};
// getrain();
const removeParentheses = str => {
const index = str.indexOf('('); // 找到左括号的位置
if (index !== -1) {
return str.substring(0, index); // 删除左括号及其后面的内容
}
return str;
};
// 预约信息
const OrdernumberClick = val => {
$router.push({
path: '/distribution/inventory/distributionStockArticleDetails',
query: {
id: val.id,
name: `${val.orderCode}预约单详情`,
isZero: 0,
},
});
};
// 查看详情
const view = value => {
console.log(value, 'value');
$router.push({
path: '/warehouse/warehousesignedorder/SignedDetails',
query: {
id: value.row.id,
typeServiceName: value.row.typeServiceName,
},
});
};
</script>
<style scoped lang="scss">
.ElBtnClass button {
border: none;
padding: 0;
background-color: transparent;
}
:deep(.el-card) {
height: 100%;
}
:deep(.el-card__body) {
height: 100%;
display: flex;
flex-direction: column;
}
.el-fy {
flex: 1;
display: flex;
align-items: flex-end;
margin-bottom: 10px;
}
.avue-crud {
height: 100%;
display: flex;
flex-direction: column;
}
:deep(.el-date-editor.el-input__wrapper) {
height: 100% !important;
}
</style>