diff --git a/src/components/newTablecmt/newTablecmt.vue b/src/components/newTablecmt/newTablecmt.vue new file mode 100644 index 00000000..f3a045cb --- /dev/null +++ b/src/components/newTablecmt/newTablecmt.vue @@ -0,0 +1,665 @@ +<template> + <div class="maboxhi" id="bodys"> + <el-table + :data="tableData" + style="width: 100%" + :show-summary="shownm" + :summary-method="getSummaries" + v-loading="loading" + @selection-change="handleSelectionChange" + border + height="100%" + :row-class-name="tableRowClassName" + ref="selecttable" + > + <el-table-column + :type="column.type == 0 ? 'selection' : ''" + :min-width="column.width" + v-for="(column, index) in newcolumnList" + :key="column.prop" + :prop="column.prop" + :label="column.label" + :fixed="column.fixed" + :sortable="column.sortable" + :selectable="isselectfun" + v-show="column.head" + > + <el-table-column + :type="column.type == 12 ? 'index' : ''" + :min-width="column.width" + :prop="column.prop" + :label="column.label" + v-if="column.type != 0" + flexible + show-overflow-tooltip + > + <template #header> + <!-- <el-text class="mx-1">{{ column.label }}</el-text> --> + <el-input + v-if="column.type == 2" + v-model="column.values" + clearable + :placeholder="`请输入${column.label}`" + @change="inputchange($event, column)" + @blur="inputchange($event, column)" + @clear="inputclear($event, column)" + /> + <el-select + v-if="column.type == 3" + v-model="column.values" + class="m-2 selectbr" + clearable + :placeholder="`请选择${column.label}`" + @change="selectchange($event, column)" + @clear="selectclear($event, column)" + > + <el-option + v-for="item in column.checkarr" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + <el-date-picker + v-model="column.values" + v-if="column.type == 4" + type="date" + clearable + style="width: auto" + :placeholder="`请选择${column.label}`" + @change="timechange($event, column)" + @clear="timeclear($event, column)" + /> + <el-date-picker + v-model="column.values" + v-if="column.type == 5" + type="datetime" + clearable + style="width: auto" + :placeholder="`请选择${column.label}`" + format="YYYY/MM/DD HH:mm:ss" + @change="timechange($event, column)" + @clear="timeclear($event, column)" + /> + </template> + + <template #default="scope"> + <el-text + class="mx-2 tabculconte" + v-if="Number(column.type) < 6 && Number(column.type) > 0" + >{{ scope.row[column.prop] }}</el-text + > + <el-switch + @change="makeCargo(scope.row, column)" + v-if="column.type == 11" + v-model="scope.row[column.prop]" + /> + <el-text + style="" + class="mx-2 tabculconte colors" + v-if="column.type == 9" + @click="godowns(scope.row[column.downprop])" + >{{ scope.row[column.prop] }}</el-text + > + <el-input + @blur="handleNumberRange(column, scope.row)" + v-if="column.type == 10" + v-model="scope.row[column.prop]" + type="number" + :min="0" + :max="scope.row.residueNumber" + ></el-input> + <div class="slotbuts" v-if="column.type == 6"> + <slot v-if="column.type == 6" :scope="scope"> </slot> + </div> + <el-image + preview-teleported + v-if="column.type == 7" + style="width: 60px; height: 60px; margin-left: 10px" + :initial-index="index" + :z-index="100" + v-for="(item, index) in scope.row[column.prop].split(',')" + :src="item" + :preview-src-list="scope.row[column.prop].split(',')" + /> + </template> + </el-table-column> + + <template #header> + <div style="display: inline-block"> + <div class="tilbox"> + <el-text class="mx-1 tabtitles" @click.stop @dblclick.stop="copyalls(column)">{{ + column.label + }}</el-text> + </div> + </div> + </template> + </el-table-column> + </el-table> + </div> +</template> + +<script lang="ts" setup> +import { computed, ref, watchEffect, getCurrentInstance, onMounted, defineExpose } from 'vue'; +import type { PropType } from 'vue'; +const { proxy } = getCurrentInstance() as any; +const selecttable = ref(null); +/** + * 对应通知事件 + * inputTxt:输入框输入的确认事件 + * timeCheck:时间选择器选择事件 + * selectCheck:下拉框选中事件 + * selection:勾选框事件 + */ +onMounted(() => { + 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 { + // windowHight=(document.body.clientHeight>document.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight; + } + // return windowHight; + return document.documentElement.clientHeight; + } + + var bodyContent = document.querySelectorAll('.maboxhi'); + const _height = getWinHight(); + console.log('bodyContent :>> ', bodyContent); + // 设置列表的高度 + bodyContent.forEach(val => { + val.style.height = _height - val.getBoundingClientRect().top - 65 + 'px'; + }); +}); +interface TableColumnType { + /** 表格列的key */ + prop: string; + /** 表格列的名字 */ + label: string; + /** + * 对应列表头的类型 + * 0:直接显示为单选,prop,label,全部传空 + * 1:普通表格,正常显示 + * 2:带输入框表格 + * 3:带下拉框表格 + * 4:带日期选择器列 + * 5:带日期时间选择器 + * 6:操作栏,prop,label,全部传空 + * 7:图片 + * 8:带背景的文字 + * 9:下载附件 + * 10.输入框的表格内容 + * 11.开关类型 + */ + type: number | string; + /** 用于接受表头的值 */ + values: number | string; + /** 表头宽度 number string undefined */ + width: number | string | undefined; + /** 下拉框可选项 */ + checkarr?: { + value: string | number; + label: string | number; + }[]; + /** 是否固定表头 + * true false + * left right + */ + fixed: boolean | string; + /** 是否统计 + * true false 或者直接不写该参数 + */ + isshowSummary?: boolean; + /** 是否排序 + * true false 或者直接不写该参数 + */ + sortable?: boolean; + /** 是否显示列 + * true false 或者直接不写该参数 + */ + head?: boolean; + /** 是否文字超出隐藏 + * 默认超出隐藏 + * true是不隐藏 + * false 隐藏 + */ + isextrahide?: boolean; + /** 下载文件的url的key + */ + downprop?: string; + /** 输入框内容需要小于的对应字段 + */ + lessThanNum?: string; +} +interface TableDataType { + [key: string]: any; +} +let props = defineProps({ + columnList: { + type: Array as PropType<TableColumnType[]>, + required: true, + }, + tableData: { + type: Array as PropType<TableDataType[]>, + required: true, + }, + loading: { + type: Boolean as PropType<boolean>, + required: true, + }, + //回显勾选的数据列表 + checkselect: { + type: Array as PropType<TableDataType[]>, + required: false, + }, + //是否可选择的函数 + isselectfun: { + type: Function as PropType<(row: TableDataType) => boolean>, + required: false, + default: null, + }, +}); +let selectarr = ref([]); +const tableRowClassName = ({ row, rowIndex }: { row: TableDataType; rowIndex: number }) => { + let sfcheck = false; + selectarr.value.map(item => { + if (item == row) { + sfcheck = true; + } + }); + if (sfcheck) { + return 'table-SelectedRow-bgcolor'; + } + return ''; +}; +let emit = defineEmits(['inputTxt', 'timeCheck', 'selectCheck', 'selection', 'makeCargo']); +let newcolumnList = ref<TableColumnType[]>([]); +watchEffect(() => { + newcolumnList.value = []; + props.columnList.map(item => { + if (!item.head) { + newcolumnList.value.push(item); + } + }); +}); +onMounted(() => { + if (props.checkselect) { + props.checkselect.map(item => { + if (props.isselectfun) { + if (props.isselectfun(item)) { + selecttable.value.toggleRowSelection(item, true); + } + } else { + selecttable.value.toggleRowSelection(item, true); + } + }); + } +}); +function godowns(url) { + let a = document.createElement('a'); //创建一个a标签用来跳转 + a.href = url; //myurl 是后端返回的下载地址 + // a.target = '_blank'; + a.download = 'xixi.zip'; //设置下载文件的文件名和文件格式 + document.body.appendChild(a); //将标签DOM,放置页面 + a.click(); + window.URL.revokeObjectURL(url); //释放 url 对象内存 + document.body.removeChild(a); +} +let shownm = ref(false); + +function copyalls(column: TableColumnType) { + const _isReturn = column.type == 1 || column.type == 2 || column.type == 3; + if (!_isReturn) return; + let text = ''; + props.tableData.map((item, index) => { + if (index < props.tableData.length - 1) { + if (item[column.prop]) { + text += `${item[column.prop]}\n`; + } + } else { + if (item[column.prop]) { + text += `${item[column.prop]}`; + } else { + } + } + }); + copyContent(text); +} +function handleNumberRange(column: TableColumnType, row: TableDataType) { + row[column.prop] = row[column.prop].replace(/[^\.\d]/g, ''); //替换掉与数字无关的字符(中英文与符号都会被替换掉,只留下数字,此时值类型为字符串) + if (row[column.prop]) { + //如果替换后还有值 + row[column.prop] = parseInt(row[column.prop]); //把字符型转成整数型 + } + + // if (column.lessThanNum) { + // if (row[column.prop] > row[column.lessThanNum]) { + // row[column.prop] = row[column.lessThanNum]; + // proxy.$message({ + // type: 'error', + // message: '数量不能大于可用数量', + // }); + // } + // } + // 上架数量判断 + if (row.residueNumber) { + if (row.enterNum > row.residueNumber) { + proxy.$message({ + type: 'error', + message: '数量不能大于可上架总数,已调整为最大数量!', + }); + row.enterNum = row.residueNumber; + } + } + // 下架数量判断 + if (row.num) { + if (row.enterNum > row.num) { + proxy.$message({ + type: 'error', + message: '数量不能大于可下架总数,已调整为最大数量!', + }); + row.enterNum = row.num; + } + } + + console.log(row, 'row'); +} +function handleEdit(index: number, row: TableDataType) { + console.log(index, row); +} +function makeCargo(value, column: TableColumnType) { + emit('makeCargo', value, column); +} +function inputchange(value, column: TableColumnType) { + if (typeof value == 'string') { + console.log(value, column); + emit('inputTxt', value, column); + } +} +function selectchange(value, column: TableColumnType) { + console.log(value, column); + emit('selectCheck', value, column); +} +function timechange(value, column: TableColumnType) { + console.log(value, column); + emit('timeCheck', value, column); +} +const handleSelectionChange = (param: TableDataType[]) => { + // console.log(param) + selectarr.value = param; + emit('selection', param); +}; +function inputclear(value, column: TableColumnType) { + console.log('', column); + emit('inputTxt', '', column); +} +function selectclear(value, column: TableColumnType) { + console.log('', column); + emit('selectCheck', '', column); +} +function timeclear(value, column: TableColumnType) { + console.log('', column); + emit('timeCheck', '', column); +} +function handleDelete(index: number, row: TableDataType) { + console.log(index, row); +} +const getSummaries = (param: any) => { + const { columns, data } = param; + let newarr = []; + let tji = 0; + console.log(columns, data); + columns.map((item, index) => { + if (index == 0) { + newarr[index] = '总计'; + return; + } + tji = 0; + if (props.columnList[index]?.isshowSummary) { + data.map(ite => { + tji += Number(ite[props.columnList[index]?.prop] || 0); + }); + newarr[index] = tji; + // shownm.value=true + } else { + newarr[index] = null; + } + }); + // console.log(columns) + console.log(newarr); + return newarr; +}; +watchEffect(() => { + props.columnList.map(item => { + if (item.isshowSummary) { + shownm.value = true; + } + }); +}); +// 复制文本内容 +function copyContent(content: string) { + // 复制结果 + let copyResult = true; + // 设置想要复制的文本内容 + const text = content || '让我们一起快乐的敲代码吧~'; + // 判断是否支持clipboard方式 + if (!!window.navigator.clipboard) { + // 利用clipboard将文本写入剪贴板(这是一个异步promise) + window.navigator.clipboard + .writeText(text) + .then(res => { + proxy.$message({ + type: 'success', + message: '复制成功', + }); + // 返回复制操作的最终结果 + return copyResult; + }) + .catch(err => { + copyResult = false; + console.log('复制失败', err); + proxy.$message({ + type: 'error', + message: '复制失败', + }); + // 返回复制操作的最终结果 + return copyResult; + }); + } else { + // 不支持clipboard方式 则采用document.execCommand()方式 + // 创建一个input元素 + let inputDom = document.createElement('textarea'); + // 设置为只读 防止移动端手机上弹出软键盘 + inputDom.setAttribute('readonly', 'readonly'); + // 给input元素赋值 + inputDom.value = text; + // 将创建的input添加到body + document.body.appendChild(inputDom); + // 选中input元素的内容 + inputDom.select(); + // 执行浏览器复制命令 + // 复制命令会将当前选中的内容复制到剪切板中(这里就是创建的input标签中的内容) + // Input要在正常的编辑状态下原生复制方法才会生效 + const result = document.execCommand('copy'); + // 判断是否复制成功 + if (result) { + proxy.$message({ + type: 'success', + message: '复制成功', + }); + } else { + console.log('复制失败'); + proxy.$message({ + type: 'error', + message: '复制失败', + }); + copyResult = false; + } + // 复制操作后再将构造的标签 移除 + document.body.removeChild(inputDom); + // 返回复制操作的最终结果 + return copyResult; + } +} + +defineExpose({}); +</script> +<style lang="scss" scope> +// :root{ +// --el-checkbox-checked-bg-color:'#D3832A'; +// --el-checkbox-checked-input-border-color:'#D3832A'; +// } + +.el-table { + //悬停 + --el-table-row-hover-bg-color: #d3832a; +} + +// .el-table .warning-row { +// --el-table-tr-bg-color: var(--el-color-warning-light-9); +// } +// .el-table .success-row { +// --el-table-tr-bg-color: var(--el-color-success-light-9); +// } +.maboxhi { + width: 100%; + // min-height: 950px; + // height: 841px; + // flex:1; + // min-height: 100%; +} +.on { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-size: 12px !important; +} +.selectbr { + border: none !important; + font-size: 12px !important; +} +.tabtitles { + color: #092c4d !important; + font-size: 12px !important; + margin-right: 5px !important; +} +.el-table .ascending .sort-caret.ascending { + border-bottom-color: #d3832a !important; + font-size: 12px !important; +} +.el-table .descending .sort-caret.descending { + border-top-color: #d3832a !important; + font-size: 12px !important; +} +.tabculconte { + color: #333333 !important; + font-size: 12px !important; +} +.slotbuts { + height: 25px; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px !important; +} +.slotbuts .el-text { + color: #d3832a !important; + margin-right: 10px !important; + cursor: pointer; + font-size: 12px !important; + &:nth-last-child(1) { + margin-right: 0px !important; + } +} +.el-popper.is-pure.is-light.el-dropdown__popper .el-text { + color: #d3832a !important; + margin-right: 10px !important; + cursor: pointer; + font-size: 12px !important; + &:nth-last-child(1) { + margin-right: 0px !important; + } +} +.el-table .el-input__inner { + height: 23px !important; +} +// .el-checkbox__input.is-checked .el-checkbox__inner{ +// background-color: #D3832A !important; +// border-color: #D3832A !important; +// } +// .is .el-checkbox__input.is-checked .el-checkbox__inner{ +// background-color: #D3832A !important; +// border-color: #D3832A !important; +// } +// .is-checked .el-checkbox__inner:hover{ +// border-color: #D3832A !important; +// } +// .el-checkbox__input.is-indeterminate .el-checkbox__inner{ +// background-color: #D3832A !important; +// border-color: #D3832A !important; +// } +.el-table .el-table__cell { + padding: 0px !important; +} +.el-checkbox__input.is-checked .el-checkbox__inner, +.el-checkbox__input.is-indeterminate .el-checkbox__inner { + border-color: #d3832a !important; + background-color: #d3832a !important; +} +.el-checkbox__input.is-focus .el-checkbox__inner { + border-color: #d3832a !important; +} +//修改选中后文本的颜色 +.el-checkbox__input.is-checked + .el-checkbox__label { + color: #d3832a !important; +} +.el-checkbox__inner:hover { + border-color: #d3832a !important; + font-size: 12px !important; +} +.table-SelectedRow-bgcolor { + > td { + background-color: #f7e8d7 !important; + } +} +.colors { + color: #409eff !important; + cursor: pointer !important; +} +.el-table .cell { + line-height: 22px !important; +} +.el-table .el-input__inner { + font-size: 12px !important; +} +.el-table__body tr.hover-row.current-row > td, +.el-table__body tr.hover-row.el-table__row--striped.current-row > td, +.el-table__body tr.hover-row.el-table__row--striped > td, +.el-table__body tr.hover-row > td { + background-color: #d3d8e1 !important; +} +.el-date-editor.el-input, +.el-date-editor.el-input__wrapper { + height: 23px !important; +} +.copys { + display: inline-block; + margin-left: 5px; + padding-top: 5px; + margin-right: 5px; +} +.tilbox { + display: flex; + align-items: center; +} + +.el-table .el-popper { + max-width: 20% !important; +} +.el-input { + // width: 200px !important; +} +</style> diff --git a/src/components/tablecmt/tablecmt.vue b/src/components/tablecmt/tablecmt.vue index 56c6f607..6bca90a5 100644 --- a/src/components/tablecmt/tablecmt.vue +++ b/src/components/tablecmt/tablecmt.vue @@ -39,7 +39,7 @@ <template #header> <!-- <el-text class="mx-1">{{ column.label }}</el-text> --> <el-input - v-if="column.type == 2" + v-if="column.type == 2 || column.type == 13" v-model="column.values" clearable :placeholder="`请输入${column.label}`" @@ -121,8 +121,8 @@ :min="0" :max="scope.row.residueNumber" ></el-input> - <div class="slotbuts" v-if="column.type == 6"> - <slot v-if="column.type == 6" :scope="scope"> </slot> + <div class="slotbuts" v-if="column.type == 6 || column.type == 13"> + <slot v-if="column.type == 6 || column.type == 13" :scope="scope"> </slot> </div> <el-image preview-teleported @@ -204,7 +204,10 @@ onMounted(() => { console.log('bodyContent :>> ', bodyContent); // 设置列表的高度 bodyContent.forEach(val => { + console.log('_height :>> ', _height); + console.log('val.getBoundingClientRect().top :>> ', val); val.style.height = _height - val.getBoundingClientRect().top - 65 + 'px'; + // if (val.style.height === '890px') val.style.height = '600px'; }); }); interface TableColumnType { @@ -226,6 +229,8 @@ interface TableColumnType { * 9:下载附件 * 10.输入框的表格内容 * 11.开关类型 + * 12.序号 + * 13.带搜索的自定义列表 */ type: number | string; /** 用于接受表头的值 */ diff --git a/src/option/aftersales/aftersalesWorkOrder.js b/src/option/aftersales/aftersalesWorkOrder.js index 9210455f..e537ae60 100644 --- a/src/option/aftersales/aftersalesWorkOrder.js +++ b/src/option/aftersales/aftersalesWorkOrder.js @@ -89,18 +89,12 @@ export default { hide: true, }, { - label: "工单异常类型;货损,少货,窜货,加急,其他", + label: "异常类型 ", prop: "workOrderType", search: true, }, { - label: "发起工单标识;PDA,PC", - prop: "initiationIdentification", - display: false, - hide: true, - }, - { - label: "发现节点;提货,发货,干线,库内,配送,其他,签收(PC),安装(PC)", + label: "发现节点 ", prop: "discoveryNode", search: true, }, @@ -119,7 +113,7 @@ export default { search: true, }, { - label: "车次号 (干线卸车环节)", + label: "车次号", prop: "trainNumber", }, { @@ -131,7 +125,7 @@ export default { prop: "secondary", }, { - label: "车辆路线;车次号、通过车次号自动带出车辆线路", + label: "车辆路线 ", prop: "vehicleRoute", }, { @@ -139,11 +133,11 @@ export default { prop: "deliverGoodsTime", }, { - label: "发现时间 (库内作业环节,配送装车环节)", + label: "发现时间", prop: "discoveryTime", }, { - label: "入库时间(库内作业环节)", + label: "入库时间", prop: "warehousingTime", }, { @@ -155,29 +149,21 @@ export default { prop: "remarks", }, { - label: "配送时间(配送装车环节)", + label: "配送时间", prop: "deliveryTime", }, { - label: "配送司机(配送装车环节)", + label: "配送司机", prop: "deliveryDriver", }, { label: "工单状态", prop: "workOrderStatus", }, - { - label: "归属客服ID", - prop: "customerServiceId", - }, { label: "归属客服名称", prop: "customerServiceName", }, - { - label: "商场ID", - prop: "waybillMallId", - }, { label: "完结时间", prop: "overTime", @@ -186,10 +172,6 @@ export default { label: "异常问题描述", prop: "problemDescription", }, - { - label: "仓库ID", - prop: "warehouseId", - }, { label: "责任人 (库内作业环节)", prop: "personResponsible", @@ -209,12 +191,6 @@ export default { { label: "财务入账时间", prop: "entryTime", - }, - { - label: "操作人", - prop: "operator", - display: false, - hide: true, - }, + } ] } diff --git a/src/option/distribution/arteryDistrilbutionBillLadingList.js b/src/option/distribution/arteryDistrilbutionBillLadingList.js index dd4b2bb2..388d9a19 100644 --- a/src/option/distribution/arteryDistrilbutionBillLadingList.js +++ b/src/option/distribution/arteryDistrilbutionBillLadingList.js @@ -1,3 +1,4 @@ +/** 自提表格 */ export const columnList = [ { prop: '', @@ -17,9 +18,9 @@ export const columnList = [ { prop: 'pickupBatch', label: '提货批次', - type: 2, + type: 13, values: '', - width: '130', + width: '180', checkarr: [], fixed: true, sortable: true, @@ -27,7 +28,7 @@ export const columnList = [ }, { prop: 'serviceNumber', - label: '服务号', + label: '车牌', type: 2, values: '', width: '130', @@ -37,7 +38,7 @@ export const columnList = [ }, { prop: 'waybillNumber', - label: '运单号', + label: '司机名称', type: 2, values: '', width: '130', @@ -47,7 +48,7 @@ export const columnList = [ }, { prop: 'consigneeUnit', - label: '收货单位', + label: '司机电话', type: 2, values: '', width: '130', @@ -57,7 +58,7 @@ export const columnList = [ }, { prop: 'customerName', - label: '收货人', + label: '仓库名称', type: 2, values: '', width: '130', @@ -67,28 +68,27 @@ export const columnList = [ }, { prop: 'customerTelephone', - label: '联系电话', - type: 2, + label: '线路标题', + type: 1, values: '', - width: '130', + width: '180', checkarr: [], fixed: false, sortable: true, }, { prop: 'warehouse', - label: '仓库', + label: '线路节点数', type: 2, values: '', width: '130', checkarr: [], fixed: false, sortable: true, - head: true, }, { prop: 'warehouseEntryTime', - label: '入库时间', + label: '提货开始时间', type: 4, values: '', width: '130', @@ -98,8 +98,8 @@ export const columnList = [ }, { prop: 'collectFee', - label: '到付运费', - type: 1, + label: '提货完成时间', + type: 4, values: '', width: '130', checkarr: [], @@ -108,8 +108,8 @@ export const columnList = [ }, { prop: 'transport', - label: '搬运费', - type: 1, + label: '预计数量', + type: 2, values: '', width: '130', checkarr: [], @@ -118,8 +118,8 @@ export const columnList = [ }, { prop: 'storageFee', - label: '仓储费', - type: 1, + label: '状态', + type: 3, values: '', width: '130', checkarr: [], @@ -128,8 +128,8 @@ export const columnList = [ }, { prop: 'forklift', - label: '叉车费', - type: 1, + label: '计费模式', + type: 3, values: '', width: '130', checkarr: [], @@ -138,28 +138,28 @@ export const columnList = [ }, { prop: 'otherFee', - label: '其他增值费用', - type: 1, + label: '提货费用', + type: 2, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'pickUpTime', + label: '备注', + type: 2, values: '', width: '150', checkarr: [], fixed: false, sortable: true, }, - // { - // prop: 'pickUpTime', - // label: '总费用', - // type: 1, - // values: '', - // width: '150', - // checkarr: [], - // fixed: false, - // sortable: true, - // }, { prop: 'totalNumber', - label: '应提件数', - type: 1, + label: '承运商', + type: 2, values: '', width: '130', checkarr: [], @@ -168,8 +168,8 @@ export const columnList = [ }, { prop: 'stopNum', - label: '实提件数', - type: 1, + label: '单数', + type: 2, values: '', width: '130', checkarr: [], @@ -178,7 +178,7 @@ export const columnList = [ }, { prop: 'brand', - label: '品牌', + label: '件数', type: 2, values: '', width: '130', @@ -188,7 +188,7 @@ export const columnList = [ }, { prop: 'productInformation', - label: '货品信息', + label: '重量', type: 2, values: '', width: '130', @@ -198,7 +198,7 @@ export const columnList = [ }, { prop: 'customerTelephone', - label: '提货手机', + label: '体积', type: 2, values: '', width: '130', @@ -208,7 +208,7 @@ export const columnList = [ }, { prop: 'consignee', - label: '提货人', + label: '创建人', type: 2, values: '', width: '130', @@ -216,67 +216,349 @@ export const columnList = [ fixed: false, sortable: false, }, + // { + // prop: '', + // label: '操作', + // type: 6, + // values: '', + // width: '200', + // checkarr: [], + // fixed: 'right', + // hide: true, + // }, + // 更多列的配置... +]; + +/** 自提详情内表格 */ +export const columnDetailList = [ + { + prop: '', + label: '复选框', + type: 0, + width: 55, + fixed: true, + }, + { + prop: '', + label: '序号', + type: 12, + values: '', + width: 55, + fixed: true, + }, { - prop: 'pickUpPlate', + prop: 'pickupBatch', + label: '提货批次', + type: 2, + values: '', + width: '180', + checkarr: [], + fixed: true, + sortable: true, + head: false, + }, + { + prop: 'serviceNumber', + label: '提货司机', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'waybillNumber', label: '提货车牌', type: 2, values: '', width: '130', checkarr: [], fixed: false, - sortable: false, + sortable: true, }, { - prop: 'deliveryDocument', - label: '提货证件', + prop: 'consigneeUnit', + label: '运单号', type: 2, values: '', width: '130', checkarr: [], fixed: false, - sortable: false, + sortable: true, }, { - prop: 'certificateTypeName', - label: '证件类型', - type: 3, + prop: 'customerName', + label: '合同号', + type: 2, values: '', width: '130', checkarr: [], fixed: false, - sortable: false, + sortable: true, }, { - prop: 'conditionName', - label: '状态', - type: 1, + prop: 'customerTelephone', + label: '目的地', + type: 2, + values: '', + width: '180', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'warehouse', + label: '入库类型', + type: 2, values: '', width: '130', checkarr: [], fixed: false, - sortable: false, + sortable: true, }, { - prop: 'totalCost', - label: '费用合计', - type: 1, + prop: 'warehouseEntryTime', + label: '是否齐套', + type: 2, values: '', width: '130', checkarr: [], fixed: false, - sortable: false, + sortable: true, }, { - prop: '', - label: '操作', - type: 6, + prop: 'collectFee', + label: '托盘码', + type: 2, values: '', - width: '200', + width: '130', checkarr: [], - fixed: 'right', - hide: true, + fixed: false, + sortable: true, + }, + { + prop: 'transport', + label: '一级品类', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'storageFee', + label: '二级品类', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'forklift', + label: '三级品类', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'otherFee', + label: '物料名称', + type: 2, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'pickUpTime', + label: '品牌', + type: 2, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'totalNumber', + label: '操作仓库', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'stopNum', + label: '操作人', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'brand', + label: '提货扫码时间', + type: 4, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, }, - // 更多列的配置... ]; -export default { columnList }; +/** 新增提货选择运单列表 */ +export const columnNewList = [ + { + prop: '', + label: '复选框', + type: 0, + width: 55, + fixed: true, + }, + { + prop: '', + label: '序号', + type: 12, + values: '', + width: 55, + fixed: true, + }, + { + prop: 'pickupBatch', + label: '运单号', + type: 2, + values: '', + width: '150', + checkarr: [], + fixed: true, + sortable: true, + head: false, + }, + { + prop: 'serviceNumber', + label: '网点', + type: 2, + values: '', + width: '150', + checkarr: [], + fixed: true, + sortable: true, + }, + { + prop: 'waybillNumber', + label: '发货人', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'consigneeUnit', + label: '客户车次号', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'customerName', + label: '发货单位', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'customerTelephone', + label: '货物名称', + type: 2, + values: '', + width: '180', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'warehouse', + label: '件数', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + isshowSummary: true, + }, + { + prop: 'warehouseEntryTime', + label: '重量', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + isshowSummary: true, + }, + { + prop: 'collectFee', + label: '体积', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + isshowSummary: true, + }, + { + prop: 'transport', + label: '运费', + type: 2, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + isshowSummary: true, + }, + { + prop: 'storageFee', + label: '运单备注', + type: 2, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'forklift', + label: '开单时间', + type: 4, + values: '', + width: '150', + checkarr: [], + fixed: false, + sortable: true, + }, +]; diff --git a/src/page/index/index.vue b/src/page/index/index.vue index f37d7e8e..f4890d9a 100644 --- a/src/page/index/index.vue +++ b/src/page/index/index.vue @@ -15,9 +15,9 @@ <!-- 主体视图层 --> <div id="avue-view" v-show="!isSearch" v-if="isRefresh"> <router-view #="{ Component }"> - <!-- <keep-alive :include="$store.getters.tagsKeep"> --> + <keep-alive :include="$store.getters.tagsKeep"> <component :is="Component" /> - <!-- </keep-alive> --> + </keep-alive> </router-view> </div> </div> diff --git a/src/page/index/layout.vue b/src/page/index/layout.vue index 5bf76e38..0439730f 100644 --- a/src/page/index/layout.vue +++ b/src/page/index/layout.vue @@ -1,7 +1,7 @@ <template> <router-view #="{ Component }"> - <!-- <keep-alive :include="$store.getters.tagsKeep"> --> + <keep-alive :include="$store.getters.tagsKeep"> <component :is="Component" /> - <!-- </keep-alive> --> + </keep-alive> </router-view> </template> diff --git a/src/router/avue-router.js b/src/router/avue-router.js index 890875fe..dad12da4 100644 --- a/src/router/avue-router.js +++ b/src/router/avue-router.js @@ -58,7 +58,6 @@ RouterPlugin.install = function (option = {}) { if (option.keepAlive) { meta.keepAlive = option.keepAlive; } - const isChild = !!(children && children.length !== 0); const oRouter = { path: path, @@ -132,7 +131,7 @@ export const formatPath = (ele, first) => { const propsDefault = website.menu; const icon = ele[propsDefault.icon]; ele[propsDefault.icon] = !icon ? propsDefault.iconDefault : icon; - ele.meta = { keepAlive: ele.isOpen === 2 }; + ele.meta = { keepAlive: ele.isOpen == 2 }; const iframeComponent = 'components/iframe/main'; const iframeSrc = href => { return href.replace(/&/g, '#'); @@ -149,7 +148,7 @@ export const formatPath = (ele, first) => { ele[propsDefault.children] && ele[propsDefault.children].forEach(child => { child.component = 'views' + child[propsDefault.path]; - child.meta = { keepAlive: child.isOpen === 2 }; + child.meta = { keepAlive: child.isOpen == 2 }; if (isURL(child[propsDefault.href])) { let href = child[propsDefault.href]; child[propsDefault.path] = ele[propsDefault.path] + '/' + child.code; diff --git a/src/router/index.js b/src/router/index.js index 8257099d..7fab1ed4 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -14,6 +14,7 @@ AvueRouter.install({ store: Store, router: Router, i18n: i18n, + keepAlive: true }); Router.$avueRouter.formatRoutes(Store.getters.menuAll, true); diff --git a/src/router/views/index.js b/src/router/views/index.js index 270aa327..1346879b 100644 --- a/src/router/views/index.js +++ b/src/router/views/index.js @@ -688,6 +688,7 @@ export default [ name: '配送查看', meta: { i18n: 'dict', + keepAlive:true }, props: route => ({ name: route.query.name, @@ -1051,20 +1052,20 @@ export default [ }, ], }, -// 下面的代码为 商场客户端的页面 + // 下面的代码为 商场客户端的页面 -{ - path: '/mail/order/add', - component: Layout, - redirect: '/mail/order/add', - children: [ - { - path: '/mail/order/add', - name: '新建商场预约单', - component: () => import('@/views/mail/order/add.vue'), - }, - ], -}, + { + path: '/mail/order/add', + component: Layout, + redirect: '/mail/order/add', + children: [ + { + path: '/mail/order/add', + name: '新建商场预约单', + component: () => import('@/views/mail/order/add.vue'), + }, + ], + }, { path: '/distribution/checkInventoryTask/createTaskTemp', diff --git a/src/store/getters.js b/src/store/getters.js index 421bcc1a..bdb7f1fd 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -15,15 +15,12 @@ const getters = { lockPasswd: state => state.common.lockPasswd, tagList: state => state.tags.tagList, tagsKeep: (state, getters) => { + console.log(getters.tagList,'-----') return getters.tagList .filter(ele => { return (ele.meta || {}).keepAlive; }) .map(ele => { - console.log('ele :>> ', ele); - const path = ele.path; - const reg = new RegExp(path, 'g'); - console.log('reg', reg); return ele.fullPath; }); }, diff --git a/src/views/aftersales/aftersalesWorkOrder.vue b/src/views/aftersales/aftersalesWorkOrder.vue index 39d9ec6e..60b220a8 100644 --- a/src/views/aftersales/aftersalesWorkOrder.vue +++ b/src/views/aftersales/aftersalesWorkOrder.vue @@ -4,10 +4,10 @@ <el-row :hidden="!search" style="padding:6px 18px"> <!-- 查询模块 --> <el-form :inline="true" :model="query"> - <el-form-item label="工单异常类型;货损,少货,窜货,加急,其他:"> + <el-form-item label="工单异常类型:"> <el-input v-model="query.workOrderType" placeholder="请输入工单异常类型;货损,少货,窜货,加急,其他"></el-input> </el-form-item> - <el-form-item label="发现节点;提货,发货,干线,库内,配送,其他,签收(PC),安装(PC):"> + <el-form-item label="发现节点:"> <el-input v-model="query.discoveryNode" placeholder="请输入发现节点;提货,发货,干线,库内,配送,其他,签收(PC),安装(PC)"></el-input> </el-form-item> <el-form-item label="异常工单号:"> @@ -27,8 +27,10 @@ <div class="avue-crud__header"> <!-- 头部左侧按钮模块 --> <div class="avue-crud__left"> - <el-button v-if="this.permissionList.addBtn" type="primary" icon="el-icon-plus" @click="handleAdd">新 增</el-button> - <el-button v-if="this.permissionList.delBtn" type="danger" icon="el-icon-delete" @click="handleDelete" plain>删 除</el-button> +<!-- <el-button v-if="this.permissionList.addBtn" type="primary" icon="el-icon-plus" @click="handleAdd">新 增</el-button>--> +<!-- <el-button v-if="this.permissionList.delBtn" type="danger" icon="el-icon-delete" @click="handleDelete" plain>删 除</el-button>--> + <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新 增</el-button> + <el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain>删 除</el-button> </div> <!-- 头部右侧按钮模块 --> <div class="avue-crud__right"> @@ -89,9 +91,9 @@ width="50%" :before-close="beforeClose" append-to-body> - <el-form :disabled="view" ref="form" :model="form" label-width="80px"> + <el-form :disabled="view" ref="form" :model="form" label-width="120px"> <!-- 表单字段 --> - <el-form-item label="工单异常类型;货损,少货,窜货,加急,其他" prop="workOrderType"> + <el-form-item label="工单异常类型 " prop="workOrderType"> <el-select v-model="form.workOrderType" clearable placeholder="请选择工单异常类型;货损,少货,窜货,加急,其他"> <el-option v-for="item in workOrderTypeData" @@ -101,7 +103,7 @@ </el-option> </el-select> </el-form-item> - <el-form-item label="发现节点;提货,发货,干线,库内,配送,其他,签收(PC),安装(PC)" prop="discoveryNode"> + <el-form-item label="发现节点 " prop="discoveryNode"> <el-select v-model="form.discoveryNode" clearable placeholder="请选择发现节点;提货,发货,干线,库内,配送,其他,签收(PC),安装(PC)"> <el-option v-for="item in discoveryNodeData" @@ -120,7 +122,7 @@ <el-form-item label="订单自编号" prop="orderCode"> <el-input v-model="form.orderCode" placeholder="请输入订单自编号"/> </el-form-item> - <el-form-item label="车次号 (干线卸车环节)" prop="trainNumber"> + <el-form-item label="车次号 " prop="trainNumber"> <el-input v-model="form.trainNumber" placeholder="请输入车次号 (干线卸车环节)"/> </el-form-item> <el-form-item label="一级品类" prop="first"> @@ -129,16 +131,16 @@ <el-form-item label="二级品类" prop="secondary"> <el-input v-model="form.secondary" placeholder="请输入二级品类"/> </el-form-item> - <el-form-item label="车辆路线;车次号、通过车次号自动带出车辆线路" prop="vehicleRoute"> + <el-form-item label="车辆路线 " prop="vehicleRoute"> <el-input v-model="form.vehicleRoute" placeholder="请输入车辆路线;车次号、通过车次号自动带出车辆线路"/> </el-form-item> <el-form-item label="送货时间" prop="deliverGoodsTime"> <el-input v-model="form.deliverGoodsTime" placeholder="请输入送货时间"/> </el-form-item> - <el-form-item label="发现时间 (库内作业环节,配送装车环节)" prop="discoveryTime"> + <el-form-item label="发现时间 " prop="discoveryTime"> <el-input v-model="form.discoveryTime" placeholder="请输入发现时间 (库内作业环节,配送装车环节)"/> </el-form-item> - <el-form-item label="入库时间(库内作业环节)" prop="warehousingTime"> + <el-form-item label="入库时间 " prop="warehousingTime"> <el-input v-model="form.warehousingTime" placeholder="请输入入库时间(库内作业环节)"/> </el-form-item> <el-form-item label="运单商场" prop="waybillMall"> @@ -147,34 +149,27 @@ <el-form-item label="备注" prop="remarks"> <el-input v-model="form.remarks" placeholder="请输入备注"/> </el-form-item> - <el-form-item label="配送时间(配送装车环节)" prop="deliveryTime"> + <el-form-item label="配送时间 " prop="deliveryTime"> <el-input v-model="form.deliveryTime" placeholder="请输入配送时间(配送装车环节)"/> </el-form-item> - <el-form-item label="配送司机(配送装车环节)" prop="deliveryDriver"> + <el-form-item label="配送司机 " prop="deliveryDriver"> <el-input v-model="form.deliveryDriver" placeholder="请输入配送司机(配送装车环节)"/> </el-form-item> <el-form-item label="工单状态" prop="workOrderStatus"> <el-input v-model="form.workOrderStatus" placeholder="请输入工单状态"/> </el-form-item> - <el-form-item label="归属客服ID" prop="customerServiceId"> - <el-input v-model="form.customerServiceId" placeholder="请输入归属客服ID"/> - </el-form-item> + <el-form-item label="归属客服名称" prop="customerServiceName"> <el-input v-model="form.customerServiceName" placeholder="请输入归属客服名称"/> </el-form-item> - <el-form-item label="商场ID" prop="waybillMallId"> - <el-input v-model="form.waybillMallId" placeholder="请输入商场ID"/> - </el-form-item> + <el-form-item label="完结时间" prop="overTime"> <el-input v-model="form.overTime" placeholder="请输入完结时间"/> </el-form-item> <el-form-item label="异常问题描述" prop="problemDescription"> <el-input v-model="form.problemDescription" placeholder="请输入异常问题描述"/> </el-form-item> - <el-form-item label="仓库ID" prop="warehouseId"> - <el-input v-model="form.warehouseId" placeholder="请输入仓库ID"/> - </el-form-item> - <el-form-item label="责任人 (库内作业环节)" prop="personResponsible"> + <el-form-item label="责任人" prop="personResponsible"> <el-input v-model="form.personResponsible" placeholder="请输入责任人 (库内作业环节)"/> </el-form-item> <el-form-item label="钉钉流程号" prop="processNumber"> @@ -206,6 +201,7 @@ import { getList, getDetail, add, update, remove } from "@/api/aftersales/aftersalesWorkOrder"; import option from "@/option/aftersales/aftersalesWorkOrder"; import { mapGetters } from "vuex"; +import { getDictionaryBiz } from '@/api/system/dict'; export default { data () { @@ -237,6 +233,8 @@ export default { option: option, // 表单列表 data: [], + discoveryNode: [], + workOrder: [], } }, mounted() { @@ -264,6 +262,28 @@ export default { methods: { init() { this.height = this.setPx(document.body.clientHeight - 340); + getDictionaryBiz('pc_work_order').then(res => { //异常类型 + this.workOrder = res.data.data; + /*this.$functions.checkcColumnList('typeServerName', this.columnList).checkarr = + res.data.data.map(item => { + item.value = item.dictKey; + item.label = item.dictValue; + return item; + });*/ + }); + getDictionaryBiz('pc_discovery_node').then(res => { //发现环节 + this.discoveryNode = res.data.data; + /*this.$functions.checkcColumnList('typeServerName', this.columnList).checkarr = + res.data.data.map(item => { + item.value = item.dictKey; + item.label = item.dictValue; + return item; + });*/ + }); + + + + }, searchHide() { this.search = !this.search; diff --git a/src/views/distribution/deliverylist/distributionDeliveryListmar.vue b/src/views/distribution/deliverylist/distributionDeliveryListmar.vue index 2451068d..40f1e28c 100644 --- a/src/views/distribution/deliverylist/distributionDeliveryListmar.vue +++ b/src/views/distribution/deliverylist/distributionDeliveryListmar.vue @@ -33,34 +33,14 @@ </el-select> </el-form-item> <el-form-item label="配送司机:"> - <el-select - v-model="query.driverName" - filterable - placeholder="请输入司机名称" - :loading="loading" - > - <el-option - v-for="item in driverData" - :key="item.dictKey" - :label="item.dictValue" - :value="item.dictValue" - > + <el-select v-model="query.driverName" filterable placeholder="请输入司机名称" :loading="loading"> + <el-option v-for="item in driverData" :key="item.dictKey" :label="item.dictValue" :value="item.dictValue"> </el-option> </el-select> </el-form-item> <el-form-item label="配送车辆:"> - <el-select - v-model="query.vehicleName" - filterable - placeholder="请输入司机名称" - :loading="loading" - > - <el-option - v-for="item in vehicleData" - :key="item.dictKey" - :label="item.dictValue" - :value="item.dictValue" - > + <el-select v-model="query.vehicleName" filterable placeholder="请输入司机名称" :loading="loading"> + <el-option v-for="item in vehicleData" :key="item.dictKey" :label="item.dictValue" :value="item.dictValue"> </el-option> </el-select> </el-form-item> @@ -104,12 +84,9 @@ <div class="avue-crud__header"> <!-- 头部左侧按钮模块 --> <div class="avue-crud__left" style="margin-top: 20px"> - <el-button type="primary" icon="el-icon-plus" @click="printBatchOrder" - >批量打印</el-button - > + <el-button type="primary" icon="el-icon-plus" @click="printBatchOrder">批量打印</el-button> <!-- <el-button type="danger" icon="el-icon-delete" @click="handleDelete" plain>删 除</el-button>--> - <el-button type="danger" icon="el-icon-download" @click="handleExportInfo" plain - >导出 + <el-button type="danger" icon="el-icon-download" @click="handleExportInfo" plain>导出 </el-button> </div> <!-- 头部右侧按钮模块 --> @@ -122,29 +99,15 @@ </el-row> <el-row> <!-- 列表模块 --> - <tablecmt - :columnList="columnList" - :tableData="data" - :loading="loading" - @inputTxt="inputsc" - @timeCheck="timesc" - @btnCheck="btnsc" - @selectCheck="selectsc" - @selection="selectionsc" - > + <tablecmt :columnList="columnList" :tableData="data" :loading="loading" @inputTxt="inputsc" @timeCheck="timesc" + @btnCheck="btnsc" @selectCheck="selectsc" @selection="selectionsc"> <template #default="slotProps"> <el-text size="small" @click="printOrder(slotProps.scope.row)">打 印</el-text> <el-text size="small" @click="editsolt(slotProps.scope)">查 看</el-text> <el-text size="small" @click="editmap(slotProps.scope)">地 图</el-text> - <el-text - size="small" - v-if=" - slotProps.scope.row.deliveryStatusName !== '已完成' || - slotProps.scope.row.deliveryStatus !== '3' - " - @click="handleEdit(slotProps.scope)" - >编 辑</el-text - > + <el-text size="small" v-if="slotProps.scope.row.deliveryStatusName !== '已完成' || + slotProps.scope.row.deliveryStatus !== '3' + " @click="handleEdit(slotProps.scope)">编 辑</el-text> <!-- <el-button size="small" @click="costadd(slotProps.scope)">费 用 增 项</el-button>--> </template> @@ -182,17 +145,9 @@ <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 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> @@ -219,80 +174,34 @@ </el-dialog> </div> - <el-dialog - v-model="dialogVisible" - title="增值服务" - width="30%" - :model="addvalue" - :before-close="handleClose" - > + <el-dialog v-model="dialogVisible" title="增值服务" width="30%" :model="addvalue" :before-close="handleClose"> <el-form-item label="增值服务" prop="freightMark"> <el-checkbox-group v-model="form.addvalueType" @change="handleCheckedCitiesChange"> - <el-checkbox - style="width: 100%; margin-bottom: 3%" - v-for="(item, index) in addvalueServeTypeData" - :key="item.dictKey" - :label="item.dictKey" - >{{ item.dictValue }} - <span v-if="index === 0 || index === 6 || index === 2 || index === 4" - > 件数: - <el-input - type="number" - v-model="item.f" - :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" - @change="textbox($event, index, 1)" - style="width: 20%; border: none; border-bottom: 2px solid #eee" - /> + <el-checkbox style="width: 100%; margin-bottom: 3%" v-for="(item, index) in addvalueServeTypeData" + :key="item.dictKey" :label="item.dictKey">{{ item.dictValue }} + <span v-if="index === 0 || index === 6 || index === 2 || index === 4"> 件数: + <el-input type="number" v-model="item.f" :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" + @change="textbox($event, index, 1)" style="width: 20%; border: none; border-bottom: 2px solid #eee" /> </span> - <span v-if="index === 1" - >公里: - <el-input - type="primary" - v-model="item.a" - :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" - @change="textbox($event, index, 2)" - style="width: 20%; border: none; border-bottom: 2px solid #eee" - /> + <span v-if="index === 1">公里: + <el-input type="primary" v-model="item.a" :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" + @change="textbox($event, index, 2)" style="width: 20%; border: none; border-bottom: 2px solid #eee" /> </span> - <span v-if="index === 3" - >距离: - <el-input - type="number" - v-model="item.b" - :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" - @change="textbox($event, index, 3)" - style="width: 20%; border: none; border-bottom: 2px solid #eee" - /> + <span v-if="index === 3">距离: + <el-input type="number" v-model="item.b" :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" + @change="textbox($event, index, 3)" style="width: 20%; border: none; border-bottom: 2px solid #eee" /> </span> - <span v-if="index === 5" - >人数: - <el-input - type="number" - v-model="item.c" - :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" - @change="textbox($event, index, 4)" - style="width: 20%; border: none; border-bottom: 2px solid #eee" - /> + <span v-if="index === 5">人数: + <el-input type="number" v-model="item.c" :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" + @change="textbox($event, index, 4)" style="width: 20%; border: none; border-bottom: 2px solid #eee" /> </span> - <span v-if="index === 0" - >楼层: - <el-input - type="number" - v-model="item.d" - :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" - @change="textbox($event, index, 5)" - style="width: 20%; border: none; border-bottom: 2px solid #eee" - /> + <span v-if="index === 0">楼层: + <el-input type="number" v-model="item.d" :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" + @change="textbox($event, index, 5)" style="width: 20%; border: none; border-bottom: 2px solid #eee" /> </span> - <span v-if="item" - >预计费用: - <el-input - type="number" - v-model="item.e" - :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" - @change="textbox($event, index, 6)" - style="width: 20%; border: none; border-bottom: 2px solid #eee" - /> + <span v-if="item">预计费用: + <el-input type="number" v-model="item.e" :disabled="this.form?.freightMark?.indexOf(item.dictKey) == -1" + @change="textbox($event, index, 6)" style="width: 20%; border: none; border-bottom: 2px solid #eee" /> </span> </el-checkbox> </el-checkbox-group> @@ -305,12 +214,8 @@ </template> </el-dialog> </basic-container> - <edittablehead - @setcolum="setnewcolum" - @closce="showdrawer" - :drawerShow="drawerShow" - :columnList="columnList" - ></edittablehead> + <edittablehead @setcolum="setnewcolum" @closce="showdrawer" :drawerShow="drawerShow" :columnList="columnList"> + </edittablehead> </template> <script> @@ -732,6 +637,7 @@ export default { return new Promise((rv, rev) => { getVehicleList(1, 10, '').then(res => { const data = res.data.data; + if (!data.records) return let po = []; data.records.forEach(item => { let a = { @@ -877,7 +783,7 @@ export default { .then(_ => { done(); }) - .catch(_ => {}); + .catch(_ => { }); }, editsolt(scope) { const { row } = scope; @@ -1205,6 +1111,7 @@ export default { width: fit-content; } } + .order-info { ul { list-style: none; @@ -1218,10 +1125,12 @@ export default { display: flex; align-items: center; font-weight: 500; + img { margin-right: 4px; } } + li::after { content: ''; display: block; @@ -1233,55 +1142,68 @@ export default { left: 0px; } } + li:first-child::after { content: none; } + li:first-child { padding-left: 0; } } + .avue-crud__header { // align-items: flex-end !important; } + // 日期选择框 .el-times { :deep(.el-tooltip__trigger) { height: 30px !important; } } + .el-btn { min-width: 200px; margin-right: 0 !important; + :deep(.el-form-item__content) { width: 180px; justify-content: flex-end; } } + .avue-crud__right { display: flex; align-items: center; } + .fr-fo { display: flex; } + :deep(.avue-crud__header) { .avue-crud__left { margin-top: 0 !important; } } + :deep(.avue-crud) { display: flex; height: 100%; flex-direction: column; } + :deep(.el-card__body) { height: 100%; } + :deep(.el-card) { height: 100%; display: flex; flex-direction: column; } + .el-fy { flex: 1; display: flex; diff --git a/src/views/distribution/inventory/arteryDistrilbutionBillLadingList.vue b/src/views/distribution/inventory/arteryDistrilbutionBillLadingList.vue index 26e90055..a94962c8 100644 --- a/src/views/distribution/inventory/arteryDistrilbutionBillLadingList.vue +++ b/src/views/distribution/inventory/arteryDistrilbutionBillLadingList.vue @@ -1,14 +1,19 @@ <template> <basic-container> <div class="avue-crud"> + <!-- 搜索模块 --> <el-row v-if="!search"> <!-- 查询模块 --> <el-form :inline="true" :model="query" class="el-fr-d"> <div class="fo-fl"> - <el-form-item label="服务号:"> - <el-input v-model="query.serviceNumber" placeholder="请输入服务号"></el-input> + <el-form-item label="批次号:"> + <el-input + v-model="query.serviceNumber" + placeholder="请输入批次号" + clearable + ></el-input> </el-form-item> - <el-form-item label="入库时间:" class="el-times"> + <el-form-item label="提货时间:" class="el-times"> <!-- <el-input v-model="query.stockupArea" placeholder="请输入备货区"></el-input>--> <el-date-picker v-model="stockupDate" @@ -18,6 +23,7 @@ start-placeholder="开始时间" end-placeholder="结束时间" :shortcuts="shortcuts" + clearable /> </el-form-item> </div> @@ -28,25 +34,15 @@ </el-form-item> </el-form> </el-row> - <el-row> - <el-col :span="4"> - <span style="margin-bottom: 2%; font-size: 16px"> - 待提货:{{ treatNum }}单/{{ numBill }}件 - </span> - </el-col> - <el-col :span="10"> - <span style="margin-bottom: 2%; font-size: 16px"> - 已提货:{{ stopNum }}单/{{ numBill }}件</span - > - </el-col> - </el-row> + + <!-- 控件模块 --> <el-row> <div class="avue-crud__header"> <!-- 头部左侧按钮模块 --> <div class="avue-crud__left"> <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新 增</el-button> - <el-button type="primary" icon="el-icon-edit" @click="handleAdd">编 辑</el-button> - <el-button type="primary" icon="el-icon-plus" @click="handleAdd" + <el-button type="primary" icon="el-icon-edit" @click="handleEdit">编 辑</el-button> + <el-button type="primary" icon="el-icon-plus" @click="handleAddDistrilbution" >添加提货数据</el-button > <el-button type="primary" icon="el-icon-check" @click="handleAdd">提货完成</el-button> @@ -66,6 +62,8 @@ </div> </div> </el-row> + + <!-- 表格 --> <el-row> <!-- 列表模块 --> <tablecmt @@ -79,29 +77,36 @@ @selection="selectionChange" > <template #default="slotProps"> - <!-- <el-button size="small" @click="editsolt(slotProps.scope)">修改</el-button>--> - <el-text size="small" text @click="handleLike(slotProps.scope)">查看</el-text> - <el-text - size="small" - type="danger" - icon="el-icon-edit" - text - @click="handleSign(slotProps.scope, 1)" - v-if="slotProps.scope.row.conditions < 30" - >签收</el-text - > - <el-text - type="primary" - text - icon="el-icon-edit" - @click="handleEdits(slotProps.scope)" - v-if="slotProps.scope.row.conditions < 20" - >编辑提货信息</el-text - > - <!-- <el-button size="small" type="danger" icon="el-icon-edit" text @click="handleDeleteOwn(slotProps.scope)">删除</el-button>--> + <template v-if="slotProps.scope.column.label === '提货批次'"> + <el-text size="small" text @click="handleLike(slotProps.scope)">{{ + slotProps.scope.row.pickupBatch + }}</el-text> + <el-text + type="primary" + text + icon="el-icon-edit" + @click="handleShowDetail(slotProps.scope)" + >明 细</el-text + > + </template> + + <template v-if="slotProps.scope.column.label === '操作'"> + <el-text size="small" text @click="handleLike(slotProps.scope)">查 看</el-text> + <el-text type="primary" text icon="el-icon-edit" @click="handleEdits(slotProps.scope)" + >明 细</el-text + > + </template> </template> </tablecmt> </el-row> + + <!-- 统计 --> + <el-row> + <div>选择数: , 运单数: , 件数: , 重量: , 体积: , 提货费: ,</div> + <div>总计: 总数: , 运单数: , 件数: , 重量: , 体积: , 提货费: ,</div> + </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> @@ -120,41 +125,453 @@ </el-pagination> </div> </el-row> - <!-- 表单模块 --> + + <!-- 表单模块 -- 新增 -- 编辑 --> <el-dialog :title="title" v-model="box" + width="80%" + :before-close="beforeClose" + append-to-body + > + <!-- 表单 --> + <el-form :disabled="view" ref="form" :model="form" label-width="80px"> + <!-- 表单字段 --> + <el-row> + <el-form-item label="提货车辆" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" placeholder="请选择提货车辆" /> + </el-form-item> + <el-button + style="margin-right: 10px" + v-if="addInfo.isNew" + type="primary" + @click=" + () => { + this.$router.push('/basicdata/vehicle/basicdataVehicle'); + } + " + icon="plus" + ></el-button> + <el-form-item label="司机" prop="consignee"> + <el-input v-model="form.consignee" placeholder="请选择司机" /> + </el-form-item> + <el-button + type="primary" + style="margin-right: 10px" + v-if="addInfo.isNew" + @click=" + () => { + this.$router.push('/basicdata/driverArtery/basicdataDriverArtery'); + } + " + icon="plus" + ></el-button> + <el-form-item label="线路" prop="pickUpPlate"> + <el-input v-model="form.pickUpPlate" placeholder="请选择线路" /> + </el-form-item> + <el-button + type="primary" + style="margin-right: 10px" + v-if="addInfo.isNew" + @click=" + () => { + this.popUpShow.addDistrilbutionLineVisited = true; + } + " + icon="plus" + ></el-button> + <el-form-item label="预计件数" prop="deliveryDocument"> + <el-input-number v-model="addInfo.form.num" :min="0" /> + </el-form-item> + </el-row> + + <el-row> + <el-form-item label="承运商" prop="pickUpTime"> + <el-select v-model="form.certificateType" clearable placeholder="请选择承运商"> + <el-option + v-for="item in certificateTypeData" + :key="item.dictKey" + :label="item.dictValue" + :value="item.dictKey" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="计费模式" prop="consignee"> + <el-select v-model="form.certificateType" clearable placeholder="请选择计费模式"> + <el-option + v-for="item in certificateTypeData" + :key="item.dictKey" + :label="item.dictValue" + :value="item.dictKey" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="提货费用" prop="pickUpPlate"> + <el-input-number v-model="addInfo.form.num" :min="0" /> + </el-form-item> + </el-row> + <el-form-item label="备注" prop="deliveryPlate"> + <el-input v-model="form.deliveryPlate" type="textarea" placeholder="请输入送货费用" /> + </el-form-item> + </el-form> + + <!-- 表格 --> + <div class="add_row"> + <!-- 列表模块 --> + <div style="width: 45%"> + <div style="text-align: end"> + <el-button type="text" style="cursor: pointer" @click="handleAddWaybill"> + 添 加 + <el-icon><CaretRight /></el-icon> + </el-button> + </div> + <tablecmt + :columnList="columnNewList" + :tableData="addInfo.oldData" + :loading="loadingObj.oldListLoading" + @inputTxt="inputsc" + @timeCheck="timesc" + @btnCheck="btnsc" + @selectCheck="selectsc" + @selection="selectionChange" + > + </tablecmt> + <div class="statistics_row"> + <div>合计: 选择数: {{ addInfo.oldSelectionList.length }},</div> + <div>件数: {{ selectionList.length }},</div> + <div>重量: {{ selectionList.length }},</div> + <div>体积: {{ selectionList.length }}</div> + </div> + <div class="avue-crud__pagination flex-c-sb" style="width: 100%"> + <!-- 分页模块 --> + <el-pagination + style="zoom: 0.9" + align="right" + background + @size-change="sizeChange" + @current-change="currentChange" + :current-page="addInfo.oldPages.currentPage" + :page-sizes="[30, 50, 80, 120]" + :page-size="addInfo.oldPages.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="addInfo.oldPages.total" + > + </el-pagination> + </div> + </div> + + <!-- 列表模块 --> + <div style="width: 45%"> + <div style="text-align: start"> + <el-button type="text" class="pointer" @click="handleRemoveWaybill"> + <el-icon><CaretLeft /></el-icon> + 移 除 + </el-button> + </div> + <tablecmt + :columnList="columnNewList" + :tableData="addInfo.newData" + :loading="loadingObj.oldListLoading" + @inputTxt="inputsc" + @timeCheck="timesc" + @btnCheck="btnsc" + @selectCheck="selectsc" + @selection="selectionChange" + > + </tablecmt> + <div class="statistics_row"> + <div>合计: 选择数: {{ addInfo.oldSelectionList.length }},</div> + <div>件数: {{ selectionList.length }},</div> + <div>重量: {{ selectionList.length }},</div> + <div>体积: {{ selectionList.length }}</div> + </div> + </div> + </div> + + <!-- 表单按钮 --> + <template #footer> + <span v-if="!view" class="dialog-footer"> + <el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit" + >提 交</el-button + > + <el-button icon="el-icon-circle-close" @click="box = false">取 消</el-button> + </span> + </template> + </el-dialog> + + <!-- 新增线路 --> + <el-dialog + title="新增线路" + v-model="popUpShow.addDistrilbutionLineVisited" + width="50%" + :before-close="beforeClose" + append-to-body + > + <div class="crad_container"> + <div class="card_container_item"> + <div class="card_container_item_title">基本信息</div> + <div class="card_container_item_box"> + <!-- 表单 --> + <el-form + :disabled="view" + ref="form" + :model="addLineInfo.addLineForm" + label-width="80px" + > + <!-- 表单字段 --> + <el-form-item label="状态" prop="pickUpTime"> + <el-switch v-model="form.pickUpTime" /> + </el-form-item> + <el-form-item label="备注" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" type="textarea" placeholder="请输入备注" /> + </el-form-item> + <el-form-item label="总时效" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" disabled placeholder="总时效" /> + </el-form-item> + <el-form-item label="总里程" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" disabled placeholder="总里程" /> + </el-form-item> + </el-form> + </div> + </div> + + <div class="card_container_item"> + <div class="card_container_item_title"> + <div>节点信息</div> + <el-text type="primary" class="pointer">创建新节点</el-text> + </div> + <div class="card_container_item_box"> + <el-scrollbar height="400px"> + <el-steps direction="vertical" style="height: 100%"> + <el-step + icon="Location" + v-for="(item, index) in addLineInfo.lineList" + :key="item" + > + <template #description> + <el-form :model="item" label-width="80px" style="zoom: 0.9"> + <el-row> + <!-- 表单字段 --> + <template v-if="index === 0"> + <el-form-item label="起点" prop="pickUpTime"> + <el-select + v-model="item.customerCode" + filterable + remote + reserve-keyword + remote-show-suffix + :remote-method="remoteCodeMethod" + :loading="loading" + @change="getMenDian($event, 2)" + placeholder="请输入内容" + :teleported="false" + placement="bottom-end" + class="popUpselect" + > + <el-option + v-for="item in options" + :key="item.value" + :label="item.code" + :value="item.value" + /> + </el-select> + </el-form-item> + </template> + + <template v-else> + <el-form-item label="节点" prop="pickUpTime"> + <el-select + v-model="item.customerCode" + filterable + remote + reserve-keyword + remote-show-suffix + :remote-method="remoteCodeMethod" + :loading="loading" + @change="getMenDian($event, 2)" + placeholder="请输入内容" + :teleported="false" + placement="bottom-end" + class="popUpselect" + > + <el-option + v-for="item in options" + :key="item.value" + :label="item.code" + :value="item.value" + /> + </el-select> + </el-form-item> + </template> + + <el-button + type="primary" + v-if="index !== 0" + icon="CirclePlusFilled" + @click=" + () => { + addLineInfo.lineList.splice(index, 1); + } + " + >删除</el-button + > + </el-row> + + <el-form-item label="联系人" prop="pickUpTime"> + <el-input v-model="item.name" type="text" /> + </el-form-item> + <el-form-item label="联系方式" prop="pickUpTime"> + <el-input v-model="item.code" type="text" /> + </el-form-item> + <el-form-item label="联系地址" prop="pickUpTime"> + <el-input v-model="item.code" type="text" /> + </el-form-item> + <el-form-item label="时效" prop="pickUpTime"> + <el-input-number :min="0" v-model="item.code" /> + </el-form-item> + <el-form-item label="里程" prop="pickUpTime"> + <el-input-number :min="0" v-model="item.code" /> + </el-form-item> + </el-form> + <el-button + type="primary" + v-if="index === addLineInfo.lineList.length - 1" + icon="CirclePlusFilled" + @click=" + () => { + addLineInfo.lineList.push({}); + } + " + >新增</el-button + > + </template> + </el-step> + + <!-- 终点 --> + <el-step icon="Location"> + <template #description> + <el-form + :disabled="view" + ref="form" + :model="addLineInfo.addLineForm" + label-width="80px" + style="zoom: 0.9" + > + <!-- 表单字段 --> + <el-form-item label="终点" prop="pickUpTime"> + <el-select + v-model="form.customerCode" + filterable + remote + reserve-keyword + remote-show-suffix + :remote-method="remoteCodeMethod" + :loading="loading" + @change="getMenDian($event, 2)" + placeholder="请输入内容" + :teleported="false" + placement="bottom-end" + class="popUpselect" + > + <el-option + v-for="item in options" + :key="item.value" + :label="item.code" + :value="item.value" + /> + </el-select> + </el-form-item> + <el-form-item label="联系人" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" type="text" /> + </el-form-item> + <el-form-item label="联系方式" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" type="text" /> + </el-form-item> + <el-form-item label="联系地址" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" type="text" /> + </el-form-item> + </el-form> + </template> + </el-step> + </el-steps> + </el-scrollbar> + </div> + </div> + </div> + <!-- 表单按钮 --> + <template #footer> + <span v-if="!view" class="dialog-footer"> + <el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit" + >提 交</el-button + > + <el-button + icon="el-icon-circle-close" + @click="popUpShow.addDistrilbutionVisited = false" + >取 消</el-button + > + </span> + </template> + </el-dialog> + + <!-- 添加提货数据 --> + <el-dialog + :title="title" + v-model="popUpShow.addDistrilbutionVisited" width="50%" :before-close="beforeClose" append-to-body > <el-form :disabled="view" ref="form" :model="form" label-width="80px"> <!-- 表单字段 --> - <el-form-item label="提货时间" prop="pickUpTime"> - <el-input v-model="form.pickUpTime" placeholder="请输入提货时间" /> + <el-form-item label="运单号" prop="clientId"> + <!-- <el-input v-model="form.customerName" placeholder="请输入客户名称"/>--> + <el-select + v-model="form.clientId" + filterable + remote + reserve-keyword + remote-show-suffix + :remote-method="remoteMethod" + :loading="loading" + clearable + placeholder="请输入运单号" + > + <el-option + v-for="item in options" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> </el-form-item> - <el-form-item label="提货人" prop="consignee"> + <el-form-item label="开单日期" prop="consignee"> <el-input v-model="form.consignee" placeholder="请输入提货人" /> </el-form-item> - <el-form-item label="提货车牌" prop="pickUpPlate"> - <el-input v-model="form.pickUpPlate" placeholder="请输入提货车牌" /> + <el-form-item label="货物名称" prop="pickUpPlate"> + <el-input v-model="form.pickUpPlate" placeholder="请输入货物名称" /> </el-form-item> - <el-form-item label="提货证件" prop="deliveryDocument"> + <el-form-item label="提货件数" prop="deliveryDocument"> + <el-input-number v-model="form.deliveryDocument" :min="1" :max="10" /> + </el-form-item> + <el-form-item label="到站" prop="deliveryDocument"> <el-input v-model="form.deliveryDocument" placeholder="请输入提货证件" /> </el-form-item> - <el-form-item label="证件类型" prop="certificateType"> - <el-select v-model="form.certificateType" clearable placeholder="请选择证件类型"> - <el-option - v-for="item in certificateTypeData" - :key="item.dictKey" - :label="item.dictValue" - :value="item.dictKey" - > - </el-option> - </el-select> + <el-form-item label="发货人" prop="pickUpTime"> + <el-input v-model="form.pickUpTime" placeholder="请输入发货人" /> + </el-form-item> + <el-form-item label="发货手机" prop="consignee"> + <el-input v-model="form.consignee" placeholder="请输入发货手机" /> + </el-form-item> + <el-form-item label="收货电话" prop="pickUpPlate"> + <el-input v-model="form.pickUpPlate" placeholder="请输入收货电话" /> </el-form-item> - <el-form-item label="费用合计" prop="totalCost"> - <el-input v-model="form.totalCost" placeholder="请输入费用合计" /> + <el-form-item label="支付方式" prop="deliveryDocument"> + <el-input v-model="form.deliveryDocument" placeholder="请输入支付方式" /> + </el-form-item> + <el-form-item label="备注" prop="deliveryDocument"> + <el-input v-model="form.deliveryDocument" type="textarea" placeholder="请输入备注" /> </el-form-item> </el-form> <!-- 表单按钮 --> @@ -163,10 +580,53 @@ <el-button type="primary" icon="el-icon-circle-check" @click="handleSubmit" >提 交</el-button > - <el-button icon="el-icon-circle-close" @click="box = false">取 消</el-button> + <el-button + icon="el-icon-circle-close" + @click="popUpShow.addDistrilbutionVisited = false" + >取 消</el-button + > </span> </template> </el-dialog> + + <!-- 查看明细 --> + <el-dialog + :title="title" + v-model="popUpShow.distrilbutionDetailVisited" + width="80%" + destroy-on-close + :before-close="beforeClose" + append-to-body + > + <!-- 列表模块 --> + <tablecmt + :columnList="columnDetailList" + :tableData="data" + :loading="loading" + @inputTxt="inputsc" + @timeCheck="timesc" + @btnCheck="btnsc" + @selectCheck="selectsc" + @selection="selectionChange" + > + </tablecmt> + <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="detailSizeChange" + @current-change="detailCurrentChange" + :current-page="detailPage.currentPage" + :page-sizes="[30, 50, 80, 120]" + :page-size="detailPage.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="detailPage.total" + > + </el-pagination> + </div> + </el-dialog> </div> </basic-container> <edittablehead @@ -179,14 +639,16 @@ <script> import { - add, - update, remove, getListOwn, getListOwnNUm, getBillLadingExport, } from '@/api/distribution/distrilbutionBillLading'; -import { columnList } from '@/option/distribution/arteryDistrilbutionBillLadingList'; +import { + columnList, + columnDetailList, + columnNewList, +} from '@/option/distribution/arteryDistrilbutionBillLadingList'; import { mapGetters } from 'vuex'; import { getDictionaryBiz } from '@/api/system/dict'; import { getToken } from '@/utils/auth'; @@ -197,17 +659,34 @@ export default { data() { return { columnList, - columnListedit: [], + columnDetailList, + columnNewList, + /** 列表配置抽屉 */ drawerShow: false, height: 0, // 弹框标题 title: '', // 是否展示弹框 box: false, + /** 弹出层显示 */ + popUpShow: { + /** 添加提货数据 */ + addDistrilbutionVisited: false, + /** 提货详情是否显示 */ + distrilbutionDetailVisited: false, + /** 新增线路是否显示 */ + addDistrilbutionLineVisited: false, + }, // 是否显示查询 search: true, // 加载中 loading: true, + /** 加载中 */ + loadingObj: { + loading: false, + oldListLoading: false, + newlistLoading: false, + }, // 是否为查看模式 view: false, // 查询信息 @@ -222,18 +701,56 @@ export default { pageSize: 30, total: 40, }, + /** 详情内分页信息 */ + detailPage: { + currentPage: 1, + pageSize: 30, + total: 40, + }, // 表单数据 form: {}, // 选择行 selectionList: [], // 表单列表 data: [], + /** 新增 && 编辑 信息 */ + addInfo: { + /** 表单 */ + form: {}, + /** 未选择 -- 数据 */ + oldData: [], + /** 已选择数据 */ + newData: [], + /** 未选择 -- 复选框 */ + oldSelectionList: [], + /** 已选择 -- 复选框 */ + newSelectionList: [], + /** 未选择 -- 页码数据 */ + oldPages: { + currentPage: 1, + pageSize: 30, + total: 40, + }, + /** 已选择 -- ids */ + haveIds: [], + /** 是否是新增 */ + isNew: true, + }, + /** 创建线路信息 */ + addLineInfo: { + /** 创建线路信息表单 */ + addLineForm: {}, + /** 线路列表 */ + lineList: [{}], + /** 起点信息 */ + startInfo: {}, + /** 终点信息 */ + endInfo: {}, + }, + /** 字典 */ clientType: [], - costList: [], - distributionType: [], - costListName: [], - certificateType: [], - + options: [], + /** 时间 */ shortcuts: [ { text: '最近一周', @@ -266,6 +783,7 @@ export default { }; }, mounted() { + console.log('columnDetailList :>> ', columnDetailList); this.init(); this.onLoad(this.page); /** @@ -306,9 +824,7 @@ export default { }, }, methods: { - /** - * 导出 - * */ + /** 导出 */ handleExportInfo() { let row = {}; console.log(this.stockupDate); @@ -352,14 +868,6 @@ export default { selectionsc(value) { console.log(value); }, - delectsolt(scope) { - const { row } = scope; - console.log(row); - }, - editsolt(scope) { - const { row } = scope; - console.log(row); - }, btnsc(index, row) { console.log(index, row); }, @@ -390,29 +898,27 @@ export default { this.query[row.prop] = index; this.onLoad(this.page); }, - handleRemove(file, fileList) { - console.log(file, fileList); - }, - handlePreview(file) { - console.log(file); - }, - textbox(e, index) { - console.log('e,index', e, index); - this.costList[index + 1] = e; - }, - handleCheckedCitiesChange(value) { - console.log('>>>>>>>', value); - if (value.length < 1) { - this.costList = []; - this.costListName = []; + /** 客户查询 */ + async remoteMethod(query) { + if (query) { + // this.loading = true; + this.options = []; + this.form.customerCode = null; + let cl = await getListClient(this.page.currentPage, this.page.pageSize, { + clientName: query, + }); + console.log('客户信息1234>>>>', cl.data.data.records); + cl.data.data.records.forEach(i => { + let st = { + label: i.clientName, + value: i.id, + code: i.clientCode, + }; + this.options.push(st); + }); + } else { + this.options = []; } - this.clientType.forEach(i => { - if (value.includes(i.dictKey)) { - console.log(i); - i.pitch = true; - this.costListName = value; - } - }); }, init() { this.height = this.setPx(document.body.clientHeight - 160); @@ -434,97 +940,74 @@ export default { checkcColumnList(prop, columnList) { return columnList.find(item => item.prop === prop); }, + /** 是否显示搜索控件 */ searchHide() { this.search = !this.search; }, + /** 搜索 */ searchChange() { this.onLoad(this.page); }, + /** 重置搜索数据 */ searchReset() { this.query = {}; this.stockupDate = []; this.page.currentPage = 1; this.onLoad(this.page); }, - bianLier(costListName, clientType, costList, fei) { - console.log('>>>>>>>>>', costListName, clientType, costList, fei); - this.pan = false; - for (let i = 0; i < costListName.length; i++) { - if (!costList) { - this.pan = true; - return; - } - for (let a = 0; a < clientType.length; a++) { - // console.log("进来了",clientType[a].dictKey , costListName[i]); - if (clientType[a].dictKey == costListName[i]) { - // console.log("进来了",clientType[a].dictKey , costListName[i]); - let zhi = costList[costListName[i]]; - if (!zhi) { - this.pan = true; - continue; - } else { - //2.添加 - fei.set(clientType[a].dictKey, zhi); - } - } - } - } - }, - async handleSubmit() { - if (!this.form.id) { - let fei = new Map(); - await this.bianLier(this.costListName, this.clientType, this.costList, fei); - this.form.fei = Object.fromEntries(fei); - this.form.stockArticleId = this.$route.query.ids; - console.log('this.form', this.form); - add(this.form).then(() => { - this.box = false; - this.onLoad(this.page); - this.$message({ - type: 'success', - message: '操作成功!', - }); - this.contextmenuFlag = false; - this.$store.commit('DEL_TAG_CURRENT'); - this.$router.push(this.tagWel); - }); - } else { - update(this.form).then(() => { - this.box = false; - this.onLoad(this.page); - this.$message({ - type: 'success', - message: '操作成功!', - }); - }); - } - }, + /** 表单提交 */ + async handleSubmit() {}, + /** 新增 */ handleAdd() { this.title = '新增'; - this.form = {}; + this.addInfo.form = {}; this.box = true; + this.addInfo.isNew = true; + this.$nextTick(() => { + // 获取表格实例并赋值高度和宽度 + var bodyContent = document.querySelectorAll('.el-dialog .maboxhi'); + bodyContent.forEach(val => { + val.style.height = '350px'; + // val.style.width = '45%'; + }); + }); }, - handleBillAdd() { - this.$router.push({ - path: '/distribution/inventory/distrilbutionBillLading', - query: { - type: '3', - }, + /** 修改 */ + handleEdit() { + this.title = '修改'; + this.addInfo.form = {}; + this.box = true; + this.addInfo.isNew = false; + this.$nextTick(() => { + // 获取表格实例并赋值高度和宽度 + var bodyContent = document.querySelectorAll('.el-dialog .maboxhi'); + bodyContent.forEach(val => { + val.style.height = '350px'; + // val.style.width = '45%'; + }); }); }, - //删除 + /** 开启添加提货数据弹窗 */ + handleAddDistrilbution() { + if (this.selectionList.length === 0) return this.$message.error('最少选择一条数据'); + this.title = '添加提货数据'; + this.popUpShow.addDistrilbutionVisited = true; + }, + /** 删除 */ handleDeleteOwn(row) { console.log('删除!!', row); }, - //查询详细 + /** 查询详细 */ handleLike(row) { - this.$router.push({ - path: '/distribution/inventory/distrilbutionBillLadingView', - query: { - id: row.row.id, - }, - }); + console.log('row :>> ', row); + // this.$router.push({ + // path: '/distribution/inventory/distrilbutionBillLadingView', + // query: { + // id: row.row.id, + // }, + // }); }, + /** 查看 */ handleEdits(row) { this.$router.push({ path: '/distribution/inventory/distrilbutionBillLading', @@ -535,6 +1018,7 @@ export default { }, }); }, + /** 批量删除 */ handleDelete() { if (this.selectionList.length === 0) { this.$message.warning('请选择至少一条数据'); @@ -557,43 +1041,42 @@ export default { }); }); }, - rowDel(row) { - this.$confirm('确定将选择数据删除?', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then(() => { - return remove(row.id); - }) - .then(() => { - this.onLoad(this.page); - this.$message({ - type: 'success', - message: '操作成功!', - }); - }); - }, + /** 弹出层开启前清除数据 */ beforeClose(done) { done(); this.form = {}; this.view = false; }, + /** 表格复选框改变执行的回调 */ selectionChange(list) { this.selectionList = list; }, + /** 清空复选框 */ selectionClear() { this.selectionList = []; // this.$refs.table.clearSelection(); }, + /** 页码改变执行回调 */ currentChange(currentPage) { this.page.currentPage = currentPage; this.onLoad(this.page); }, + /** 页数改变执行回调 */ sizeChange(pageSize) { this.page.pageSize = pageSize; this.onLoad(this.page); }, + /** 详情 -- 页码改变执行回调 */ + detailCurrentChange(currentPage) { + this.page.currentPage = currentPage; + this.onLoad(this.page); + }, + /** 详情 -- 页数改变执行回调 */ + detailSizeChange(pageSize) { + this.page.pageSize = pageSize; + this.onLoad(this.page); + }, + /** 获取时间 */ getTime(dat) { let date = new Date(dat); let formatter = new Intl.DateTimeFormat('en', { @@ -607,6 +1090,30 @@ export default { let formattedDate = formatter.format(date); return formattedDate.replace(/\//g, '-'); }, + /** 查看明细 */ + handleShowDetail({ row }) { + this.title = `${row.pickupBatch} 提货明细`; + this.popUpShow.distrilbutionDetailVisited = true; + this.$nextTick(() => { + var bodyContent = document.querySelector('.el-dialog .maboxhi'); + bodyContent.style.height = '600px'; + }); + }, + /** 添加运单 */ + 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); + }, + /** 移除运单 */ + 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); + }, + /** 请求页面数据 */ onLoad(page, params = {}) { this.loading = true; if (this.stockupDate.length > 0) { @@ -664,10 +1171,67 @@ export default { this.selectionClear(); }); }, + async getMenDian(row, num) { + // console.log("值阿德飒飒的",row); + if (num == 1) { + const obj = this.options.find(item => item.value === row); + console.log('obj>>>>>>>>>>>', obj); + this.options = [ + { + key: obj.value, + value: obj.value, + label: obj.label, + code: obj.code, + }, + ]; + this.form.customerCode = obj.code; + } else { + const obj = this.options.find(item => item.value === row); + console.log('obj>>>>>>>>>>>', obj); + this.options = [ + { + key: obj.value, + value: obj.value, + label: obj.label, + code: obj.code, + }, + ]; + this.form.clientId = obj.value; + } + this.form.serviceType = null; + let aa = ''; + this.options.some(i => { + // console.log(">><><><<>",i); + if (i.value == row) { + this.form.customerName = i.label; + this.form.clientCode = i.code; + //查询客户服务类型 + aa = i.value; + } + }); + let bu = await getListName(this.page.currentPage, this.page.pageSize, { + clientId: aa, + typeService: '3', + }); + // console.log("bububu",bu.data.data.records); + if (bu.data.data?.records.length > 0) { + this.form.serviceType = bu.data.data.records[0].mold; + } + let cl = await getListClient(this.page.currentPage, this.page.pageSize, { pid: row }); + // console.log(">>>>",cl.data.data.records); + this.shop = []; + cl.data.data.records.forEach(i => { + let st = { + label: i.clientName, + value: i.id, + }; + this.shop.push(st); + }); + }, }, }; </script> -<style> +<style scope lang="scss"> .foot { position: fixed; right: 0; @@ -699,11 +1263,17 @@ export default { </style> <style scoped lang="scss"> -.el-input { +/* .el-input { margin-left: 8px; } +*/ +:deep(.el-form-item) { + margin-right: 0; +} + :deep(.el-form-item__content) { - margin-left: 8px; + width: 200px !important; + margin: 0 8px; } .el-fr-d { width: 100%; @@ -741,4 +1311,79 @@ export default { display: flex; align-items: flex-end; } + +// 新增行 +.add_row { + display: flex; + justify-content: space-between; +} + +// 统计行 +.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; +} + +// 新增线路 +.addLine_list { + width: 100%; + + .list_row { + display: flex; + height: 30px; + border: 1px solid #ccc; + border-radius: 5px; + + .list_row_title { + width: 50%; + } + } +} + +:deep(.el-step:last-of-type .el-step__description) { + margin-right: 10%; +} + +.popUpselect :deep(.el-select__popper) { + inset: auto !important; + top: 110% !important; +} </style> diff --git a/vite.config.js b/vite.config.js index 2ecced33..279d8917 100644 --- a/vite.config.js +++ b/vite.config.js @@ -18,9 +18,13 @@ export default ({ mode, command }) => { // lmy // target: 'http://192.168.10.123:8889', // target: 'http://192.168.10.101:8888', - target: 'http://192.168.10.75:8777', + // target: 'http://192.168.10.75:8777', // tjj +<<<<<<< HEAD // target: 'http://192.168.10.25:13000', +======= + target: 'http://192.168.10.25:13000', +>>>>>>> 1fe2aeedc042f5201a0822d0f3debfa60899e91a // sst // target: 'http://192.168.10.94:8888', // target: 'http://test.api.huitongys.com',