pull/2/head
siontion 9 months ago
commit 7b2cdca3b3

@ -42,7 +42,7 @@ public class MaterialServiceImpl implements MaterialService {
private void validateMaterialRepeat(String code, Long id) {
Long repeat = materialMapper.selectCount(new LambdaQueryWrapper<MaterialDO>() {{
eq(MaterialDO::getCode, code);
eq(id != null, MaterialDO::getId, id);
ne(id != null, MaterialDO::getId, id);
last("LIMIT 1");
}});
if(repeat != null && repeat.longValue() > 0){

@ -20,6 +20,7 @@ export interface DeliverOrderVO {
status: number
receivePersonName: string
receiveAddress: string
active: string
}
// 查询发货订单分页
@ -58,3 +59,7 @@ export const exportDeliverOrder = async (params) => {
export const getDeliverOrderSubListByDeliveryOrderId = async (deliveryOrderId) => {
return await request.get({ url: `/heli/deliver-order/deliver-order-sub/list-by-delivery-order-id?deliveryOrderId=` + deliveryOrderId })
}
export async function operateDeliverOrder(data: DeliverOrderVO) {
return await request.post({ url: `/heli/deliver-order/operate`, data })
}

@ -3,6 +3,7 @@ import request from '@/config/axios'
export interface FilePageReqVO extends PageParam {
path?: string
type?: string
url: string
createTime?: Date[]
businessType: string
businessId: number

@ -302,6 +302,7 @@ export default {
terminate: 'Terminate',
detailArchive: 'Detail',
alter: 'Alter',
deliver: 'Deliver',
typeCreate: 'Dict Type Create',
typeUpdate: 'Dict Type Eidt',
dataCreate: 'Dict Data Create',

@ -303,6 +303,7 @@ export default {
terminate: '终止',
detailArchive: '详情',
alter: '变更',
deliver: '发货',
typeCreate: '字典类型新增',
typeUpdate: '字典类型编辑',
dataCreate: '字典数据新增',

@ -238,4 +238,6 @@ export enum DICT_TYPE {
HELI_PROJECT_ORDER_APPROVE_STATUS = 'heli_project_order_approve_status', // 项目单据批准页状态
HELI_PROJECT_ORDER_ALTER_STATUS = 'heli_project_order_alter_status', // 项目单据变更页状态
HELI_DELIVER_ORDER_STATUS = 'heli_deliver_order_status', // 发货单状态
HELI_DELIVER_MODE = 'heli_deliver_mode', // 发货方式
HELI_DELIVER_MATERIAL_TYPE = 'heli_deliver_material_type', // 发货物料类型
}

@ -2,7 +2,7 @@
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
:rules="subFormRules"
v-loading="formLoading"
label-width="0px"
:inline-message="true"
@ -11,7 +11,7 @@
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="业务类 发货清单|其他清单 DELIVER_LIST|OTHER_LIST" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.category`" :rules="formRules.category" class="mb-0px!">
<el-form-item :prop="`${$index}.category`" :rules="subFormRules.category" class="mb-0px!">
<el-select v-model="row.category" placeholder="请选择业务类 发货清单|其他清单 DELIVER_LIST|OTHER_LIST">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_LIST_TYPE)"
@ -25,28 +25,28 @@
</el-table-column>
<el-table-column label="名称,唯一" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
<el-form-item :prop="`${$index}.name`" :rules="subFormRules.name" class="mb-0px!">
<el-input v-model="row.name" placeholder="请输入名称,唯一" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="图号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.blueprintNo`" :rules="formRules.blueprintNo" class="mb-0px!">
<el-form-item :prop="`${$index}.blueprintNo`" :rules="subFormRules.blueprintNo" class="mb-0px!">
<el-input v-model="row.blueprintNo" placeholder="请输入图号" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="formRules.amount" class="mb-0px!">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-input v-model="row.amount" placeholder="请输入数量" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="formRules.unit" class="mb-0px!">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
<el-select v-model="row.unit" placeholder="请选择单位">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)"
@ -60,21 +60,21 @@
</el-table-column>
<el-table-column label="重量(T)" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.weight`" :rules="formRules.weight" class="mb-0px!">
<el-form-item :prop="`${$index}.weight`" :rules="subFormRules.weight" class="mb-0px!">
<el-input v-model="row.weight" placeholder="请输入重量(T)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="尺寸(米)" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.size`" :rules="formRules.size" class="mb-0px!">
<el-form-item :prop="`${$index}.size`" :rules="subFormRules.size" class="mb-0px!">
<el-input v-model="row.size" placeholder="请输入尺寸(米)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="子项类型" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subType`" :rules="formRules.subType" class="mb-0px!">
<el-form-item :prop="`${$index}.subType`" :rules="subFormRules.subType" class="mb-0px!">
<el-select v-model="row.subType" placeholder="请选择子项类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MATERIAL_TYPE)"
@ -88,14 +88,14 @@
</el-table-column>
<el-table-column label="备注" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" :rules="formRules.remark" class="mb-0px!">
<el-form-item :prop="`${$index}.remark`" :rules="subFormRules.remark" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="状态,1表示正常2表示禁用" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.status`" :rules="formRules.status" class="mb-0px!">
<el-form-item :prop="`${$index}.status`" :rules="subFormRules.status" class="mb-0px!">
<el-radio-group v-model="row.status">
<el-radio label="1">请选择字典生成</el-radio>
</el-radio-group>
@ -122,7 +122,7 @@ const props = defineProps<{
}>()
const formLoading = ref(false) //
const formData = ref([])
const formRules = reactive({
const subFormRules = reactive({
deliveryOrderId: [{ required: true, message: '订单id不能为空', trigger: 'blur' }],
category: [{ required: true, message: '业务类 发货清单|其他清单 DELIVER_LIST|OTHER_LIST不能为空', trigger: 'change' }],
name: [{ required: true, message: '名称,唯一不能为空', trigger: 'blur' }],
@ -188,4 +188,4 @@ const getData = () => {
}
defineExpose({ validate, getData })
</script>
</script>

@ -0,0 +1,744 @@
<template>
<!-- 公共详情 -->
<el-card class="hl-card">
<template #header>
<span><span v-html="dialogTitle"></span></span>
</template>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="140px"
v-loading="formLoading"
>
<!-- 基础信息 横向布局 -->
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span>
</template>
<el-row>
<el-col :span="6">
<el-form-item label="发货单号" prop="code">
<el-input disabled v-model="formData.code" placeholder="系统自动生成" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目编号" prop="saleOrderIds">
<el-input disabled v-model="formData.saleOrderCode" placeholder="请输入项目编号" >
<template #append><el-button :icon="Search" /></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="contractNo" label="合同号">
<el-input v-model="formData.contractNo" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="property" label="性质">
<el-input v-model="formData.property" disabled/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="发货日期" prop="deliverDate">
<el-date-picker
v-model="formData.deliverDate"
type="date"
value-format="x"
placeholder="选择发货日期"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="customerId" label="客户名称">
<el-input v-model="formData.customerName" disabled/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="mouldName" label="模具名称">
<el-input v-model="formData.mouldName" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货单状态" prop="deliverStatus">
{{getDictLabel(DICT_TYPE.HELI_DELIVER_ORDER_STATUS, formData.deliverStatus)}}
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="发货备注" prop="remark">
<el-input
type="textarea"
v-model="formData.remark"
show-word-limit
maxlength="200"
/>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">发货信息</span>
</template>
<el-row>
<el-col :span="6">
<el-form-item label="发货人姓名" prop="deliverPerson">
<UserSelect v-model="formData.deliverPerson" @update:newValue="handleSelectedUser" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货人电话" prop="deliverPersonMobile">
<el-input v-model="formData.deliverPersonMobile" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货方式" prop="deliverMode">
<el-select v-model="formData.deliverMode" placeholder="请选择发货方式">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MODE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="发货单位" prop="deliverCompany">
<el-input value="杭州合立机械有限公司" disabled />
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">收货信息</span>
</template>
<el-row>
<el-col :span="6">
<el-form-item label="收货人姓名" prop="receivePersonName">
<el-input v-model="formData.receivePersonName" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="收货人电话" prop="receivePersonMobile">
<el-input v-model="formData.receivePersonMobile" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收货详细地址" prop="receiveAddress">
<el-input v-model="formData.receiveAddress" />
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">物流信息</span>
</template>
<el-row>
<el-col :span="6">
<el-form-item label="司机姓名" prop="transportDriverName">
<el-input v-model="formData.transportDriverName" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="司机电话" prop="transportDriverMobile">
<el-input v-model="formData.transportDriverMobile" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="车牌号" prop="transportBusNumber">
<el-input v-model="formData.transportBusNumber" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="6">
<el-form-item label="重量(T)" prop="transportWeight">
<el-input v-model="formData.transportWeight" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="位置(米)" prop="transportSize">
<el-input v-model="formData.transportSize" />
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">发货清单</span>
</template>
<el-row>
<el-col>
<el-card class="hl-incard">
<el-form
ref="subFormRef"
:model="formData.deliverOrderSubs"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0"
>
<el-table
:data="formData.deliverOrderSubs"
class="hl-table"
>
<el-table-column label="序号" type="index" width="100" />
<el-table-column min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>子项目名称 </template>
<template #default="scope">
{{scope.row.name}}
</template>
</el-table-column>
<el-table-column label="子项目图号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.blueprintNo`" :rules="subFormRules.blueprintNo" class="mb-0px!">
<el-input v-model="row.blueprintNo" placeholder="请输入子项目图号" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="本次发货数量" min-width="150">
<template #header> <span class="hl-table_header">*</span>本次发货数量 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-input v-model="row.amount" placeholder="请输入本次发货数量" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
{{getDictLabel(DICT_TYPE.HELI_MATERIAL_UNIT, row.unit)}}
</el-form-item>
</template>
</el-table-column>
<el-table-column label="重量(T)" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.weight`" class="mb-0px!">
<el-input v-model="row.weight" placeholder="请输入重量(T)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="尺寸(米)" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.size`" class="mb-0px!">
<el-input v-model="row.size" placeholder="请输入尺寸(米)" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="240">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click.prevent="onDeleteItem(scope.$index)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">其他物料清单</span>
</template>
<el-row>
<el-col>
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem2"
>新增</el-button
>
</el-col>
<el-col>
<el-card class="hl-incard">
<el-form
ref="otherSubFormRef"
:model="formData.deliverOrderOtherSubs"
:rules="subFormRules"
v-loading="subFormLoading"
label-width="0"
>
<el-table
:data="formData.deliverOrderOtherSubs"
class="hl-table"
>
<el-table-column label="序号" type="index" width="100" />
<el-table-column min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>名称 </template>
<template #default="scope">
{{scope.row.name}}
</template>
</el-table-column>
<el-table-column label="所属类型" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subType`" :rules="subFormRules.subType" class="mb-0px!">
<el-select v-model="row.subType" placeholder="请选择子项类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_DELIVER_MATERIAL_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="本次发货数量" min-width="150">
<template #header> <span class="hl-table_header">*</span>本次发货数量 </template>
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.amount`" :rules="subFormRules.amount" class="mb-0px!">
<el-input v-model="row.amount" placeholder="请输入本次发货数量" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.unit`" :rules="subFormRules.unit" class="mb-0px!">
<el-select v-model="row.unit" placeholder="请选择单位">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="240">
<template #default="scope">
<el-button
link
type="danger"
size="small"
@click.prevent="onDeleteItem2(scope.$index)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form>
</el-card>
</el-col>
</el-row>
</el-card>
<el-card class="hl-card-info">
<template #header>
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">附件信息</span>
</template>
<el-row>
<el-col>
<el-upload
ref="attachmentUploadRef"
multiple
:limit="10"
:action="uploadUrl"
:headers="uploadHeaders"
name="files"
:show-file-list="false"
:auto-upload="false"
:data="uploadData"
:on-change="attachmentUploadChange"
class="upload-file-uploader"
>
<el-button type="primary"><Icon icon="ep:upload-filled" />上传</el-button>
</el-upload>
</el-col>
<el-col>
<el-card class="hl-incard">
<el-table :data="formData.attachments" 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, scope.row.businessFileType)"
>
删除
</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>
</el-col>
</el-row>
</el-card>
</el-form>
<div class="text-center hl-footer">
<el-button @click="goback" size="large"> </el-button>
<el-button @click="submitForm('SAVE')" type="success" :disabled="formLoading" size="large"
> </el-button
>
<el-button @click="submitForm('DELIVER')" type="primary" :disabled="formLoading" size="large"
> </el-button
>
</div>
</el-card>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import type { UploadProps, UploadUserFile } from 'element-plus'
import {getStrDictOptions, DICT_TYPE, getIntDictOptions, getDictLabel} from '@/utils/dict'
import * as DeliverOrderApi from '@/api/heli/deliverorder'
import {getOperateLogPage} from "@/api/system/operatelog";
import {deleteFileLogic, downloadFile, getFilePage} from "@/api/infra/file";
import {Search, Plus} from "@element-plus/icons-vue";
import UserSelect from "@/views/heli/hlvuestyle/userSelect.vue";
import {getAccessToken, getTenantId} from "@/utils/auth";
import {dateFormatter} from "@/utils/formatTime";
import download from "@/utils/download";
import { inject } from 'vue'
const reload = inject('reload')
const { t } = useI18n() //
const message = useMessage() //
const router = useRouter()
const { query } = useRoute()
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
code: undefined,
saleOrderIds: undefined,
saleOrderCode: undefined,
contractNo: undefined,
property: undefined,
customerId: undefined,
customerName: undefined,
mouldName: undefined,
deliverDate: undefined,
deliverStatus: 1,
deliverPerson: undefined,
deliverPersonMobile: undefined,
deliverMode: undefined,
receivePersonMobile: undefined,
transportDriverName: undefined,
transportDriverMobile: undefined,
transportBusNumber: undefined,
transportWeight: undefined,
transportSize: undefined,
remark: undefined,
status: undefined,
receivePersonName: undefined,
receiveAddress: undefined,
deliverOrderSubs: [],
deliverOrderOtherSubs: [],
attachments: [],
operateLogs: [],
idcard1: undefined,
idcard2: undefined,
active: undefined,
})
const formRules = reactive({
saleOrderIds: [{ required: true, message: '项目编号不能为空', trigger: 'blur' }],
property: [{ required: true, message: '性质不能为空', trigger: 'blur' }],
mouldName: [{ required: true, message: '模具名称不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户id不能为空', trigger: 'blur' }],
deliverCompany: [{ required: true, message: '发货单位不能为空', trigger: 'blur' }],
deliverDate: [{ required: true, message: '发货日期不能为空', trigger: 'blur' }],
deliverStatus: [{ required: true, message: '发货单状态不能为空', trigger: 'change' }],
deliverPerson: [{ required: true, message: '发货人不能为空', trigger: 'blur' }],
deliverPersonMobile: [{ required: true, message: '发货人电话不能为空', trigger: 'blur' }],
deliverMode: [{ required: true, message: '发货方式不能为空', trigger: 'change' }],
receivePersonMobile: [{ required: true, message: '收货人电话不能为空', trigger: 'blur' }],
receivePersonName: [{ required: true, message: '收货人姓名不能为空', trigger: 'blur' }],
receiveAddress: [{ required: true, message: '收货详细地址不能为空', trigger: 'blur' }],
})
const subFormLoading = ref(false) //
const subFormRules = reactive({
deliveryOrderId: [{ required: true, message: '订单id不能为空', trigger: 'blur' }],
subType: [{ required: true, message: '所属类型不能为空', trigger: 'change' }],
name: [{ required: true, message: '名称,唯一不能为空', trigger: 'blur' }],
amount: [{ required: true, message: '本次发货数量不能为空', trigger: 'blur' }],
unit: [{ required: true, message: '单位不能为空', trigger: 'change' }],
})
const formRef = ref() // Ref
/** 子表的表单 */
const subFormRef = ref()
const otherSubFormRef = ref()
const submitForm = async (active) => {
//
formData.value.active = active
await formRef.value.validate()
//
try {
await subFormRef.value.validate()
await otherSubFormRef.value.validate()
} catch (e) {
return
}
//
formLoading.value = true
try {
const data = formData.value as unknown as DeliverOrderApi.DeliverOrderVO
const orderId = await DeliverOrderApi.operateDeliverOrder(data)
message.success(t('common.operationSuccess'))
//
if(attachmentUploadFiles.value.length > 0){
uploadData.value.businessId = orderId
attachmentUploadRef.value!.submit()
}
//
if(formData.value.idcard1){
let fileParams = {
pageNo: 1,
pageSize: 1,
url: formData.value.idcard1
}
const idcard1FileRet = await getFilePage(fileParams);
}
//
if (active != 'SAVE') {
goback()
} else {
//
query.active = 'update'
query.id = orderId
reload()
}
} finally {
formLoading.value = false
}
}
const goback = () => {
resetForm()
router.back()
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
saleOrderIds: undefined,
saleOrderCode: undefined,
contractNo: undefined,
property: undefined,
customerId: undefined,
customerName: undefined,
mouldName: undefined,
deliverDate: undefined,
deliverStatus: 1,
deliverPerson: undefined,
deliverPersonMobile: undefined,
deliverMode: undefined,
receivePersonMobile: undefined,
transportDriverName: undefined,
transportDriverMobile: undefined,
transportBusNumber: undefined,
transportWeight: undefined,
transportSize: undefined,
remark: undefined,
status: undefined,
receivePersonName: undefined,
receiveAddress: undefined,
deliverOrderSubs: [],
deliverOrderOtherSubs: [],
attachments: [],
operateLogs: [],
idcard1: undefined,
idcard2: undefined,
active: undefined,
}
formRef.value?.resetFields()
}
const onAddItem2 = () => {
const row = {
id: undefined,
deliveryOrderId: undefined,
category: "OTHER_LIST",
name: undefined,
blueprintNo: undefined,
amount: undefined,
unit: undefined,
weight: undefined,
size: undefined,
subType: undefined,
remark: undefined,
status: undefined,
}
row.deliveryOrderId = formData.value.id
formData.value.deliverOrderOtherSubs.push(row)
}
//
const handleSelectedUser = (newValue: any) => {
formData.value.deliverPerson = newValue.id
}
const attachmentUploadRef = ref()
const attachmentUploadFiles = ref<UploadUserFile[]>([])
const idcardBusinessFileType = ref('ID_CARD')
const businessType = ref('DELIVER_ORDER')
const uploadUrl = ref(import.meta.env.VITE_UPLOAD_BATCH_URL)
const idCardUploadData = ref({
businessType: businessType.value,
businessId: formData.value.id,
businessFileType: idcardBusinessFileType.value
})
const uploadData = ref({
businessType: businessType.value,
businessId: formData.value.id
})
const uploadHeaders = ref({
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
})
const attachmentUploadChange = (file, files) => {
attachmentUploadFiles.value = files
formData.value.attachments = formData.value.attachments.filter((value, index, array) => {
return value.id
})
for (let i = 0; i < files.length; i++) {
let file = files[i]
file.createTime = new Date()
formData.value.attachments.push(file)
}
//
formData.value.attachments.sort((v1, v2) => {
return v1.createTime - v2.createTime > 0
})
}
/** 删除子项操作 */
const onDeleteItem = (index) => {
formData.value.deliverOrderSubs.splice(index, 1)
}
const onDeleteItem2 = (index) => {
formData.value.deliverOrderOtherSubs.splice(index, 1)
}
//
const handleDeleteAttachment = async (index, type) => {
const deletedAttachments = formData.value.attachments.splice(index, 1)
for (let i = 0; i < deletedAttachments.length; i++) {
const attachment = deletedAttachments[i]
if (attachment.id) {
//
await deleteFileLogic(attachment.id)
}
//
attachmentUploadFiles.value = attachmentUploadFiles.value.filter((file1) => {
return file1.name != attachment.name
})
}
}
//
const downloadAttachment = async (name, url) => {
const data = await downloadFile(url)
download.any(data, name)
}
/** 打开弹窗 */
const queryData = async (type: string, id?: number) => {
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
formLoading.value = true
try {
if (id) {
formData.value = await DeliverOrderApi.getDeliverOrder(id)
//
formData.value.deliverOrderSubs =
await DeliverOrderApi.getDeliverOrderSubListByDeliveryOrderId(id)
//
let logParams = {
pageNo: 1,
pageSize: 99,
businessId: id,
businessType: businessType.value
}
formData.value.operateLogs = (await getOperateLogPage(logParams)).list
//
let attParams = {
pageNo: 1,
pageSize: 99,
businessId: id,
businessType: businessType.value
}
const fileList = (await getFilePage(attParams)).list
//
if(fileList && fileList.length > 0){
const idcardFiles = fileList.filter((file) => file.businessFileType == idcardBusinessFileType.value);
if(idcardFiles && idcardFiles.length > 0){
formData.value.idcard1 = idcardFiles[0].url;
formData.value.idcard2 = idcardFiles.length > 1 ? idcardFiles[1].url : undefined;
}
formData.value.attachments = fileList.filter((file) => file.businessFileType != idcardBusinessFileType.value);
}
}
} finally {
formLoading.value = false
}
}
onMounted(() => {
queryData(query.active, query.id)
})
</script>
<style>
a {
color: #409eff;
text-decoration: none;
}
</style>

@ -76,7 +76,7 @@
<el-button
type="primary"
plain
@click="openForm('create')"
@click="openDetail('create')"
v-hasPermi="['heli:deliver-order:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
@ -170,6 +170,7 @@ defineOptions({ name: 'DeliverOrder' })
const message = useMessage() //
const { t } = useI18n() //
const router = useRouter()
const loading = ref(true) //
const list = ref([]) //
@ -225,9 +226,14 @@ const resetQuery = () => {
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
const openDetail = (type: string, id?: number) => {
router.push({
name: 'DeliverOrderDetail',
query: {
active: type,
id: id
}
})
}
/** 删除按钮操作 */

@ -462,7 +462,7 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="有无图纸/数模" prop="hasBlueprint">
<el-radio-group
:disabled="detailDisabled"
@ -513,7 +513,7 @@
label-width="0"
>
<el-table :data="formData.projectOrderSubs" class="hl-table">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="序号" type="index" width="80" />
<el-table-column min-width="150" align="center">
<template #header> <span class="hl-table_header">*</span>子项目名称 </template>
<template #default="{ row, $index }">
@ -620,7 +620,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" min-width="150" align="center">
<el-table-column label="备注" min-width="180" align="center">
<template #default="{ row, $index }">
<el-form-item
:prop="`${$index}.remark`"
@ -636,7 +636,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="240">
<el-table-column label="操作" align="center" width="150">
<template #default="scope">
<el-button
v-if="'update,create'.indexOf(query.active) > -1 && !formData.hasAlter"

@ -13,9 +13,9 @@
<td colspan="6">
<span style="font-size: 20px; font-weight: 700">开发项目启动单</span>
</td>
<td colspan="2">
<div style="border-bottom: 1px solid #666">项目编号</div>
<div>{{ formData.code }}</div>
<td colspan="2" style="padding: none">
<div style="border-bottom: 1px solid #666; padding-bottom: 10px">项目编号</div>
<div style="padding-top: 10px">{{ formData.code }}</div>
</td>
</tr>
</tbody>
@ -108,7 +108,7 @@
<td class="xh"> 序号 </td>
<td colspan="2"> 名称 </td>
<td> 设备型号 </td>
<td> 简称 </td>
<td style="width:10%"> 简称 </td>
<td> 数量 </td>
<td> 主要材料 </td>
<td colspan="3"> 子项目编号 </td>
@ -139,19 +139,19 @@
</tbody>
<tbody>
<tr>
<td colspan="3"> 编制/日期 </td>
<td colspan="3"> 审核/日期 </td>
<td colspan="4"> 批准/日期 </td>
<td colspan="4" style="width:33%"> 编制/日期 </td>
<td colspan="3" style="width:33%"> 审核/日期 </td>
<td colspan="3" style="width:33%"> 批准/日期 </td>
</tr>
<tr>
<td colspan="3">{{formData.creatorName}}</td>
<td colspan="4">{{formData.creatorName}}</td>
<td colspan="3">{{formData.auditUserName}}</td>
<td colspan="4">{{formData.approveUserName}}</td>
<td colspan="3">{{formData.approveUserName}}</td>
</tr>
<tr>
<td colspan="3">{{formatDate(new Date(formData.createTime), 'YYYY-MM-DD')}}</td>
<td colspan="4">{{formatDate(new Date(formData.createTime), 'YYYY-MM-DD')}}</td>
<td colspan="3">{{formatDate(new Date(formData.auditTime), 'YYYY-MM-DD')}}</td>
<td colspan="4">{{formatDate(new Date(formData.approveTime), 'YYYY-MM-DD')}}</td>
<td colspan="3">{{formatDate(new Date(formData.approveTime), 'YYYY-MM-DD')}}</td>
</tr>
</tbody>
</table>

@ -1,7 +1,11 @@
<template>
<ContentWrap>
<el-card class="hl-card">
<template #header>
<span>实时库存 </span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="108px">
<el-form-item label="物料编码" prop="matCode">
<el-input v-model="queryParams.matCode" placeholder="物料编码" clearable @keyup.enter="handleQuery"
class="!w-240px" />
@ -39,7 +43,7 @@
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<el-button @click="handleQuery" type="primary">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
@ -51,24 +55,25 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="物料编码" align="center" prop="matCode" />
<el-table-column label="物料名称" align="center" prop="matName" />
<el-table-column label="物料类型" align="center" prop="matType" />
<el-table-column label="物料简称" align="center" prop="shortName" />
<el-table-column label="规格/型号" align="center" prop="matSpec" />
<el-table-column label="品牌" align="center" prop="matBrand" />
<el-table-column label="仓库" align="center" prop="whName" />
<el-table-column label="库区" align="center" prop="rgName" />
<el-table-column label="库位" align="center" prop="pnName" />
<el-table-column label="批次号" align="center" prop="lotNo" />
<el-table-column label="变动数量" align="center" prop="storageOkQty" />
<el-table-column label="库存单位" align="center" prop="matUnit" />
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table">
<el-table-column label="物料编码" align="center" prop="matCode" fixed min-width="120" />
<el-table-column label="物料名称" align="center" prop="matName" fixed min-width="120"/>
<el-table-column label="物料类型" align="center" prop="matType" min-width="120"/>
<el-table-column label="物料简称" align="center" prop="shortName" min-width="120"/>
<el-table-column label="规格/型号" align="center" prop="matSpec" min-width="120"/>
<el-table-column label="品牌" align="center" prop="matBrand" min-width="120"/>
<el-table-column label="仓库" align="center" prop="whName" min-width="120"/>
<el-table-column label="库区" align="center" prop="rgName" min-width="120"/>
<el-table-column label="库位" align="center" prop="pnName" min-width="120"/>
<el-table-column label="批次号" align="center" prop="lotNo" min-width="120"/>
<el-table-column label="库存数量" align="center" prop="storageOkQty" min-width="120"/>
<el-table-column label="库存单位" align="center" prop="matUnit" min-width="120"/>
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
</el-card>
</template>
<script setup lang="ts">
@ -167,4 +172,4 @@ onMounted(async () => {
await init_page_pn()
await getList()
})
</script>
</script>

@ -1,75 +1,132 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="物料编码" prop="matCode">
<el-input v-model="queryParams.matCode" placeholder="物料编码" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="物料名称" prop="matName">
<el-input v-model="queryParams.matName" placeholder="物料名称" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="物料类型" prop="matType">
<el-select v-model="queryParams.matType" placeholder="下拉选择" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_MATERIAL_TYPE)" :key="dict.label" :label="dict.label"
:value="dict.label" />
</el-select>
</el-form-item>
<el-form-item label="批次号" prop="lotNo">
<el-input v-model="queryParams.lotNo" placeholder="批次号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="业务单据编号" prop="stockNo">
<el-input v-model="queryParams.stockNo" placeholder="业务单据编号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="变动方向" prop="stockType">
<el-select v-model="queryParams.stockType" placeholder="下拉选择" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_TYPE)" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="上游单据编号" prop="headerNo">
<el-input v-model="queryParams.headerNo" placeholder="上游单据编号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-card class="hl-card">
<template #header>
<span>库存变动日志</span>
</template>
<ContentWrap class="borderxx">
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="120px"
>
<el-form-item label="物料编码" prop="matCode">
<el-input
v-model="queryParams.matCode"
placeholder="物料编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="物料名称" prop="matName">
<el-input
v-model="queryParams.matName"
placeholder="物料名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="物料类型" prop="matType">
<el-select
v-model="queryParams.matType"
placeholder="下拉选择"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_MATERIAL_TYPE)"
:key="dict.label"
:label="dict.label"
:value="dict.label"
/>
</el-select>
</el-form-item>
<el-form-item label="批次号" prop="lotNo">
<el-input
v-model="queryParams.lotNo"
placeholder="批次号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="业务单据编号" prop="stockNo">
<el-input
v-model="queryParams.stockNo"
placeholder="业务单据编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="变动方向" prop="stockType">
<el-select
v-model="queryParams.stockType"
placeholder="下拉选择"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_STORAGE_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="上游单据编号" prop="headerNo">
<el-input
v-model="queryParams.headerNo"
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-form-item>
<el-button @click="handleQuery">
<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>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="物料编码" align="center" prop="matCode" />
<el-table-column label="物料名称" align="center" prop="matName" />
<el-table-column label="物料类型" align="center" prop="matType" />
<el-table-column label="物料简称" align="center" prop="shortName" />
<el-table-column label="规格/型号" align="center" prop="matSpec" />
<el-table-column label="品牌" align="center" prop="matBrand" />
<el-table-column label="业务单据编号" align="center" prop="stockNo" />
<el-table-column label="业务单据类型" align="center" prop="stockTypeName" />
<el-table-column label="上游单据编号" align="center" prop="headerNo" />
<el-table-column label="仓库" align="center" prop="whName" />
<el-table-column label="库区" align="center" prop="rgName" />
<el-table-column label="库位" align="center" prop="pnName" />
<el-table-column label="批次号" align="center" prop="lotNo" />
<el-table-column label="变动数量" align="center" prop="storageOkQty" />
<el-table-column label="库存单位" align="center" prop="matUnit" />
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table">
<el-table-column label="物料编码" align="center" prop="matCode" min-width="120" fixed />
<el-table-column label="物料名称" align="center" prop="matName" min-width="120" fixed />
<el-table-column label="物料类型" align="center" prop="matType" min-width="120" />
<el-table-column label="物料简称" align="center" prop="shortName" min-width="120" />
<el-table-column label="规格/型号" align="center" prop="matSpec" min-width="120"/>
<el-table-column label="品牌" align="center" prop="matBrand" min-width="120"/>
<el-table-column label="业务单据编号" align="center" prop="stockNo" min-width="120"/>
<el-table-column label="业务单据类型" align="center" prop="stockTypeName" min-width="120"/>
<el-table-column label="上游单据编号" align="center" prop="headerNo" min-width="120"/>
<el-table-column label="仓库" align="center" prop="whName" min-width="120"/>
<el-table-column label="库区" align="center" prop="rgName" min-width="120"/>
<el-table-column label="库位" align="center" prop="pnName" min-width="120"/>
<el-table-column label="批次号" align="center" prop="lotNo" min-width="120"/>
<el-table-column label="变动数量" align="center" prop="storageOkQty" fixed="right" min-width="120"/>
<el-table-column label="库存单位" align="center" prop="matUnit" fixed="right" min-width="120"/>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
</el-card>
</template>
<script setup lang="ts">
@ -104,7 +161,7 @@ const queryParams = reactive({
pnId: undefined,
stockNo: undefined,
stockType: undefined,
headerNo: undefined,
headerNo: undefined
})
const queryFormRef = ref() //
@ -151,4 +208,4 @@ onMounted(async () => {
// await init_page_pn()
await getList()
})
</script>
</script>

Loading…
Cancel
Save