|
@@ -1,4 +1,43 @@
|
|
|
<template>
|
|
|
+ <ContentWrap v-loading="formLoading">
|
|
|
+ <el-form
|
|
|
+ ref="formRef"
|
|
|
+ :model="formData"
|
|
|
+ :rules="formRules"
|
|
|
+ v-loading="formLoading"
|
|
|
+ style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
|
|
|
+ label-width="130px"
|
|
|
+ >
|
|
|
+ <div class="base-expandable-content">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="工厂" prop="factoryId">
|
|
|
+ <el-select v-model="formData.factoryId" clearable placeholder="请选择工厂" class="!w-240px" @change="selectedFactoryChange">
|
|
|
+ <el-option
|
|
|
+ v-for="item in factoryList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.factoryName"
|
|
|
+ :value="item.id!"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="8">
|
|
|
+ <el-form-item label="成本中心" prop="costCenterId">
|
|
|
+ <el-select v-model="formData.costCenterId" clearable placeholder="请选择成本中心" class="!w-240px">
|
|
|
+ <el-option
|
|
|
+ v-for="item in costCenterList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.costCenterName"
|
|
|
+ :value="item.id!"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </el-form>
|
|
|
+ </ContentWrap>
|
|
|
<ContentWrap>
|
|
|
<ContentWrap>
|
|
|
<!-- 搜索工作栏 -->
|
|
@@ -19,19 +58,23 @@
|
|
|
<!-- 列表 -->
|
|
|
<ContentWrap>
|
|
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
|
|
+ <el-table-column label="工厂id" align="center" prop="factoryId" v-if="false"/>
|
|
|
+ <el-table-column label="成本中心id" align="center" prop="costCenterId" v-if="false"/>
|
|
|
<el-table-column label="物料编码" align="center" prop="materialCode" />
|
|
|
<el-table-column label="物料名称" align="center" prop="materialName" />
|
|
|
<el-table-column label="单位" align="center" prop="unit" />
|
|
|
- <el-table-column label="单价" align="center" prop="unitPrice" :formatter="erpPriceTableColumnFormatter">
|
|
|
+ <el-table-column label="单价" align="center" prop="unitPrice" :formatter="erpPriceTableColumnFormatter" />
|
|
|
+ <!--
|
|
|
<template #default="scope">
|
|
|
<el-input v-model="scope.row.unitPrice" />
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="数量" align="center" prop="quantity" :formatter="erpPriceTableColumnFormatter">
|
|
|
+ </el-table-column> -->
|
|
|
+ <el-table-column label="数量" align="center" prop="quantity" :formatter="erpPriceTableColumnFormatter" />
|
|
|
+ <!--
|
|
|
<template #default="scope">
|
|
|
<el-input v-model="scope.row.quantity" />
|
|
|
</template>
|
|
|
- </el-table-column>
|
|
|
+ </el-table-column> -->
|
|
|
<el-table-column label="备注" align="center" prop="remark">
|
|
|
<template #default="scope">
|
|
|
<el-input v-model="scope.row.remark" />
|
|
@@ -78,6 +121,9 @@ import { toRaw } from "vue";
|
|
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
|
|
import MaterialSelect from "@/views/pms/iotlockstock/SelectMaterial.vue";
|
|
|
import {erpPriceTableColumnFormatter} from "@/utils";
|
|
|
+import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
|
|
|
+import {SapOrgApi, SapOrgVO} from "@/api/system/saporg";
|
|
|
+import * as DeptApi from '@/api/system/dept'
|
|
|
|
|
|
/** 手工入库 表单 */
|
|
|
defineOptions({ name: 'IotAddToStock' })
|
|
@@ -91,11 +137,20 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
|
|
const list = ref<IotLockStockVO[]>([]) // 入库物料的数据
|
|
|
const { params, name } = useRoute() // 查询参数
|
|
|
|
|
|
+const factoryList = ref([] as SapOrgVO[]) // 工厂列表
|
|
|
+const storageLocationList = ref([] as SapOrgVO[]) // 库存地点列表
|
|
|
+const costCenterList = ref([] as SapOrgVO[]) // SAP成本中心列表
|
|
|
+const dept = ref() // 当前登录人所属部门对象
|
|
|
const materialFormRef = ref()
|
|
|
const openForm = () => {
|
|
|
materialFormRef.value.open()
|
|
|
}
|
|
|
|
|
|
+const selectedFactoryReqVO = ref({
|
|
|
+ type: 0, // 类型(1工厂 2成本中心 3库位)
|
|
|
+ factoryCodes: [] // 已经选择的SAP工厂code 列表
|
|
|
+})
|
|
|
+
|
|
|
const formRef = ref() // 表单 Ref
|
|
|
|
|
|
const close = () => {
|
|
@@ -103,6 +158,22 @@ const close = () => {
|
|
|
push({ name: 'IotLockStock', params:{}})
|
|
|
}
|
|
|
|
|
|
+const formData = ref({
|
|
|
+ id: undefined,
|
|
|
+ deptId: undefined,
|
|
|
+ factoryId: 0,
|
|
|
+ factory: '',
|
|
|
+ storageLocationId: 0,
|
|
|
+ projectDepartment: '',
|
|
|
+ costCenterId: undefined,
|
|
|
+ costCenter: ''
|
|
|
+})
|
|
|
+
|
|
|
+const formRules = reactive({
|
|
|
+ factoryId: [{ required: true, message: '工厂不能为空', trigger: 'blur' }],
|
|
|
+ costCenterId: [{ required: true, message: '成本中心不能为空', trigger: 'blur' }],
|
|
|
+})
|
|
|
+
|
|
|
// 多选 物料
|
|
|
const materialChoose = (selectedMaterials) => {
|
|
|
// 转换数据结构(根据你的接口定义调整)
|
|
@@ -110,8 +181,8 @@ const materialChoose = (selectedMaterials) => {
|
|
|
materialCode: material.code,
|
|
|
materialName: material.name,
|
|
|
unit: material.unit,
|
|
|
- quantity: null, // 初始化数量
|
|
|
- unitPrice: null, // 初始化单价
|
|
|
+ quantity: material.quantity, // 初始化数量
|
|
|
+ unitPrice: material.unitPrice, // 初始化单价
|
|
|
remark: null, // 初始化备注
|
|
|
code: material.code // 移除操作需要
|
|
|
}))
|
|
@@ -130,6 +201,18 @@ const materialChoose = (selectedMaterials) => {
|
|
|
/** 提交表单 */
|
|
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
|
const submitForm = async () => {
|
|
|
+ if (formData.value.factoryId === undefined) {
|
|
|
+ message.error('请选择工厂')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (formData.value.costCenterId === undefined) {
|
|
|
+ message.error('请选择成本中心')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (toRaw(list.value).length == 0) {
|
|
|
+ message.error('请选择物料')
|
|
|
+ return
|
|
|
+ }
|
|
|
if (toRaw(list.value).length == 0) {
|
|
|
message.error('请选择物料')
|
|
|
return
|
|
@@ -149,10 +232,17 @@ const submitForm = async () => {
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
// 提交请求
|
|
|
formLoading.value = true
|
|
|
try {
|
|
|
- await IotLockStockApi.manualWarehouse(list.value)
|
|
|
+ // 合并工厂和成本中心到每条物料记录
|
|
|
+ const submitList = list.value.map(item => ({
|
|
|
+ ...item,
|
|
|
+ factoryId: formData.value.factoryId,
|
|
|
+ costCenterId: formData.value.costCenterId
|
|
|
+ }))
|
|
|
+ await IotLockStockApi.manualWarehouse(submitList)
|
|
|
message.success(t('common.createSuccess'))
|
|
|
close()
|
|
|
// 发送操作成功的事件
|
|
@@ -162,13 +252,39 @@ const submitForm = async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/** 已经选择了 SAP工厂 */
|
|
|
+const selectedFactoryChange = async (selectedId: number | undefined) => {
|
|
|
+
|
|
|
+ // 获取选中的factoryCode数组
|
|
|
+ const selectedFactory = factoryList.value.find(item => item.id === selectedId)
|
|
|
+ const selectedFactoryCodes = selectedFactory ? [selectedFactory.factoryCode] : []
|
|
|
+
|
|
|
+ // 获得已经选择的 SAP 工厂 数组
|
|
|
+ // 根据选择的 SAP工厂 调用后台接口查询 SAP工厂下属的 成本中心
|
|
|
+ selectedFactoryReqVO.value.type = 2
|
|
|
+ selectedFactoryReqVO.value.factoryCodes = selectedFactoryCodes
|
|
|
+ costCenterList.value = await SapOrgApi.getSelectedList(selectedFactoryReqVO.value)
|
|
|
+}
|
|
|
+
|
|
|
/** 重置表单 */
|
|
|
const resetForm = () => {
|
|
|
formRef.value?.resetFields()
|
|
|
}
|
|
|
onMounted(async () => {
|
|
|
+ // 加载当前登录人所属部门 关联的 工厂 成本中心 库存地点 如果有多个 随机取1个
|
|
|
const deptId = useUserStore().getUser.deptId
|
|
|
- // deptUsers.value = await UserApi.getDeptUsersByDeptId(deptId)
|
|
|
+ dept.value = await DeptApi.getDept(deptId)
|
|
|
+ // 加载工厂(SAP) 全集
|
|
|
+ factoryList.value = await SapOrgApi.getSimpleSapOrgList(1)
|
|
|
+ // 成本中心 全集
|
|
|
+ costCenterList.value = await SapOrgApi.getSimpleSapOrgList(2)
|
|
|
+ if (dept.value.factoryIds[0] !== undefined) {
|
|
|
+ formData.value.factoryId = dept.value.factoryIds[0]
|
|
|
+ await selectedFactoryChange(formData.value.factoryId)
|
|
|
+ }
|
|
|
+ if (dept.value.costCenterIds[0] !== undefined) {
|
|
|
+ formData.value.costCenterId = dept.value.costCenterIds[0]
|
|
|
+ }
|
|
|
})
|
|
|
|
|
|
// 调整删除逻辑
|