|
|
|
|
@ -0,0 +1,193 @@
|
|
|
|
|
<!-- ERP 包装方案表单 -->
|
|
|
|
|
<template>
|
|
|
|
|
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
|
|
|
|
<el-form
|
|
|
|
|
ref="formRef"
|
|
|
|
|
:model="formData"
|
|
|
|
|
:rules="formRules"
|
|
|
|
|
label-width="140px"
|
|
|
|
|
v-loading="formLoading"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item :label="t('ErpStock.PackagingScheme.code')" prop="code">
|
|
|
|
|
<el-row :gutter="20" style="width: 100%">
|
|
|
|
|
<el-col :xs="18" :sm="18" :md="16" :lg="14" :xl="10">
|
|
|
|
|
<el-input v-model="formData.code"
|
|
|
|
|
:placeholder="t('ErpStock.PackagingScheme.placeholderCode')"
|
|
|
|
|
:disabled="Boolean(formData.isCode) || formType === 'update'" />
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :xs="24" :sm="6" :md="4" :lg="3" :xl="2">
|
|
|
|
|
<el-switch v-model="formData.isCode" :disabled="formType === 'update'"
|
|
|
|
|
@change="handleCodeAutoChange" />
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item :label="t('ErpStock.PackagingScheme.name')" prop="name">
|
|
|
|
|
<el-input v-model="formData.name" :placeholder="t('ErpStock.PackagingScheme.placeholderName')" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item :label="t('ErpStock.PackagingScheme.packageQuantity')" prop="packageQuantity">
|
|
|
|
|
<el-input-number
|
|
|
|
|
v-model="formData.packageQuantity"
|
|
|
|
|
:placeholder="t('ErpStock.PackagingScheme.placeholderPackageQuantity')"
|
|
|
|
|
:min="0"
|
|
|
|
|
:precision="0"
|
|
|
|
|
class="!w-1/1"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item :label="t('ErpStock.PackagingScheme.palletPackageQuantity')" prop="palletPackageQuantity">
|
|
|
|
|
<el-input-number
|
|
|
|
|
v-model="formData.palletPackageQuantity"
|
|
|
|
|
:placeholder="t('ErpStock.PackagingScheme.placeholderPalletPackageQuantity')"
|
|
|
|
|
:min="0"
|
|
|
|
|
:precision="0"
|
|
|
|
|
class="!w-1/1"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item :label="t('ErpStock.PackagingScheme.palletTotalQuantity')">
|
|
|
|
|
<el-input-number
|
|
|
|
|
:model-value="palletTotalQuantity"
|
|
|
|
|
disabled
|
|
|
|
|
class="!w-1/1"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item :label="t('ErpStock.PackagingScheme.remark')" prop="remark">
|
|
|
|
|
<el-input type="textarea" v-model="formData.remark" :placeholder="t('ErpStock.PackagingScheme.placeholderRemark')" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item :label="t('ErpStock.PackagingScheme.status')" prop="status">
|
|
|
|
|
<el-radio-group v-model="formData.status">
|
|
|
|
|
<el-radio
|
|
|
|
|
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.value"
|
|
|
|
|
>
|
|
|
|
|
{{ dict.label }}
|
|
|
|
|
</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-form>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('common.ok') }}</el-button>
|
|
|
|
|
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</Dialog>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
|
|
|
|
import { PackagingSchemeApi, PackagingSchemeVO } from '@/api/erp/stock/packagingScheme'
|
|
|
|
|
import { CommonStatusEnum } from '@/utils/constants'
|
|
|
|
|
|
|
|
|
|
/** ERP 包装方案表单 */
|
|
|
|
|
defineOptions({ name: 'PackagingSolutionForm' })
|
|
|
|
|
|
|
|
|
|
const { t } = useI18n()
|
|
|
|
|
const message = useMessage()
|
|
|
|
|
|
|
|
|
|
const dialogVisible = ref(false)
|
|
|
|
|
const dialogTitle = ref('')
|
|
|
|
|
const formLoading = ref(false)
|
|
|
|
|
const formType = ref('')
|
|
|
|
|
|
|
|
|
|
/** 每托总数量 = 每包数量 × 每托包数 */
|
|
|
|
|
const palletTotalQuantity = computed(() => {
|
|
|
|
|
const qty = formData.value.packageQuantity ?? 0
|
|
|
|
|
const pallet = formData.value.palletPackageQuantity ?? 0
|
|
|
|
|
return qty * pallet
|
|
|
|
|
})
|
|
|
|
|
const formData = ref({
|
|
|
|
|
id: undefined,
|
|
|
|
|
code: undefined,
|
|
|
|
|
isCode: true,
|
|
|
|
|
name: undefined,
|
|
|
|
|
packageQuantity: undefined,
|
|
|
|
|
palletPackageQuantity: undefined,
|
|
|
|
|
palletTotalQuantity: undefined,
|
|
|
|
|
remark: undefined,
|
|
|
|
|
status: CommonStatusEnum.ENABLE
|
|
|
|
|
})
|
|
|
|
|
const validateCode = (_rule, value, callback) => {
|
|
|
|
|
if (Boolean(formData.value.isCode)) {
|
|
|
|
|
callback()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (value === undefined || value === null || String(value).trim() === '') {
|
|
|
|
|
callback(new Error(t('ErpStock.PackagingScheme.validatorCodeRequired')))
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
callback()
|
|
|
|
|
}
|
|
|
|
|
const formRules = reactive({
|
|
|
|
|
code: [{ validator: validateCode, trigger: ['blur', 'change'] }],
|
|
|
|
|
name: [{ required: true, message: t('ErpStock.PackagingScheme.validatorNameRequired'), trigger: 'blur' }],
|
|
|
|
|
packageQuantity: [{ required: true, message: t('ErpStock.PackagingScheme.validatorPackageQuantityRequired'), trigger: 'blur' }],
|
|
|
|
|
palletPackageQuantity: [{ required: true, message: t('ErpStock.PackagingScheme.validatorPalletPackageQuantityRequired'), trigger: 'blur' }],
|
|
|
|
|
status: [{ required: true, message: t('ErpStock.PackagingScheme.validatorStatusRequired'), trigger: 'blur' }]
|
|
|
|
|
})
|
|
|
|
|
const formRef = ref()
|
|
|
|
|
|
|
|
|
|
/** 打开弹窗 */
|
|
|
|
|
const open = async (type: string, id?: number) => {
|
|
|
|
|
dialogVisible.value = true
|
|
|
|
|
dialogTitle.value = t('action.' + type)
|
|
|
|
|
formType.value = type
|
|
|
|
|
resetForm()
|
|
|
|
|
// 修改时,设置数据
|
|
|
|
|
if (id) {
|
|
|
|
|
formLoading.value = true
|
|
|
|
|
try {
|
|
|
|
|
const data = await PackagingSchemeApi.getPackagingScheme(id)
|
|
|
|
|
formData.value = {
|
|
|
|
|
...data,
|
|
|
|
|
isCode: (data as any)?.isCode ?? false
|
|
|
|
|
}
|
|
|
|
|
} finally {
|
|
|
|
|
formLoading.value = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
defineExpose({ open })
|
|
|
|
|
|
|
|
|
|
/** 提交表单 */
|
|
|
|
|
const emit = defineEmits(['success'])
|
|
|
|
|
const submitForm = async () => {
|
|
|
|
|
await formRef.value.validate()
|
|
|
|
|
formLoading.value = true
|
|
|
|
|
try {
|
|
|
|
|
const data = { ...formData.value, palletTotalQuantity: palletTotalQuantity.value } as unknown as PackagingSchemeVO
|
|
|
|
|
if (formType.value === 'create') {
|
|
|
|
|
await PackagingSchemeApi.createPackagingScheme(data)
|
|
|
|
|
message.success(t('common.createSuccess'))
|
|
|
|
|
} else {
|
|
|
|
|
await PackagingSchemeApi.updatePackagingScheme(data)
|
|
|
|
|
message.success(t('common.updateSuccess'))
|
|
|
|
|
}
|
|
|
|
|
dialogVisible.value = false
|
|
|
|
|
emit('success')
|
|
|
|
|
} finally {
|
|
|
|
|
formLoading.value = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** 自动编码开关切换 */
|
|
|
|
|
const handleCodeAutoChange = (value: boolean) => {
|
|
|
|
|
if (value) {
|
|
|
|
|
formData.value.code = undefined
|
|
|
|
|
}
|
|
|
|
|
formRef.value?.clearValidate('code')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** 重置表单 */
|
|
|
|
|
const resetForm = () => {
|
|
|
|
|
formData.value = {
|
|
|
|
|
id: undefined,
|
|
|
|
|
code: undefined,
|
|
|
|
|
isCode: true,
|
|
|
|
|
name: undefined,
|
|
|
|
|
packageQuantity: undefined,
|
|
|
|
|
palletPackageQuantity: undefined,
|
|
|
|
|
palletTotalQuantity: undefined,
|
|
|
|
|
remark: undefined,
|
|
|
|
|
status: CommonStatusEnum.ENABLE
|
|
|
|
|
}
|
|
|
|
|
formRef.value?.resetFields()
|
|
|
|
|
}
|
|
|
|
|
</script>
|