main
kkk-ops 1 month ago
parent 314126d6df
commit 25174b415e

@ -125,6 +125,10 @@ export const MoldBrandApi = {
getMold: async (id: number) => { getMold: async (id: number) => {
return await request.get({ url: `/erp/mold-brand/mold/get?id=` + id }) return await request.get({ url: `/erp/mold-brand/mold/get?id=` + id })
}, },
// 根据状态获得模具
getMoldListByStatus: async (status: number) => {
return await request.get({ url: `/erp/mold/getMoldListByStatus?status=` + status })
},
// ==================== 子表(模具产品) ==================== // ==================== 子表(模具产品) ====================

@ -91,7 +91,12 @@ export const DeviceApi = {
getDevice: async (id: number) => { getDevice: async (id: number) => {
return await request.get({ url: `/iot/device/get?id=` + id }) return await request.get({ url: `/iot/device/get?id=` + id })
}, },
getDeviceListByNoUsed: async () => {
return await request.get({ url: `/iot/device/noUsedlist` })
},
getDeviceList2ByNoUsed: async (id: number) => {
return await request.get({ url: `/iot/device/noUsedlist2?id=` + id })
},
// 新增物联设备 // 新增物联设备
createDevice: async (data: DeviceVO) => { createDevice: async (data: DeviceVO) => {
return await request.post({ url: `/iot/device/create`, data }) return await request.post({ url: `/iot/device/create`, data })

@ -54,6 +54,10 @@ export const DeviceLedgerApi = {
return await request.get({ url: `/mes/device-ledger/noUsedlist` }) return await request.get({ url: `/mes/device-ledger/noUsedlist` })
}, },
getDeviceLedgerList2ByNoUsed: async (id: number) => {
return await request.get({ url: `/mes/device-ledger/noUsedlist2?id=` + id })
},
// 查询设备类型详情 // 查询设备类型详情
getDeviceLedger: async (id: number) => { getDeviceLedger: async (id: number) => {
return await request.get({ url: `/mes/device-ledger/get?id=` + id }) return await request.get({ url: `/mes/device-ledger/get?id=` + id })

@ -86,6 +86,7 @@
<el-input <el-input
v-model="formData.remark" v-model="formData.remark"
:placeholder="t('MoldManagement.MoldBrand.placeholderRemark')" :placeholder="t('MoldManagement.MoldBrand.placeholderRemark')"
type="textarea"
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>

@ -78,6 +78,7 @@
<el-input <el-input
v-model="formData.remark" v-model="formData.remark"
:placeholder="t('MoldManagement.Mold.placeholderRemark')" :placeholder="t('MoldManagement.Mold.placeholderRemark')"
type="textarea"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="t('MoldManagement.Mold.isEnable')" prop="isEnable"> <el-form-item :label="t('MoldManagement.Mold.isEnable')" prop="isEnable">

@ -6,7 +6,7 @@
:model="queryParams" :model="queryParams"
ref="queryFormRef" ref="queryFormRef"
:inline="true" :inline="true"
label-width="110px" label-width="68px"
> >
<el-form-item :label="t('MoldManagement.MoldBrand.code')" prop="code"> <el-form-item :label="t('MoldManagement.MoldBrand.code')" prop="code">
<el-input <el-input
@ -94,7 +94,7 @@
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55" fixed="left" reserve-selection /> <!-- <el-table-column type="selection" width="55" fixed="left" reserve-selection /> -->
<el-table-column :label="t('MoldManagement.MoldBrand.code')" align="center" prop="code" /> <el-table-column :label="t('MoldManagement.MoldBrand.code')" align="center" prop="code" />
<el-table-column :label="t('MoldManagement.MoldBrand.name')" align="left" prop="name" /> <el-table-column :label="t('MoldManagement.MoldBrand.name')" align="left" prop="name" />
<el-table-column :label="t('MoldManagement.MoldBrand.moldType')" align="center" prop="moldType" /> <el-table-column :label="t('MoldManagement.MoldBrand.moldType')" align="center" prop="moldType" />
@ -112,7 +112,6 @@
<el-table-column label="维保周期" align="center" prop="maintainTime" /> --> <el-table-column label="维保周期" align="center" prop="maintainTime" /> -->
<el-table-column :label="t('MoldManagement.MoldBrand.moldSize')" align="center" prop="moldSize" /> <el-table-column :label="t('MoldManagement.MoldBrand.moldSize')" align="center" prop="moldSize" />
<el-table-column :label="t('MoldManagement.MoldBrand.remark')" align="center" prop="remark" /> <el-table-column :label="t('MoldManagement.MoldBrand.remark')" align="center" prop="remark" />
<el-table-column <el-table-column
:label="t('MoldManagement.MoldBrand.createTime')" :label="t('MoldManagement.MoldBrand.createTime')"
align="center" align="center"
@ -153,22 +152,22 @@
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<MoldBrandForm ref="formRef" @success="getList" /> <MoldBrandForm ref="formRef" @success="getList" />
<!-- 子表的列表 --> <!-- 子表的列表 -->
<ContentWrap v-if="currentBrandId"> <!-- <ContentWrap v-if="currentBrandId">
<div class="mb-10px text-14px font-600"> <div class="mb-10px text-14px font-600">
{{ currentBrandDisplay }} {{ currentBrandDisplay }}
</div> </div>
<el-tabs model-value="mold"> <el-tabs model-value="mold">
<el-tab-pane :label="t('MoldManagement.MoldBrand.tabMold')" name="mold"> <el-tab-pane :label="t('MoldManagement.MoldBrand.tabMold')" name="mold">
<MoldList :brand-id="currentBrandId" /> <MoldList :brand-id="currentBrandId" />
</el-tab-pane> </el-tab-pane> -->
<!-- <el-tab-pane label="产品" name="moldBrandProduct"> <!-- <el-tab-pane label="产品" name="moldBrandProduct">
<MoldBrandProductList :brand-id="currentBrandId" /> <MoldBrandProductList :brand-id="currentBrandId" />
</el-tab-pane> --> </el-tab-pane> -->
</el-tabs> <!-- </el-tabs>
</ContentWrap> </ContentWrap> -->
<ContentWrap v-else> <!-- <ContentWrap v-else>
<el-empty :description="t('MoldManagement.MoldBrand.emptyTip')" /> <el-empty :description="t('MoldManagement.MoldBrand.emptyTip')" />
</ContentWrap> </ContentWrap> -->
</template> </template>
<script setup lang="ts"> <script setup lang="ts">

@ -11,7 +11,7 @@ v-loading="typeTreeLoading" :data="brandTreeData" node-key="id" highlight-curren
<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="68px">
<el-form-item :label="t('MoldManagement.Mold.code')" prop="code"> <el-form-item :label="t('MoldManagement.Mold.code')" prop="code">
<el-input <el-input
v-model="queryParams.name" :placeholder="t('MoldManagement.Mold.code')" clearable @keyup.enter="handleQuery" v-model="queryParams.code" :placeholder="t('MoldManagement.Mold.code')" clearable @keyup.enter="handleQuery"
class="!w-240px" /> class="!w-240px" />
</el-form-item> </el-form-item>
<el-form-item :label="t('MoldManagement.Mold.name')" prop="name"> <el-form-item :label="t('MoldManagement.Mold.name')" prop="name">
@ -181,8 +181,8 @@ const getList = async () => {
const data = await MoldBrandApi.getMoldPage({ const data = await MoldBrandApi.getMoldPage({
pageNo: queryParams.pageNo, pageNo: queryParams.pageNo,
pageSize: queryParams.pageSize, pageSize: queryParams.pageSize,
deviceCode: queryParams.code, code: queryParams.code,
deviceName: queryParams.name, name: queryParams.name,
brandId: queryParams.brand brandId: queryParams.brand
}) })
list.value = data.list list.value = data.list

@ -386,7 +386,6 @@ const open = async (type: string, id?: number, defaultDeviceTypeId?: number) =>
formType.value = type formType.value = type
resetForm() resetForm()
await ensureOptionsLoaded() await ensureOptionsLoaded()
deviceList.value = await DeviceApi.getDeviceList()
if (type === 'create' && defaultDeviceTypeId) { if (type === 'create' && defaultDeviceTypeId) {
formData.value.deviceType = defaultDeviceTypeId formData.value.deviceType = defaultDeviceTypeId
} }
@ -408,6 +407,11 @@ const open = async (type: string, id?: number, defaultDeviceTypeId?: number) =>
formLoading.value = false formLoading.value = false
} }
} }
if (type == 'create' || typeof formData.value.dvId != 'number') {
deviceList.value = await DeviceApi.getDeviceListByNoUsed()
} else {
deviceList.value = await DeviceApi.getDeviceList2ByNoUsed(formData.value.dvId)
}
} }
defineExpose({ open }) // open defineExpose({ open }) // open

@ -129,7 +129,6 @@
</el-row> </el-row>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ProductApi, ProductVO } from '@/api/erp/product/product'
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse' import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
import { StockApi } from '@/api/erp/stock/stock' import { StockApi } from '@/api/erp/stock/stock'
import { MoldBrandApi, MoldVO } from '@/api/erp/mold' import { MoldBrandApi, MoldVO } from '@/api/erp/mold'
@ -165,7 +164,7 @@ const formRules = reactive({
const formRef = ref([]) // Ref const formRef = ref([]) // Ref
const productList = ref<MoldVO[]>([]) // const productList = ref<MoldVO[]>([]) //
const warehouseList = ref<WarehouseVO[]>([]) // const warehouseList = ref<WarehouseVO[]>([]) //
const defaultWarehouse = ref<WarehouseVO>(undefined) // const defaultWarehouse = ref<WarehouseVO>() //
/** 初始化设置出库项 */ /** 初始化设置出库项 */
watch( watch(
@ -268,7 +267,7 @@ defineExpose({ validate })
/** 初始化 */ /** 初始化 */
onMounted(async () => { onMounted(async () => {
// productList.value = await ProductApi.getComponentSimpleList() // productList.value = await ProductApi.getComponentSimpleList()
productList.value = await MoldBrandApi.getMoldAllList() productList.value = await MoldBrandApi.getMoldListByStatus(1) //
warehouseList.value = await WarehouseApi.getWarehouseSimpleList() warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
defaultWarehouse.value = warehouseList.value.find((item) => item.defaultStatus) defaultWarehouse.value = warehouseList.value.find((item) => item.defaultStatus)
// //

@ -134,8 +134,8 @@ const validateLowerMoldId = (_rule: any, value: any, callback: (error?: Error) =
const formRules = reactive({ const formRules = reactive({
operateType: [{ required: true, message: t('MoldManagement.MoldOperate.validatorOperateTypeRequired'), trigger: 'blur' }], operateType: [{ required: true, message: t('MoldManagement.MoldOperate.validatorOperateTypeRequired'), trigger: 'blur' }],
deviceId: [{ required: true, message: t('MoldManagement.MoldOperate.validatorDeviceRequired'), trigger: 'blur' }], deviceId: [{ required: true, message: t('MoldManagement.MoldOperate.validatorDeviceRequired'), trigger: 'blur' }],
moldId: [{ validator: validateMoldId, trigger: 'change' }], moldId: [{ required: true, validator: validateMoldId, trigger: 'change' }],
lowerMoldId: [{ validator: validateLowerMoldId, trigger: 'change' }], lowerMoldId: [{ required: true, validator: validateLowerMoldId, trigger: 'change' }],
}) })
const formRef = ref() // Ref const formRef = ref() // Ref

@ -66,23 +66,39 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item :label="t('MoldManagement.MoldReturn.warehouse')" prop="warehouseId">
<el-select
v-model="formData.warehouseId"
clearable
filterable
:placeholder="t('MoldManagement.MoldReturn.placeholderWarehouse')"
class="!w-240px"
>
<el-option
v-for="item in warehouseList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item :label="t('MoldManagement.MoldReturn.attachment')" prop="fileUrl">
<UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item :label="t('MoldManagement.MoldReturn.remarkSingle')" prop="remark"> <el-form-item :label="t('MoldManagement.MoldReturn.remarkSingle')" prop="remark">
<el-input <el-input
type="textarea" type="textarea"
v-model="formData.remark" v-model="formData.remark"
:rows="1"
:placeholder="t('MoldManagement.MoldReturn.placeholderRemark')" :placeholder="t('MoldManagement.MoldReturn.placeholderRemark')"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item :label="t('MoldManagement.MoldReturn.attachment')" prop="fileUrl">
<UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<!-- 子表的表单 --> <!-- 子表的表单 -->
@ -105,13 +121,14 @@
import { StockInApi, StockInVO } from '@/api/erp/stock/in' import { StockInApi, StockInVO } from '@/api/erp/stock/in'
import StockInItemForm from './components/StockInItemForm.vue' import StockInItemForm from './components/StockInItemForm.vue'
import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer' import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
import {DICT_TYPE, getBoolDictOptions, getStrDictOptions} from "@/utils/dict"; import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
/** ERP 其它出库单表单 */ /** ERP 其它出库单表单 */
defineOptions({ name: 'MoldReturnForm' }) defineOptions({ name: 'MoldReturnForm' })
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const warehouseList = ref<WarehouseVO[]>([]) //
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
@ -124,7 +141,8 @@ const formData = ref({
remark: undefined, remark: undefined,
inType: undefined, inType: undefined,
fileUrl: '', fileUrl: '',
items: [] items: [],
warehouseId: undefined
}) })
const formRules = reactive({ const formRules = reactive({
inTime: [ inTime: [
@ -132,6 +150,9 @@ const formRules = reactive({
], ],
inType: [ inType: [
{ required: true, message: t('MoldManagement.MoldReturn.validatorInTypeRequired'), trigger: 'blur' } { required: true, message: t('MoldManagement.MoldReturn.validatorInTypeRequired'), trigger: 'blur' }
],
warehouseId: [
{ required: true, message: t('MoldManagement.MoldReturn.validatorInTypeRequired'), trigger: 'blur' }
] ]
}) })
const disabled = computed(() => formType.value === 'detail') const disabled = computed(() => formType.value === 'detail')
@ -164,6 +185,7 @@ const open = async (type: string, id?: number) => {
} }
// //
customerList.value = await CustomerApi.getCustomerSimpleList() customerList.value = await CustomerApi.getCustomerSimpleList()
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
} }
defineExpose({ open }) // open defineExpose({ open }) // open
@ -173,10 +195,17 @@ const submitForm = async () => {
// //
await formRef.value.validate() await formRef.value.validate()
await itemFormRef.value.validate() await itemFormRef.value.validate()
console.log(itemFormRef.value)
itemFormRef.value.selectedRows.forEach(item => {
console.log(item.id, item.name)
})
// //
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value as unknown as StockInVO const data = formData.value as unknown as StockInVO
itemFormRef.value.selectedRows.forEach(item => {
console.log(item.id, item.name)})
formData.value.items = itemFormRef.value.selectedRows
if (formType.value === 'create') { if (formType.value === 'create') {
await StockInApi.createStockIn(data) await StockInApi.createStockIn(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
@ -201,7 +230,8 @@ const resetForm = () => {
remark: undefined, remark: undefined,
fileUrl: undefined, fileUrl: undefined,
items: [], items: [],
inType: "模具入库" inType: "模具入库",
warehouseId: undefined
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }

@ -1,272 +1,306 @@
<template> <template>
<el-form <div class="device-ledger-layout">
ref="formRef" <div class="device-ledger-right">
:model="formData" <ContentWrap>
:rules="formRules" <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
v-loading="formLoading" <el-form-item :label="t('MoldManagement.Mold.code')" prop="code">
label-width="0px" <el-input
:inline-message="true" v-model="queryParams.code" :placeholder="t('MoldManagement.Mold.code')" clearable @keyup.enter="handleQuery"
:disabled="disabled" class="!w-240px" />
>
<el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
<el-table-column :label="t('MoldManagement.MoldReturn.itemIndex')" type="index" align="center" width="60" />
<el-table-column :label="t('MoldManagement.MoldReturn.itemWarehouseName')" min-width="125">
<template #default="{ row, $index }">
<el-form-item
:prop="`${$index}.warehouseId`"
:rules="formRules.warehouseId"
class="mb-0px!"
>
<el-select
v-model="row.warehouseId"
clearable
filterable
:placeholder="t('MoldManagement.MoldReturn.placeholderWarehouse')"
@change="onChangeWarehouse($event, row)"
>
<el-option
v-for="item in warehouseList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</template> <el-form-item :label="t('MoldManagement.Mold.name')" prop="name">
</el-table-column> <el-input
<el-table-column :label="t('MoldManagement.MoldReturn.itemMoldName')" min-width="180"> v-model="queryParams.name" :placeholder="t('MoldManagement.Mold.name')" clearable @keyup.enter="handleQuery"
<template #default="{ row, $index }"> class="!w-240px" />
<el-form-item :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
<el-select
v-model="row.productId"
clearable
filterable
@change="onChangeProduct($event, row)"
:placeholder="t('MoldManagement.MoldReturn.placeholderMold')"
>
<el-option
v-for="item in productList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="t('MoldManagement.MoldReturn.itemStockCount')" min-width="100">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.stockCount" :formatter="erpCountInputFormatter" />
</el-form-item>
</template>
</el-table-column>
<el-table-column :label="t('MoldManagement.MoldReturn.itemMoldCode')" min-width="150">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productBarCode" />
</el-form-item> </el-form-item>
</template> <el-form-item>
</el-table-column> <el-button @click="handleQuery">
<el-table-column :label="t('MoldManagement.MoldReturn.itemUnitName')" min-width="80"> <Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}
<template #default="{ row }"> </el-button>
<el-form-item class="mb-0px!"> <el-button @click="resetQuery">
<el-input disabled v-model="row.productUnitName" /> <Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}
</el-button>
</el-form-item> </el-form-item>
</el-form>
</ContentWrap>
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @selection-change="handleSelectionChange" ref="formRef">
<el-table-column width="30" type="selection" />
<el-table-column :label="t('MoldManagement.Mold.code')" align="center" prop="code" />
<el-table-column :label="t('MoldManagement.Mold.name')" align="left" prop="name" />
<el-table-column :label="t('MoldManagement.Mold.useTime')" align="center" prop="useTime" />
<el-table-column :label="t('MoldManagement.Mold.status')" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_MOLD_STATUS" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('MoldManagement.MoldReturn.itemCount')" prop="count" fixed="right" min-width="140"> <el-table-column :label="t('MoldManagement.Mold.machineName')" align="center" prop="machineName" />
<template #default="{ row, $index }"> <el-table-column :label="t('MoldManagement.Mold.remark')" align="center" prop="remark" />
<el-form-item :prop="`${$index}.count`" :rules="formRules.count" class="mb-0px!"> <el-table-column :label="t('MoldManagement.Mold.isEnable')" align="center" prop="isEnable">
<el-input-number <template #default="scope">
v-model="row.count" <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.isEnable" />
controls-position="right"
:min="0"
:precision="0"
class="!w-100%"
/>
</el-form-item>
</template>
</el-table-column>
<!-- <el-table-column label="单价" fixed="right" min-width="120">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productPrice`" class="mb-0px!">
<el-input-number
v-model="row.productPrice"
controls-position="right"
:min="0.01"
:precision="2"
class="!w-100%"
/>
</el-form-item>
</template>
</el-table-column> -->
<!-- <el-table-column label="合计金额" prop="totalPrice" fixed="right" min-width="100">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.totalPrice`" class="mb-0px!">
<el-input disabled v-model="row.totalPrice" :formatter="erpPriceInputFormatter" />
</el-form-item>
</template>
</el-table-column> -->
<el-table-column :label="t('MoldManagement.MoldReturn.itemRemark')" fixed="right" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input v-model="row.remark" :placeholder="t('MoldManagement.MoldReturn.placeholderRemark')" />
</el-form-item>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" :label="t('MoldManagement.MoldReturn.itemOperate')" width="60">
<template #default="{ $index }">
<el-button type="danger" @click="handleDelete($index)" link>
<Icon icon="ep:delete" />
</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('MoldManagement.Mold.createTime')" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
</el-table> </el-table>
</el-form> <Pagination
<el-row justify="center" class="mt-3" v-if="!disabled"> :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
<el-button @click="handleAdd" round>+ {{ t('MoldManagement.MoldReturn.itemAddButton') }}</el-button> @pagination="getList" />
</el-row> </ContentWrap>
</div>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ProductApi, ProductVO } from '@/api/erp/product/product' import { DICT_TYPE } from '@/utils/dict'
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse' import { dateFormatter } from '@/utils/formatTime'
import { StockApi } from '@/api/erp/stock/stock'
import { MoldBrandApi, MoldVO } from '@/api/erp/mold' import { MoldBrandApi, MoldVO } from '@/api/erp/mold'
import { import { useDictStoreWithOut } from '@/store/modules/dict'
erpCountInputFormatter, import type { FormInstance, FormRules } from 'element-plus'
erpPriceInputFormatter,
erpPriceMultiply,
getSumValue /** 设备类型 列表 */
} from '@/utils' defineOptions({ name: 'DeviceLedger' })
const props = defineProps<{ const message = useMessage() //
items: undefined const { t } = useI18n() //
disabled: false
}>() const loading = ref(false) //
const formLoading = ref(false) // const list = ref<MoldVO[]>([]) //
const formData = ref([]) const total = ref(0) //
const { t } = useI18n() const queryParams = reactive({
const formRules = reactive({ pageNo: 1,
inId: [{ required: true, message: t('MoldManagement.MoldReturn.validatorItemInIdRequired'), trigger: 'blur' }], pageSize: 10,
warehouseId: [ code: undefined,
{ required: true, message: t('MoldManagement.MoldReturn.validatorItemWarehouseRequired'), trigger: 'blur' } name: undefined,
], brand: undefined,
productId: [{ required: true, message: t('MoldManagement.MoldReturn.validatorItemMoldRequired'), trigger: 'blur' }],
count: [{ required: true, message: t('MoldManagement.MoldReturn.validatorItemCountRequired'), trigger: 'blur' }]
}) })
const formRef = ref([]) // Ref const queryFormRef = ref() //
const productList = ref<MoldVO[]>([]) //
const warehouseList = ref<WarehouseVO[]>([]) //
const defaultWarehouse = ref<WarehouseVO>(undefined) //
/** 初始化设置出库项 */
watch(
() => props.items,
async (val) => {
formData.value = val
},
{ immediate: true }
)
/** 监听合同产品变化,计算合同产品总价 */
watch(
() => formData.value,
(val) => {
if (!val || val.length === 0) {
return
}
//
val.forEach((item) => {
item.totalPrice = erpPriceMultiply(item.productPrice, item.count)
})
},
{ deep: true }
)
/** 合计 */
const getSummaries = (param: SummaryMethodProps) => {
const { columns, data } = param
const sums: string[] = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = t('MoldManagement.MoldReturn.sumLabel')
return
}
if (['count', 'totalPrice'].includes(column.property)) {
const sum = getSumValue(data.map((item) => Number(item[column.property])))
sums[index] =
String(Math.trunc(Number(column.property === 'count' ? erpCountInputFormatter(sum) : erpPriceInputFormatter(sum))))
} else {
sums[index] = ''
}
})
return sums
}
/** 新增按钮操作 */ const dictStore = useDictStoreWithOut()
const handleAdd = () => { const dictReady = ref(false)
const row = {
id: undefined, /** 查询列表 */
warehouseId: defaultWarehouse.value?.id, const getList = async () => {
productId: undefined, loading.value = true
productUnitName: undefined, // try {
productBarCode: undefined, // const data = await MoldBrandApi.getMoldPage({
productPrice: undefined, pageNo: queryParams.pageNo,
stockCount: undefined, pageSize: queryParams.pageSize,
count: 1, code: queryParams.code,
totalPrice: undefined, name: queryParams.name,
remark: undefined brandId: queryParams.brand,
statuss: [3,0]
})
list.value = data.list
total.value = data.total
} finally {
loading.value = false
} }
formData.value.push(row)
} }
/** 删除按钮操作 */ /** 搜索按钮操作 */
const handleDelete = (index) => { const handleQuery = () => {
formData.value.splice(index, 1) queryParams.pageNo = 1
getList()
} }
/** 处理仓库变更 */ /** 重置按钮操作 */
const onChangeWarehouse = (warehouseId, row) => { const resetQuery = () => {
// queryFormRef.value.resetFields()
setStockCount(row) handleQuery()
} }
/** 处理产品变更 */ //
const onChangeProduct = (productId, row) => { const selectedRows = ref<any[]>([])
const product = productList.value.find((item) => item.id === productId) // -
if (product) { const formModel = reactive({
row.productUnitName = product.unitId selectedItems: [] as any[]
row.productBarCode = product.code })
}
// //
setStockCount(row) watch(selectedRows, (newSelected) => {
formModel.selectedItems = [...newSelected]
}, { deep: true })
//
const handleSelectionChange = (rows: any[]) => {
selectedRows.value = rows
// console.log(':', rows)
} }
/** 加载库存 */ //
const setStockCount = async (row) => { const formRef = ref<FormInstance>()
if (!row.productId || !row.warehouseId) { const validate = async (): Promise<boolean> => {
return if (!formRef.value) return false
try {
await formRef.value.validate()
return true
} catch (error) {
return false
} }
const stock = await StockApi.getStock2(row.productId, row.warehouseId)
row.stockCount = stock ? stock.count : 0
} }
defineExpose({ validate,selectedRows: selectedRows })
/** 表单校验 */ /** 初始化 **/
const validate = () => { onMounted(async () => {
return formRef.value.validate() await dictStore.setDictMap()
} dictReady.value = true
defineExpose({ validate }) getList()
/** 初始化 */
onMounted(async () => {
// productList.value = await ProductApi.getComponentSimpleList()
productList.value = await MoldBrandApi.getMoldAllList()
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
defaultWarehouse.value = warehouseList.value.find((item) => item.defaultStatus)
//
if (formData.value.length === 0) {
handleAdd()
}
}) })
</script> </script>
<style scoped>
.device-ledger-layout {
display: flex;
gap: 12px;
}
.device-ledger-left {
width: 280px;
flex: 0 0 auto;
}
.device-ledger-right {
flex: 1;
min-width: 0;
}
.device-ledger-detail-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
}
.device-ledger-detail-title {
font-size: 14px;
font-weight: 600;
}
.device-ledger-history-steps {
padding: 8px 8px 0;
}
.device-ledger-history-title {
display: flex;
align-items: center;
gap: 10px;
font-size: 13px;
}
.device-ledger-history-time {
font-weight: 600;
}
.device-ledger-history-operator {
color: var(--el-text-color-secondary);
}
.device-ledger-tab-toolbar {
margin-bottom: 8px;
text-align: right;
}
.device-ledger-history-items {
display: flex;
flex-direction: column;
gap: 6px;
margin-top: 8px;
}
.device-ledger-history-item {
display: flex;
padding: 10px;
background: var(--el-fill-color-blank);
border: 1px solid var(--el-border-color-lighter);
border-radius: 8px;
flex-direction: column;
gap: 8px;
}
.device-ledger-history-item-head {
display: flex;
align-items: center;
gap: 10px;
}
.device-ledger-history-item-body {
display: flex;
flex-direction: column;
gap: 6px;
width: 100%;
}
.device-ledger-history-item-row {
display: flex;
gap: 10px;
}
.device-ledger-history-item-label {
width: 70px;
flex: 0 0 70px;
color: var(--el-text-color-secondary);
}
.device-ledger-history-item-value {
flex: 1;
color: var(--el-text-color-regular);
word-break: break-word;
}
.device-ledger-history-item-images {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 4px;
}
.device-ledger-history-item-image {
width: 76px;
height: 76px;
overflow: hidden;
border-radius: 6px;
}
.device-ledger-history-image-error {
display: flex;
width: 100%;
height: 100%;
font-size: 12px;
color: var(--el-text-color-secondary);
background: var(--el-fill-color);
align-items: center;
justify-content: center;
}
.device-ledger-repair-collapse {
padding: 8px 8px 0;
}
.device-ledger-repair-title {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.device-ledger-repair-name {
font-weight: 600;
color: var(--el-text-color-primary);
}
.device-ledger-repair-meta {
font-size: 12px;
color: var(--el-text-color-secondary);
}
.device-ledger-history-item-text {
color: var(--el-text-color-regular);
}
</style>

@ -1,5 +1,4 @@
<template> <template>
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
@ -7,7 +6,7 @@
:model="queryParams" :model="queryParams"
ref="queryFormRef" ref="queryFormRef"
:inline="true" :inline="true"
label-width="110px" label-width="68px"
> >
<el-form-item :label="t('MoldManagement.MoldReturn.no')" prop="no"> <el-form-item :label="t('MoldManagement.MoldReturn.no')" prop="no">
<el-input <el-input

@ -182,8 +182,12 @@ const open = async (type: string, id?: number) => {
} }
} }
await getOrganizationTree() await getOrganizationTree()
await getMachineComponentTree() if (type == 'create' || typeof formData.value.machineId != 'number') {
deviceList.value = await DeviceLedgerApi.getDeviceLedgerListByNoUsed()
} else {
deviceList.value = await DeviceLedgerApi.getDeviceLedgerList2ByNoUsed(formData.value.machineId)
}
//await getMachineComponentTree()
} }
defineExpose({ open }) // open defineExpose({ open }) // open
@ -255,6 +259,6 @@ const getMachineComponentTree = async () => {
/** 初始化 **/ /** 初始化 **/
onMounted(async () => { onMounted(async () => {
//console.log("ssss") //console.log("ssss")
deviceList.value = await DeviceLedgerApi.getDeviceLedgerList() //deviceList.value = await DeviceLedgerApi.getDeviceLedgerListByNoUsed()
}) })
</script> </script>

Loading…
Cancel
Save