✨ feat(mes): 更新供应商相关逻辑,添加英文名称及引用校验功能
重构供应商数据模型,替换供应商等级为英文名称,并在相关服务中添加对供应商引用的校验逻辑,以确保数据一致性和完整性。pull/871/MERGE
parent
f3138d8cd5
commit
3ac19a0c73
|
|
@ -189,7 +189,7 @@ const currentItemOrProduct = computed(() => formData.value.itemOrProduct || '')
|
|||
|
||||
/** 生成物料编码 */
|
||||
const generateCode = async () => {
|
||||
formData.value.code = await AutoCodeRecordApi.generateAutoCode(MesAutoCodeRuleCode.ITEM_CODE)
|
||||
formData.value.code = await AutoCodeRecordApi.generateAutoCode(MesAutoCodeRuleCode.MD_ITEM_CODE)
|
||||
}
|
||||
|
||||
/** 分类变更时,同步更新 itemOrProduct */
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
:rules="formRules"
|
||||
label-width="120px"
|
||||
v-loading="formLoading"
|
||||
:disabled="isDetail"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
|
|
@ -52,7 +53,11 @@
|
|||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="供应商简介" prop="description">
|
||||
<el-input v-model="formData.description" type="textarea" placeholder="请输入供应商简介" />
|
||||
<el-input
|
||||
v-model="formData.description"
|
||||
type="textarea"
|
||||
placeholder="请输入供应商简介"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
@ -143,8 +148,8 @@
|
|||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="供应商LOGO" prop="logo">
|
||||
<el-input v-model="formData.logo" placeholder="请输入供应商LOGO地址" />
|
||||
<el-form-item label="供应商 LOGO" prop="logo">
|
||||
<el-input v-model="formData.logo" placeholder="请输入供应商 LOGO 地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
|
|
@ -154,28 +159,31 @@
|
|||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<!-- 编辑时显示关联数据 tab -->
|
||||
<el-tabs v-if="formType === 'update'" v-model="activeTab" class="mt-10px">
|
||||
<el-tab-pane label="供货记录" name="supplyRecord">
|
||||
<!-- TODO @芋艿:供应商详情-供货记录 tab,依赖 WM 采购入库模块 -->
|
||||
<el-empty description="功能开发中,敬请期待" />
|
||||
<!-- 编辑/详情时显示关联数据 tab -->
|
||||
<el-tabs v-if="formType !== 'create' && formData.id" v-model="activeTab" class="mt-10px">
|
||||
<el-tab-pane label="供货记录" name="supplyRecord" lazy>
|
||||
<VendorSupplyRecordTab :vendorId="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="退货记录" name="returnRecord">
|
||||
<!-- TODO @芋艿:供应商详情-退货记录 tab,依赖 WM 供应商退货模块 -->
|
||||
<el-empty description="功能开发中,敬请期待" />
|
||||
<el-tab-pane label="退货记录" name="returnRecord" lazy>
|
||||
<VendorReturnRecordTab :vendorId="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button v-if="!isDetail" @click="submitForm" type="primary" :disabled="formLoading"
|
||||
>确 定</el-button
|
||||
>
|
||||
<el-button @click="dialogVisible = false">{{ isDetail ? '关 闭' : '取 消' }}</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MdVendorApi, MdVendorVO } from '@/api/mes/md/vendor'
|
||||
import { AutoCodeRecordApi } from '@/api/mes/md/autocode/record'
|
||||
import { CommonStatusEnum } from '@/utils/constants'
|
||||
import { generateRandomStr } from '@/utils'
|
||||
import { MesAutoCodeRuleCode } from '@/views/mes/utils/constants'
|
||||
import VendorSupplyRecordTab from './components/VendorSupplyRecordTab.vue'
|
||||
import VendorReturnRecordTab from './components/VendorReturnRecordTab.vue'
|
||||
|
||||
defineOptions({ name: 'MdVendorForm' })
|
||||
|
||||
|
|
@ -183,9 +191,17 @@ const { t } = useI18n() // 国际化
|
|||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const dialogTitle = computed(() => {
|
||||
const titles: Record<string, string> = {
|
||||
create: '新增供应商',
|
||||
update: '修改供应商',
|
||||
detail: '查看供应商'
|
||||
}
|
||||
return titles[formType.value] || formType.value
|
||||
})
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改;detail - 详情
|
||||
const isDetail = computed(() => formType.value === 'detail') // 是否详情模式(只读)
|
||||
const activeTab = ref('supplyRecord') // 当前激活的 tab
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
|
|
@ -243,18 +259,17 @@ const formRules = reactive({
|
|||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 生成供应商编码 */
|
||||
const generateCode = () => {
|
||||
// TODO @芋艿:后续对接后端编码生成接口
|
||||
formData.value.code = 'VD' + generateRandomStr(12)
|
||||
const generateCode = async () => {
|
||||
formData.value.code = await AutoCodeRecordApi.generateAutoCode(MesAutoCodeRuleCode.MD_VENDOR_CODE)
|
||||
}
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
activeTab.value = 'supplyRecord'
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
// 修改/详情时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -62,8 +62,7 @@ const handleFilter = (query: string) => {
|
|||
const keyword = query.toLowerCase()
|
||||
filteredList.value = allList.value.filter(
|
||||
(item) =>
|
||||
item.name?.toLowerCase().includes(keyword) ||
|
||||
item.code?.toLowerCase().includes(keyword)
|
||||
item.name?.toLowerCase().includes(keyword) || item.code?.toLowerCase().includes(keyword)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,15 +35,14 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="供应商等级" prop="level">
|
||||
<el-select v-model="queryParams.level" placeholder="请选择供应商等级" clearable class="!w-240px">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.MES_VENDOR_LEVEL)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
<el-form-item label="英文名称" prop="englishName">
|
||||
<el-input
|
||||
v-model="queryParams.englishName"
|
||||
placeholder="请输入英文名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
|
||||
|
|
@ -66,12 +65,7 @@
|
|||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
@click="handleImport"
|
||||
v-hasPermi="['mes:md-vendor:import']"
|
||||
>
|
||||
<el-button type="warning" plain @click="handleImport" v-hasPermi="['mes:md-vendor:import']">
|
||||
<Icon icon="ep:upload" class="mr-5px" /> 导入
|
||||
</el-button>
|
||||
<el-button
|
||||
|
|
@ -90,7 +84,13 @@
|
|||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="供应商编码" align="center" prop="code" width="120" />
|
||||
<el-table-column label="供应商编码" align="center" prop="code" width="120">
|
||||
<template #default="scope">
|
||||
<el-link type="primary" @click="openForm('detail', scope.row.id)">
|
||||
{{ scope.row.code }}
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="供应商名称" align="center" prop="name" min-width="180" />
|
||||
<el-table-column label="供应商简称" align="center" prop="nickname" width="100" />
|
||||
<el-table-column label="供应商等级" align="center" prop="level" width="120">
|
||||
|
|
@ -143,12 +143,11 @@
|
|||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { MdVendorApi, MdVendorVO } from '@/api/mes/md/vendor'
|
||||
import MdVendorForm from './MdVendorForm.vue'
|
||||
import MdVendorImportForm from './MdVendorImportForm.vue'
|
||||
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
|
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
|
||||
defineOptions({ name: 'MesMdVendor' })
|
||||
|
||||
|
|
@ -164,7 +163,7 @@ const queryParams = reactive({
|
|||
code: undefined,
|
||||
name: undefined,
|
||||
nickname: undefined,
|
||||
level: undefined,
|
||||
englishName: undefined,
|
||||
status: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
|
|
|||
|
|
@ -413,11 +413,12 @@ export const MesAutoCodePaddedMethodEnum = {
|
|||
|
||||
/** MES 自动编码规则 Code 枚举 */
|
||||
export const MesAutoCodeRuleCode = {
|
||||
ITEM_CODE: 'MD_ITEM_CODE', // 物料编码
|
||||
SN_CODE: 'WM_SN_CODE', // SN 码
|
||||
PACKAGE_CODE: 'WM_PACKAGE_CODE', // 装箱单编码
|
||||
BATCH_CODE: 'WM_BATCH_CODE', // 批次编码
|
||||
TASK_CODE: 'PRO_TASK_CODE', // 生产任务编码
|
||||
MD_ITEM_CODE: 'MD_ITEM_CODE', // 物料编码
|
||||
MD_VENDOR_CODE: 'MD_VENDOR_CODE', // 供应商编码
|
||||
WM_SN_CODE: 'WM_SN_CODE', // SN 码
|
||||
WM_PACKAGE_CODE: 'WM_PACKAGE_CODE', // 装箱单编码
|
||||
WM_BATCH_CODE: 'WM_BATCH_CODE', // 批次编码
|
||||
PRO_TASK_CODE: 'PRO_TASK_CODE', // 生产任务编码
|
||||
QC_IQC_CODE: 'QC_IQC_CODE', // 来料检验单编码
|
||||
QC_IPQC_CODE: 'QC_IPQC_CODE', // 过程检验单编码
|
||||
QC_OQC_CODE: 'QC_OQC_CODE', // 出货检验单编码
|
||||
|
|
|
|||
|
|
@ -204,8 +204,7 @@ const formRef = ref()
|
|||
|
||||
/** 生成装箱单编号 */
|
||||
const generateCode = async () => {
|
||||
// DONE @AI:看看 是不是在 mes constants 里。搞个枚举;【后面点弄】
|
||||
formData.value.code = await AutoCodeRecordApi.generateAutoCode(MesAutoCodeRuleCode.PACKAGE_CODE)
|
||||
formData.value.code = await AutoCodeRecordApi.generateAutoCode(MesAutoCodeRuleCode.WM_PACKAGE_CODE)
|
||||
}
|
||||
|
||||
/** 打开弹窗 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue