Merge remote-tracking branch 'origin/dev' into dev

dev
zengchenxi 6 months ago
commit 24026c1759

@ -9,8 +9,7 @@
<img src="/src/assets/imgs/status/statuszf.png" v-else-if="formData.status == 3" alt="" /> <img src="/src/assets/imgs/status/statuszf.png" v-else-if="formData.status == 3" alt="" />
<span v-else></span> <span v-else></span>
</div> </div>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading" <el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading" v-bind:disabled="isShowBtnOther">
v-bind:disabled="isShowBtnOther">
<!-- 基础信息 --> <!-- 基础信息 -->
<el-card class="hl-card-info"> <el-card class="hl-card-info">
<template #header> <template #header>
@ -28,10 +27,8 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="stockInType" label="出库类型"> <el-form-item prop="stockInType" label="出库类型">
<el-select v-model="formData.stockInType" clearable style="width: 100%" @change="handleStockType" <el-select v-model="formData.stockInType" clearable style="width: 100%" @change="handleStockType" v-bind:disabled="ctrView || ctrSave">
v-bind:disabled="ctrView || ctrSave"> <el-option v-for="dict in getIntDictOptions(DICT_TYPE.BIZ_STORAGE_OUT_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.BIZ_STORAGE_OUT_TYPE)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -40,37 +37,38 @@
<el-col :span="8"> <el-col :span="8">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="industry" label="单据状态"> <el-form-item label="单据日期" prop="createTime">
<el-select v-model="formData.status" placeholder="下拉选择" clearable class="!w-700px" disabled> <el-date-picker v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled class="!w-400px" />
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.BIZ_STORAGE_STATUS)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="headerNo" label="上游单号"> <!-- 上游单号修改为派工单号 注释关联销售单-->
<el-input v-model="formData.headerNo" class="!w-700px" <el-form-item prop="headerNo" label="派工单号">
v-bind:disabled="ctrView || ctrSave || enableHeadNo" /> <!-- <el-input v-model="formData.headerNo" class="!w-400px" @click="handleHeaderNo" v-bind:disabled="ctrView || ctrSave || enableHeadNo" /> -->
<el-input class="!w-400px" v-bind:disabled="ctrView || ctrSave || enableHeadNo" v-model="formData.saleOrderCode" @click.prevent="handleHeaderNo" :readonly="!isEditing" placeholder="请输入派工单号">
<template #append><el-button v-bind:disabled="ctrView || ctrSave || enableHeadNo" :icon="Search" @click="handleHeaderNo" /></template>
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="单据日期" prop="createTime"> <el-form-item prop="industry" label="单据状态">
<el-date-picker v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled <el-select v-model="formData.status" placeholder="下拉选择" clearable class="!w-400px" disabled>
class="!w-400px" /> <el-option v-for="dict in getIntDictOptions(DICT_TYPE.BIZ_STORAGE_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="whId" label="出库仓库" required> <el-form-item prop="whId" label="出库仓库" required>
<el-select v-model="formData.whId" placeholder="下拉选择" clearable class="!w-400px" @change="handleWh" <el-select v-model="formData.whId" placeholder="下拉选择" clearable class="!w-400px" @change="handleWh" v-bind:disabled="ctrView || ctrSave">
v-bind:disabled="ctrView || ctrSave">
<el-option v-for="dict in whList" :key="dict.id" :label="dict.whName" :value="dict.id" /> <el-option v-for="dict in whList" :key="dict.id" :label="dict.whName" :value="dict.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -81,8 +79,7 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注" prop="description"> <el-form-item label="备注" prop="description">
<el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200" class="!w-2080px" <el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200" class="!w-2080px" v-bind:disabled="ctrView || ctrSave" />
v-bind:disabled="ctrView || ctrSave" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -96,11 +93,9 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col> <el-col>
<el-button class="hl-addbutton" type="primary" size="large" v-bind:disabled="ctrView || ctrSave" <el-button class="hl-addbutton" type="primary" size="large" v-bind:disabled="ctrView || ctrSave" @click="openMatForm"></el-button>
@click="openMatForm">新增</el-button>
</el-col> </el-col>
<el-form ref="matSubFormRef" :model="formData.matItemDOList" :rules="subFormRules" <el-form ref="matSubFormRef" :model="formData.matItemDOList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table"> <el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column type="index" label="序号" min-width="80" align="center" fixed /> <el-table-column type="index" label="序号" min-width="80" align="center" fixed />
<el-table-column prop="matCode" min-width="180" align="center"> <el-table-column prop="matCode" min-width="180" align="center">
@ -110,8 +105,7 @@
<!-- <MaterialSelect v-model="scope.row.matId" <!-- <MaterialSelect v-model="scope.row.matId"
@update:newValue="handleSelectedMaterial(scope.$index, $event)" @update:newValue="handleSelectedMaterial(scope.$index, $event)"
v-bind:disabled="ctrView || ctrSave" /> --> v-bind:disabled="ctrView || ctrSave" /> -->
<el-input class="!w-265px" placeholder="物料编码" v-bind:disabled="true || ctrView || ctrSave" <el-input class="!w-265px" placeholder="物料编码" v-bind:disabled="true || ctrView || ctrSave" v-model="scope.row.matCode" readonly>
v-model="scope.row.matCode" readonly>
<!-- <template #append><el-button @click="openMatForm" disabled> <!-- <template #append><el-button @click="openMatForm" disabled>
<Icon icon="ep:search" class="mr-5px" /> <Icon icon="ep:search" class="mr-5px" />
</el-button></template> --> </el-button></template> -->
@ -134,51 +128,17 @@
v-if="scope.row.matUnit ? true : false" /> v-if="scope.row.matUnit ? true : false" />
</template> --> </template> -->
</el-table-column> </el-table-column>
<el-table-column prop="rgId" min-width="120" align="center">
<template #header> <span class="hl-table_header">*</span>出库库区 </template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.rgId`" :rules="subFormRules.rgId" class="mb-0px!">
<!-- <el-select v-model="scope.row.rgId" placeholder="" style="width: 100%" v-bind:disabled="true">
<el-option v-for="dict in rgList" :key="dict.id" :label="dict.rg_name" :value="dict.id" />
</el-select> -->
<RgSelect v-model="scope.row.rgId" v-bind:disabled="ctrView || ctrSave" :anotherProp="formData.whId" @update:newValue="handleSelectedrg(scope.$index, $event)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="pnId" min-width="160" align="center">
<template #header> <span class="hl-table_header">*</span>出库库位 </template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.pnId`" :rules="subFormRules.pnId" class="mb-0px!">
<!-- <el-select v-model="scope.row.pnId" placeholder="" style="width: 100%"
v-bind:disabled="ctrView || ctrSave" @change="handlePn(scope)">
<el-option v-for="dict in scope.row.pnlist" :key="dict.id" :label="dict.pn_name"
:value="dict.id" />
</el-select> -->
<PnSelect v-model="scope.row.pnId" v-bind:disabled="ctrView || ctrSave" :anotherProp="formData.matItemDOList[scope.$index].rgId" @update:newValue="handleSelectedpn(scope.$index, $event)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="matRest" label="库存数量" min-width="120" align="center" /> <el-table-column prop="matRest" label="库存数量" min-width="120" align="center" />
<el-table-column prop="storageOkQty" min-width="120" align="center"> <el-table-column prop="storageOkQty" min-width="120" align="center">
<template #header> <span class="hl-table_header">*</span>出库数量</template> <template #header> <span class="hl-table_header">*</span>本次出库数量</template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.storageOkQty`" :rules="subFormRules.storageOkQty" <el-form-item :prop="`${scope.$index}.storageOkQty`" :rules="subFormRules.storageOkQty" class="mb-0px!">
class="mb-0px!">
<el-input v-model="scope.row.storageOkQty" v-bind:disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.storageOkQty" v-bind:disabled="ctrView || ctrSave" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="lotNo" min-width="120" label="批次号" align="center" v-if="false" /> <!-- 新增领料工序 -->
<el-table-column prop="projectSubName" label="子项目名称" align="center" min-width="180">
<template #default="scope">
<el-input v-model="scope.row.projectSubName" v-bind:disabled="ctrView || ctrSave" readonly>
<template #append><el-button @click="openProjectForm(scope)">
<Icon icon="ep:search" class="mr-5px" />
</el-button></template>
</el-input>
</template>
</el-table-column>
<el-table-column prop="description" min-width="180" label="备注" align="center"> <el-table-column prop="description" min-width="180" label="备注" align="center">
<template #default="scope"> <template #default="scope">
<el-input v-model="scope.row.description" v-bind:disabled="ctrView || ctrSave" /> <el-input v-model="scope.row.description" v-bind:disabled="ctrView || ctrSave" />
@ -186,17 +146,8 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="100"> <el-table-column label="操作" align="center" width="100">
<template #default="scope"> <template #default="scope">
<!-- <el-button v-if="!scope.row.editable" type="primary" size="small" link <!-- <el-button link type="primary" @click="handlefuke(scope.$index, scope.row)">复制</el-button> -->
@click="handleEdit(scope.$index)"> <el-button link type="danger" size="small" @click.prevent="handleDelete2(scope.$index)" v-bind:disabled="ctrView || ctrDelete">
编辑
</el-button>
<el-button link v-else type="success" size="small" @click="handleSave(scope.$index)">
保存
</el-button>
<el-button link type="primary" @click="handlefuke(scope.$index, scope.row)">复制</el-button> -->
<el-button link type="danger" size="small" @click.prevent="handleDelete2(scope.$index)"
v-bind:disabled="ctrView || ctrDelete">
删除 删除
</el-button> </el-button>
</template> </template>
@ -219,16 +170,13 @@
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :action="uploadUrl" :headers="{ <el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :action="uploadUrl" :headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" }" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
:on-change="matUploadChange" :on-error="handleError" :on-success="handleSuccess"
:before-upload="before" class="upload-file-uploader">
<el-button type="primary" v-bind:disabled="ctrView || ctrSave"> <el-button type="primary" v-bind:disabled="ctrView || ctrSave">
<Icon icon="ep:upload-filled" />上传 <Icon icon="ep:upload-filled" />上传
</el-button> </el-button>
</el-upload> </el-upload>
</el-col> </el-col>
<el-table :data="formData.attachments" class="hl-table" v-loading.fullscreen.lock="uploading" <el-table :data="formData.attachments" class="hl-table" v-loading.fullscreen.lock="uploading" element-loading-text="..." element-loading-background="rgba(122, 122, 122, 0.6)">
element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)">
<el-table-column prop="name" label="文件名称" align="center"> <el-table-column prop="name" label="文件名称" align="center">
<!-- <template #default="scope"> <!-- <template #default="scope">
<a :href="scope.row.url" target="_blank" style="color: #409eff">{{ scope.row.name }} </a> <a :href="scope.row.url" target="_blank" style="color: #409eff">{{ scope.row.name }} </a>
@ -239,12 +187,10 @@
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template #default="scope"> <template #default="scope">
<el-button link type="danger" size="small" v-bind:disabled="ctrView || ctrDelete" <el-button link type="danger" size="small" v-bind:disabled="ctrView || ctrDelete" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除 删除
</el-button> </el-button>
<el-button link type="primary" size="small" v-bind:disabled="ctrView || ctrDelete" <el-button link type="primary" size="small" v-bind:disabled="ctrView || ctrDelete" @click="downloadAttachment(scope.row.name, scope.row.url)">
@click="downloadAttachment(scope.row.name, scope.row.url)">
下载 下载
</el-button> </el-button>
</template> </template>
@ -312,9 +258,12 @@
<materials ref="matOpenFormRef" @success="getList" /> <materials ref="matOpenFormRef" @success="getList" />
<!-- 表单弹窗物料列表 --> <!-- 表单弹窗物料列表 -->
<projects ref="proOpenFormRef" @success="getProject" /> <projects ref="proOpenFormRef" @success="getProject" />
<taskdispatchselect ref="handleHeaderNoRef" @success="getHeaderNo" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue' import { ref } from 'vue'
import { Search, Plus } from '@element-plus/icons-vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import { dateFormatter, formatDate } from '@/utils/formatTime' import { dateFormatter, formatDate } from '@/utils/formatTime'
import type { UploadUserFile } from 'element-plus' import type { UploadUserFile } from 'element-plus'
@ -336,6 +285,7 @@ import RgSelect from '@/views/biz/hlvuestyle/rgSelect.vue'
import PnSelect from '@/views/biz/hlvuestyle/pnSelect.vue' import PnSelect from '@/views/biz/hlvuestyle/pnSelect.vue'
import materials from './materials.vue' import materials from './materials.vue'
import projects from './subproject.vue' import projects from './subproject.vue'
import taskdispatchselect from './taskdispatchselect.vue'
const reload: any = inject('reload') const reload: any = inject('reload')
@ -387,7 +337,6 @@ const subFormRules = reactive({
storageOkQty: [{ required: true, message: '出库数量不能为空', trigger: 'blur' }] storageOkQty: [{ required: true, message: '出库数量不能为空', trigger: 'blur' }]
}) })
const matOpenFormRef = ref() const matOpenFormRef = ref()
const proOpenFormRef = ref() const proOpenFormRef = ref()
@ -400,8 +349,12 @@ const openMatForm = () => {
matOpenFormRef.value.open(formData.value.whId, 'out') matOpenFormRef.value.open(formData.value.whId, 'out')
} }
const openProjectForm = (scope) => { const handleHeaderNoRef = ref()
const handleHeaderNo =()=>{
handleHeaderNoRef.value.open()
}
const openProjectForm = (scope) => {
proOpenFormRef.value.open(scope) proOpenFormRef.value.open(scope)
} }
const getList = async (arrMat) => { const getList = async (arrMat) => {
@ -429,14 +382,23 @@ const getList = async (arrMat) => {
} }
const getProject = async (pro, scope) => { const getProject = async (pro, scope) => {
formData.value.matItemDOList.forEach( formData.value.matItemDOList.forEach((item) => {
(item) => { if (
if (item.matId == scope.value.row.matId && item.whId == scope.value.row.whId && item.rgId == scope.value.row.rgId && item.pnId == scope.value.row.pnId) { item.matId == scope.value.row.matId &&
item.projectNo = pro.projectSubId item.whId == scope.value.row.whId &&
item.projectSubName = pro.projectSubName item.rgId == scope.value.row.rgId &&
} item.pnId == scope.value.row.pnId
) {
item.projectNo = pro.projectSubId
item.projectSubName = pro.projectSubName
} }
) })
}
const getHeaderNo = async (headerNo) => {
console.log(headerNo.code);
formData.value.headerNo = headerNo.code
} }
// //
@ -467,9 +429,13 @@ const handleStatus = async (num) => {
} }
var repeatItem = [] var repeatItem = []
formData.value.matItemDOList.forEach(item => { formData.value.matItemDOList.forEach((item) => {
if (formData.value.matItemDOList.filter((mat) => mat.matId == item.matId && mat.pnId == item.pnId).length > 1) { if (
var tmpCode = "[" + item.matCode + "]" formData.value.matItemDOList.filter(
(mat) => mat.matId == item.matId && mat.pnId == item.pnId
).length > 1
) {
var tmpCode = '[' + item.matCode + ']'
if (repeatItem.indexOf(tmpCode) < 0) { if (repeatItem.indexOf(tmpCode) < 0) {
repeatItem.push(tmpCode) repeatItem.push(tmpCode)
} }
@ -679,9 +645,12 @@ const submitForm = async () => {
await formRef.value.validate() await formRef.value.validate()
var repeatItem = [] var repeatItem = []
formData.value.matItemDOList.forEach(item => { formData.value.matItemDOList.forEach((item) => {
if (formData.value.matItemDOList.filter((mat) => mat.matId == item.matId && mat.pnId == item.pnId).length > 1) { if (
var tmpCode = "[" + item.matCode + "]" formData.value.matItemDOList.filter((mat) => mat.matId == item.matId && mat.pnId == item.pnId)
.length > 1
) {
var tmpCode = '[' + item.matCode + ']'
if (repeatItem.indexOf(tmpCode) < 0) { if (repeatItem.indexOf(tmpCode) < 0) {
repeatItem.push(tmpCode) repeatItem.push(tmpCode)
} }
@ -740,7 +709,6 @@ const submitForm = async () => {
} }
} }
const onAddItem = () => { const onAddItem = () => {
if (formData.value.whId) { if (formData.value.whId) {
const newData = { const newData = {
@ -952,7 +920,12 @@ onMounted(async () => {
//- //-
whList.value = await WarehouseApi.getWarehouseSimpList() whList.value = await WarehouseApi.getWarehouseSimpList()
formData.value.whId = Math.min.apply(Math, whList.value.map(function(i) {return i.id})); formData.value.whId = Math.min.apply(
Math,
whList.value.map(function (i) {
return i.id
})
)
// //
await getMatList('') await getMatList('')
@ -1002,8 +975,13 @@ onMounted(async () => {
item.matCode = matEditList.value.find((record) => record.id === item.matId)?.code item.matCode = matEditList.value.find((record) => record.id === item.matId)?.code
item.matName = matEditList.value.find((record) => record.id === item.matId)?.name item.matName = matEditList.value.find((record) => record.id === item.matId)?.name
item.matSpec = matEditList.value.find((record) => record.id === item.matId)?.spec item.matSpec = matEditList.value.find((record) => record.id === item.matId)?.spec
item.matType = matTypes.find( op => op.value == matEditList.value.find((record) => record.id === item.matId)?.material_type)?.label item.matType = matTypes.find(
item.matUnit = matUnits.find( op => op.value == matEditList.value.find((record) => record.id === item.matId)?.unit)?.label//matSimpList.value.find((record) => record.id === item.matId)?.unit (op) =>
op.value == matEditList.value.find((record) => record.id === item.matId)?.material_type
)?.label
item.matUnit = matUnits.find(
(op) => op.value == matEditList.value.find((record) => record.id === item.matId)?.unit
)?.label //matSimpList.value.find((record) => record.id === item.matId)?.unit
item.matRest = matLastData.value.find( item.matRest = matLastData.value.find(
(row) => row.matId == item.matId && row.pnId == item.pnId (row) => row.matId == item.matId && row.pnId == item.pnId
)?.matRest )?.matRest
@ -1056,7 +1034,7 @@ const handleSelectedrg = (currentIndex: number, newValue: any) => {
formData.value.matItemDOList[currentIndex].rgId = newValue?.id formData.value.matItemDOList[currentIndex].rgId = newValue?.id
} }
// //
const handleSelectedpn= (currentIndex: number, newValue: any) => { const handleSelectedpn = (currentIndex: number, newValue: any) => {
formData.value.matItemDOList[currentIndex].pnId = newValue?.id formData.value.matItemDOList[currentIndex].pnId = newValue?.id
} }
</script> </script>

@ -0,0 +1,205 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="80%">
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item label="派工单号" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入生产派工单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="生产订单号" prop="projectCode">
<el-input v-model="queryParams.projectCode" placeholder="请输入生产订单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="生产计划单号" prop="planCode">
<el-input v-model="queryParams.planCode" placeholder="请输入生产计划单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="产品编码/名称" prop="projectSubName">
<el-input v-model="queryParams.projectSubName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="生产车间" prop="workshopId">
<el-input v-model="queryParams.workshopId" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 查询
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<el-card class="hl-table">
<!-- <el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" @selection-change="handleSelectionChange" :row-key="getRowKeys" min-width="1800" @row-click="clickRow" :style="{ height: list && list.length > 9 ? '450px' : ''}">
<el-table-column type="selection" width="55" :reserve-selection="true" :selectable="row=>chkboxEnable" />
<el-table-column label="序号" type="index" min-width="120" align="center" />
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" />
<el-table-column prop="matName" label="物料名称" min-width="140" align="center" />
<el-table-column prop="matType" label="物料类型" min-width="120" align="center" />
<el-table-column prop="shortName" label="物料简称" min-width="120" align="center" />
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matBrand" label="品牌" min-width="120" align="center" />
<el-table-column prop="rgName" label="库区" min-width="120" align="center" v-if="formType =='out'"/>
<el-table-column prop="pnName" label="库位" min-width="140" align="center" v-if="formType =='out'" />
<el-table-column prop="storageOkQty" label="库存数量" min-width="120" align="center" />
<el-table-column prop="matUnit" label="库存单位" min-width="120" align="center" />
</el-table> -->
<el-table ref="multipleTable" :data="list" v-loading="formLoading" class="hl-table" @selection-change="handleSelectionChange" :row-key="getRowKeys" min-width="1800" @row-click="clickRow" :style="{ height: list && list.length > 9 ? '450px' : ''}">
<el-table-column type="selection" width="55" :reserve-selection="true" :selectable="row=>chkboxEnable" />
<el-table-column fixed type="index" min-width="70" label="序号" align="center" />
<el-table-column label="生产订单号" align="center" prop="projectCode" min-width="220" />
<el-table-column fixed label="生产计划单号" align="center" prop="planCode" min-width="180" />
<el-table-column label="生产车间" align="center" prop="workshopName" min-width="180" />
<el-table-column fixed label="派工单号" align="center" prop="code" min-width="195">
<template #default="scope">
{{ scope.row.code }}
</template>
</el-table-column>
<el-table-column label="产品编码" align="center" prop="projectSubCode" min-width="260" />
<el-table-column label="产品名称" align="center" prop="projectSubName" min-width="180" />
<el-table-column label="规格型号" align="center" prop="spec" min-width="160" />
<el-table-column fixed="right" label="生产状态" align="center" prop="dispatchStatus" min-width="140">
<template #default="scope">
<dict-tag :type="DICT_TYPE.BIZ_DISPATCH_STATUS" :value="scope.row.dispatchStatus" />
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { ElTable } from 'element-plus'
import * as TaskDispatchApi from '@/api/biz/taskdispatch'
import { useCommonStore } from '@/store/modules/common'
import { useUserStore } from '@/store/modules/user'
//:selectable="row=>row.disabled || chkboxEnable"
const chkboxEnable = ref(true)
const queryEnable = ref(true)
const userStore = useUserStore()
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const list = ref([]) //
const total = ref(0) //
const multipleTable = ref<InstanceType<typeof ElTable>>()
const multipleSelection = ref([])
// const handleSelectionChange = (val: []) => {
// multipleSelection.value = val
// }
const handleSelectionChange = (val: []) => {
if (val.length > 1) {
multipleTable.value.clearSelection()
multipleTable.value.toggleRowSelection(val.pop())
} else {
multipleSelection.value = val.pop()
}
}
const clickRow = (row: any) => {
if(row){
multipleTable.value!.toggleRowSelection(row, undefined)
}else{
multipleTable.value!.clearSelection()
}
}
//key,
const getRowKeys = (row) => {
return row.matId
}
const dispatchType = ''
const username = userStore.getUser.nickname
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
dispatchType: dispatchType,
planCode: undefined,
planId: undefined,
projectCode: undefined,
projectSubCode: undefined,
customerName: undefined,
dispatchStatus: undefined,
remark: undefined,
status: undefined,
createTime: [],
ownerName: undefined
})
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const queryFormRef = ref() //
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 查询列表 */
const getList = async () => {
formLoading.value = true
try {
const data = await TaskDispatchApi.getTaskDispatchPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
formLoading.value = false
}
}
const formType = ref()
/** 打开弹窗 */
const open = async (whId: number, type: string) => {
multipleSelection.value = []
dialogVisible.value = true
dialogTitle.value = '物料列表'
formType.value = type
//
getList()
chkboxEnable.value = true
list.value.forEach((row) => {
setTimeout(() => {
multipleTable.value.toggleRowSelection(row, !chkboxEnable.value) //
}, 0)
})
try {
//
} finally {
formLoading.value = false
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
formLoading.value = true
try {
dialogVisible.value = false
// multipleSelection.value.forEach((item) => {})
//
emit('success', multipleSelection.value)
} finally {
formLoading.value = false
}
}
</script>

@ -1,29 +1,48 @@
<template> <template>
<Dialog v-model="dialogVisible" title="上传文件"> <Dialog v-model="dialogVisible" title="上传文件" width="50%">
<el-upload <el-form ref="formRef" label-width="140px" :rules="formRules" :model="formData">
ref="uploadRef" <el-form-item label="APP ID" prop="businessFileType">
v-model:file-list="fileList" <el-input v-model="formData.businessFileType" class="!w-250px" placeholder="请输入APP ID" />
:action="url" </el-form-item>
:auto-upload="false" <el-form-item label="版本号" prop="businessId">
:data="data" <el-input v-model="formData.businessId" class="!w-250px" placeholder="请输入版本号" />
:disabled="formLoading" </el-form-item>
:headers="uploadHeaders" <el-form-item label="下载链接" prop="url">
:limit="1" <el-input v-model="formData.url" class="!w-250px" placeholder="请输入下载链接" />
:on-change="handleFileChange" </el-form-item>
:on-error="submitFormError" <el-form-item label="说明" prop="businessFileRemark">
:on-exceed="handleExceed" <el-input v-model="formData.businessFileRemark" class="!w-250px" placeholder="请输入说明" />
:on-success="submitFormSuccess" </el-form-item>
accept=".zip,.rar" <!-- <el-form-item label="发布日期" prop="createTime">
drag <el-input v-model="formData.createTime" class="!w-250px" placeholder="请输入发布日期" />
> </el-form-item> -->
<i class="el-icon-upload"></i> </el-form>
<div class="el-upload__text"> 将文件拖到此处 <em>点击上传</em></div> <el-card class="hl-incard">
<template #tip> <el-col>
<div class="el-upload__tip" style="color: red"> <el-upload ref="UploadRef" :file-list="uploadFiles" multiple :action="uploadUrl" :headers="{
提示仅允许导入 ziprar 格式文件 Authorization: 'Bearer ' + getAccessToken(),
</div> 'tenant-id': getTenantId()
</template> }" name="files" :show-file-list="false" :auto-upload="false" :data="uploadData" :on-change="UploadChange" :on-error="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader">
</el-upload> <el-button type="primary">
<Icon icon="ep:upload-filled" />上传附件
</el-button>
</el-upload>
</el-col>
<el-table :data="formData.attachments" v-loading.fullscreen.lock="uploading" element-loading-text="..." element-loading-background="rgba(122, 122, 122, 0.6)" class="hl-table">
<el-table-column prop="name" label="文件名称" align="center" />
<el-table-column prop="createTime" align="center" label="上传时间" :formatter="dateFormatter" />
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button link type="danger" size="small" @click="handleDeleteAttachment(scope.$index)">
删除
</el-button>
<!-- <el-button v-if="!!scope.row.id" link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)">
下载
</el-button> -->
</template>
</el-table-column>
</el-table>
</el-card>
<template #footer> <template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitFileForm"> </el-button> <el-button :disabled="formLoading" type="primary" @click="submitFileForm"> </el-button>
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false"> </el-button>
@ -32,22 +51,22 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { getAccessToken, getTenantId } from '@/utils/auth' import { getAccessToken, getTenantId } from '@/utils/auth'
import { UploadUserFile } from 'element-plus'
defineOptions({ name: 'InfraFileForm' }) defineOptions({ name: 'InfraFileForm' })
import { dateFormatter } from '@/utils/formatTime'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const formLoading = ref(false) // const formLoading = ref(false) //
const url = import.meta.env.VITE_UPLOAD_BATCH_URL
const uploadHeaders = ref() // Header const uploadHeaders = ref() // Header
const fileList = ref([]) // const fileList = ref([]) //
const data = ref({ const formData = ref({
businessType: 'MES_ANDROID_APP', id: '',
// businessId: formData.value.id, fileName: '',
}) businessType: 'MES_ANDROID_APP',
const uploadRef = ref() attachments: []
})
/** 打开弹窗 */ /** 打开弹窗 */
const open = async () => { const open = async () => {
@ -56,25 +75,68 @@ const open = async () => {
} }
defineExpose({ open }) // open defineExpose({ open }) // open
/** 处理上传的文件发生变化 */ // ==================== =======================================
const handleFileChange = (file) => { const uploading = ref(false)
data.value = file const uploadUrl = ref(import.meta.env.VITE_UPLOAD_BATCH_URL)
const uploadRef = ref()
const uploadFiles = ref<UploadUserFile[]>([])
const uploadData = ref({
businessType: 'MES_ANDROID_APP',
businessId: formData.value.id
})
// //
// const downloadAttachment = async (name, url) => {
// const data = await downloadFile(url)
// download.any(data, name)
// }
const UploadChange = (file, files) => {
uploadFiles.value = files
refreshAttachments(files)
} }
/** 提交表单 */ const refreshAttachments = (files) => {
const submitFileForm = () => { console.log(files)
if (fileList.value.length == 0) {
message.error('请上传文件') formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
return return value.id
})
for (let i = 0; i < files.length; i++) {
let file = files[i]
file.createTime = new Date()
formData.value.attachments.push(file)
} }
console.log(fileList.value); //
formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime)
}
// //
uploadHeaders.value = { // const handleDeleteAttachment = async (index) => {
Authorization: 'Bearer ' + getAccessToken(), // const deletedAttachments = formData.value.attachments.splice(index, 1)
'tenant-id': getTenantId() // for (let i = 0; i < deletedAttachments.length; i++) {
// const attachment = deletedAttachments[i]
// if (attachment.id) {
// //
// await deleteFileLogic(attachment.id)
// }
// //
// uploadFiles.value = uploadFiles.value.filter((file1) => {
// return file1.name != attachment.name
// })
// }
// }
/** 提交表单 */
const submitFileForm = async () => {
//
if (uploadFiles.value.length > 0) {
uploadData.value.businessId = ''
await uploadRef.value!.submit()
} }
unref(uploadRef)?.submit() message.success(t('common.operationSuccess'))
// await uploadRef.value!.submit()
} }
/** 文件上传成功处理 */ /** 文件上传成功处理 */
@ -106,4 +168,9 @@ const resetForm = () => {
const handleExceed = (): void => { const handleExceed = (): void => {
message.error('最多只能上传一个文件!') message.error('最多只能上传一个文件!')
} }
//
const before = (rawFile) => {
console.log(rawFile)
}
</script> </script>

Loading…
Cancel
Save