| 
					
				 | 
			
			
				@@ -1,17 +1,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <script setup lang="ts"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { ElMessage } from 'element-plus' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { ref, reactive, nextTick } from 'vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useRouter } from 'vue-router' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { GlobalStore } from '@/stores/index' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import type { FormInstance, FormRules } from 'element-plus' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { Delete, CirclePlus } from '@element-plus/icons-vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Storehouse_StockOut_Add, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Storehouse_ProductClass_List, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Storehouse_Contract_Product_List 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} from '@/api/storehouse/index' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ReceiveUser from './receiveUser.vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import InStorageSn from '../inventory/InStorageSn.vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import InStorageProduct from '../inventory/InStorageProduct.vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import ContractNumber from './ContractNumber.vue' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Storehouse_StockOut_Add, Storehouse_Contract_Product_List } from '@/api/storehouse/index' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 interface FormType { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_type: number 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -23,6 +20,12 @@ interface FormType { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const router = useRouter() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -30,8 +33,11 @@ const tableData = ref<any[]>([]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const globalStore = GlobalStore() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const formLabelWidth = ref('120px') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const ruleFormRef = ref<FormInstance>() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const drawerSnRef = ref<InstanceType<typeof InStorageSn> | null>(null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const receiveUserdialog = ref<InstanceType<typeof ReceiveUser> | null>(null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const contractNumberRef = ref<InstanceType<typeof ContractNumber> | null>(null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const form = reactive<FormType>({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  T_type: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  T_type: 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_uuid: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_receive: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_number: '', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,9 +45,37 @@ const form = reactive<FormType>({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_product: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_date: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_remark: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  T_delivery_type: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  T_signer_unit: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  T_signer: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  T_signer_phone: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  T_signer_date: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  T_courier_number: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_contract_number: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const delivery_type = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { name: '自送', id: 1 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { name: '自提', id: 2 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { name: '快递', id: 3 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const columns = [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { type: 'index', label: '序号', width: 80, align: 'center ' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '产品图片', prop: 'T_product_img', align: 'center ', name: 'T_product_img', width: 100 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '产品名称', prop: 'T_product_name', align: 'center ' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '产品分类', prop: 'T_product_class_name', align: 'center ' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '产品型号', prop: 'T_product_model', align: 'center ', ellipsis: true }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '产品规格', prop: 'T_product_spec', align: 'center ' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '是否关联SN', prop: 'T_product_relation_sn', align: 'center ', width: 120, name: 'T_product_relation_sn' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '库存数量', prop: 'T_stock_total', align: 'center ', width: 100 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '预计出库数量', prop: 'T_product_total', align: 'center ', width: 130 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '已出库数量', prop: 'T_product_out', align: 'center ', width: 120 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '*实际出库数量', prop: 'count', align: 'center ', name: 'count', width: 140 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { label: '*关联设备', prop: 'sn', align: 'center ', name: 'sn', width: 100 }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  { prop: 'operation', label: '操作', width: 80, fixed: 'right' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const validate_T_product = (rule: any, value: any, callback: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (value.includes(undefined) || value === '') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     callback(new Error('请填写产品数量')) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -56,28 +90,299 @@ const rules = reactive<FormRules>({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_product: [{ required: true, validator: validate_T_product, trigger: 'blur' }], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   T_receive: [{ required: true, message: '请选择经办人', 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_contract_number: [{ required: true, message: '请选择合同编号', trigger: 'blur' }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const countBlurHandle = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  form.T_product = tableData.value.map(item => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (!item.count && item.T_product_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] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return tableData.value.map((item: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let product: any = '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (item.T_product_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_product_relation_sn !== 1) return 'count' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (item.T_product_relation_sn === 1 && !DeviceSnData.get(item.Id) && !DeviceSnData.size) return 'sn' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 添加sn 号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const addDeviceSn = (id: number) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  drawerSnRef.value?.addDeviceSn(id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 自动计算 count 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const autoGetCount = (length: number, id: number) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tableData.value.forEach((item: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (item.Id === id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      item.count = length 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 选择经办人 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const selectApprover = () => receiveUserdialog.value?.openDrawer() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const getReceiveInfo = ({ T_uuid, T_name }: { T_uuid: string; T_name: string }) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  form.T_receive = T_name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  form.T_uuid = T_uuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 选择合同 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const selectContract = () => contractNumberRef.value?.openDrawer() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const getContactInfo = ({ T_number }: { T_number: string }) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (form.T_contract_number === T_number) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  form.T_contract_number = T_number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  getProductList(T_number) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 通过合同获取产品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const getProductList = async (T_number: string) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const res: any = await Storehouse_Contract_Product_List({ User_tokey: globalStore.GET_User_tokey, T_number }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  console.log(res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (res.Code === 200 && res.Data.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tableData.value = res.Data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 删除产品 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const deleteProduct = (row: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tableData.value = tableData.value.filter(item => item.Id !== row.Id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 设置产品的选中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // drawerProductRef.value?.selectTableChange(row) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 删除设备得sn 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  drawerSnRef.value?.deleteDeviceSn(row.Id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 重置表单 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const resetForm = (formEl: FormInstance | undefined) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!formEl) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tableData.value = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  formEl.resetFields() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 取消出库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const closeSaleOutStock = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  resetForm(ruleFormRef.value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  router.back() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 提交内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const AddSaleOutStock = (formEl: FormInstance | undefined) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!formEl) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  form.T_product = getDeviceSnToProduct() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  formEl.validate(async valid => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (valid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const res: any = await Storehouse_StockOut_Add({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        User_tokey: globalStore.GET_User_tokey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ...form, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        T_product: form.T_product.join('') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log(res) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (res.Code === 200) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ElMessage.success('出库成功!') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        nextTick(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          closeSaleOutStock() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const options = globalStore.GET_depotList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   <div class="receive-outStock"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    <h4 class="title">销售出库</h4> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    <el-form ref="ruleFormRef" :model="form" :rules="rules"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <h4 class="title">销售出库</h4> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       <el-divider border-style="dashed" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <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" disabled type="text" placeholder="系统自动生成" class="w-50" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <el-form-item label="合同编号:" :label-width="formLabelWidth" prop="T_number"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        <el-input v-model="form.T_number" type="text" placeholder="请选择合同编号" class="w-50" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-form-item label="合同编号:" :label-width="formLabelWidth" prop="T_contract_number"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          v-model="form.T_contract_number" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          type="text" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          placeholder="请选择合同编号" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          class="w-50" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          @click="selectContract" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       </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 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_date"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-date-picker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          class="my-date-picker" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          style="flex: 0 0 33.33%" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          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_receive"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          v-model="form.T_receive" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          type="text" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          placeholder="请选择经办人" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          class="w-50" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          @click="selectApprover" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </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 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_product_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_product_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_product_relation_sn'"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-tag v-if="row.T_product_relation_sn === 1" effect="dark">是</el-tag> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <el-tag v-else type="success" effect="dark">否</el-tag> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                </span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                <el-image 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-if="item.prop === 'T_product_img'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  style="height: 50px" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  :src="row.T_product_img" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  fit="cover" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </el-table-column> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <el-table-column 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> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-table> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-form-item label="送货方式:" :label-width="formLabelWidth" prop="T_delivery_type"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-select v-model="form.T_delivery_type" clearable placeholder="请选择送货方式~" class="w-50"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-option v-for="item in delivery_type" :key="item.id" :label="item.name" :value="item.id" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-select> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-form-item label="签收单位:" :label-width="formLabelWidth" prop="T_signer_unit"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-input v-model="form.T_signer_unit" type="text" placeholder="请输入签收单位" class="w-50" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-form-item label="签收人:" :label-width="formLabelWidth" prop="T_signer"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-input v-model="form.T_signer" type="text" placeholder="请输入签收人" class="w-50" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-form-item label="签收人电话:" :label-width="formLabelWidth" prop="T_signer_phone"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-input v-model="form.T_signer_phone" type="text" placeholder="请输入签收人电话" class="w-50" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </el-form-item> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <el-form-item label="签收日期:" :label-width="formLabelWidth" prop="T_signer_date"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-date-picker 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          class="my-date-picker" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          style="flex: 0 0 33.33%" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          v-model="form.T_signer_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_courier_number"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <el-input v-model="form.T_courier_number" type="text" placeholder="请输入物流单号" class="w-50" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </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="closeSaleOutStock">取消</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <el-button color="#626aef" @click="AddSaleOutStock(ruleFormRef)">提交</el-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </el-divider> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     </el-form> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <InStorageSn ref="drawerSnRef" @onCount="autoGetCount" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <ReceiveUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <ContractNumber ref="contractNumberRef" @onContactInfo="getContactInfo" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |