Browse Source

add:退库增加退库项目喝退库人

zoie 2 tháng trước cách đây
mục cha
commit
665125edea

+ 98 - 91
src/hooks/useDepot.ts

@@ -1,45 +1,46 @@
-import { computed } from 'vue'
-import { GlobalStore } from '@/stores/index'
+import {computed} from 'vue'
+import {GlobalStore} from '@/stores/index'
 
 const globalStore = GlobalStore()
+
 interface ItemType {
-  T_name: string
-  Id: number
+	T_name: string
+	Id: number
 }
 
 export interface SaleFormType {
-  T_type: number
-  T_uuid: string
-  T_receive: string
-  T_number: string
-  T_depot_id: any
-  T_product: any
-  T_date: string
-  T_remark: string
-  T_contract_number: string
-  T_delivery_type: string
-  T_signer_unit: string
-  T_signer: string
-  T_signer_phone: string
-  T_signer_date: string
-  T_courier_number: string
+	T_type: number
+	T_uuid: string
+	T_receive: string
+	T_number: string
+	T_depot_id: any
+	T_product: any
+	T_date: string
+	T_remark: string
+	T_contract_number: string
+	T_delivery_type: string
+	T_signer_unit: string
+	T_signer: string
+	T_signer_phone: string
+	T_signer_date: string
+	T_courier_number: string
 }
 
 export interface ReceiveFormType {
-  T_type: number
-  T_uuid: string
-  T_receive: string
-  T_project:string
-  T_number: string
-  T_depot_id: any
-  T_product: any
-  T_date: string
-  T_remark: string
-  T_contract_number: string
+	T_type: number
+	T_uuid: string
+	T_receive: string
+	T_project: string
+	T_number: string
+	T_depot_id: any
+	T_product: any
+	T_date: string
+	T_remark: string
+	T_contract_number: string
 }
 
 export interface ReceiveApplyFormType {
-	T_project:string
+	T_project: string
 	T_number: string
 	T_depot_id: any
 	T_product: any
@@ -50,63 +51,69 @@ export interface ReceiveApplyFormType {
 }
 
 export interface InfoType {
-  Id: number
-  T_type: number
-  T_depot_name: string
-  T_date: string
-  T_number: string
-  T_remark: string
-  T_submit: string
-  T_signer?: string
-  T_signer_phone?: string
-  T_signer_date?: string  
-  T_signer_unit?: string
-  T_submit_name: string
-  T_receive_name: string
-  T_warehouse_name: string
-  T_project: string
-  T_delivery_type: string
-  T_courier_number?: number
-  T_company_name: string
-  T_payment_method: string
-  T_state_str: string
-  T_application_date: string
-  T_finance_approval_opinion: string
-  T_manager_approval_opinion: string
+	Id: number
+	T_type: number
+	T_depot_name: string
+	T_date: string
+	T_number: string
+	T_remark: string
+	T_submit: string
+	T_signer?: string
+	T_signer_phone?: string
+	T_signer_date?: string
+	T_signer_unit?: string
+	T_submit_name: string
+	T_receive_name: string
+	T_warehouse_name: string
+	T_project: string
+	T_delivery_type: string
+	T_courier_number?: number
+	T_company_name: string
+	T_payment_method: string
+	T_state_str: string
+	T_application_date: string
+	T_finance_approval_opinion: string
+	T_manager_approval_opinion: string
 }
 
 export interface InStorageInfoType {
-  Id: number
-  T_depot_name: string
-  T_date: string
-  T_number: string
-  T_remark: string
-  T_submit: string
-  T_submit_name: string
+	Id: number
+	T_depot_name: string
+	T_date: string
+	T_type: number
+	T_number: string
+	T_remark: string
+	T_submit: string
+	T_submit_name: string
+	T_project: string
+	T_return_user_name: string
 }
 
 export interface InStoreageFormType {
-  T_number: string
-  T_depot_id: any
-  T_type: any
-  T_product: any
-  T_date: string
-  T_remark: string
+	T_number: string
+	T_depot_id: any
+	T_type: any
+	T_product: any
+	T_date: string
+	T_remark: string
+	T_project: string
+	T_return_user: string
+	T_return_user_name: string
 }
 
 
 export interface InStoreageFormTypes {
-    T_number: string
-    T_depot_id: any
-    T_product: any
-    T_project: any
-    T_date: string
-    T_receive: string
-    T_receive_name: string
-    T_remark: string
-    T_company_name: string
-    T_payment_method: string
-  }
+	T_number: string
+	T_depot_id: any
+	T_product: any
+	T_project: any
+	T_date: string
+	T_receive: string
+	T_receive_name: string
+	T_remark: string
+	T_company_name: string
+	T_payment_method: string
+}
 
 export interface OutStockAuditFormType {
 	T_number: string
@@ -116,21 +123,21 @@ export interface OutStockAuditFormType {
 }
 
 export const delivery_type = [
-  { name: '自送', id: 1 },
-  { name: '自提', id: 2 },
-  { name: '快递', id: 3 }
+	{name: '自送', id: 1},
+	{name: '自提', id: 2},
+	{name: '快递', id: 3}
 ]
 
 export const depotHooks = () => {
-  const options = computed<ItemType[]>(() => {
-    return globalStore.GET_depotList
-  })
-  const getDepotList = async () => {
-    if (globalStore.GET_depotList.length) return
-    globalStore.SET_Storehouse_Depot_List()
-  }
-  getDepotList()
-  return {
-    options
-  }
+	const options = computed<ItemType[]>(() => {
+		return globalStore.GET_depotList
+	})
+	const getDepotList = async () => {
+		if (globalStore.GET_depotList.length) return
+		globalStore.SET_Storehouse_Depot_List()
+	}
+	getDepotList()
+	return {
+		options
+	}
 }

+ 10 - 1
src/views/storehouse/ValidationTool/validation.vue

@@ -90,7 +90,7 @@ const recordColumns: ColumnProps[] = [
 const operationColumns: ColumnProps[] = [
 	{type: 'index', label: '序号', width: 80},
 	{prop: 'BatchNumber', label: '操作时间', width: 190},
-	{prop: 'T_state', label: '操作', name: 'T_state', width: 80},
+	{prop: 'T_state', label: '操作', name: 'T_state', width: 90},
 	{prop: 'LendUser', label: '借出(归还)人', ellipsis: true},
 	{prop: 'T_project', label: '关联项目', name:'T_project',  ellipsis: true,  width: 300},
 	{prop: 'T_remark', label: '备注',  ellipsis: true},
@@ -705,6 +705,9 @@ onMounted(() => {
 				<el-tag v-if="row.T_state == 3" effect="dark" type="warning">维修中</el-tag>
 				<el-tag v-if="row.T_state == 4" effect="dark" type="danger">已报废</el-tag>
 				<el-tag v-if="row.T_state == 5" effect="dark" type="info">已损坏</el-tag>
+				<el-tag v-if="row.T_state == 6" effect="light" type="warning">转移</el-tag>
+				<el-tag v-if="row.T_state == 7" effect="light" type="info">取消转移</el-tag>
+				<el-tag v-if="row.T_state == 8" effect="light" type="success">已接收</el-tag>
 			</template>
 			<template #T_class="{ row }">
 				<el-tag>{{ Pruductoptions.find((option:any)=> option.Id === row.T_class)?.T_name || '' }}</el-tag>
@@ -935,6 +938,9 @@ onMounted(() => {
 					<el-tag v-if="row.T_state == 3" effect="dark" type="warning">维修中</el-tag>
 					<el-tag v-if="row.T_state == 4" effect="dark" type="danger">已报废</el-tag>
 					<el-tag v-if="row.T_state == 5" effect="dark" type="info">已损坏</el-tag>
+					<el-tag v-if="row.T_state == 6" effect="light" type="warning">转移</el-tag>
+					<el-tag v-if="row.T_state == 7" effect="light" type="info">取消转移</el-tag>
+					<el-tag v-if="row.T_state == 8" effect="light" type="success">已接收</el-tag>
 				</template>
 				<template #T_class="{ row }">
 					<el-tag>{{ Pruductoptions.find((option:any)=> option.Id === row.T_class)?.T_name || '' }}</el-tag>
@@ -1005,6 +1011,9 @@ onMounted(() => {
 					<el-tag v-if="row.T_state == 3" effect="dark" type="warning">维修</el-tag>
 					<el-tag v-if="row.T_state == 4" effect="dark" type="danger">报废</el-tag>
 					<el-tag v-if="row.T_state == 5" effect="dark" type="info">损坏</el-tag>
+					<el-tag v-if="row.T_state == 6" effect="light" type="warning">转移</el-tag>
+					<el-tag v-if="row.T_state == 7" effect="light" type="info">取消转移</el-tag>
+					<el-tag v-if="row.T_state == 8" effect="light" type="success">已接收</el-tag>
 				</template>
 				<template #T_project="{ row }">
 					<div v-for="(item, index) in row.T_project" :key="index"> {{ item }} </div>

+ 12 - 0
src/views/storehouse/inventory/InStorageDetail.vue

@@ -141,6 +141,18 @@ onMounted(() => {
             </el-table>
           </el-col>
         </el-row>
+		<el-row v-if="info?.T_type! === 2">
+		  <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2"> <span>退库项目:</span></el-col>
+		  <el-col :xs="11" :sm="9" :md="7" :lg="6" :xl="5"
+		  ><span>{{ info?.T_project! }}</span></el-col
+		  >
+		</el-row>
+		  <el-row v-if="info?.T_type! === 2">
+			  <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2"> <span>退库人:</span></el-col>
+			  <el-col :xs="11" :sm="9" :md="7" :lg="6" :xl="5"
+			  ><span>{{ info?.T_return_user_name! }}</span></el-col
+			  >
+		  </el-row>
         <el-row>
           <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2"><span>备注:</span></el-col>
           <el-col :xs="11" :sm="9" :md="7" :lg="6" :xl="5"

+ 32 - 3
src/views/storehouse/inventory/InStorageEdit.vue

@@ -10,6 +10,7 @@ import type { FormInstance, FormRules } from 'element-plus'
 import { Delete, CirclePlus } from '@element-plus/icons-vue'
 import { Storehouse_StockIn_Edit,Storehouse_StockIn_Get } from '@/api/storehouse/index'
 import ImageCom from '@/components/Image/index.vue'
+import ReceiveUser from "@/views/storehouse/outStock/receiveUser.vue";
 
 
 const tableData = ref<any[]>([])
@@ -26,7 +27,10 @@ const form = reactive<InStoreageFormType>({
   T_type: '',
   T_product: '',
   T_date: '',
-  T_remark: ''
+  T_remark: '',
+  T_project: '',
+  T_return_user: '',
+  T_return_user_name: '',
 })
 
 const validate_T_product = (rule: any, value: any, callback: any) => {
@@ -43,7 +47,8 @@ const validate_T_product = (rule: any, value: any, callback: any) => {
 const rules = reactive<FormRules>({
   T_product: [{ validator: validate_T_product, trigger: 'blur' }],
   T_depot_id: [{ required: true, message: '请选择仓库', trigger: 'blur' }],
-  T_date: [{ required: true, message: '请选择入库日期', trigger: 'blur' }]
+  T_date: [{ required: true, message: '请选择入库日期', trigger: 'blur' }],
+  T_project: [{ required: true, message: '请选择退库项目', trigger: 'blur' }]
 })
 
 const columns = [
@@ -256,6 +261,17 @@ const disabledDate = (time:any)=> {
     }
 }
 
+const receiveUserdialog = ref<InstanceType<typeof ReceiveUser> | null>(null)
+
+/**
+ * 选择退库人
+ */
+const selectReturnUser = () => receiveUserdialog.value?.openDrawer()
+const getReturnUserInfo = ({T_uuid, T_name}: { T_uuid: string; T_name: string }) => {
+	form.T_return_user_name = T_name
+	form.T_return_user = T_uuid
+}
+
 defineExpose({
   openDrawer,getStorehouseContractGet,form
 })
@@ -352,6 +368,18 @@ defineExpose({
             </template>
           </el-table>
         </el-form-item>
+		  <el-form-item v-if="form.T_type===2" label="退库项目:" :label-width="formLabelWidth" prop="T_project">
+			  <el-input
+				  v-model="form.T_project"
+				  type="text"
+				  class="w-50"
+				  placeholder="请输入退库项目"
+			  />
+		  </el-form-item>
+		  <el-form-item v-if="form.T_type===2" label="退库人:" :label-width="formLabelWidth" prop="T_return_user_name">
+			  <el-input v-model="form.T_return_user_name" placeholder="请选择退库人" class="w-50"
+						@focus="selectReturnUser"/>
+		  </el-form-item>
         <el-form-item label="备注:" :label-width="formLabelWidth" prop="T_remark">
           <el-input
             v-model="form.T_remark"
@@ -366,7 +394,8 @@ defineExpose({
             <el-button color="#626aef" @click="AddInStorage(ruleFormRef)">提交</el-button>
           </el-divider>
         </div>
-        <InStorageEditSn ref="drawerSnEditRef" @onCount="autoGetCount" />
+		  <ReceiveUser ref="receiveUserdialog" :dept_leader="0" @onUserInfo="getReturnUserInfo" title="选择退库人"/>
+		  <InStorageEditSn ref="drawerSnEditRef" @onCount="autoGetCount" />
         <InStorageProduct
           ref="drawerProductRef"
           @ontableData="ProductselectionChange"

+ 269 - 227
src/views/storehouse/inventory/InStorageForm.vue

@@ -1,15 +1,16 @@
 <script setup lang="ts">
-import { ElMessage } from 'element-plus'
+import type {FormInstance, FormRules} from 'element-plus'
+import {ElMessage} from 'element-plus'
 import InStorageSn from './InStorageSn.vue'
-import { ref, reactive, nextTick } from 'vue'
-import { GlobalStore } from '@/stores/index'
+import {nextTick, reactive, ref} from 'vue'
+import {GlobalStore} from '@/stores/index'
 import Drawer from '@/components/Drawer/index.vue'
-import { InStoreageFormType } from '@/hooks/useDepot'
+import {InStoreageFormType} from '@/hooks/useDepot'
 import InStorageProduct from './InStorageProduct.vue'
-import type { FormInstance, FormRules } from 'element-plus'
-import { Delete, CirclePlus } from '@element-plus/icons-vue'
-import { Storehouse_StockIn_Add } from '@/api/storehouse/index'
+import {CirclePlus, Delete} from '@element-plus/icons-vue'
+import {Storehouse_StockIn_Add} from '@/api/storehouse/index'
 import ImageCom from '@/components/Image/index.vue'
+import ReceiveUser from "@/views/storehouse/outStock/receiveUser.vue";
 
 const tableData = ref<any[]>([])
 const globalStore = GlobalStore()
@@ -20,134 +21,138 @@ const drawerSnRef = ref<InstanceType<typeof InStorageSn> | null>(null)
 const drawerProductRef = ref<InstanceType<typeof InStorageProduct> | null>(null)
 
 const data: any = reactive({
-	optionsType: [{id:1,T_name:'入库'},{id:2,T_name:'退库'}]
+	optionsType: [{id: 1, T_name: '入库'}, {id: 2, T_name: '退库'}]
 })
 
 const form = reactive<InStoreageFormType>({
-  T_number: '',
-  T_depot_id: '',
-  T_type: '',
-  T_product: '',
-  T_date: '',
-  T_remark: ''
+	T_number: '',
+	T_depot_id: '',
+	T_type: '',
+	T_product: '',
+	T_date: '',
+	T_remark: '',
+	T_project: '',
+	T_return_user: '',
+	T_return_user_name: '',
 })
 
 const validate_T_product = (rule: any, value: any, callback: any) => {
-  if (value.includes(undefined) || value === '') {
-    callback(new Error('请填写产品数量'))
-  } else if (value.includes(null)) {
-    callback(new Error('请添加产品SN'))
-  } else {
-    callback()
-  }
+	if (value.includes(undefined) || value === '') {
+		callback(new Error('请填写产品数量'))
+	} else if (value.includes(null)) {
+		callback(new Error('请添加产品SN'))
+	} else {
+		callback()
+	}
 }
 
 const rules = reactive<FormRules>({
-  T_product: [{ validator: validate_T_product, trigger: 'blur' }],
-  T_depot_id: [{ required: true, message: '请选择仓库', trigger: 'blur' }],
-  T_date: [{ required: true, message: '请选择入库日期', trigger: 'blur' }],
-  T_type: [{ required: true, message: '请选择入库类型', trigger: 'blur' }]
+	T_product: [{validator: validate_T_product, trigger: 'blur'}],
+	T_depot_id: [{required: true, message: '请选择仓库', trigger: 'blur'}],
+	T_date: [{required: true, message: '请选择入库日期', trigger: 'blur'}],
+	T_type: [{required: true, message: '请选择入库类型', trigger: 'blur'}],
+	T_project: [{required: true, message: '请选择退库项目', trigger: 'blur'}]
 })
 
 const columns = [
-  { type: 'index', label: '序号', width: 80, align: 'center ' },
-  { label: '产品图片', prop: 'T_img', align: 'center ', name: 'T_img' },
-  { label: '产品名称', prop: 'T_name', align: 'center ' },
-  { label: '产品分类', prop: 'T_class_name', align: 'center ' },
-  { label: '产品型号', prop: 'T_model', align: 'center ', ellipsis: true },
-  { label: '产品规格', prop: 'T_spec', align: 'center ' },
-  { label: '是否关联SN', prop: 'T_relation_sn', align: 'center ', width: 120, name: 'T_relation_sn' },
-  { label: '*数量', prop: 'count', align: 'center ', name: 'count' },
-  { label: '*关联设备', prop: 'sn', align: 'center ', name: 'sn' },
-  { prop: 'operation', label: '操作', width: 80, fixed: 'right' }
+	{type: 'index', label: '序号', width: 80, align: 'center '},
+	{label: '产品图片', prop: 'T_img', align: 'center ', name: 'T_img'},
+	{label: '产品名称', prop: 'T_name', align: 'center '},
+	{label: '产品分类', prop: 'T_class_name', align: 'center '},
+	{label: '产品型号', prop: 'T_model', align: 'center ', ellipsis: true},
+	{label: '产品规格', prop: 'T_spec', align: 'center '},
+	{label: '是否关联SN', prop: 'T_relation_sn', align: 'center ', width: 120, name: 'T_relation_sn'},
+	{label: '*数量', prop: 'count', align: 'center ', name: 'count'},
+	{label: '*关联设备', prop: 'sn', align: 'center ', name: 'sn'},
+	{prop: 'operation', label: '操作', width: 80, fixed: 'right'}
 ]
 
 const countBlurHandle = () => {
-  form.T_product = tableData.value.map(item => {
-    if (!item.count && item.T_relation_sn !== 1) return undefined
-    return `${item.Id},${item.count}|`
-  })
+	form.T_product = tableData.value.map(item => {
+		if (!item.count && item.T_relation_sn !== 1) return undefined
+		return `${item.Id},${item.count}|`
+	})
 }
 const getDeviceSnToProduct = () => {
-  const DeviceSnData: any = drawerSnRef.value?.getDeviceSn()
-  const isEmpty = determineSNorCount(DeviceSnData)
-  if (isEmpty && isEmpty === 'count') return [undefined]
-  if (isEmpty && isEmpty === 'sn') return [null]
+	const DeviceSnData: any = drawerSnRef.value?.getDeviceSn()
+	const isEmpty = determineSNorCount(DeviceSnData)
+	if (isEmpty && isEmpty === 'count') return [undefined]
+	if (isEmpty && isEmpty === 'sn') return [null]
 
-  return tableData.value.map((item: any) => {
-    let product: any = ''
-    if (item.T_relation_sn === 1) {
-      DeviceSnData?.forEach((value: any, key: number) => {
-        if (item.Id === key) {
-          let str = ''
-          value.forEach(
-            (snObj: any, index: number, arr: any[]) => (str += `${snObj.sn}${index === arr.length - 1 ? '' : ','}`)
-          )
-          product = `${item.Id}-${item.count}-${str}`
-        }
-      })
-    } else {
-      product = `${item.Id}-${item.count}-`
-    }
-    return product + '|'
-  })
+	return tableData.value.map((item: any) => {
+		let product: any = ''
+		if (item.T_relation_sn === 1) {
+			DeviceSnData?.forEach((value: any, key: number) => {
+				if (item.Id === key) {
+					let str = ''
+					value.forEach(
+						(snObj: any, index: number, arr: any[]) => (str += `${snObj.sn}${index === arr.length - 1 ? '' : ','}`)
+					)
+					product = `${item.Id}-${item.count}-${str}`
+				}
+			})
+		} else {
+			product = `${item.Id}-${item.count}-`
+		}
+		return product + '|'
+	})
 }
 /**
  * 判断sn or 数量是否为空
  */
 const determineSNorCount = (DeviceSnData: any) => {
-  for (const item of tableData.value) {
-    if (!item.count && item.T_relation_sn !== 1) return 'count'
-    if (item.T_relation_sn === 1 && !DeviceSnData.get(item.Id) && !DeviceSnData.size) return 'sn'
-  }
-  return false
+	for (const item of tableData.value) {
+		if (!item.count && item.T_relation_sn !== 1) return 'count'
+		if (item.T_relation_sn === 1 && !DeviceSnData.get(item.Id) && !DeviceSnData.size) return 'sn'
+	}
+	return false
 }
 
 const AddInStorage = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  form.T_product = getDeviceSnToProduct()
-  formEl.validate(async valid => {
-    if (valid) {
-      const res: any = await Storehouse_StockIn_Add({
-        User_tokey: globalStore.GET_User_tokey,
-        ...form,
-        T_product: form.T_product.join('')
-      })
-      if (res.Code === 200) {
-        ElMessage.success('入库成功!')
-        drawerProductRef.value?.clearSelection()
-        nextTick(() => {
-          emit('onUpdateList')
-          resetForm(ruleFormRef.value)
-          drawerRef.value?.closeDrawer()
-        })
-      }
-    }
-  })
+	if (!formEl) return
+	form.T_product = getDeviceSnToProduct()
+	formEl.validate(async valid => {
+		if (valid) {
+			const res: any = await Storehouse_StockIn_Add({
+				User_tokey: globalStore.GET_User_tokey,
+				...form,
+				T_product: form.T_product.join('')
+			})
+			if (res.Code === 200) {
+				ElMessage.success('入库成功!')
+				drawerProductRef.value?.clearSelection()
+				nextTick(() => {
+					emit('onUpdateList')
+					resetForm(ruleFormRef.value)
+					drawerRef.value?.closeDrawer()
+				})
+			}
+		}
+	})
 }
 
 const deleteProduct = (row: any) => {
-  tableData.value = tableData.value.filter(item => item.Id !== row.Id)
+	tableData.value = tableData.value.filter(item => item.Id !== row.Id)
 
-  // 设置产品的选中
-  drawerProductRef.value?.selectTableChange(row)
-  // 删除设备得sn
-  drawerSnRef.value?.deleteDeviceSn(row.Id)
+	// 设置产品的选中
+	drawerProductRef.value?.selectTableChange(row)
+	// 删除设备得sn
+	drawerSnRef.value?.deleteDeviceSn(row.Id)
 }
 
 const callbackDrawer = (done: () => void) => {
-  resetForm(ruleFormRef.value)
-  done()
+	resetForm(ruleFormRef.value)
+	done()
 }
 /**
  * 重置表单
  */
 const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  drawerProductRef.value?.clearSelection()
-  drawerSnRef.value?.clearDeviceSn()
-  tableData.value = []
-  formEl.resetFields()
+	if (!formEl) return
+	drawerProductRef.value?.clearSelection()
+	drawerSnRef.value?.clearDeviceSn()
+	tableData.value = []
+	formEl.resetFields()
 }
 
 /**
@@ -158,184 +163,221 @@ const AddProductionDetailed = () => drawerProductRef.value?.openDrawer()
  * 产品选择 是否
  */
 const ProductselectionChange = (row: any) => {
-  const index = tableData.value.findIndex((item: any) => item.Id === row.Id)
-  if (index === -1) {
-    row.count = ''
-    tableData.value.push(row)
-  } else {
-    tableData.value.splice(index, 1)
-  }
+	const index = tableData.value.findIndex((item: any) => item.Id === row.Id)
+	if (index === -1) {
+		row.count = ''
+		tableData.value.push(row)
+	} else {
+		tableData.value.splice(index, 1)
+	}
 }
 /**
  * 全选
  */
 const ProductSelectionAllChange = (selection: any[]) => {
-  tableData.value = selection
+	tableData.value = selection
 }
 
 /**
  * 添加sn 号
  */
 const addDeviceSn = (id: number) => {
-  drawerSnRef.value?.addDeviceSn(id, 2, id)
+	drawerSnRef.value?.addDeviceSn(id, 2, id)
 }
 /**
  * 自动计算 count
  */
 const autoGetCount = (length: number, id: number) => {
-  tableData.value.forEach((item: any) => {
-    if (item.Id === id) {
-      item.count = length
-    }
-  })
+	tableData.value.forEach((item: any) => {
+		if (item.Id === id) {
+			item.count = length
+		}
+	})
 }
 /**
  * 关闭 取消
  */
 const closeInStorage = () => {
-  resetForm(ruleFormRef.value)
-  drawerRef.value?.closeDrawer()
+	resetForm(ruleFormRef.value)
+	drawerRef.value?.closeDrawer()
 }
 // 注册事件
 const emit = defineEmits<{ (event: 'onUpdateList'): void }>()
 
 // 接受props
 interface ItemType {
-  T_name: string
-  Id: number
+	T_name: string
+	Id: number
 }
+
 interface PropsType {
-  options?: ItemType[]
+	options?: ItemType[]
 }
+
 const props = defineProps<PropsType>()
+
+const receiveUserdialog = ref<InstanceType<typeof ReceiveUser> | null>(null)
+
+/**
+ * 选择退库人
+ */
+const selectReturnUser = () => receiveUserdialog.value?.openDrawer()
+const getReturnUserInfo = ({T_uuid, T_name}: { T_uuid: string; T_name: string }) => {
+	form.T_return_user_name = T_name
+	form.T_return_user = T_uuid
+}
+
 /**
  * 入库调用
  */
 const openDrawer = () => drawerRef.value?.openDrawer()
 defineExpose({
-  openDrawer
+	openDrawer
 })
 </script>
 
 <template>
-  <div class="inStorage-form">
-    <Drawer ref="drawerRef" :handleClose="callbackDrawer" size="80%">
-      <template #header="{ params }">
-        <h4 :id="params.titleId" :class="params.titleClass">入库</h4>
-      </template>
-      <el-form ref="ruleFormRef" :model="form" :rules="rules">
-        <el-form-item label="入库单号:" :label-width="formLabelWidth" prop="T_number">
-          <el-input v-model="form.T_number" type="text" :disabled="true" placeholder="系统自动生成" class="w-50" />
-        </el-form-item>
-        <el-form-item label="入库仓库:" :label-width="formLabelWidth" prop="T_depot_id">
-          <el-select v-model="form.T_depot_id" class="w-50" clearable placeholder="请选择入库仓库~">
-            <el-option v-for="item in props.options" :key="item.Id" :label="item.T_name" :value="item.Id" />
-          </el-select>
-        </el-form-item>
+	<div class="inStorage-form">
+		<Drawer ref="drawerRef" :handleClose="callbackDrawer" size="80%">
+			<template #header="{ params }">
+				<h4 :id="params.titleId" :class="params.titleClass">入库</h4>
+			</template>
+			<el-form ref="ruleFormRef" :model="form" :rules="rules">
+				<el-form-item label="入库单号:" :label-width="formLabelWidth" prop="T_number">
+					<el-input v-model="form.T_number" type="text" :disabled="true" placeholder="系统自动生成"
+							  class="w-50"/>
+				</el-form-item>
+				<el-form-item label="入库仓库:" :label-width="formLabelWidth" prop="T_depot_id">
+					<el-select v-model="form.T_depot_id" class="w-50" clearable placeholder="请选择入库仓库~">
+						<el-option v-for="item in props.options" :key="item.Id" :label="item.T_name" :value="item.Id"/>
+					</el-select>
+				</el-form-item>
 
-        <el-form-item label="入库类型:" :label-width="formLabelWidth" prop="T_type">
-          <el-select v-model="form.T_type" class="w-50" clearable placeholder="请选择入库类型~">
-            <el-option v-for="item in data.optionsType" :key="item.id" :label="item.T_name" :value="item.id" />
-          </el-select>
-        </el-form-item>
+				<el-form-item label="入库类型:" :label-width="formLabelWidth" prop="T_type">
+					<el-select v-model="form.T_type" class="w-50" clearable placeholder="请选择入库类型~">
+						<el-option v-for="item in data.optionsType" :key="item.id" :label="item.T_name"
+								   :value="item.id"/>
+					</el-select>
+				</el-form-item>
 
-        <el-form-item label="入库日期:" :label-width="formLabelWidth" prop="T_date">
-          <el-date-picker
-            class="my-date-picker"
-            style="width: 21.5rem"
-            v-model="form.T_date"
-            type="date"
-            placeholder="选择日期"
-            format="YYYY-MM-DD"
-            value-format="YYYY-MM-DD"
-          />
-        </el-form-item>
-        <el-form-item label="入库明细:" :label-width="formLabelWidth" prop="T_product">
-          <el-table
-            :data="tableData"
-            style="width: 100%"
-            border
-            stripe
-            :header-cell-style="{
+				<el-form-item label="入库日期:" :label-width="formLabelWidth" prop="T_date">
+					<el-date-picker
+						class="my-date-picker"
+						style="width: 21.5rem"
+						v-model="form.T_date"
+						type="date"
+						placeholder="选择日期"
+						format="YYYY-MM-DD"
+						value-format="YYYY-MM-DD"
+					/>
+				</el-form-item>
+				<el-form-item label="入库明细:" :label-width="formLabelWidth" prop="T_product">
+					<el-table
+						:data="tableData"
+						style="width: 100%"
+						border
+						stripe
+						:header-cell-style="{
               background: '#dedfe0',
               height: '50px'
             }"
-          >
-            <template v-for="item in columns" :key="item.prop">
-              <el-table-column show-overflow-tooltip v-bind="item" v-if="item.fixed !== 'right' && !item.ellipsis">
-                <template #header v-if="item.prop === 'count' || item.prop === 'sn'">
-                  <span style="color: red">{{ item.label }}</span>
-                </template>
-                <template #default="{ row }" v-if="item.prop === item.name">
-                  <el-input
-                    v-if="item.prop === 'count' && row.T_relation_sn !== 1"
-                    v-model.number="row.count"
-                    type="text"
-                    autocomplete="off"
-                    @blur="countBlurHandle"
-                  />
-                  <div v-if="item.prop === 'sn'">
-                    <el-button
-                      v-if="row.T_relation_sn === 1"
-                      link
-                      type="primary"
-                      size="small"
-                      :icon="CirclePlus"
-                      @click="addDeviceSn(row.Id)"
-                      >添加</el-button
-                    >
-                    <span v-else>-</span>
-                  </div>
-                  <span v-if="item.prop === 'T_relation_sn'">
+					>
+						<template v-for="item in columns" :key="item.prop">
+							<el-table-column show-overflow-tooltip v-bind="item"
+											 v-if="item.fixed !== 'right' && !item.ellipsis">
+								<template #header v-if="item.prop === 'count' || item.prop === 'sn'">
+									<span style="color: red">{{ item.label }}</span>
+								</template>
+								<template #default="{ row }" v-if="item.prop === item.name">
+									<el-input
+										v-if="item.prop === 'count' && row.T_relation_sn !== 1"
+										v-model.number="row.count"
+										type="text"
+										autocomplete="off"
+										@blur="countBlurHandle"
+									/>
+									<div v-if="item.prop === 'sn'">
+										<el-button
+											v-if="row.T_relation_sn === 1"
+											link
+											type="primary"
+											size="small"
+											:icon="CirclePlus"
+											@click="addDeviceSn(row.Id)"
+										>添加
+										</el-button
+										>
+										<span v-else>-</span>
+									</div>
+									<span v-if="item.prop === 'T_relation_sn'">
                     <el-tag v-if="row.T_relation_sn === 1" effect="dark">是</el-tag>
                     <el-tag v-else type="success" effect="dark">否</el-tag>
                   </span>
-                  <ImageCom v-if="item.prop === 'T_img'" :src="row.T_img" />
-                </template>
-              </el-table-column>
-              <el-table-column show-overflow-tooltip v-if="item.ellipsis && item.prop === 'T_model'" v-bind="item">
-                <template #default="{ row }">
-                  <el-tooltip effect="dark" :content="row.T_model" placement="bottom">
-                    {{ row.T_model }}
-                  </el-tooltip>
-                </template>
-              </el-table-column>
-              <el-table-column v-bind="item" v-if="item.fixed === 'right'">
-                <template #default="{ row }">
-                  <el-button link type="danger" size="small" :icon="Delete" @click="deleteProduct(row)">删除</el-button>
-                </template>
-              </el-table-column>
-            </template>
-            <template #append>
-              <el-button type="primary" @click="AddProductionDetailed">
-                <el-icon><Plus /></el-icon><span style="margin-left: 6px">添加产品</span>
-              </el-button>
-            </template>
-          </el-table>
-        </el-form-item>
-        <el-form-item label="备注:" :label-width="formLabelWidth" prop="T_remark">
-          <el-input
-            v-model="form.T_remark"
-            :autosize="{ minRows: 4, maxRows: 6 }"
-            type="textarea"
-            placeholder="请输入备注信息"
-          />
-        </el-form-item>
-        <div class="btn">
-          <el-divider>
-            <el-button @click="closeInStorage">取消</el-button>
-            <el-button color="#626aef" @click="AddInStorage(ruleFormRef)">提交</el-button>
-          </el-divider>
-        </div>
-        <InStorageSn ref="drawerSnRef" @onCount="autoGetCount" />
-        <InStorageProduct
-          ref="drawerProductRef"
-          @ontableData="ProductselectionChange"
-          @ontableDataAll="ProductSelectionAllChange"
-        />
-      </el-form>
-    </Drawer>
-  </div>
+									<ImageCom v-if="item.prop === 'T_img'" :src="row.T_img"/>
+								</template>
+							</el-table-column>
+							<el-table-column show-overflow-tooltip v-if="item.ellipsis && item.prop === 'T_model'"
+											 v-bind="item">
+								<template #default="{ row }">
+									<el-tooltip effect="dark" :content="row.T_model" placement="bottom">
+										{{ row.T_model }}
+									</el-tooltip>
+								</template>
+							</el-table-column>
+							<el-table-column v-bind="item" v-if="item.fixed === 'right'">
+								<template #default="{ row }">
+									<el-button link type="danger" size="small" :icon="Delete"
+											   @click="deleteProduct(row)">删除
+									</el-button>
+								</template>
+							</el-table-column>
+						</template>
+						<template #append>
+							<el-button type="primary" @click="AddProductionDetailed">
+								<el-icon>
+									<Plus/>
+								</el-icon>
+								<span style="margin-left: 6px">添加产品</span>
+							</el-button>
+						</template>
+					</el-table>
+				</el-form-item>
+				<el-form-item v-if="form.T_type===2" label="退库项目:" :label-width="formLabelWidth" prop="T_project">
+					<el-input
+						v-model="form.T_project"
+						type="text"
+						class="w-50"
+						placeholder="请输入退库项目"
+					/>
+				</el-form-item>
+				<el-form-item v-if="form.T_type===2" label="退库人:" :label-width="formLabelWidth" prop="T_return_user_name">
+					<el-input v-model="form.T_return_user_name" placeholder="请选择退库人" class="w-50"
+							  @focus="selectReturnUser"/>
+				</el-form-item>
+				<el-form-item label="备注:" :label-width="formLabelWidth" prop="T_remark">
+					<el-input
+						v-model="form.T_remark"
+						:autosize="{ minRows: 4, maxRows: 6 }"
+						type="textarea"
+						placeholder="请输入备注信息"
+					/>
+				</el-form-item>
+				<div class="btn">
+					<el-divider>
+						<el-button @click="closeInStorage">取消</el-button>
+						<el-button color="#626aef" @click="AddInStorage(ruleFormRef)">提交</el-button>
+					</el-divider>
+				</div>
+				<ReceiveUser ref="receiveUserdialog" :dept_leader="0" @onUserInfo="getReturnUserInfo" title="选择退库人"/>
+				<InStorageSn ref="drawerSnRef" @onCount="autoGetCount"/>
+				<InStorageProduct
+					ref="drawerProductRef"
+					@ontableData="ProductselectionChange"
+					@ontableDataAll="ProductSelectionAllChange"
+				/>
+			</el-form>
+		</Drawer>
+	</div>
 </template>
 <style scoped lang="scss">
 @import './index.scss';