|
|
|
@ -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) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
|
|
|
|
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>
|