设备管理
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
3.9 KiB

<template>
<div class="device-delivery-from">
<div class="from-input">
<div class="group-box">
<div class="from-row">
<div class="label">出库流向:</div>
<FormItemSelect
v-model="params.customerId"
:options="customerList"
placeholder="请选择出库流向"
keyTag="id"
labelTag="name"
valueTag="id"
:isShowLabel="false"
/>
</div>
<div class="from-row">
<div class="label">设备价格:</div>
<number-input v-model="params.price" placeholder="请输入成本" />
</div>
</div>
<div class="group-box">
<div class="from-row">
<div class="label">备注:</div>
<el-input
type="textarea"
v-model="params.description"
placeholder="请输入备注"
:autosize="{ minRows: 3, maxRows: 4 }"
/>
</div>
</div>
<EdfsButton
inner-text="出库"
type="success"
class="save-button"
@click="onSave"
v-if="isShowSaveButton"
/>
</div>
</div>
</template>
<script setup lang="ts">
import numberInput from '@/components/dashboard/Edfs-number-item-input.vue'
import EdfsButton from '@/components/dashboard/Edfs-button/index.vue'
import FormItemSelect from '@/components/dashboard/FormItemSelect.vue'
import { getSimpleCustomerList, type CustomerVO } from '@/api/module/eam/customer'
import { isResError } from '@/hooks/useMessage'
import type { IDevice } from '@/api/module/eam/device'
import {
getStorageOutByDeviceId,
storageOutDevice,
type IStorageOutParam,
} from '@/api/module/eam/device/storage'
import { useRoute } from 'vue-router'
import type { OptAction } from '../utils'
const route = useRoute()
const action = route.query.action as OptAction
const props = defineProps<{
disabled: boolean
info: IDevice | undefined
deviceId: number | undefined
}>()
const isShowSaveButton = computed(() => {
if(action === 'view') return false
return props.info?.status === undefined ? true : props.info.status < 3
})
const emit = defineEmits(['onSave'])
const params = ref<Omit<IStorageOutParam, 'deviceId'>>({
customerId: '',
price: '',
name: '',
description: '',
})
const customerList = ref<Array<Pick<CustomerVO, 'id' | 'name'>>>([])
async function loadCustomerList() {
const res = await getSimpleCustomerList()
if (isResError(res)) return
customerList.value = res.data
}
async function onSave() {
if (!props.deviceId) return
const options: IStorageOutParam = {
deviceId: props.deviceId,
customerId: params.value.customerId,
price: params.value.price,
description: params.value.description,
name: '',
}
const res = await storageOutDevice(options)
if (isResError(res)) return
emit('onSave')
}
watch(
() => props.deviceId,
newVal => {
if (newVal) {
loadDeviceStorageInfo()
}
}
)
async function loadDeviceStorageInfo() {
if (!props.deviceId) return
const res = await getStorageOutByDeviceId(props.deviceId)
if (isResError(res)) return
for (const key of Object.keys(params.value)) {
params.value[key] = res.data[key] ?? ''
}
}
onMounted(() => {
loadCustomerList()
})
</script>
<style scoped lang="scss">
.device-delivery-from {
display: flex;
flex-direction: column;
justify-content: space-around;
height: 100%;
width: 100%;
.from-input {
display: flex;
width: 100%;
column-gap: 30px;
flex-wrap: wrap;
.group-box {
display: flex;
flex-direction: column;
row-gap: 10px;
}
.from-row {
min-width: 270px;
display: flex;
min-height: 32px;
align-items: center;
.label {
white-space: nowrap;
width: 80px;
text-align: right;
color: var(--label-text);
margin-right: 8px;
}
}
.save-button {
margin-top: auto;
}
}
}
</style>