123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- <template>
- <!-- 辅料采集详情界面 -->
- <div class="popUp" v-if="modelValue">
- <div class="header" style="height: 3vh">
- <div class="headerTittle" style="font-weight: border; font-size: 28px">辅料采集详情</div>
- </div>
- <div class="header" style="display: flex; justify-content: center; margin: 20px">
- <div class="box" @click.stop>
- <div class="boxItem">
- <div class="describeText">需采集物料:{{ showInfo.materialName }}</div>
- <div class="describeText">物料编码:{{ showInfo.materialCode }}</div>
- <div class="describeText">型号:{{ showInfo.spec }}</div>
- </div>
- </div>
- </div>
- <div class="body">
- <div class="container1" @click.stop>
- <div class="boxTittle">批次号列表(共 {{ batchNoTableData.length }} 批次)</div>
- <el-divider style="margin-top: 20px !important" />
- <div style="display: flex; margin-bottom: 20px; align-items: center">
- <div class="seqSearchInput">
- <!-- <el-input
- v-model="searchBatchNo"
- placeholder="搜索批次号"
- class="searchInput"
- clearable
- /> -->
- </div>
- <!-- <el-button style="width: 300px" type="success" @click="autoAll"
- >按需全批次自动绑定</el-button
- > -->
- </div>
- <el-table border class="seqTable" :data="showBatchNoTableData" style="flex: 1">
- <el-table-column align="center" label="批次号" prop="batchNo" />
- <el-table-column align="center" label="绑定管号">
- <template #default="scope">
- <el-scrollbar max-height="300px">
- <el-select
- multiple
- clearable
- filterable
- placeholder="管号"
- :disabled="!props.isShow"
- v-model="batchNoTableData[scope.$index].seqList"
- >
- <template #header>
- <el-checkbox @change="handleCheckAll(scope.$index)"> 全选 </el-checkbox>
- </template>
- <el-option v-for="item in seqList" :key="item" :label="item" :value="item"> </el-option>
- </el-select>
- </el-scrollbar>
- </template>
- </el-table-column>
- <!-- <el-table-column align="center" width="160" label="操作">
- <template #default="scope">
- <el-button style="width: 120px" type="primary"
- >按需自动绑定</el-button
- >
- </template>
- </el-table-column> -->
- <template #empty>
- <div class="empty">
- <Empty />
- </div>
- </template>
- </el-table>
- <div class="btns">
- <el-button type="primary" @click="submit" v-if="props.isShow">绑定确认</el-button>
- <el-button @click="handleClose">取消</el-button>
- </div>
- </div>
- <div class="container2" @click.stop>
- <div class="boxTittle">管号列表(共 {{ seqList.length }} 个 )</div>
- <el-divider />
- <div style="display: flex; margin-bottom: 20px; align-items: center">
- <div class="seqSearchInput">
- <el-input v-model="searchSeqNo" placeholder="搜索管号" class="searchInput" clearable />
- </div>
- <!-- <el-button @click="seqNoOk = true" :type="seqNoOk ? 'primary' : ''"
- >完成绑定</el-button
- >
- <el-button :type="!seqNoOk ? 'primary' : ''" @click="seqNoOk = false"
- >未完成</el-button
- > -->
- </div>
- <el-table border class="seqTable" :data="showSeqData" style="flex: 1">
- <el-table-column align="center" label="管号" prop="seqNo" />
- <el-table-column align="center" label="批次号绑定情况" prop="bodyatchNoList">
- <template #default="scope">
- <template v-if="scope.row.batchNoList.length > 0" v-for="item in scope.row.batchNoList">
- <div>批次号: {{ item }}</div>
- </template>
- <span v-else>-</span>
- </template>
- </el-table-column>
- <template #empty>
- <div class="empty">
- <Empty />
- </div>
- </template>
- </el-table>
- </div>
- </div>
- </div>
- </template>
- <script setup>
- import { useProcessStore } from "@/store";
- import { getunProcessedList } from "@/api/prosteps";
- import { saveFlBatch } from "@/api/prosteps/wuliaocaiji.ts";
- import { useUserStore } from "@/store";
- import { includes } from "lodash-es";
- const props = defineProps({
- modelValue: {
- type: Boolean,
- default: false,
- },
- showInfo: {
- type: Object,
- },
- isShow: {
- type: Boolean,
- default: true,
- },
- isMixMaterial: {
- type: Boolean,
- default: false,
- },
- });
- const searchBatchNo = ref("");
- const searchSeqNo = ref("");
- const handleCheckAll = (index) => {
- batchNoTableData.value[index].seqList = seqList.value;
- };
- const showBatchNoTableData = computed(() => {
- let array = JSON.parse(JSON.stringify(batchNoTableData.value));
- if (searchBatchNo.value) {
- const lowerCaseSearchValue = searchBatchNo.value.toLowerCase();
- array = array.filter((item) => item.batchNo && item.batchNo.toLowerCase().includes(lowerCaseSearchValue));
- }
- return array;
- });
- const store1 = useUserStore();
- const emits = defineEmits(["update:modelValue", "dataList"]);
- const store = useProcessStore();
- //批次号绑定
- const batchNoTableData = ref([]);
- const setBatchNo = () => {
- const array = [];
- if (props.showInfo.batchNoList.length > 0) {
- for (let i = 0; i < props.showInfo.batchNoList.length; i++) {
- array.push({
- batchNo: props.showInfo.batchNoList[i],
- seqList: [],
- });
- }
- }
- //回显逻辑
- if (props.showInfo.collectList.length > 0) {
- for (let i = 0; i < array.length; i++) {
- for (let j = 0; j < props.showInfo.collectList.length; j++) {
- if (props.showInfo.collectList[j].batchNo.includes(array[i].batchNo)) {
- array[i].seqList.push(props.showInfo.collectList[j].seqNo);
- }
- }
- }
- }
- batchNoTableData.value = array;
- };
- //获取当前物料绑定管号
- const seqTableData = ref([]);
- const getSeqList = async () => {
- const { data } = await getunProcessedList(store.scanInfo.id);
- seqList.value = data;
- };
- const setSeqTableData = () => {
- seqTableData.value = [];
- for (let i = 0; i < seqList.value.length; i++) {
- seqTableData.value.push({
- seqNo: seqList.value[i],
- batchNoList: [],
- });
- }
- };
- const showSeqData = computed(() => {
- let array = JSON.parse(JSON.stringify(seqTableData.value));
- let obj = {};
- for (let j = 0; j < batchNoTableData.value.length; j++) {
- obj[batchNoTableData.value[j].batchNo] = batchNoTableData.value[j].seqList;
- }
- for (let i = 0; i < array.length; i++) {
- for (let j = 0; j < batchNoTableData.value.length; j++) {
- if (obj[batchNoTableData.value[j].batchNo].includes(array[i].seqNo)) {
- array[i].batchNoList.push(batchNoTableData.value[j].batchNo);
- }
- }
- }
- if (searchSeqNo.value) {
- const lowerCaseSearchValue = searchSeqNo.value.toLowerCase();
- array = array.filter((item) => item.seqNo && item.seqNo.toLowerCase().includes(lowerCaseSearchValue));
- }
- return array;
- });
- const submit = async () => {
- const array = ref([]);
- batchNoTableData.value.forEach((item) => {
- if (item.seqList.length > 0) {
- array.value.push({
- itemCode: props.showInfo.materialCode,
- itemModel: props.showInfo.spec,
- itemName: props.showInfo.materialName,
- operationId: store.scanInfo.operationId,
- operationName: store.scanInfo.operationName,
- processId: store.scanInfo.id,
- workOrderCode: store.odersData.workOrderCode,
- trackBy: store1.user.username,
- seqNoList: item.seqList,
- batchNo: item.batchNo,
- isMixMaterial: props.isMixMaterial ? 1 : 0,
- });
- }
- });
- if (array.value.length < 1) {
- ElMessage.error("请先绑定物料!");
- return;
- }
- const { code } = await saveFlBatch(array.value);
- if (code == "200") {
- ElMessage.success("采集成功!");
- handleClose();
- dataList();
- }
- };
- //更新外部列表
- const dataList = () => {
- emits("dataList");
- };
- const handleClose = () => {
- emits("update:modelValue", false);
- };
- //当前所有管号
- const seqList = ref([]);
- watch(
- () => props.showInfo,
- async () => {
- if (props.showInfo) {
- await getSeqList();
- setBatchNo();
- setSeqTableData();
- }
- }
- );
- </script>
- <style>
- .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);
- }
- </style>
- <style lang="scss" scoped>
- .selectInfo {
- margin-bottom: 5px;
- }
- :deep(.el-form-item) {
- margin-bottom: 5px !important;
- }
- .sumFail {
- color: black;
- }
- .sumOk {
- color: green;
- }
- .describeText {
- font-size: 20px !important;
- font-weight: bolder;
- color: black;
- }
- .searchInput {
- height: 40px;
- }
- :deep(.el-input__wrapper) {
- height: 40px !important;
- }
- :deep(.el-table__cell) {
- font-size: 18px !important;
- }
- .el-divider {
- margin-bottom: 10px;
- }
- .el-button {
- width: 180px;
- height: 40px;
- font-size: 18px;
- border-radius: 10px;
- }
- .describeText {
- line-height: 25px !important;
- }
- .seqTable {
- border-radius: 16px;
- }
- .boxTittle {
- font-size: 18px;
- font-weight: bolder;
- text-align: center;
- height: 1vh;
- }
- .popUp {
- position: fixed;
- width: 100vw;
- height: 100vh;
- z-index: 999;
- background-color: #00000030;
- top: 0;
- left: 0;
- backdrop-filter: blur(5px);
- .header {
- margin: 0;
- .box {
- width: 95vw;
- height: 6vh;
- background-color: #f1f3f5;
- border-radius: 16px;
- padding: 10px;
- display: flex;
- flex-direction: column;
- justify-content: space-evenly;
- .boxItem {
- display: flex;
- justify-content: space-between;
- padding: 0 5%;
- .describeText {
- font-size: 18px;
- }
- }
- }
- }
- .body {
- width: 100vw;
- height: 85vh;
- display: flex;
- justify-content: space-evenly;
- .container1 {
- width: 60vw;
- height: 100%;
- background-color: #f1f3f5;
- border-radius: 16px;
- padding: 10px;
- display: flex;
- flex-direction: column;
- .seqSearchInput {
- margin-right: 10px;
- width: 40%;
- max-width: 360px;
- }
- .btns {
- padding-top: 10px;
- display: flex;
- justify-content: space-evenly;
- align-items: center;
- }
- }
- .container2 {
- width: 32vw;
- height: 100%;
- background-color: #f1f3f5;
- border-radius: 16px;
- padding: 10px;
- display: flex;
- flex-direction: column;
- .seqSearchInput {
- margin-right: 10px;
- width: 40%;
- max-width: 360px;
- }
- .btns {
- height: 8vh;
- display: flex;
- justify-content: space-evenly;
- align-items: center;
- }
- }
- }
- }
- .headerTittle {
- width: 100%;
- height: 55px;
- text-align: center;
- line-height: 55px;
- font-size: 38px;
- font-weight: 500;
- }
- </style>
|