Przeglądaj źródła

add:物联网卡管理、回款管理

zoie 2 miesięcy temu
rodzic
commit
9be7e0f01a
29 zmienionych plików z 1372 dodań i 744 usunięć
  1. 3 1
      src/api/mypercentage/index.ts
  2. 5 1
      src/api/percentage/index.ts
  3. 19 0
      src/api/storehouse/index.ts
  4. 3 1
      src/api/user/index.ts
  5. 18 11
      src/hooks/useTablePublic.ts
  6. 21 2
      src/views/account/users/Users.vue
  7. 16 2
      src/views/account/users/components/DrawerFrom.vue
  8. 605 0
      src/views/storehouse/inventory/IOTNetworkCard.vue
  9. 50 8
      src/views/storehouse/inventory/InStorage.vue
  10. 1 1
      src/views/storehouse/inventory/InStorageEdit.vue
  11. 5 3
      src/views/storehouse/inventory/InStorageEditSn.vue
  12. 1 1
      src/views/storehouse/inventory/InStorageForm.vue
  13. 6 3
      src/views/storehouse/inventory/InStorageSn.vue
  14. 55 8
      src/views/storehouse/outStock/OutStock.vue
  15. 1 1
      src/views/storehouse/outStock/ReceiveOutStock.vue
  16. 1 1
      src/views/storehouse/outStock/SaleOutStock.vue
  17. 1 1
      src/views/storehouse/outStock/modules/InStorageEdit.vue
  18. 6 3
      src/views/storehouse/outStock/modules/InStorageEditSn.vue
  19. 1 0
      src/views/storehouse/sales/ContractForm.vue
  20. 1 1
      src/views/storehouse/sales/ContractSale.vue
  21. 178 126
      src/views/storehouse/sales/MyPercentage.vue
  22. 45 195
      src/views/storehouse/sales/MyPercentageForm.vue
  23. 66 31
      src/views/storehouse/sales/Percentage.vue
  24. 17 71
      src/views/storehouse/sales/PercentageDetail.vue
  25. 31 162
      src/views/storehouse/sales/PercentageDetail1.vue
  26. 14 109
      src/views/storehouse/sales/PercentageForm.vue
  27. 200 0
      src/views/storehouse/sales/VerifyCompany.vue
  28. 1 0
      src/views/storehouse/sales/VerifyForm.vue
  29. 1 1
      src/views/storehouse/verifyItem.vue

+ 3 - 1
src/api/mypercentage/index.ts

@@ -31,4 +31,6 @@ export const percentage_Add = (params: any) => $http.post('/storage/Percentage/A
 
 
 // 提交审核
-export const percentage_Submit_Audit = (params: any) => $http.post('/storage/Percentage/Submit_Audit', params)
+export const percentage_Submit_Audit = (params: any) => $http.post('/storage/Percentage/Submit_Audit', params)
+
+export const percentage_User_Excel = (params: any) => $http.post('/storage/Percentage/User_Export', params)

+ 5 - 1
src/api/percentage/index.ts

@@ -15,4 +15,8 @@ export const percentage_Approval = (params: any) => $http.post('/storage/Percent
 export const percentage_Remit = (params: any) => $http.post('/storage/Percentage/Remit', params)
 
 // 员工-明细
-export const percentage_del = (params: any) => $http.post('/storage/Percentage/Admin_Del', params)
+export const percentage_del = (params: any) => $http.post('/storage/Percentage/Admin_Del', params)
+// 提成公司列表
+export const verifyCompany_list = (params: any) => $http.post('/storage/VerifyCompany/List', params)
+
+export const percentage_Excel = (params: any) => $http.post('/storage/Percentage/Export', params)

+ 19 - 0
src/api/storehouse/index.ts

@@ -24,8 +24,10 @@ export const stockInEditSort = (params: any) => $http.post('/storage/Product/Edi
 
 // 入库管理 入库详情 导出excel
 export const stockInexcel = (params: any) => $http.post('/storage/StockIn/Excel', params)
+export const stockInExcelBatch = (params: any) => $http.post('/storage/StockIn/Excel_Batch', params)
 // 出库管理 出库详情 导出excel
 export const stockoutexcel = (params: any) => $http.post('/storage/StockOut/Excel', params)
+export const stockOutExcelBatch = (params: any) => $http.post('/storage/StockOut/Excel_Batch', params)
 
 /**
  * 仓库
@@ -202,3 +204,20 @@ export const Storehouse_VerifyContract_Del = (params: any) => $http.post('/stora
 export const Storehouse_VerifyContract_Recover_List = (params: any) =>
   $http.post('/storage/RecoveriesContract/List', params)
 
+/**
+ * 公司回款管理
+ */
+//回款列表
+export const Storehouse_VerifyCompany_List = (params: any) => $http.post('/storage/VerifyCompany/List', params)
+export const Storehouse_VerifyCompany_Add = (params: any) => $http.post('/storage/VerifyCompany/Add', params)
+export const Storehouse_VerifyCompany_Edit = (params: any) => $http.post('/storage/VerifyCompany/Edit', params)
+export const Storehouse_VerifyCompany_Del = (params: any) => $http.post('/storage/VerifyCompany/Del', params)
+
+/**
+ * 物联网卡管理
+ */
+export const Storehouse_IOTNetworkCard_List = (params: any) => $http.post('/storage/IOTNetworkCard/List', params)
+export const Storehouse_IOTNetworkCard_Add = (params: any) => $http.post('/storage/IOTNetworkCard/Add', params)
+export const Storehouse_IOTNetworkCard_Edit = (params: any) => $http.post('/storage/IOTNetworkCard/Edit', params)
+export const Storehouse_IOTNetworkCard_Del = (params: any) => $http.post('/storage/IOTNetworkCard/Del', params)
+export const Storehouse_IOTNetworkCard_Import = (params: any) => $http.post('/storage/IOTNetworkCard/Import', params)

+ 3 - 1
src/api/user/index.ts

@@ -22,4 +22,6 @@ export const User_News_List = (params?: any) => $http.post('/user/News/List', pa
 // 查看消息
 export const User_News_See = (params?: any) => $http.post('/user/News/See', params)
 // 离职
-export const User_Leave = (params: any) => $http.post('/user/User/Leave', params)
+export const User_Leave = (params: any) => $http.post('/user/User/Leave', params)
+
+export const ColdVerify_User_List = (params: any) => $http.post('/user//ColdVerify/User/list', params)

+ 18 - 11
src/hooks/useTablePublic.ts

@@ -30,6 +30,7 @@ export interface OvertimeUserInfoIn {
 export interface ContractFormType {
   T_uuid: string
   T_number: string
+  T_task_id: string
   T_product: any
   T_type: any 
   T_money: string
@@ -53,20 +54,22 @@ export interface ContractFormType {
 }
 export interface MyPercentageFormType {
   T_id: string
-  T_number: string
-  T_type: any 
-  T_item: any
-  T_money:string
-  T_uuid?: string
-  T_submit?: string
-  T_product?:any
+  T_device_type: string
+  T_verify_type: string
+  T_company_uuid: string
+  T_type: any
 }
 export interface MyPercentageFormTypeFrom {
   T_id: string
-  T_number: string
+  // T_number: string
   T_type: any 
-  T_item: any
+  // T_item: any
   T_money:string
+  T_task_id:string
+  T_device_type:string
+  T_uuid_name:string
+  T_verify_type:string
+  T_verifyCompany?:any
   T_uuid?: string
   T_submit?: string
   T_product?:any
@@ -183,14 +186,18 @@ export const options2 = [
   { name: '待审核', id: 1 },
   { name: '审核通过', id: 2 },
   { name: '审核不通过', id: 3 },
-  { name: '已部分打款', id: 4 },
-  { name: '已全部打款', id: 5 },
+  // { name: '已部分打款', id: 4 },
+  { name: '已打款', id: 5 },
   { name: '未提交审核', id: 6 }
 ]
 export const options3 = [
   { name: '验证实施', id: 1 },
   { name: '报告编写', id: 2 },
 ]
+export const options4 = [
+	{ name: '未回款', id: 1 },
+	{ name: '已回款', id: 2 },
+]
 export function useStapublicFun(data:any){
   const a = options2.find((item:any)=>item.id == data)
   return a?.name

+ 21 - 2
src/views/account/users/Users.vue

@@ -1,10 +1,10 @@
 <script setup lang="ts">
-import { ref, nextTick, reactive } from 'vue'
+import {ref, nextTick, reactive, onMounted} from 'vue'
 import { GlobalStore } from '@/stores/index'
 import DrawerFrom from './components/DrawerFrom.vue'
 import TableBase from '@/components/TableBase/index.vue'
 import { Edit, Delete,EditPen } from '@element-plus/icons-vue'
-import { User_List, User_Del,User_Leave } from '@/api/user/index'
+import {User_List, User_Del, User_Leave, ColdVerify_User_List} from '@/api/user/index'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { ColumnProps } from '@/components/TableBase/interface/index'
 
@@ -43,6 +43,7 @@ const columns: ColumnProps[] = [
   { prop: 'T_contract_end_time', label: '劳动合同结束时间', width: 160 },
   { prop: 'T_expire', label: '是否到期', name: 'T_expire', width: 100 },
   { prop: 'T_marry', label: '婚否', name: 'T_marry' },
+  { prop: 'T_verify_cold_uuid', label: '冷链验证平台', name: 'T_verify_cold_uuid', width: 120 },
   { prop: 'operation', label: '操作', width: 200, fixed: 'right' }
 ]
 const openDrawerFrom = () => drawerFromRef.value?.openDrawer()
@@ -94,6 +95,21 @@ const DeleteUserInfo = (row: any) => {
     })
 }
 
+// 获取设备类型
+const coldVerifyUserList = ref<any[]>([
+	{
+		T_uuid: '',
+		T_name: ''
+	}
+])
+const getColdVerifyUserList = async () => {
+	const res: any = await ColdVerify_User_List({})
+	coldVerifyUserList.value = res.Data.List
+}
+onMounted(() => {
+	getColdVerifyUserList()
+})
+
 // search
 const SearchInfo = () => TableRef.value?.searchTable()
 </script>
@@ -149,6 +165,9 @@ const SearchInfo = () => TableRef.value?.searchTable()
         <el-tag class="ml-2" type="warning" v-else-if="+row.T_entry_type === 2">兼职</el-tag>
         <el-tag class="ml-2" type="danger" v-else>实习生</el-tag>
       </template>
+      <template #T_verify_cold_uuid="{ row }">
+        <el-text>{{ coldVerifyUserList.find(option => option.T_uuid === row.T_verify_cold_uuid)?.T_name || '' }}</el-text>
+      </template>
       <template #right="{ row }">
         <el-button link type="primary" :disabled="row.T_State==2?true:false" size="small" :icon="EditPen" @click="Dimission(row)">离职</el-button>
         <el-button link type="primary" size="small" :icon="Edit" @click="EditUserInfo(row)">编辑</el-button>

+ 16 - 2
src/views/account/users/components/DrawerFrom.vue

@@ -7,7 +7,7 @@ import Drawer from '@/components/Drawer/index.vue'
 import { User_Power_List } from '@/api/role/index'
 import { ref, reactive, onMounted, nextTick } from 'vue'
 import type { FormInstance, FormRules } from 'element-plus'
-import { User_Post_List, User_Add, User_Edit } from '@/api/user/index'
+import {User_Post_List, User_Add, User_Edit, ColdVerify_User_List} from '@/api/user/index'
 
 const validate_checkPass = (rule: any, value: any, callback: any) => {
   if (checkPass.value === '') {
@@ -23,6 +23,7 @@ const checkPass = ref('')
 const formRef = ref()
 const _PASS = '******'
 let userPowerList: any = []
+let coldVerifyUserList: any = []
 let userPostList = ref<any[]>([])
 const globalStore = GlobalStore()
 const formLabelWidth = ref('105px')
@@ -56,7 +57,8 @@ let form = ref({
   T_positive_time: '',
   T_spouse_phone: '',
   T_expire: '',
-  T_dept_leader: ''
+  T_dept_leader: '',
+  T_verify_cold_uuid: ''
 })
 
 const getUserPowerList = async () => {
@@ -68,6 +70,10 @@ const getUserPowerList = async () => {
   const res: any = await User_Power_List(params)
   userPowerList = res.Data.Data
 }
+const getColdVerifyUserList = async () => {
+  const res: any = await ColdVerify_User_List({})
+  coldVerifyUserList = res.Data.List
+}
 
 const changeDept = async (val: number) => {
   const res: any = await User_Post_List({ T_dept: val })
@@ -133,6 +139,9 @@ onMounted(() => {
   if (userPowerList.length <= 0) {
     getUserPowerList()
   }
+  if (coldVerifyUserList.length <= 0) {
+	getColdVerifyUserList()
+  }
 })
 
 const emit = defineEmits<{ (event: 'onTableList'): void; (event: 'onaction', val: boolean): void }>()
@@ -275,6 +284,11 @@ defineExpose({
           <el-radio :label="1">是</el-radio>
         </el-radio-group>
       </el-form-item>
+      <el-form-item label="关联冷链验证平台:" label-width="160px" prop="T_verify_cold_uuid">
+		<el-select v-model="form.T_verify_cold_uuid" filterable placeholder="请选择">
+			<el-option v-for="item in coldVerifyUserList" :key="item.T_uuid" :label="item.T_name" :value="item.T_uuid" />
+		</el-select>
+      </el-form-item>
       <el-form-item label="备注:" :label-width="formLabelWidth">
         <el-input v-model="form.T_remark" type="textarea" autocomplete="off" placeholder="备注" />
       </el-form-item>

+ 605 - 0
src/views/storehouse/inventory/IOTNetworkCard.vue

@@ -0,0 +1,605 @@
+<script setup lang="ts">
+import {
+	Storehouse_IOTNetworkCard_Add,
+	Storehouse_IOTNetworkCard_Del,
+	Storehouse_IOTNetworkCard_Edit,
+	Storehouse_IOTNetworkCard_Import,
+	Storehouse_IOTNetworkCard_List,
+} from '@/api/storehouse/index'
+import {nextTick, reactive, ref} from 'vue'
+import Upload from '@/components/Upload/index.vue'
+import Drawer from '@/components/Drawer/index.vue'
+import type {FormInstance, FormRules} from 'element-plus'
+import {ElLoading, ElMessage, ElMessageBox} from 'element-plus'
+import {Delete, Edit,View} from '@element-plus/icons-vue'
+import type {ColumnProps} from '@/components/TableBase/interface/index'
+import {useTablePublic} from '@/hooks/useTablePublic'
+import ReceiveUser from "@/views/storehouse/outStock/receiveUser.vue";
+
+let total = 0
+let editStateTitle = ""
+const isNew = ref(true)
+const formLabelWidth = ref('100px')
+const ruleFormRef = ref<FormInstance>()
+const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
+const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
+const {resetForm, globalStore, searchOnTableList, updateOnTableList} = useTablePublic()
+const receiveUserdialog = ref<InstanceType<typeof ReceiveUser> | null>(null)
+const uploadFiles = ref<File[]>([]) // 新增:用于存储上传的文件
+const ImportEdit = ref(false)
+const tableData = ref<any[]>([])
+const multipleSelection = ref<any[]>([])
+const dialogTableVisible = ref(false)
+const editStateVisible = ref(false)
+
+const columns: ColumnProps[] = [
+	{type: 'selection', width: '44px', fixed: 'left'},
+	{type: 'index', label: '序号', width: 80},
+	{prop: 'T_in_date', label: '入库日期'},
+	{prop: 'T_meal_type', label: '套餐类型'},
+	{prop: 'T_meal', label: '套餐'},
+	{prop: 'T_expire', label: '到期&欠费'},
+	{prop: 'T_State', label: '状态'},
+	{prop: 'T_iccid', label: '串码'},
+	{prop: 'T_MSISDN', label: 'MSISDN'},
+	{prop: 'T_out_date', label: '出库日期'},
+	{prop: 'T_out_project', label: '出库项目'},
+	{prop: 'T_receive_name', label: '领用人'},
+	{prop: 'T_remark', label: '备注'},
+	// {prop: 'operation', label: '操作', width: 150, fixed: 'right'}
+]
+
+const rules = reactive<FormRules>({
+	T_in_date: [{required: true, message: '请输入入库日期', trigger: 'blur'}],
+	T_State: [{required: true, message: '请选择状态', trigger: 'blur'}],
+	T_iccid: [{required: true, message: '请输入串码', trigger: 'blur'}],
+	T_MSISDN: [{required: true, message: '请输入MSISDN', trigger: 'blur'}],
+})
+const editStateRules = reactive<FormRules>({
+	T_out_date: [{required: true, message: '请输入出库日期', trigger: 'blur'}],
+	T_out_project: [{required: true, message: '请输入出库项目', trigger: 'blur'}],
+	T_receive_name: [{required: true, message: '请选择领用人', trigger: 'blur'}],
+})
+const form: any = ref({
+	T_id: "",
+	T_in_date: '',
+	T_meal_type: '',
+	T_meal: '',
+	T_expire: '',
+	T_iccid: '',
+	T_MSISDN: '',
+	T_out_date: '',
+	T_out_project: '',
+	T_receive: '',
+	T_receive_name: '',
+	T_remark: '',
+	T_State: 1,
+})
+const editStateform: any = ref({
+	T_out_date: '',
+	T_out_project: '',
+	T_receive: '',
+	T_receive_name: '',
+	T_remark: '',
+	T_State: 1,
+})
+
+// 搜索
+const options = reactive([
+	{name: '新卡入库', id: 1},
+	{name: '退还入库', id: 2},
+	{name: '已出库', id: 3},
+	{name: '损坏退还', id: 4},
+	{name: '待注销', id: 5},
+	{name: '已注销', id: 6}
+])
+
+const openDrawer = (type: string, row?: any) => {
+	isNew.value = type === 'new' ? true : false
+	if (type == 'edit') {
+		// form.value.T_id = row.Id
+		// form.value.T_in_date = row.T_in_date
+		// form.value.T_meal_type = row.T_meal_type
+		// form.value.T_meal = row.T_meal
+		// form.value.T_expire = row.T_expire
+		// form.value.T_iccid = row.T_iccid
+		// form.value.T_MSISDN = row.T_MSISDN
+		// form.value.T_out_date = row.T_out_date
+		// form.value.T_out_project = row.T_out_project
+		// form.value.T_receive = row.T_receive
+		// form.value.T_receive_name = row.T_receive_name
+		// form.value.T_State = row.T_State
+		for (let key in form.value) {
+			if (row.hasOwnProperty(key)) {
+				form.value[key] = row[key];
+			}
+			form.value.T_id = row.Id
+		}
+	} else {
+		delete form.value.T_id
+		form.value.T_in_date = ''
+		form.value.T_meal_type = ''
+		form.value.T_meal = ''
+		form.value.T_expire = ''
+		form.value.T_iccid = ''
+		form.value.T_MSISDN = ''
+		form.value.T_remark = ''
+		form.value.T_State = 1
+	}
+	drawerRef.value?.openDrawer()
+}
+
+const AddIOTNetworkCard = (formEl: FormInstance | undefined) => {
+	if (!formEl) return
+	formEl.validate(async (valid: boolean) => {
+		if (valid) {
+			let res: any = {}
+			if (isNew.value) {//新增
+				res = await Storehouse_IOTNetworkCard_Add({User_tokey: globalStore.GET_User_tokey, ...form.value})
+			} else {//编辑
+				res = await Storehouse_IOTNetworkCard_Edit({
+					User_tokey: globalStore.GET_User_tokey,
+					...form.value,
+				})
+			}
+			if (res.Code === 200) {
+				ElMessage.success(`物联网卡${isNew.value ? '添加' : '修改'}成功!!`)
+				nextTick(() => {
+					drawerRef.value?.closeDrawer()
+					// updateOnTableList(TableRef.value)
+					resetForm(ruleFormRef.value)
+					isNew.value = true
+					getIOTNetworkCard_List()
+				})
+			}
+		}
+	})
+}
+
+const IOTNetworkCardDelete = (row: any) => {
+	ElMessageBox.confirm('您确定要删除该物联网卡吗?', '警告', {
+		confirmButtonText: '确定',
+		cancelButtonText: '取消',
+		type: 'warning'
+	})
+		.then(async () => {
+			const res: any = await Storehouse_IOTNetworkCard_Del({
+				User_tokey: globalStore.GET_User_tokey,
+				T_id: row.Id
+			})
+			if (res.Code === 200) {
+				ElMessage.success('删除成功!')
+				// nextTick(() => updateOnTableList(TableRef.value))
+				getIOTNetworkCard_List()
+			}
+		})
+		.catch(() => {
+			ElMessage.warning('取消成功!')
+		})
+}
+
+const callbackDrawer = (done: () => void) => {
+	resetForm(ruleFormRef.value)
+	uploadRef.value?.clearfileList()
+	done()
+}
+// 搜索
+const initParam = reactive({
+	User_tokey: globalStore.GET_User_tokey,
+	page: 1,
+	page_z: 10,
+	T_name: '',
+	T_state: ''
+})
+
+/**
+ * 选择领用人
+ */
+const selectApprover = () => receiveUserdialog.value?.openDrawer()
+const getReceiveInfo = ({T_uuid, T_name}: { T_uuid: string; T_name: string }) => {
+	form.value.T_receive = T_uuid
+	form.value.T_receive_name = T_name
+}
+
+const geteditStateReceiveInfo = ({T_uuid, T_name}: { T_uuid: string; T_name: string }) => {
+	editStateform.value.T_receive = T_uuid
+	editStateform.value.T_receive_name = T_name
+}
+
+const handleFileChange = (file: any, fileList: any) => {
+	uploadFiles.value = fileList.map((item: any) => item.raw) // 新增:更新上传文件列表
+}
+const submitUpload = async () => {
+	if (uploadFiles.value.length === 0) {
+		// 修改:使用 uploadFiles.value
+		ElMessage.warning('请先选择文件')
+		return
+	}
+	const formData = new FormData()
+	uploadFiles.value.forEach((file: File) => {
+		// 修改:遍历 uploadFiles.value
+		formData.append('file', file)
+	})
+	const loading = ElLoading.service({
+		// 新增:显示加载动画
+		lock: true,
+		text: '正在上传文件...',
+		background: 'rgba(0, 0, 0, 0.7)'
+	})
+	try {
+		const result: any = await Storehouse_IOTNetworkCard_Import(formData)
+		if (result.Code === 200) {
+			ElMessage.success('文件上传成功')
+			// 处理上传成功后的逻辑
+			getIOTNetworkCard_List()
+			uploadFiles.value = [] // 新增:清除文件上传列表
+			ImportEdit.value = false
+		} else {
+			ElMessage.error('文件上传失败')
+		}
+	} catch (error) {
+		ElMessage.error('文件上传失败,请检查网络连接')
+	} finally {
+		loading.close() // 新增:关闭加载动画
+	}
+}
+
+const getIOTNetworkCard_List = async () => {
+	const res: any = await Storehouse_IOTNetworkCard_List(initParam)
+	tableData.value = res.Data.Data || []
+	total = res.Data.Num
+}
+getIOTNetworkCard_List()
+// 搜索模型
+const searchModelHandle = () => {
+	total = 0
+	initParam.page = 1
+	getIOTNetworkCard_List()
+}
+
+const handleSelectionChange = (val: any[]) => {
+	multipleSelection.value = val
+	console.log(multipleSelection.value)
+}
+const selectableDisable = (row: any) => {
+	if (row.Id === 0) return false
+	return true
+}
+const handleSizeChange = (val: number) => {//分页改变
+	initParam.page_z = val
+	//下面调用列表的接口
+	getIOTNetworkCard_List()
+}
+const handleCurrentChange = (val: number) => {//条数改变
+	initParam.page = val
+	//下面调用列表的接口
+	getIOTNetworkCard_List()
+}
+// 保存选中的数据id,row-key就是要指定一个key标识这一行的数据
+const getRowKey = (row: any) => {
+	return row.Id
+}
+
+// 修改状态
+const openEditStateDialog =  (state: number) => {
+	if (multipleSelection.value.length === 0) {
+		ElMessage.warning('请选择物联网卡!!!')
+		return
+	}
+	editStateform.value.T_out_date = ''
+	editStateform.value.T_out_project = ''
+	editStateform.value.T_receive = ''
+	editStateform.value.T_remark = ''
+	editStateform.value.T_State = state
+	if (state === 3) {
+		editStateTitle = '出库'
+	}
+	if (state === 4) {
+		editStateTitle = '退还'
+	}
+	if (state === 5) {
+		editStateTitle = '待注销'
+	}
+	if (state === 6) {
+		editStateTitle = '注销'
+	}
+	editStateVisible.value = true
+
+}
+const editState = async (formEl: FormInstance | undefined) => {
+	if (multipleSelection.value.length === 0) {
+		ElMessage.warning('请选择物联网卡!!!')
+		return
+	}
+	if (!formEl) return
+	formEl.validate(async (valid: boolean) => {
+		if (valid) {
+			for await (let item of multipleSelection.value) {
+				Storehouse_IOTNetworkCard_Edit({ T_id: item.Id , ...editStateform.value})
+			}
+			ElMessage.success('提交成功!!!')
+
+			nextTick(() => {
+				multipleSelection.value = []
+			})
+			getIOTNetworkCard_List()
+		}
+	})
+}
+const gridData:any = ref([])
+const preview = (list:any) => {
+	gridData.value = list || []
+
+	dialogTableVisible.value = true
+}
+</script>
+
+<template>
+	<div class="iotnetworkcard-list">
+		<el-card class="m-b-3">
+			<div class="input-suffix">
+			<el-row :gutter="20" style="margin-bottom: 0">
+				<el-col :xl="6" :lg="6" :md="5">
+					<span class="inline-flex items-center">关键字:</span>
+					<el-input
+						v-model="initParam.T_name"
+						type="text"
+						class="w-50 m-2"
+						placeholder="按串码、MSISDN搜索"
+						@change="searchOnTableList"
+					/>
+				</el-col>
+				<el-col :xl="6" :lg="7" :md="8">
+					<span class="inline-flex items-center">状态:</span>
+					<el-select v-model="initParam.T_state" class="w-50 m-2" clearable placeholder="请选择状态~">
+						<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id"/>
+					</el-select>
+					<el-button type="primary" @click="searchModelHandle">搜索</el-button>
+				</el-col>
+				<el-col :xl="10" :lg="11" :md="11" class="btn">
+					<el-button type="primary" @click="openDrawer('new')">入库</el-button>
+					<el-button type="success" @click="ImportEdit = true">导入</el-button>
+					<el-button type="primary" @click="openEditStateDialog(3)">出库</el-button>
+					<el-button type="success" @click="openEditStateDialog(4)">退还</el-button>
+					<el-button type="warning" @click="openEditStateDialog(5)">待注销</el-button>
+					<el-button type="info" @click="openEditStateDialog(6)">注销</el-button>
+				</el-col>
+			</el-row>
+			</div>
+		</el-card>
+		<el-card class="table-card">
+			<el-table
+				:data="tableData"
+				:row-key="getRowKey"
+				:highlight-current-row="true"
+				@selection-change="handleSelectionChange"
+				style="width: 100%; height: 100%"
+			>
+				<template v-for="(item, index) in columns" :key="index">
+					<el-table-column
+						show-overflow-tooltip
+						v-if="item.type === 'index' || item.fixed === 'left' || item.type === 'selection'"
+						:selectable="selectableDisable"
+						:type="item.type"
+						align="center"
+						v-bind="item"
+					/>
+					<el-table-column
+						v-else-if="item.prop === 'T_State'"
+						:selectable="selectableDisable"
+						:label="item.label"
+						:width="item.width"
+						align="center"
+					>
+						<template #default="scope">
+							<el-text v-if="scope.row.T_State === 1" type="success">新卡入库</el-text>
+							<el-text v-if="scope.row.T_State === 2" type="success">退还入库</el-text>
+							<el-text v-if="scope.row.T_State === 3" type="primary">已出库</el-text>
+							<el-text v-if="scope.row.T_State === 4" type="danger">损坏退还</el-text>
+							<el-text v-if="scope.row.T_State === 5" type="warning">待注销</el-text>
+							<el-text v-if="scope.row.T_State === 6" type="info">已注销</el-text>
+						</template>
+					</el-table-column>
+					<el-table-column
+						v-else
+						:selectable="selectableDisable"
+						:prop="item.prop"
+						:label="item.label"
+						:width="item.width"
+						align="center"
+						label-class-name="label-table"
+						show-overflow-tooltip
+					>
+					</el-table-column>
+
+				</template>
+
+
+
+				<el-table-column
+					fixed="right"
+					label="操作"
+					align="center"
+					width="230">
+					<template #default="scope">
+						<el-button link type="primary" size="small" :icon="View" @click="preview(scope.row.T_record)">查看记录</el-button>
+						<el-button link type="primary" size="small" :icon="Edit" @click="openDrawer('edit', scope.row)">编辑
+						</el-button>
+						<el-button link type="danger" size="small" :icon="Delete"
+								   @click="IOTNetworkCardDelete(scope.row)">删除
+						</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<div class="pagination">
+				<el-pagination
+					v-model:current-page="initParam.page"
+					v-model:page-size="initParam.page_z"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next, jumper"
+					:total="total"
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+				/>
+			</div>
+
+		</el-card>
+		<Drawer ref="drawerRef" :handleClose="callbackDrawer" size="45%">
+			<template #header="{ params }">
+				<h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '入库' : '编辑' }} - 物联网卡</h4>
+			</template>
+			<el-form ref="ruleFormRef" :model="form" :rules="rules">
+				<el-form-item label="入库日期:" class="m-b-6" :label-width="formLabelWidth" prop="T_in_date">
+					<el-date-picker
+						class="my-date-picker"
+						style="width: 21.5rem"
+						v-model="form.T_in_date"
+						type="date"
+						placeholder="选择日期"
+						format="YYYY-MM-DD"
+						value-format="YYYY-MM-DD"
+					/>
+				</el-form-item>
+				<el-form-item label="套餐类型:" class="m-b-6" :label-width="formLabelWidth" prop="T_meal_type">
+					<el-input v-model="form.T_meal_type" type="text" class="w-50" placeholder="请填写套餐类型"/>
+				</el-form-item>
+				<el-form-item label="套餐:" class="m-b-6" :label-width="formLabelWidth" prop="T_meal">
+					<el-input v-model="form.T_meal" type="text" autocomplete="off" class="w-50"
+							  placeholder="请填写套餐"/>
+				</el-form-item>
+				<el-form-item label="到期&欠费:" class="m-b-6" :label-width="formLabelWidth" prop="T_expire">
+					<el-input v-model="form.T_expire" type="text" autocomplete="off" class="w-50"
+							  placeholder="请填写到期&欠费"/>
+				</el-form-item>
+				<el-form-item label="状态:" class="m-b-6" :label-width="formLabelWidth" prop="T_State">
+					<el-select v-model="form.T_State" class="w-50 m-2" clearable placeholder="请选择状态~">
+						<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id"/>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="串码:" class="m-b-6" :label-width="formLabelWidth" prop="T_iccid">
+					<el-input v-model="form.T_iccid" type="text" autocomplete="off" class="w-50"
+							  placeholder="请填写串码"/>
+				</el-form-item>
+				<el-form-item label="MSISDN:" class="m-b-6" :label-width="formLabelWidth" prop="T_MSISDN">
+					<el-input v-model="form.T_MSISDN" type="text" autocomplete="off" class="w-50"
+							  placeholder="请填写MSISDN"/>
+				</el-form-item>
+				<el-form-item v-if="!isNew" label="出库日期:" class="m-b-6" :label-width="formLabelWidth"
+							  prop="T_out_date">
+					<el-date-picker
+						class="my-date-picker"
+						style="width: 21.5rem"
+						v-model="form.T_out_date"
+						type="date"
+						placeholder="选择日期"
+						format="YYYY-MM-DD"
+						value-format="YYYY-MM-DD"
+					/>
+				</el-form-item>
+				<el-form-item v-if="!isNew" label="出库项目:" :label-width="formLabelWidth" prop="T_out_project">
+					<el-input v-model="form.T_out_project" type="text" class="w-50" placeholder="请填写出库项目"/>
+				</el-form-item>
+				<el-form-item v-if="!isNew" label="领用人:" class="m-b-6" :label-width="formLabelWidth"
+							  prop="T_receive_name">
+					<el-input v-model="form.T_receive_name" placeholder="请选择领用人" class="w-50"
+							  @focus="selectApprover"/>
+				</el-form-item>
+				<el-form-item label="备注:" :label-width="formLabelWidth" prop="T_remark">
+					<el-input v-model="form.T_remark" type="text" class="w-50" placeholder="请填写备注"/>
+				</el-form-item>
+
+
+				<el-form-item :label-width="formLabelWidth">
+					<el-button v-if="isNew" color="#626aef" @click="AddIOTNetworkCard(ruleFormRef)">提交</el-button>
+					<el-button v-else color="#626aef" @click="AddIOTNetworkCard(ruleFormRef)">修改</el-button>
+				</el-form-item>
+			</el-form>
+			<ReceiveUser ref="receiveUserdialog" :dept_leader="0" @onUserInfo="getReceiveInfo" title="选择领用人"/>
+
+		</Drawer>
+		<el-dialog title="导入" v-model="ImportEdit" width="50%">
+			<el-upload ref="uploadRef" class="upload-demo" :auto-upload="false" @change="handleFileChange">
+				<template #trigger>
+					<el-button type="primary">选择文件</el-button>
+				</template>
+				<el-button style="margin-left: 10px;" type="success" @click="submitUpload"> 导入</el-button>
+
+				<template #tip>
+					<div class="el-upload__tip">
+						只能上传excel文件
+					</div>
+				</template>
+			</el-upload>
+		</el-dialog>
+
+		<el-dialog v-model="dialogTableVisible" title="查看记录" draggable>
+			<el-table :data="gridData" border max-height="500">
+				<el-table-column type="index" label="序号" width="100" />
+				<el-table-column property="T_data" label="日期" />
+				<el-table-column property="T_State_name" label="状态" />
+				<el-table-column property="T_out_project" label="出库项目" />
+				<el-table-column property="T_remark" label="备注" />
+			</el-table>
+		</el-dialog>
+
+		<el-dialog v-model="editStateVisible" :title=editStateTitle draggable :destroy-on-close=true>
+			<el-form ref="ruleFormRef" :model="editStateform" :rules="editStateRules">
+				<el-form-item v-if="editStateTitle==='出库'" label="出库日期:" class="m-b-6" :label-width="formLabelWidth"
+							  prop="T_out_date">
+					<el-date-picker
+						class="my-date-picker"
+						style="width: 21.5rem"
+						v-model="editStateform.T_out_date"
+						type="date"
+						placeholder="选择日期"
+						format="YYYY-MM-DD"
+						value-format="YYYY-MM-DD"
+					/>
+				</el-form-item>
+				<el-form-item v-if="editStateTitle==='出库'" label="出库项目:" :label-width="formLabelWidth" prop="T_out_project">
+					<el-input v-model="editStateform.T_out_project" type="text" class="w-50" placeholder="请填写出库项目"/>
+				</el-form-item>
+				<el-form-item v-if="editStateTitle==='出库'" label="领用人:" class="m-b-6" :label-width="formLabelWidth"
+							  prop="T_receive_name">
+					<el-input v-model="editStateform.T_receive_name" placeholder="请选择领用人" class="w-50"
+							  @focus="selectApprover"/>
+				</el-form-item>
+				<el-form-item label="备注:" :label-width="formLabelWidth" prop="T_remark">
+					<el-input v-model="editStateform.T_remark" type="text" class="w-50" placeholder="请填写备注"/>
+				</el-form-item>
+				<el-form-item :label-width="formLabelWidth">
+					<el-button color="#626aef" @click="editState(ruleFormRef)">提交</el-button>
+				</el-form-item>
+			</el-form>
+			<ReceiveUser ref="receiveUserdialog" :dept_leader="0" @onUserInfo="geteditStateReceiveInfo" title="选择领用人"/>
+		</el-dialog>
+
+	</div>
+
+</template>
+
+<style scoped lang="scss">
+.iotnetworkcard-list {
+	.input-suffix {
+		width: 100%;
+		.inline-flex {
+			white-space: nowrap;
+		}
+		.btn {
+			display: flex;
+			justify-content: end;
+		}
+		.w-50 {
+			width: 12.5rem
+		}
+	}
+	.w-50 {
+		width: 21.5rem
+	}
+}
+.pagination {
+	display: flex;
+	justify-content: end;
+	margin-top: 1rem;
+}
+</style>

+ 50 - 8
src/views/storehouse/inventory/InStorage.vue

@@ -10,14 +10,16 @@ import InStorageEdit from './InStorageEdit.vue'
 import { ref, reactive } from 'vue'
 import TableBase from '@/components/TableBase/index.vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
-import { Storehouse_StockIn_List,Storehouse_StockIn_del } from '@/api/storehouse/index'
+import {Storehouse_StockIn_List, Storehouse_StockIn_del, stockInExcelBatch} from '@/api/storehouse/index'
 import { depotHooks } from '@/hooks/useDepot'
 
 const router = useRouter()
 const globalStore = GlobalStore()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
+const multipleSelection = ref<any[]>([])
 
 const columns: ColumnProps[] = [
+  { type: 'selection', width: '44px', fixed: 'left'},
   { type: 'index', label: '序号', width: 80 },
   { prop: 'T_number', label: '入库单号' },
   { prop: 'T_type', label: '入库类型' , name: 'T_type' },
@@ -57,7 +59,8 @@ const initParam = reactive({
   User_tokey: globalStore.GET_User_tokey,
   T_end_date: '',
   T_start_date: '',
-  T_depot_id: ''
+  T_depot_id: '',
+  T_name: ''
 })
 
 const searchHandle = () => {
@@ -95,15 +98,53 @@ const deleteFun = (row:any)=>{
 
 // 拿到仓库列表
 const { options } = depotHooks()
+
+// 保存选中的数据id,row-key就是要指定一个key标识这一行的数据
+const getRowKey = (row: any) => {
+	return row.T_number
+}
+const stockInexcelFun = async ()=>{
+	if (multipleSelection.value.length === 0) {
+		ElMessage.warning('请选择入库单!!!')
+		return
+	}
+	let T_number_list = ''
+	for (let item of multipleSelection.value) {
+		T_number_list += item.T_number + '|'
+	}
+
+	const result:any = await stockInExcelBatch({T_number_list:T_number_list})
+	if (result.Code === 200) {
+		window.open(result.Data)
+	}
+}
+const handleSelectionChange = (val: any[]) => {
+	multipleSelection.value = val
+	console.log(multipleSelection.value)
+}
 </script>
 
 <template>
   <div class="InStorage">
-    <TableBase ref="TableRef" :columns="columns" :requestApi="Storehouse_StockIn_List" :initParam="initParam">
+    <TableBase ref="TableRef" :columns="columns" :requestApi="Storehouse_StockIn_List" :initParam="initParam"
+			   :getRowKey="getRowKey"
+			   :selection-change="handleSelectionChange"
+	>
       <template #table-header>
         <div class="input-suffix">
           <el-row :gutter="20" style="margin-bottom: 0">
-            <el-col :xl="6" :lg="9" :md="11" style="display: flex">
+		    <el-col :xl="5" :lg="6" :md="5" style="display: flex">
+			  <span class="inline-flex items-center">入库编号:</span>
+			  <el-input
+				  v-model="initParam.T_name"
+				  class="w-50 m-2"
+				  type="text"
+				  placeholder="入库编号搜索"
+				  clearable
+				  @change="searchHandle"
+			  />
+		  </el-col>
+            <el-col :xl="5" :lg="6" :md="7" style="display: flex">
               <span class="inline-flex items-center">入库日期:</span>
               <el-date-picker
                 v-model="T_date"
@@ -115,16 +156,17 @@ const { options } = depotHooks()
                 value-format="YYYY-MM-DD"
               />
             </el-col>
-            <el-col :xl="6" :lg="7" :md="9" style="display: flex">
+            <el-col :xl="5" :lg="6" :md="6" style="display: flex">
               <span class="inline-flex items-center">仓库:</span>
               <el-select v-model="initParam.T_depot_id" clearable placeholder="请选择仓库~">
                 <el-option v-for="item in options" :key="item.Id" :label="item.T_name" :value="item.Id" />
               </el-select>
               <el-button type="primary" @click="searchHandle">搜索</el-button>
             </el-col>
-            <el-col :xl="12" :lg="8" :md="4" class="btn"
-              ><el-button type="primary" @click="openInStorageFormDrawer">入库</el-button></el-col
-            >
+            <el-col :xl="9" :lg="6" :md="6" class="btn">
+				<el-button type="primary" @click="openInStorageFormDrawer">入库</el-button>
+				<el-button type="success" icon="Download" @click="stockInexcelFun">导出excel</el-button>
+			</el-col>
           </el-row>
         </div>
       </template>

+ 1 - 1
src/views/storehouse/inventory/InStorageEdit.vue

@@ -198,7 +198,7 @@ const getStorehouseContractGet = async (Id:any) => {
  */
  
 const addDeviceSn = (obj: any) => {
-    drawerSnEditRef.value?.addDeviceSn(obj.Id,2)
+    drawerSnEditRef.value?.addDeviceSn(obj.Id,2,obj.T_product_id)
     drawerSnEditRef.value!.drawerSnRef?.openDrawer()
     if(obj.T_device_list)drawerSnEditRef.value!.tableSnData = [...obj.T_device_list].map(item => ({ sn: item }));
 }

+ 5 - 3
src/views/storehouse/inventory/InStorageEditSn.vue

@@ -11,6 +11,7 @@ interface FormSnType {
   Id?: number
   sn: string
   type?: number
+  T_product_id?: number
 }
 
 const snTable = ref()
@@ -27,7 +28,8 @@ const snColumns = [
 const formSn = reactive<FormSnType>({
   Id: undefined,
   sn: '',
-  type: undefined
+  type: undefined,
+  T_product_id: undefined
 })
 const rulesSn = reactive<FormRules>({
   sn: [{ required: true, message: '请输入SN号', trigger: 'blur' }]
@@ -84,10 +86,10 @@ const resetSnForm = (formEl: FormInstance | undefined) => {
   formEl.resetFields()
 }
 
-const addDeviceSn = (id: number, type: number) => {
-    console.log('1212',id,type)
+const addDeviceSn = (id: number, type: number,T_product_id: number) => {
   formSn.Id = id
   formSn.type = type
+  formSn.T_product_id = T_product_id
   if (SNDataMap.has(id)) {
     tableSnData.value = SNDataMap.get(id) as FormSnType[]
   } else {

+ 1 - 1
src/views/storehouse/inventory/InStorageForm.vue

@@ -177,7 +177,7 @@ const ProductSelectionAllChange = (selection: any[]) => {
  * 添加sn 号
  */
 const addDeviceSn = (id: number) => {
-  drawerSnRef.value?.addDeviceSn(id, 2)
+  drawerSnRef.value?.addDeviceSn(id, 2, id)
 }
 /**
  * 自动计算 count

+ 6 - 3
src/views/storehouse/inventory/InStorageSn.vue

@@ -11,6 +11,7 @@ interface FormSnType {
   Id?: number
   sn: string
   type?: number
+  T_product_id?: number
 }
 
 const snTable = ref()
@@ -26,7 +27,8 @@ const snColumns = [
 const formSn = reactive<FormSnType>({
   Id: undefined,
   sn: '',
-  type: undefined
+  type: undefined,
+  T_product_id: undefined
 })
 const rulesSn = reactive<FormRules>({
   sn: [{ required: true, message: '请输入SN号', trigger: 'blur' }]
@@ -40,7 +42,7 @@ const addSn = (formEl: FormInstance | undefined) => {
             if(formSn.sn.length==24){
                 formSn.sn = formSn.sn.substring(2, formSn.sn.length - 6)
             }  
-            const res: any = await Storehouse_Device_Check({ T_sn: formSn.sn, T_type: formSn.type })
+            const res: any = await Storehouse_Device_Check({ T_sn: formSn.sn, T_type: formSn.type, T_product_id:formSn.T_product_id })
             if (res.Code === 200) {
                 tableSnData.value.unshift({ sn: formSn.sn })
                 tableSnData.value = tableSnData.value.filter((value, index, self) => {  //去重
@@ -82,9 +84,10 @@ const resetSnForm = (formEl: FormInstance | undefined) => {
   formEl.resetFields()
 }
 
-const addDeviceSn = (id: number, type: number) => {
+const addDeviceSn = (id: number, type: number, T_product_id: number) => {
   formSn.Id = id
   formSn.type = type
+  formSn.T_product_id = T_product_id
   if (SNDataMap.has(id)) {
     tableSnData.value = SNDataMap.get(id) as FormSnType[]
   } else {

+ 55 - 8
src/views/storehouse/outStock/OutStock.vue

@@ -9,7 +9,12 @@ import { validate_T_phone } from '@/views/account/users/components/relus'
 import { ref, reactive, nextTick } from 'vue'
 import TableBase from '@/components/TableBase/index.vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
-import { Storehouse_StockOut_List, Storehouse_StockOut_Edit,Storehouse_StockOut_Del } from '@/api/storehouse/index'
+import {
+	Storehouse_StockOut_List,
+	Storehouse_StockOut_Edit,
+	Storehouse_StockOut_Del,
+	stockInExcelBatch, stockOutExcelBatch
+} from '@/api/storehouse/index'
 import { depotHooks, delivery_type } from '@/hooks/useDepot'
 import InStorageEdit from './modules/InStorageEdit.vue'
 const router = useRouter()
@@ -18,8 +23,10 @@ const globalStore = GlobalStore()
 const ruleFormRef = ref<FormInstance>()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const DrawerRef = ref<InstanceType<typeof Drawer> | null>(null)
+const multipleSelection = ref<any[]>([])
 
 const columns: ColumnProps[] = [
+  { type: 'selection', width: '44px', fixed: 'left'},
   { type: 'index', label: '序号', width: 80 },
   { prop: 'T_number', label: '出库单号' },
   { prop: 'T_receive_name', label: '领取人' },
@@ -72,7 +79,8 @@ const initParam = reactive({
   User_tokey: globalStore.GET_User_tokey,
   T_end_date: '',
   T_start_date: '',
-  T_depot_id: ''
+  T_depot_id: '',
+  T_name: ''
 })
 const searchHandle = () => {
   initParam.T_end_date = T_date.value ? T_date.value[1] : ''
@@ -134,18 +142,55 @@ const resetForm = (formEl: FormInstance | undefined) => {
     }).catch(() => {})
 }
 
-
 // 拿到仓库列表
 const { options } = depotHooks()
+
+// 保存选中的数据id,row-key就是要指定一个key标识这一行的数据
+const getRowKey = (row: any) => {
+	return row.T_number
+}
+const stockOutExcelFun = async ()=>{
+	if (multipleSelection.value.length === 0) {
+		ElMessage.warning('请选择出库单!!!')
+		return
+	}
+	let T_number_list = ''
+	for (let item of multipleSelection.value) {
+		T_number_list += item.T_number + '|'
+	}
+
+	const result:any = await stockOutExcelBatch({T_number_list:T_number_list})
+	if (result.Code === 200) {
+		window.open(result.Data)
+	}
+}
+const handleSelectionChange = (val: any[]) => {
+	multipleSelection.value = val
+	console.log(multipleSelection.value)
+}
 </script>
 
 <template>
   <div class="out-stock">
-    <TableBase ref="TableRef" :columns="columns" :requestApi="Storehouse_StockOut_List" :initParam="initParam">
+    <TableBase ref="TableRef" :columns="columns" :requestApi="Storehouse_StockOut_List" :initParam="initParam"
+			   :getRowKey="getRowKey"
+			   :selection-change="handleSelectionChange"
+	>
       <template #table-header>
         <div class="input-suffix">
           <el-row :gutter="20" style="margin-bottom: 0">
-            <el-col :xl="6" :lg="9" :md="11" style="display: flex">
+            <el-col :xl="5" :lg="5" :md="5" style="display: flex">
+				  <span class="inline-flex items-center">出库编号:</span>
+				  <el-input
+					  v-model="initParam.T_name"
+					  class="w-50 m-2"
+					  type="text"
+					  placeholder="出库编号搜索"
+					  clearable
+					  @change="searchHandle"
+				  />
+			  </el-col>
+            <el-col :xl="6" :lg="7" :md="6" style="display: flex">
               <span class="inline-flex items-center">出库日期:</span>
               <el-date-picker
                 v-model="T_date"
@@ -157,17 +202,19 @@ const { options } = depotHooks()
                 value-format="YYYY-MM-DD"
               />
             </el-col>
-            <el-col :xl="6" :lg="7" :md="9" style="display: flex">
+            <el-col :xl="5" :lg="6" :md="5" style="display: flex">
               <span class="inline-flex items-center">仓库:</span>
               <el-select v-model="initParam.T_depot_id" clearable placeholder="请选择仓库~">
                 <el-option v-for="item in options" :key="item.Id" :label="item.T_name" :value="item.Id" />
               </el-select>
               <el-button type="primary" @click="searchHandle">搜索</el-button>
             </el-col>
-            <el-col :xl="12" :lg="8" :md="4" class="btn"
+            <el-col :xl="8" :lg="6" :md="8" class="btn"
               ><el-button type="primary" @click="router.push('/receiveOutStock')">领料出库</el-button>
               <el-button type="primary" @click="router.push('/saleOutStock')">销售出库</el-button>
-            </el-col>
+              <el-button type="success" icon="Download" @click="stockOutExcelFun">导出excel</el-button>
+
+			</el-col>
           </el-row>
         </div>
       </template>

+ 1 - 1
src/views/storehouse/outStock/ReceiveOutStock.vue

@@ -184,7 +184,7 @@ const ProductSelectionAllChange = (selection: any[]) => {
  * 添加sn 号
  */
 const addDeviceSn = (id: number) => {
-  drawerSnRef.value?.addDeviceSn(id, 1)
+  drawerSnRef.value?.addDeviceSn(id, 1,id)
 }
 /**
  * 自动计算 count

+ 1 - 1
src/views/storehouse/outStock/SaleOutStock.vue

@@ -127,7 +127,7 @@ const determineSNorCount = (DeviceSnData: any) => {
  * 添加sn 号
  */
 const addDeviceSn = (id: number) => {
-  drawerSnRef.value?.addDeviceSn(id, 1)
+  drawerSnRef.value?.addDeviceSn(id, 1, id)
 }
 /**
  * 自动计算 count

+ 1 - 1
src/views/storehouse/outStock/modules/InStorageEdit.vue

@@ -197,7 +197,7 @@ const getStorehouseContractGet = async (Id:any) => {
  */
  
 const addDeviceSn = (obj: any) => {
-    drawerSnEditRef.value?.addDeviceSn(obj.Id,1)
+    drawerSnEditRef.value?.addDeviceSn(obj.Id,1,obj.T_product_id)
     drawerSnEditRef.value!.drawerSnRef?.openDrawer()
     if(obj.T_device_list)drawerSnEditRef.value!.tableSnData = [...obj.T_device_list].map(item => ({ sn: item }));
 }

+ 6 - 3
src/views/storehouse/outStock/modules/InStorageEditSn.vue

@@ -11,6 +11,7 @@ interface FormSnType {
   Id?: number
   sn: string
   type?: number
+  T_product_id?: number
 }
 
 const snTable = ref()
@@ -27,7 +28,8 @@ const snColumns = [
 const formSn = reactive<FormSnType>({
   Id: undefined,
   sn: '',
-  type: undefined
+  type: undefined,
+  T_product_id: undefined
 })
 const rulesSn = reactive<FormRules>({
   sn: [{ required: true, message: '请输入SN号', trigger: 'blur' }]
@@ -41,7 +43,7 @@ const addSn = (formEl: FormInstance | undefined) => {
             if(formSn.sn.length==24){
                 formSn.sn = formSn.sn.substring(2, formSn.sn.length - 6)
             }  
-            const res: any = await Storehouse_Device_Check({ T_sn: formSn.sn, T_type: formSn.type })
+            const res: any = await Storehouse_Device_Check({T_product_id:formSn.T_product_id, T_sn: formSn.sn, T_type: formSn.type })
             if (res.Code === 200) {
                 tableSnData.value.unshift({ sn: formSn.sn })
                 tableSnData.value = tableSnData.value.filter((value, index, self) => {  //去重
@@ -84,10 +86,11 @@ const resetSnForm = (formEl: FormInstance | undefined) => {
   formEl.resetFields()
 }
 
-const addDeviceSn = (id: number, type: number) => {
+const addDeviceSn = (id: number, type: number,T_product_id: number) => {
     console.log('1212',id,type)
   formSn.Id = id
   formSn.type = type
+  formSn.T_product_id = T_product_id
   if (SNDataMap.has(id)) {
     tableSnData.value = SNDataMap.get(id) as FormSnType[]
   } else {

+ 1 - 0
src/views/storehouse/sales/ContractForm.vue

@@ -64,6 +64,7 @@ const emit = defineEmits<{ (event: 'onTableList'): void }>()
 const form = reactive<ContractFormType>({
   T_uuid: '',
   T_type: '',
+  T_task_id: '',
   T_number: '',
   T_customer: '',
   T_product: '',

+ 1 - 1
src/views/storehouse/sales/ContractSale.vue

@@ -62,7 +62,7 @@ const initParam = reactive({
                 v-model="initParam.T_name"
                 type="text"
                 class="w-50 m-2"
-                placeholder="按产品名称搜索"
+                placeholder="按合同编号搜索"
                 @change="searchOnTableList(TableRef)"
               />
             </el-col>

+ 178 - 126
src/views/storehouse/sales/MyPercentage.vue

@@ -1,165 +1,217 @@
 <script setup lang="ts">
-import { ref, reactive, defineAsyncComponent } from 'vue'
-import { useRouter } from 'vue-router'
-import { fnMd5 } from '@/utils/common'
-import { ElMessageBox, ElMessage } from 'element-plus'
+import {defineAsyncComponent, reactive, ref} from 'vue'
+import {useRouter} from 'vue-router'
+import {fnMd5} from '@/utils/common'
+import {ElMessage, ElMessageBox} from 'element-plus'
 import TableBase from '@/components/TableBase/index.vue'
-import {Finished, View,Edit,Delete,Check } from '@element-plus/icons-vue'
-import type { ColumnProps } from '@/components/TableBase/interface/index'
-import {percentage_UserList,percentage_Del,percentage_Submit_Audit } from '@/api/mypercentage/index'
-import { useTablePublic, options2} from '@/hooks/useTablePublic'
-const { updateOnTableList } = useTablePublic()
+import {Check, Delete, Edit, View} from '@element-plus/icons-vue'
+import type {ColumnProps} from '@/components/TableBase/interface/index'
+import {percentage_Del, percentage_Submit_Audit, percentage_UserList,percentage_User_Excel} from '@/api/mypercentage/index'
+import {options2, useTablePublic} from '@/hooks/useTablePublic'
+
+const {updateOnTableList} = useTablePublic()
 const router = useRouter()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
-const { globalStore, searchOnTableList  } = useTablePublic()
+const {globalStore, searchOnTableList} = useTablePublic()
 
 const columns: ColumnProps[] = [
-  { type: 'index', label: '序号', width: 80 },
-  { prop: 'T_number', label: '合同编号' },
-  { prop: 'T_customer', label: '客户名称' },
-  { prop: 'T_contract_money', label: '合同总金额' },
-  { prop: 'T_recoveries_money', label: '回款金额' },
-  { prop: 'T_type', label: '提成类型', name: 'T_type' },
-  { prop: 'T_uuid_name', label: '提成人员' },
-  { prop: 'T_money', label: '提成金额' },
-  { prop: 'T_approval_money', label: '审批金额' },
-  { prop: 'T_State', label: '状态', name: 'T_State' },
-  { prop: 'T_send_money', label: '已发提成金额' },
-  { prop: 'operation', label: '操作', width: 280, fixed: 'right' }
+	{type: 'index', label: '序号', width: 80},
+	{prop: 'T_task_id', label: '任务编号'},
+	{prop: 'T_verifyCompany_name', label: '公司名称', name: 'T_verifyCompany_name'},
+	{prop: 'T_verifyCompany_State', label: '回款状态', name: 'T_verifyCompany_State'},
+	{prop: 'T_reporting_pass_time', label: '统计日期'},
+	{prop: 'T_type', label: '提成类型', name: 'T_type'},
+	{prop: 'T_device_type', label: '设备类型'},
+	{prop: 'T_verify_type', label: '验证类型'},
+	{prop: 'T_uuid_name', label: '提成人员'},
+	{prop: 'T_money', label: '提成金额'},
+	{prop: 'T_State', label: '状态', name: 'T_State'},
+	{prop: 'operation', label: '操作', width: 280, fixed: 'right'}
 ]
 
-const processContract = (id: string,titles:string) => {
-  router.push({ name: 'PercentageDetail', params: { id, type: fnMd5('contract'),titles:titles}})
+const processContract = (id: string, titles: string) => {
+	router.push({name: 'PercentageDetail', params: {id, type: fnMd5('contract'), titles: titles}})
 }
 
 
 //函数
-const SubmitReview = async (row:any)=>{
-  const reslut:any = await percentage_Submit_Audit({T_id:row.Id})
-  console.log('审核',reslut,row)
-  if(reslut.Code==200 && reslut.Msg=='ok!'){
-      searchOnTableList(TableRef.value)
-      ElMessage.success(reslut.Msg)
-    }
+const SubmitReview = async (row: any) => {
+	const reslut: any = await percentage_Submit_Audit({T_id: row.Id})
+	console.log('审核', reslut, row)
+	if (reslut.Code == 200 && reslut.Msg == 'ok!') {
+		searchOnTableList(TableRef.value)
+		ElMessage.success(reslut.Msg)
+	}
 }
 
+// 搜索
+const T_date = ref<string[]>([])
 const initParam = reactive({
-  User_tokey: globalStore.GET_User_tokey,
-  T_name: '',
-  T_state: '',
+	User_tokey: globalStore.GET_User_tokey,
+	T_name: '',
+	T_state: '',
+	T_end_date: '',
+	T_start_date: ''
 })
+
+const searchHandle = () => {
+	initParam.T_end_date = T_date.value ? T_date.value[1] : ''
+	initParam.T_start_date = T_date.value ? T_date.value[0] : ''
+	TableRef.value?.searchTable()
+}
+
+// 导出
+const exportMyPercentageExcel = async () => {
+	initParam.T_end_date = T_date.value ? T_date.value[1] : ''
+	initParam.T_start_date = T_date.value ? T_date.value[0] : ''
+	TableRef.value?.searchTable()
+	const res: any = await percentage_User_Excel(initParam)
+	if (res.Code === 200) {
+		window.open(res.Data)
+	}
+}
+
 const MyPercentageFormRef = ref<InstanceType<typeof MyPercentageForm> | null>(null)
 const openContractFormDrawer = (type: string, row?: any) => {
-  console.log('编辑',type,type,row)
-  MyPercentageFormRef.value?.VerifyltemApi()
-  MyPercentageFormRef.value?.openDrawer(type, row)
+	console.log('编辑', type, type, row)
+	// MyPercentageFormRef.value?.VerifyltemApi()
+	MyPercentageFormRef.value?.openDrawer(type, row)
 }
 const MyPercentageForm = defineAsyncComponent({
-  loader: () => import(/*webpackChunkName: 'ContractForm'*/ './MyPercentageForm.vue'),
-  delay: 500,
-  timeout: 3000,
-  suspensible: true
+	loader: () => import(/*webpackChunkName: 'ContractForm'*/ './MyPercentageForm.vue'),
+	delay: 500,
+	timeout: 3000,
+	suspensible: true
 })
 //函数
-const processdel =  (id:any)=>{
-  ElMessageBox.confirm('删除操作,是否继续?','删除',{
-      confirmButtonText: '立即删除',
-      cancelButtonText: 'Cancel',
-      type: 'warning',
-      center: true,
-    }
-  ).then(async() => {
-    const reslut:any = await percentage_Del({T_id:id})
-    console.log('删除',reslut)
-    if(reslut.Code==200 && reslut.Msg=='ok!'){
-      searchOnTableList(TableRef.value)
-      ElMessage.success('删除成功!')
-    }
-    }).catch(() => {
-      ElMessage.info('取消删除')
-    })
+const processdel = (id: any) => {
+	ElMessageBox.confirm('删除操作,是否继续?', '删除', {
+			confirmButtonText: '立即删除',
+			cancelButtonText: 'Cancel',
+			type: 'warning',
+			center: true,
+		}
+	).then(async () => {
+		const reslut: any = await percentage_Del({T_id: id})
+		console.log('删除', reslut)
+		if (reslut.Code == 200 && reslut.Msg == 'ok!') {
+			searchOnTableList(TableRef.value)
+			ElMessage.success('删除成功!')
+		}
+	}).catch(() => {
+		ElMessage.info('取消删除')
+	})
 }
 </script>
 
 <template>
-  <div class="contract">
-    <TableBase ref="TableRef" :columns="columns" :requestApi="percentage_UserList" :initParam="initParam">
-      <template #table-header>
-        <div class="input-suffix">
-          <el-row :gutter="20" style="margin-bottom: 0">
-            <el-col :xl="5" :md="6">
-              <span class="inline-flex items-center">合同编号:</span>
-              <el-input v-model="initParam.T_name" type="text" class="w-50 m-2" placeholder="按合同编号搜索" clearable
-                @change="searchOnTableList(TableRef)" />
-            </el-col>
-            <el-col :xl="5" :md="6">
-              <span class="inline-flex items-center">状态:</span>
-              <el-select v-model="initParam.T_state" class="w-50" clearable placeholder="请选择状态~">
-                <el-option v-for="item in options2" :key="item.id" :label="item.name" :value="item.id" />
-              </el-select>
-            </el-col>
-            <el-col :xl="6" :md="2" class="btn"> 
-              <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
-              <el-button type="success" @click="openContractFormDrawer('new')">申请提成</el-button>
-            </el-col>
-            </el-row>
-        </div>
-      </template>
-      <template #T_type="{ row }">
-        <el-tag v-if="row.T_type === 1" type="success" effect="dark"> 验证实施 </el-tag>
-        <el-tag v-if="row.T_type === 2" type="" effect="dark"> 报告编写 </el-tag>
-      </template>
-      <template #T_State="{ row }">
-        <el-tag v-if="row.T_State === 1" type="info" effect="dark"> 待审核 </el-tag>
-        <el-tag v-if="row.T_State === 2" type="success" effect="dark"> 审核通过 </el-tag>
-        <el-tag v-if="row.T_State === 3" type="danger" effect="dark"> 审核不通过 </el-tag>
-        <el-tag v-if="row.T_State === 4" type="info" effect="dark"> 部分打款 </el-tag>
-        <el-tag v-if="row.T_State === 5" type="" effect="dark"> 全部打款 </el-tag>
-        <el-tag v-if="row.T_State === 6" type="danger" effect="dark"> 未提交审核 </el-tag>
-      </template>
-      <template #T_out="{ row }">
-        <el-tag v-if="row.T_out === 2 || row.T_out === 3" type="success" effect="dark">
-          {{ row.T_out === 2 ? '部分出库' : '已出库' }}
-        </el-tag>
-        <el-tag v-else-if="row.T_out === 1" type="warning" effect="dark"> 未出库 </el-tag>
-        <el-tag v-else type="danger" effect="dark"> --- </el-tag>
-      </template>
-      <template #right="{ row }"> 
-        <el-button link type="primary" size="small" :disabled="![3,6].includes(row.T_State)" :icon="Check" @click="SubmitReview( row)">提交审核</el-button>
-        <el-button link type="primary" size="small" :disabled="![1,3,6].includes(row.T_State)" :icon="Edit" @click="openContractFormDrawer('edit', row)">编辑</el-button>
-        <el-button link type="success" size="small"  :icon="View" @click="processContract(row.Id,'详情')">详情</el-button>
-        <el-button link type="danger" size="small" :disabled="![1,3,6].includes(row.T_State)"  :icon="Delete" @click="processdel(row.Id)">删除</el-button>
-      </template>
-    </TableBase>
-    <MyPercentageForm ref="MyPercentageFormRef" @onTableList="updateOnTableList(TableRef)" />
-  </div>
+	<div class="contract">
+		<TableBase ref="TableRef" :columns="columns" :requestApi="percentage_UserList" :initParam="initParam">
+			<template #table-header>
+				<div class="input-suffix">
+					<el-row :gutter="20" style="margin-bottom: 0">
+						<el-col :xl="6" :lg="7" :md="11" style="display: flex">
+							<span class="inline-flex items-center">统计日期:</span>
+							<el-date-picker
+								v-model="T_date"
+								type="daterange"
+								range-separator="~"
+								start-placeholder="开始时间"
+								end-placeholder="结束时间"
+								format="YYYY-MM-DD"
+								value-format="YYYY-MM-DD"
+							/>
+						</el-col>
+						<el-col :xl="5" :md="6">
+							<span class="inline-flex items-center">关键字:</span>
+							<el-input v-model="initParam.T_name" type="text" class="w-50 m-2"
+									  placeholder="按任务编号、公司名称搜索" clearable
+									  @change="searchOnTableList(TableRef)"/>
+						</el-col>
+						<el-col :xl="5" :md="6">
+							<span class="inline-flex items-center">状态:</span>
+							<el-select v-model="initParam.T_state" class="w-50" clearable placeholder="请选择状态~">
+								<el-option v-for="item in options2" :key="item.id" :label="item.name" :value="item.id"/>
+							</el-select>
+						</el-col>
+						<el-col :xl="6" :md="3" class="btn">
+							<el-button type="primary" @click="searchHandle">搜索</el-button>
+							<el-button type="primary" @click="exportMyPercentageExcel">导出表格</el-button>
+							<el-button type="success" @click="openContractFormDrawer('new')">申请提成</el-button>
+						</el-col>
+					</el-row>
+				</div>
+			</template>
+			<template #T_type="{ row }">
+				<el-tag v-if="row.T_type === 1" type="success" effect="dark"> 验证实施</el-tag>
+				<el-tag v-if="row.T_type === 2" type="" effect="dark"> 报告编写</el-tag>
+			</template>
+			<template #T_State="{ row }">
+				<el-tag v-if="row.T_State === 1" type="info" effect="dark"> 待审核</el-tag>
+				<el-tag v-if="row.T_State === 2" type="success" effect="dark"> 审核通过</el-tag>
+				<el-tag v-if="row.T_State === 3" type="danger" effect="dark"> 审核不通过</el-tag>
+				<el-tag v-if="row.T_State === 4" type="info" effect="dark"> 部分打款</el-tag>
+				<el-tag v-if="row.T_State === 5" type="" effect="dark"> 全部打款</el-tag>
+				<el-tag v-if="row.T_State === 6" type="danger" effect="dark"> 未提交审核</el-tag>
+			</template>
+			<template #T_out="{ row }">
+				<el-tag v-if="row.T_out === 2 || row.T_out === 3" type="success" effect="dark">
+					{{ row.T_out === 2 ? '部分出库' : '已出库' }}
+				</el-tag>
+				<el-tag v-else-if="row.T_out === 1" type="warning" effect="dark"> 未出库</el-tag>
+				<el-tag v-else type="danger" effect="dark"> ---</el-tag>
+			</template>
+			<template #T_verifyCompany_name="{ row }">
+				{{row.T_verifyCompany.T_name}}
+			</template>
+			<template #T_verifyCompany_State="{ row }">
+				<el-tag v-if="row.T_verifyCompany.T_State === 1" type="info" effect="dark"> 未回款</el-tag>
+				<el-tag v-if="row.T_verifyCompany.T_State === 2" type="success" effect="dark"> 已回款</el-tag>
+			</template>
+			<template #right="{ row }">
+				<el-button link type="primary" size="small" :disabled="![3,6].includes(row.T_State)" :icon="Check"
+						   @click="SubmitReview(row)">提交审核
+				</el-button>
+				<el-button link type="primary" size="small" :disabled="![1,3,6].includes(row.T_State)" :icon="Edit"
+						   @click="openContractFormDrawer('edit', row)">编辑
+				</el-button>
+				<el-button link type="success" size="small" :icon="View" @click="processContract(row.Id,'详情')">详情
+				</el-button>
+				<el-button link type="danger" size="small" :disabled="![1,3,6].includes(row.T_State)" :icon="Delete"
+						   @click="processdel(row.Id)">删除
+				</el-button>
+			</template>
+		</TableBase>
+		<MyPercentageForm ref="MyPercentageFormRef" @onTableList="updateOnTableList(TableRef)"/>
+	</div>
 </template>
 
 <style scoped lang="scss">
 @import '@/styles/var.scss';
 
 .contract {
-  @include f-direction;
+	@include f-direction;
 
-  :deep(.el-drawer__header) {
-    margin-bottom: 0;
-  }
+:deep(.el-drawer__header) {
+	margin-bottom: 0;
+}
+
+.input-suffix {
+	width: 100%;
 
-  .input-suffix {
-    width: 100%;
+.inline-flex {
+	white-space: nowrap;
+}
 
-    .inline-flex {
-      white-space: nowrap;
-    }
+.btn {
+	display: flex;
+	justify-content: end;
+}
 
-    .btn {
-      display: flex;
-      justify-content: end;
-    }
+.w-50 {
+	width: 12.5rem;
+}
 
-    .w-50 {
-      width: 12.5rem;
-    }
-  }
+}
 }
 </style>

+ 45 - 195
src/views/storehouse/sales/MyPercentageForm.vue

@@ -1,14 +1,11 @@
 <script setup lang="ts">
 import {
-  Mycolumns,
   MyPercentageFormType,
   useTablePublic,
 } from '@/hooks/useTablePublic'
 import {
-  percentage_Get,
   percentage_Edit,
   percentage_Add,
-  VerifyContract_List
 } from '@/api/mypercentage/index'
 
 
@@ -16,39 +13,34 @@ import { ElMessage } from 'element-plus'
 import TableDetail from './TableDetail.vue'
 import { ref, reactive, nextTick,onMounted } from 'vue'
 import Drawer from '@/components/Drawer/index.vue'
-import { Delete } from '@element-plus/icons-vue'
-import Upload from '@/components/Upload/index.vue'
 import type { FormInstance, FormRules } from 'element-plus'
 import ContractUser from '@/views/storehouse/outStock/receiveUser.vue'
 import MyPercentageFormStorage from '@/views/storehouse/inventory/MyPercentageFormStorage.vue'
 import verifyxiang from '@/views/storehouse/sales/verifyxiang.vue'
+import {verifyCompany_list} from "@/api/percentage";
 
 const isNew = ref(true)
 const isProduct = ref(false)
 const tableData = ref<any[]>([])
-let selectProductData: any[] = []
 const formLabelWidth = ref('120px')
-const { resetForm, globalStore, validate_T_product } = useTablePublic()
+const { resetForm } = useTablePublic()
 const ruleFormRef = ref<FormInstance>()
-const contractNumberLoading = ref(false)
-const User_tokey = globalStore.GET_User_tokey
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
-const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
 const receiveUserdialog = ref<InstanceType<typeof ContractUser> | null>(null)
 const RecoveriesRef = ref<InstanceType<typeof TableDetail> | null>(null)
 const InvoiceRef = ref<InstanceType<typeof TableDetail> | null>(null)
+let coldVerifyCompanyList: any = []
 
 const rules = reactive<FormRules>({
-  T_number: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
-  T_customer: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
-  T_type: [{ required: true, message: '请选择合同类型', trigger: 'blur' }],
-  T_product: [{ validator: validate_T_product, message: '必填项', trigger: 'blur' }],
-  T_money: [{ required: true, message: '提成金额', trigger: 'blur' }],
-  T_discount: [{ required: true, message: '请输入优惠金额', trigger: 'blur' }],
+  T_company_uuid: [{ required: true, message: '请输入公司', trigger: 'blur' }],
+  T_type: [{ required: true, message: '请选择提成类型', trigger: 'blur' }],
+  T_device_type: [{ required: true, message: '请选择设备类型', trigger: 'blur' }],
+  T_verify_type: [{ required: true, message: '请选择眼增类型', trigger: 'blur' }],
+})
 
-  T_date: [{ required: true, message: '请选择签订时间', trigger: 'blur' }],
-  T_submit: [{ required: true, message: '提成人员', trigger: 'change' }],
-  T_submit_name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }]
+const data: any = reactive({
+	verifyType: [{T_name:'年度定期验证'},{T_name:'使用前验证空载'},{T_name:'使用前验证满载'},{T_name:'停用超时验证'},{T_name:'极冷验证'},{T_name:'极热验证'},],
+	deviceType: [{T_name:'保温箱'},{T_name:'冷冻箱'},{T_name:'冷藏柜'},{T_name:'冷冻柜'},{T_name:'阴凉柜'},{T_name:'冷藏车'},{T_name:'冷库'},{T_name:'冰柜'},{T_name:'低温保存箱'},{T_name:'系统验证'},{T_name:'位置'}]
 })
 
 const callbackDrawer = (done: () => void) => {
@@ -61,13 +53,11 @@ const emit = defineEmits<{ (event: 'onTableList'): void }>()
 
 const form = reactive<MyPercentageFormType>({
   T_id: '',
-  T_uuid: '',
-  T_submit: '',
+  T_device_type: '',
+  T_verify_type: '',
+  T_company_uuid: '',
   T_type: 1,
-  T_number: '',
-  T_money: '',
-  T_item: '',
-  T_product:null
+
 })
 
 const openDrawer = (type: string, row?: any) => {
@@ -85,46 +75,15 @@ const openDrawer = (type: string, row?: any) => {
 // edit data echo
 const editDataEcho = async (row: any) => {
   console.log('编辑赋值', row)
-  form.T_uuid = row.T_uuid
   form.T_type = row.T_type
-  form.T_number = row.T_number
-  form.T_money = row.T_money
-  form.T_number = row.T_number
-  form.T_submit = row.T_uuid_name
-
-  const res: any = await percentage_Get({ User_tokey, T_id: row.Id })
-  console.log('请求返回', res)
-  if (res.Code === 200) {
-    const { T_Product, T_invoice, T_recoveries, T_item } = res.Data
-    T_item && (tableData.value = T_item.map((item: any) => {
-      item.count = item.T_num
-      return item
-    }))
-    selectProductData = tableData.value
-    T_invoice && InvoiceRef.value?.setMoneyDeatil(T_invoice)
-    T_recoveries && RecoveriesRef.value?.setMoneyDeatil(T_recoveries)
-    blurHandle()
-  }
+  form.T_device_type = row.T_device_type
+  form.T_verify_type = row.T_verify_type
+  form.T_company_uuid = row.T_company_uuid
 }
 
-const blurHandle = () => {
-  form.T_product = tableData.value.map(item => {
-    if (!item.count) return undefined
-    return `${item.T_id},${item.count}|`
-  })
-}
-const deleteProduct = (row: any) => {
-  tableData.value = tableData.value.filter(item => item.Id !== row.Id)
-
-  // 设置产品的选中
-  drawerProductRef.value?.selectTableChange(row)
-}
 
 const getFomrParams = () => {
   const params = {...form}
-  params.T_item = params?.T_product.join('')
-  delete params.T_product
-  delete params.T_submit
   return params
 }
 const AddContract = (formEl: FormInstance | undefined) => {
@@ -163,82 +122,22 @@ const blurfindFun = async ()=>{
 
 const drawerProductRef = ref<InstanceType<typeof MyPercentageFormStorage> | null>(null)
 const verifyxiangRef = ref<InstanceType<typeof verifyxiang> | null>(null)
-/**
- * 添加产品
- */
-const AddProductionDetailed = () => {
-  // selectTable.value.toggleRowSelection(tableProductData.value.find(item => {return 1 == item.Id;}), true )
-
-  console.log('添加验证',tableData.value)
-  //有问题
-  isProduct.value = true
-  nextTick(() => {
-    drawerProductRef.value?.openDrawer()
-    nextTick(() => {
-      drawerProductRef!.value!.initParam!.T_type = form.T_type || undefined
-      drawerProductRef.value?.searchModelHandle()
-      console.log('添加',tableData.value,drawerProductRef.value)
-      if(drawerProductRef.value){
-        drawerProductRef.value.toggleSelectionFun(tableData.value)
-      }
-    })
-  })
-}
-
-interface User {
-  T_id: number
-  T_name: string
-  T_num: number
-  count: number
-}
 
-
-/**
- * 产品选择 是否
- */
-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 ProductSelectionAllChange = (selection: any[]) => (tableData.value = selection)
-/**
- * 生成合同编号
- */
-const getContractNumber = async (id:any) => {
-  console.log('查看',id)
-  if(!id){ElMessage.error('合同编号不能为空哦');return}
-  verifyxiangRef.value?.openDrawer()
-  window.sessionStorage.setItem('globaId', id);
-  verifyxiangRef.value?.getStorehouseContractGet()
-}
-/**
- * 合同负责人
- */
-const selectApprover = () => receiveUserdialog.value?.openDrawer()
-const getReceiveInfo = ({ T_uuid, T_name }: { T_uuid: string; T_name: string }) => {
-  console.log('123', T_uuid, T_name)
-  form.T_submit = T_name
-  form.T_uuid = T_uuid
-}
 const closeCancle = () => {
   resetForm(ruleFormRef.value)
   isNew.value = isProduct.value = false
   tableData.value = []
-  selectProductData = []
   drawerProductRef.value?.clearSelection()
   RecoveriesRef.value?.clearDetail()
   InvoiceRef.value?.clearDetail()
   drawerRef.value?.closeDrawer()
 }
 
+const getColdVerifyCompanyList = async () => {
+	const res: any = await verifyCompany_list({})
+	coldVerifyCompanyList = res.Data.Data
+}
+
 const loading = ref(false)
 interface ListItem {
     value: string
@@ -246,32 +145,13 @@ interface ListItem {
 }
 const list = ref<ListItem[]>([])
 const options = ref<ListItem[]>([])
-const click2 = async ()=>{options.value = list.value }
-//函数
-const VerifyltemApi = async ()=>{
-  const result:any = await VerifyContract_List({})
-  console.log('返回',result)
-  let arr = result.Data.Data || []
-  list.value = arr.map((item:any) => {
-      return { value: item.T_number, label: item.T_number}
-  })
-}
-const remoteMethod = async(query: string) => {
-    if (query) {
-        loading.value = true
-        setTimeout(() => {
-            loading.value = false
-            options.value =  list.value.filter((item:any) => {
-                return item.label.toLowerCase().includes(query.toLowerCase())
-            })
-        }, 200)
-    } else {
-        options.value = []
-    }
-}
 defineExpose({
   openDrawer,
-  VerifyltemApi
+})
+onMounted(() => {
+	if (coldVerifyCompanyList.length <= 0) {
+		getColdVerifyCompanyList()
+	}
 })
 </script>
 
@@ -282,56 +162,26 @@ defineExpose({
         <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '申请' : '编辑' }} - 提成</h4>
       </template>
       <el-form ref="ruleFormRef" :model="form" :rules="rules">
-        <el-form-item label="合同编号:" :label-width="formLabelWidth" prop="T_number">
-          <div>
-            <el-select v-model="form.T_number" class="w-50" filterable remote reserve-keyword placeholder="请输入合同编号"
-                :remote-method="remoteMethod" :loading="loading" @click="click2" clearable style="width: 200px;">
-                <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
-            </el-select>
-            <el-button :loading="contractNumberLoading" type="primary" @click="getContractNumber(form.T_number)" style="margin-left: 10px;">查看合同详情</el-button>
-          </div>
+        <el-form-item label="公司名称:" :label-width="formLabelWidth" prop="T_company_uuid">
+          <el-select v-model="form.T_company_uuid" class="w-50" filterable placeholder="请选择公司">
+            <el-option v-for="item in coldVerifyCompanyList" :key="item.T_uuid" :label="item.T_name" :value="item.T_uuid" />
+          </el-select>
         </el-form-item>
         <el-form-item label="提成类型:" :label-width="formLabelWidth" prop="T_type">
-          <el-radio-group v-model="form.T_type" :disabled="isNew?false:true" @change="tableData = []">
+          <el-radio-group v-model="form.T_type" :disabled="isNew?false:true" >
             <el-radio :label="1">实施提成</el-radio>
             <el-radio :label="2">报告提成</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="验证产品明细:" :label-width="formLabelWidth" prop="T_product">
-          <el-table border stripe :data="tableData" style="width: 100%"
-            :header-cell-style="{ background: '#dedfe0', height: '50px' }">
-            <template v-for="item in Mycolumns" :key="item.prop">
-              <el-table-column show-overflow-tooltip v-bind="item" v-if="item.fixed !== 'right'">
-                <template #header v-if="item.prop === 'T_num'">
-                  <span style="color: red">*数量</span>
-                </template>
-                <template #default="{ row }" v-if="item.prop === item.name">
-                  <el-input v-if="item.prop === 'T_num'" v-model.number="row.count" type="text" autocomplete="off"
-                    @blur="blurHandle" />
-                  <div v-if="item.prop === 'T_priceNum'">{{ Number(row.count) * Number(row.T_price) }}</div>
-                </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_money">
-          <el-input v-model="form.T_money" type="text" autocomplete="off" placeholder="提成金额" class="w-50" />
+        <el-form-item label="设备类型:" :label-width="formLabelWidth" prop="T_device_type">
+          <el-select v-model="form.T_device_type" class="w-50" placeholder="请选择设备类型">
+            <el-option v-for="item in data.deviceType" :key="item.T_name" :label="item.T_name" :value="item.T_name" />
+          </el-select>
         </el-form-item>
-        <el-form-item label="提成人员:" :label-width="formLabelWidth" prop="T_submit">
-          <el-input v-model="form.T_submit" placeholder="提成人员" class="w-50" @focus="selectApprover" />
+        <el-form-item label="验证类型:" :label-width="formLabelWidth" prop="T_verify_type">
+          <el-select v-model="form.T_verify_type" class="w-50" placeholder="请选择验证类型">
+            <el-option v-for="item in data.verifyType" :key="item.T_name" :label="item.T_name" :value="item.T_name" />
+          </el-select>
         </el-form-item>
       </el-form>
       <template #footer>
@@ -345,10 +195,10 @@ defineExpose({
         </div>
       </template>
     </Drawer>
-    <ContractUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" title="合同负责人" />
-    <MyPercentageFormStorage v-if="isProduct" ref="drawerProductRef" :selectProductData="selectProductData"
-      @ontableData="ProductselectionChange" @ontableDataAll="ProductSelectionAllChange"></MyPercentageFormStorage>
-      <verifyxiang ref="verifyxiangRef"></verifyxiang>
+<!--    <ContractUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" title="合同负责人" />-->
+<!--    <MyPercentageFormStorage v-if="isProduct" ref="drawerProductRef" :selectProductData="selectProductData"-->
+<!--      @ontableData="ProductselectionChange" @ontableDataAll="ProductSelectionAllChange"></MyPercentageFormStorage>-->
+<!--      <verifyxiang ref="verifyxiangRef"></verifyxiang>-->
   </div>
 </template>
 

+ 66 - 31
src/views/storehouse/sales/Percentage.vue

@@ -1,12 +1,14 @@
 <script setup lang="ts">
-import { ref, reactive, defineAsyncComponent, onMounted } from 'vue'
+import {ref, reactive, defineAsyncComponent, onMounted, nextTick} from 'vue'
 import { useRouter } from 'vue-router'
 import { fnMd5 } from '@/utils/common'
 import TableBase from '@/components/TableBase/index.vue'
-import { Edit, Delete, Finished, View } from '@element-plus/icons-vue'
+import { Edit, Delete, Finished, View ,Check } from '@element-plus/icons-vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
-import { percentage_List, percentage_User_List,percentage_del } from '@/api/percentage/index'
+import { percentage_List, percentage_User_List,percentage_del,percentage_Excel } from '@/api/percentage/index'
 import { useTablePublic, options2 } from '@/hooks/useTablePublic'
+import {ElMessage} from "element-plus";
+import {percentage_Remit} from "@/api/mypercentage";
 
 const router = useRouter()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
@@ -22,17 +24,15 @@ const PercentageDetail1 = defineAsyncComponent({
 
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
-  { prop: 'T_number', label: '合同编号' },
-  { prop: 'T_customer', label: '客户名称' },
-  { prop: 'T_contract_money', label: '合同总金额' },
-  { prop: 'T_recoveries_money', label: '回款金额' },
+  { prop: 'T_task_id', label: '任务编号'},
+  { prop: 'T_verifyCompany_name', label: '公司名称', name: 'T_verifyCompany_name'},
+  { prop: 'T_verifyCompany_State', label: '回款状态', name: 'T_verifyCompany_State'},
+  { prop: 'T_reporting_pass_time', label: '统计日期'},
   { prop: 'T_type', label: '提成类型', name: 'T_type' },
+  { prop: 'T_device_type', label: '设备类型'},
+  { prop: 'T_verify_type', label: '验证类型'},
   { prop: 'T_uuid_name', label: '提成人员' },
   { prop: 'T_money', label: '提成金额' },
-  { prop: 'T_approval_money', label: '审批金额' },
-
-
-  { prop: 'T_send_money', label: '已发提成金额' },
   { prop: 'T_State', label: '状态', name: 'T_State' },
   { prop: 'operation', label: '操作', width: 280, fixed: 'right' }
 ]
@@ -46,15 +46,29 @@ const processContract = (type: string, row?: any) => {
 const processContractxiang = (id: string, titles: string) => {
   router.push({ name: 'PercentageDetail', params: { id, type: fnMd5('contract'), titles: titles } })
 }
+// 搜索
+const T_date = ref<string[]>([])
 const initParam = reactive({
   User_tokey: globalStore.GET_User_tokey,
   T_name: '',
   T_state: '',
   T_uuid: '',
+  T_end_date: '',
+  T_start_date: ''
 })
 const loading = ref(false)
 const centerDialogVisible = ref(false)
 
+// 导出
+const exportPercentageExcel = async () => {
+	initParam.T_end_date = T_date.value ? T_date.value[1] : ''
+	initParam.T_start_date = T_date.value ? T_date.value[0] : ''
+	TableRef.value?.searchTable()
+	const res: any = await percentage_Excel(initParam)
+	if (res.Code === 200) {
+		window.open(res.Data)
+	}
+}
 
 interface ListItem {
   value: string
@@ -89,11 +103,6 @@ const ContForm = reactive({
   id: null,
   showTable: true
 })
-const openContractFormDrawer = (type: string, row?: any) => {
-  ContForm.id = row.Id
-  ContractFormRef.value?.openDrawer(type, row)
-  ContForm.showTable = true
-}
 const ContractForm = defineAsyncComponent({
   loader: () => import(/*webpackChunkName: 'ContractForm'*/ './PercentageForm.vue'),
   delay: 500,
@@ -113,6 +122,17 @@ const subDelectfun = async (id: any,sub: any) => {
   }
   console.log('确定删除', id,sub)
 }
+
+//打款
+const SubmitRemit = async (row: any) => {
+	const reslut: any = await percentage_Remit({T_id: row.Id})
+	console.log('打款', reslut, row)
+	if (reslut.Code == 200 && reslut.Msg == 'ok!') {
+		searchOnTableList(TableRef.value)
+		ElMessage.success(reslut.Msg)
+	}
+}
+
 </script>
 
 <template>
@@ -121,26 +141,40 @@ const subDelectfun = async (id: any,sub: any) => {
       <template #table-header>
         <div class="input-suffix">
           <el-row :gutter="20" style="margin-bottom: 0">
+			  <el-col :xl="6" :lg="7" :md="11" style="display: flex">
+				  <span class="inline-flex items-center">统计日期:</span>
+				  <el-date-picker
+					  v-model="T_date"
+					  type="daterange"
+					  range-separator="~"
+					  start-placeholder="开始时间"
+					  end-placeholder="结束时间"
+					  format="YYYY-MM-DD"
+					  value-format="YYYY-MM-DD"
+				  />
+			  </el-col>
             <el-col :xl="5" :md="6">
-              <span class="inline-flex items-center">合同编号:</span>
-              <el-input v-model="initParam.T_name" type="text" class="w-50 m-2" placeholder="按合同编号搜索" clearable
+              <span class="inline-flex items-center">关键字:</span>
+              <el-input v-model="initParam.T_name" type="text" class="w-50 m-2" placeholder="按任务编号编号、公司名称搜索" clearable
                 @change="searchOnTableList(TableRef)" />
             </el-col>
-            <el-col :xl="5" :md="6">
+            <el-col :xl="4" :md="6">
               <span class="inline-flex items-center">员工:</span>
               <el-select v-model="initParam.T_uuid" filterable remote reserve-keyword placeholder="员工"
                 :remote-method="remoteMethod" :loading="loading" @click="click2" clearable style="width: 200px;">
                 <el-option v-for="item in optionsData" :key="item.value" :label="item.label" :value="item.value" />
               </el-select>
             </el-col>
-            <el-col :xl="5" :md="6">
+            <el-col :xl="4" :md="6">
               <span class="inline-flex items-center">状态:</span>
               <el-select v-model="initParam.T_state" class="w-50" clearable placeholder="请选择状态~">
                 <el-option v-for="item in options2" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
             </el-col>
-            <el-col :xl="6" :md="2" class="btn"> <el-button type="primary"
-                @click="searchOnTableList(TableRef)">搜索</el-button></el-col>
+            <el-col :xl="5" :md="3" class="btn">
+				<el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
+				<el-button type="primary" @click="exportPercentageExcel">导出表格</el-button>
+			</el-col>
           </el-row>
         </div>
       </template>
@@ -153,20 +187,21 @@ const subDelectfun = async (id: any,sub: any) => {
         <el-tag v-if="row.T_State === 2" type="success" effect="dark"> 审核通过 </el-tag>
         <el-tag v-if="row.T_State === 3" type="danger" effect="dark"> 审核不通过 </el-tag>
         <el-tag v-if="row.T_State === 4" type="info" effect="dark"> 部分打款 </el-tag>
-        <el-tag v-if="row.T_State === 5" type="" effect="dark"> 全部打款 </el-tag>
+        <el-tag v-if="row.T_State === 5" type="" effect="dark"> 已打款 </el-tag>
+      </template>
+      <template #T_verifyCompany_name="{ row }">
+        {{row.T_verifyCompany.T_name}}
       </template>
-      <template #T_out="{ row }">
-        <el-tag v-if="row.T_out === 2 || row.T_out === 3" type="success" effect="dark">
-          {{ row.T_out === 2 ? '部分出库' : '已出库' }}
-        </el-tag>
-        <el-tag v-else-if="row.T_out === 1" type="warning" effect="dark"> 未出库 </el-tag>
-        <el-tag v-else type="danger" effect="dark"> --- </el-tag>
+      <template #T_verifyCompany_State="{ row }">
+        <el-tag v-if="row.T_verifyCompany.T_State === 1" type="info" effect="dark"> 未回款</el-tag>
+        <el-tag v-if="row.T_verifyCompany.T_State === 2" type="success" effect="dark"> 已回款</el-tag>
       </template>
       <template #right="{ row }">
         <el-button link type="warning" :disabled="![1, 3].includes(row.T_State)" size="small" :icon="Finished"
           @click="processContract('审核', row)">审核</el-button>
-        <el-button link type="primary" :disabled="![2, 4, 5].includes(row.T_State)" size="small" :icon="Edit"
-          @click="openContractFormDrawer('edit', row)">打款明细</el-button>
+        <el-button link type="primary" size="small" :disabled="![2].includes(row.T_State)" :icon="Check"
+					 @click="SubmitRemit(row)">打款
+        </el-button>
         <el-button link type="success" size="small" :icon="View"
           @click="processContractxiang(row.Id, '详情')">详情</el-button>
         <el-button link type="danger" size="small" :icon="View" @click="subDelectfun(row.Id,'show')">删除</el-button>

+ 17 - 71
src/views/storehouse/sales/PercentageDetail.vue

@@ -20,8 +20,6 @@ interface InfoType {
   T_State: number
   T_approver: string
   T_approver_name: string
-  T_recoveries_money: number
-  T_contract_money: number
   T_customer: string
   T_date: string
   T_money: number
@@ -33,14 +31,14 @@ interface InfoType {
   T_submit: string
   T_type: number
   T_discount: number
-  T_start_date: string
-  T_end_date: string
   T_submit_name: string
   T_project: string
-  T_no_recoveries_money: number
-  T_no_invoice_money: number
   T_approval_money: any
   T_approval_opinion: any
+  T_task_id: string
+  T_device_type: string
+  T_verify_type: string
+  T_verifyCompany: any
 }
 
 const route = useRoute()
@@ -158,15 +156,6 @@ const getState = (val: number, type: string) => {
  */
 const callbackSnDrawer = (done: () => void) => done()
 
-const previewSn = (devicelist: string[]) => {
-  drawerSnRef.value?.openDrawer()
-  if (!devicelist) return
-  tableSnData.value = devicelist.map((item: string) => {
-    return {
-      sn: item
-    }
-  })
-}
 
 onMounted(() => {
   const { params } = route
@@ -192,20 +181,14 @@ const InvoiceRef = ref<InstanceType<typeof PercentageTable> | null>(null)
       <el-divider />
       <div class="content">
         <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"><span>{{ info?.T_number! }}</span></el-col>
-        </el-row>
-        <el-row v-if="isVerify">
-          <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_customer! }}</span></el-col>
-        </el-row>
-        <el-row v-if="isVerify">
-          <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_contract_money! }}</span></el-col>
+          <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">
+            <div>{{ info?.T_verifyCompany.T_name }}</div>
+          </el-col>
         </el-row>
-        <el-row v-if="isVerify">
-          <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_recoveries_money! }}</span></el-col>
+        <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"><span>{{ info?.T_task_id! }}</span></el-col>
         </el-row>
         <el-row v-if="isVerify">
           <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2"> <span>提成类型</span></el-col>
@@ -214,52 +197,15 @@ const InvoiceRef = ref<InstanceType<typeof PercentageTable> | null>(null)
           </el-col>
         </el-row>
         <el-row>
-          <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2">
-            <span>产品明细</span></el-col>
-          <el-col :span="21">
-            <el-table border stripe :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle">
-              <template v-for="item in columns" :key="item.prop">
-                <el-table-column v-bind="item" v-if="item.fixed !== 'right'" :show-overflow-tooltip="true">
-                  <template #default="{ row }" v-if="item.prop === item.name">
-                    <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>
-                    <ImageCom v-if="item.prop === 'T_product_img'" :src="row.T_product_img" />
-                    <el-tooltip v-if="item.prop === 'T_product_model'" effect="dark" :content="row.T_product_model"
-                      placement="bottom">
-                      {{ row.T_product_model }}
-                    </el-tooltip>
-                  </template>
-                </el-table-column>
-                <!-- <el-table-column v-bind="item" v-if="item.fixed === 'right'">
-                  <template #default="{ row }">
-                    <el-button
-                      type="primary"
-                      :disabled="!row.T_product_relation_sn"
-                      @click="previewSn(row.T_device_list)"
-                      >查看</el-button
-                    >
-                  </template>
-                </el-table-column> -->
-              </template>
-            </el-table>
+          <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">
+            <div>{{ info?.T_device_type }}</div>
           </el-col>
         </el-row>
         <el-row>
-          <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2">
-            <span>提成明细:</span></el-col>
-          <el-col :span="21">
-            <el-table border stripe :data="tableDatalty" style="width: 100%"
-              :header-cell-style="{ background: '#dedfe0', height: '50px' }">
-              <template v-for="item in royalty" :key="item.prop">
-                <el-table-column v-bind="item" :show-overflow-tooltip="true">
-                  <template #default="{ row }" v-if="item.prop === item.name">
-                    <div v-if="item.prop === 'T_priceNum'">{{ Number(row.T_num) * Number(row.T_price) }}</div>
-                  </template>
-                </el-table-column>
-              </template>
-            </el-table>
+          <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">
+            <div>{{ info?.T_verify_type }}</div>
           </el-col>
         </el-row>
         <el-row v-if="isVerify">

+ 31 - 162
src/views/storehouse/sales/PercentageDetail1.vue

@@ -9,7 +9,6 @@ import {
   percentage_Edit,
   percentage_Approval,
   percentage_Add,
-  VerifyContract_List
 } from '@/api/mypercentage/index'
 import { useRouter, useRoute } from 'vue-router'
 
@@ -27,11 +26,9 @@ import verifyxiang from '@/views/storehouse/sales/verifyxiang.vue'
 const isNew = ref(true)
 const isProduct = ref(false)
 const tableData = ref<any[]>([])
-let selectProductData: any[] = []
 const formLabelWidth = ref('120px')
-const { resetForm, globalStore, validate_T_product } = useTablePublic()
+const { resetForm, globalStore } = useTablePublic()
 const ruleFormRef = ref<FormInstance>()
-const contractNumberLoading = ref(false)
 const User_tokey = globalStore.GET_User_tokey
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
@@ -40,20 +37,9 @@ const RecoveriesRef = ref<InstanceType<typeof TableDetail> | null>(null)
 const InvoiceRef = ref<InstanceType<typeof TableDetail> | null>(null)
 
 const rules = reactive<FormRules>({
-  T_number: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
-  T_customer: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
-  T_type: [{ required: true, message: '请选择合同类型', trigger: 'blur' }],
-  T_product: [{ validator: validate_T_product, message: '必填项', trigger: 'blur' }],
-  T_money: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
-  T_discount: [{ required: true, message: '请输入优惠金额', trigger: 'blur' }],
-
-  T_date: [{ required: true, message: '请选择签订时间', trigger: 'blur' }],
-  T_submit: [{ required: true, message: '请选择合同负责人', trigger: 'change' }],
-  T_submit_name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
 
   T_state: [{ required: true, message: '请选择审批结果', trigger: 'blur' }],
   T_approval_money: [{ required: true, message: '请输入审批金额', trigger: 'change' }],
-  T_approval_opinion: [{ required: true, message: '请输入审批意见', trigger: 'blur' }]
 })
 
 const callbackDrawer = (done: () => void) => {
@@ -69,14 +55,18 @@ const form = reactive<MyPercentageFormTypeFrom>({
   T_uuid: '',
   T_submit: '',
   T_type: 1,
-  T_number: '',
+  // T_number: '',
   T_money: '',
-  T_item: '',
+  // T_item: '',
   T_product:null,
   T_state:'',
   T_approval_money:'',
   T_approval_opinion:'',
-
+  T_uuid_name:'',
+  T_task_id:'',
+  T_device_type:'',
+  T_verify_type: '',
+  T_verifyCompany: null,
 })
 
 const openDrawer = (type: string, row?: any) => {
@@ -96,10 +86,12 @@ const editDataEcho = async (row: any) => {
   console.log('编辑赋值', row)
   form.T_uuid = row.T_uuid
   form.T_type = row.T_type
-  form.T_number = row.T_number
   form.T_money = row.T_money
-  form.T_number = row.T_number
-  form.T_submit = row.T_uuid_name
+  form.T_task_id = row.T_task_id
+  form.T_uuid_name = row.T_uuid_name
+  form.T_device_type = row.T_device_type
+  form.T_verify_type = row.T_verify_type
+  form.T_verifyCompany = row.T_verifyCompany
 
   form.T_state = 2
   form.T_approval_money = row.T_approval_money
@@ -108,39 +100,19 @@ const editDataEcho = async (row: any) => {
   const res: any = await percentage_Get({ User_tokey, T_id: row.Id })
   console.log('请求返回', res)
   if (res.Code === 200) {
-    const { T_Product, T_invoice, T_recoveries, T_item } = res.Data
+    const {T_invoice, T_recoveries, T_item } = res.Data
     T_item && (tableData.value = T_item.map((item: any) => {
       item.count = item.T_num
       return item
     }))
-    selectProductData = tableData.value
+
     T_invoice && InvoiceRef.value?.setMoneyDeatil(T_invoice)
     T_recoveries && RecoveriesRef.value?.setMoneyDeatil(T_recoveries)
-    blurHandle()
   }
 }
 
-const blurHandle = () => {
-  form.T_product = tableData.value.map(item => {
-    if (!item.count) return undefined
-    return `${item.T_id},${item.count}|`
-  })
-}
-const deleteProduct = (row: any) => {
-  tableData.value = tableData.value.filter(item => item.T_id !== row.T_id)
-  console.log('删除',row, tableData.value,drawerProductRef.value)
-  // 设置产品的选中
-  nextTick(() => {
-    drawerProductRef.value?.selectTableChange(row)
-  })
-  
-}
-
 const getFomrParams = () => {
   const params = {...form}
-  params.T_item = params?.T_product.join('')
-  delete params.T_product
-  delete params.T_submit
   return params
 }
 
@@ -178,84 +150,14 @@ const blurfindFun = async ()=>{
   })
 }
 const drawerProductRef = ref<InstanceType<typeof MyPercentageFormStorage> | null>(null)
-const verifyxiangRef = ref<InstanceType<typeof verifyxiang> | null>(null)
-
-  
-/**
- * 添加产品
- */
-const AddProductionDetailed = () => {
-  // selectTable.value.toggleRowSelection(tableProductData.value.find(item => {return 1 == item.Id;}), true )
-
-  console.log('添加验证',tableData.value)
-  //有问题
-  isProduct.value = true
-  nextTick(() => {
-    drawerProductRef.value?.openDrawer()
-    nextTick(() => {
-      drawerProductRef!.value!.initParam!.T_type = form.T_type || undefined
-      drawerProductRef.value?.searchModelHandle()
-      console.log('添加',tableData.value,drawerProductRef.value)
-      if(drawerProductRef.value){
-        drawerProductRef.value.toggleSelectionFun(tableData.value)
-        drawerProductRef.value.selectFun(tableData.value)
-      }
-    })
-  })
-}
-
-interface User {
-  T_id: number
-  T_name: string
-  T_num: number
-  count: number
-}
 
+const router = useRouter()
 
-/**
- * 产品选择 是否
- */
-const ProductselectionChange = (row: any) => {
-  console.log('产品选择是否',row)
-  const index = tableData.value.findIndex((item: any) => item.T_id === row.T_id)
-  if (index === -1) {
-    row.count = ''
-    tableData.value.push(row)
-  } else {
-    tableData.value.splice(index, 1)
-  }
-}
-/**
- * 全选
- */
-const ProductSelectionAllChange = (selection: any[]) => (tableData.value = selection)
-/**
- * 生成合同编号
- */
- const router = useRouter()
-const getContractNumber = async (id:any) => {
-  console.log('生成合同编号',id,verifyxiangRef.value)
-  // router.push({ name: 'ContractDetail', params: { id, verify: 'verify' } })
-  // contractNumberLoading.value = true
-  verifyxiangRef.value?.openDrawer()
-  window.sessionStorage.setItem('globaId', id);
-  verifyxiangRef.value?.getStorehouseContractGet()
 
-}
-/**
- * 合同负责人
- */
-const selectApprover = () => receiveUserdialog.value?.openDrawer()
-const getReceiveInfo = ({ T_uuid, T_name }: { T_uuid: string; T_name: string }) => {
-  console.log('123', T_uuid, T_name)
-  form.T_submit = T_name
-  form.T_uuid = T_uuid
-}
 const closeCancle = () => {
   resetForm(ruleFormRef.value)
   isNew.value = isProduct.value = false
   tableData.value = []
-  selectProductData = []
   drawerProductRef.value?.clearSelection()
   RecoveriesRef.value?.clearDetail()
   InvoiceRef.value?.clearDetail()
@@ -278,54 +180,25 @@ defineExpose({
       <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">
-          <div>
-            <el-input v-model="form.T_number" type="text" autocomplete="off" placeholder="合同编号" class="w-50" :disabled="true" />
-            <el-button :loading="contractNumberLoading" type="primary" @click="getContractNumber(form.T_number)" style="margin-left: 10px;">查看合同详情</el-button>
-          </div>
+      <el-form ref="ruleFormRef" :model="form" :rules="rules" >
+<!--        <el-form-item label="公司名称:" :label-width="formLabelWidth" prop="T_verifyCompany">-->
+<!--			{{form.T_verifyCompany.T_name}}-->
+<!--        </el-form-item>-->
+        <el-form-item label="任务编号:" :label-width="formLabelWidth" prop="T_task_id">
+			{{form.T_task_id}}
         </el-form-item>
         <el-form-item label="提成类型:" :label-width="formLabelWidth" prop="T_type">
-          <!-- {{ form.T_type==1?'实施提成':'报告提成' }} -->
-          <el-radio-group v-model="form.T_type" :disabled="true">
-            <el-radio :label="1" v-if="form.T_type==1">实施提成</el-radio>
-            <el-radio :label="2" v-if="form.T_type==2">报告提成</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="验证产品明细:" :label-width="formLabelWidth" prop="T_product">
-          <el-table border stripe :data="tableData" style="width: 100%"
-            :header-cell-style="{ background: '#dedfe0', height: '50px' }">
-            <template v-for="item in Mycolumns" :key="item.prop">
-              <el-table-column show-overflow-tooltip v-bind="item" v-if="item.fixed !== 'right'">
-                <template #header v-if="item.prop === 'T_num'">
-                  <span style="color: red">*数量</span>
-                </template>
-                <template #default="{ row }" v-if="item.prop === item.name">
-                  <el-input v-if="item.prop === 'T_num'" v-model.number="row.count" type="text" autocomplete="off"
-                    @blur="blurHandle" />
-                  <div v-if="item.prop === 'T_priceNum'">{{ Number(row.count) * Number(row.T_price) }}</div>
-                </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>
+           {{ form.T_type==1?'实施提成':'报告提成' }}
+<!--          <el-radio-group v-model="form.T_type" :disabled="true">-->
+<!--            <el-radio :label="1" v-if="form.T_type==1">实施提成</el-radio>-->
+<!--            <el-radio :label="2" v-if="form.T_type==2">报告提成</el-radio>-->
+<!--          </el-radio-group>-->
         </el-form-item>
         <el-form-item label="提成金额:" :label-width="formLabelWidth" prop="T_money">
-          <el-input v-model="form.T_money" type="text" autocomplete="off" placeholder="请输入合同金额" class="w-50" />
+			{{form.T_money}}
         </el-form-item>
-        <el-form-item label="提成人员:" :label-width="formLabelWidth" prop="T_submit">
-          <el-input v-model="form.T_submit" placeholder="请选择合同负责人" class="w-50" @focus="selectApprover"  :disabled="true"/>
+        <el-form-item label="提成人员:" :label-width="formLabelWidth" prop="T_uuid_name">
+			{{form.T_uuid_name}}
         </el-form-item>
 
         <el-form-item label="审批结果:" :label-width="formLabelWidth" prop="T_state">
@@ -335,7 +208,7 @@ defineExpose({
           </el-radio-group>
         </el-form-item>
         <el-form-item label="审批金额:" :label-width="formLabelWidth" prop="T_approval_money">
-          <el-input v-model="form.T_approval_money" placeholder="请输入审批金额" class="w-50"/>
+          <el-input v-model="form.T_money" placeholder="请输入审批金额" class="w-50"/>
         </el-form-item>
         <el-form-item label="审批意见:" :label-width="formLabelWidth" prop="T_approval_opinion">
           <el-input
@@ -358,10 +231,6 @@ defineExpose({
         </div>
       </template>
     </Drawer>
-    <ContractUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" title="合同负责人" />
-    <MyPercentageFormStorage v-if="isProduct" ref="drawerProductRef" :selectProductData="selectProductData"
-      @ontableData="ProductselectionChange" @ontableDataAll="ProductSelectionAllChange"></MyPercentageFormStorage>
-    <verifyxiang ref="verifyxiangRef"></verifyxiang>
   </div>
 </template>
 

+ 14 - 109
src/views/storehouse/sales/PercentageForm.vue

@@ -45,16 +45,9 @@ const RecoveriesRef = ref<InstanceType<typeof PercentageTable> | null>(null)
 const InvoiceRef = ref<InstanceType<typeof PercentageTable> | null>(null)
 
 const rules = reactive<FormRules>({
-  T_number: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
-  T_customer: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
-  T_type: [{ required: true, message: '请选择合同类型', trigger: 'blur' }],
-  T_product: [{ validator: validate_T_product, trigger: 'blur' }],
-  T_money: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
-  T_discount: [{ required: true, message: '请输入优惠金额', trigger: 'blur' }],
-
-  T_date: [{ required: true, message: '请选择签订时间', trigger: 'blur' }],
-  T_submit: [{ required: true, message: '请选择合同负责人', trigger: 'change' }],
-  T_submit_name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }]
+	T_state: [{ required: true, message: '请选择审批结果', trigger: 'blur' }],
+	T_approval_money: [{ required: true, message: '请输入审批金额', trigger: 'change' }],
+	T_approval_opinion: [{ required: true, message: '请输入审批意见', trigger: 'blur' }]
 })
 
 const callbackDrawer = (done: () => void) => {
@@ -68,6 +61,7 @@ const emit = defineEmits<{ (event: 'onTableList'): void }>()
 const form = reactive<ContractFormType>({
   T_uuid: '',
   T_type: '',
+  T_task_id: '',
   T_number: '',
   T_customer: '',
   T_product: '',
@@ -120,20 +114,8 @@ const editDataEcho = async (row: any) => {
   })
   if (res.Code === 200) {
     console.log('打款明细',res)
-    const { T_Product, T_remit, T_recoveries, T_remark,T_item } = res.Data
+    const { T_remit, T_recoveries, T_remark,T_item } = res.Data
     form.T_remark = T_remark
-    T_Product && (tableData.value = T_Product.map((item: any) => {
-      item.Id = item.T_product_id
-      item.T_img = item.T_product_img
-      item.T_name = item.T_product_class_name 
-      item.T_class_name = item.T_product_name
-      item.T_model = item.T_product_model
-      item.T_spec = item.T_product_spec
-      item.T_relation_sn = item.T_product_relation_sn
-      item.count = item.T_product_total
-      item.T_product_out = item.T_product_out
-      return item
-    }))
     tableDatalty.value = T_item
     selectProductData = tableData.value
     T_remit && InvoiceRef.value?.setMoneyDeatil(T_remit)
@@ -148,12 +130,6 @@ const blurHandle = () => {
     return `${item.Id},${item.count}|`
   })
 }
-const deleteProduct = (row: any) => {
-  tableData.value = tableData.value.filter(item => item.Id !== row.Id)
-
-  // 设置产品的选中
-  drawerProductRef.value?.selectTableChange(row)
-}
 
 const getMontageStr = (arr: any[], value1: string, value2: string): string => {
   let str = ''
@@ -208,52 +184,7 @@ const AddContract = (formEl: FormInstance | undefined) => {
 }
 
 const drawerProductRef = ref<InstanceType<typeof InStorageProduct> | null>(null)
-/**
- * 添加产品
- */
-const AddProductionDetailed = () => {
-  isProduct.value = true
-  nextTick(() => {
-    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 ProductSelectionAllChange = (selection: any[]) => (tableData.value = selection)
-/**
- * 生成合同编号
- */
-const getContractNumber = async () => {
-  contractNumberLoading.value = true
-  const res: any = await Storehouse_Contract_Gen_Number({ User_tokey }).catch(() => {
-    contractNumberLoading.value = false
-  })
-  if (res.Code === 200) {
-    contractNumberLoading.value = false
-    form.T_number = res.Data
-  }
-}
-/**
- * 合同负责人
- */
-const selectApprover = () => receiveUserdialog.value?.openDrawer()
-const getReceiveInfo = ({ T_uuid, T_name }: { T_uuid: string; T_name: string }) => {
-  form.T_submit = T_name
-  form.T_uuid = T_uuid
-}
+
 const closeCancle = () => {
   resetForm(ruleFormRef.value)
   isNew.value = isProduct.value = false
@@ -276,35 +207,12 @@ defineExpose({
         <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">
-          <div>
-            <el-input v-model="form.T_number" :disabled="!isNew" placeholder="请输入合同编号" class="w-50" />
-          </div>
+        <el-form-item label="任务编号:" :label-width="formLabelWidth" prop="T_task_id">
+            <el-input v-model="form.T_task_id" :disabled="!isNew" placeholder="请输入任务编号" class="w-50" />
         </el-form-item>
-        <el-form-item label="提成类型:" :label-width="formLabelWidth" prop="T_customer">
+        <el-form-item label="提成类型:" :label-width="formLabelWidth" prop="T_type">
           {{ form.T_type == 1 ? '验证实施' : '报告编写' }}
         </el-form-item>
-        <el-form-item label="产品明细:" :label-width="formLabelWidth" prop="T_product">
-          <el-table border stripe :data="tableData" style="width: 100%"
-            :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'">
-                <template #header v-if="item.prop === 'count'">
-                  <span style="color: red">*数量</span>
-                </template>
-                <template #default="{ row }" v-if="item.prop === item.name">
-                  <!-- <el-input v-if="item.prop === 'count'" v-model.number="row.count" type="text" autocomplete="off" @blur="blurHandle" /> -->
-                  <div v-if="item.prop === 'count'">{{ row.count }}</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>
-            </template>
-          </el-table>
-        </el-form-item>
         <el-form-item label="提成明细:" :label-width="formLabelWidth" prop="T_product">
           <el-table border stripe :data="tableDatalty" style="width: 100%"
             :header-cell-style="{ background: '#dedfe0', height: '50px' }">
@@ -317,19 +225,19 @@ defineExpose({
             </template>
           </el-table>
         </el-form-item>
-        <el-form-item label="提成金额:" :label-width="formLabelWidth" prop="T_customer">
+        <el-form-item label="提成金额:" :label-width="formLabelWidth" prop="T_money">
           {{ form.T_money}}
         </el-form-item>
-        <el-form-item label="提成人员:" :label-width="formLabelWidth" prop="T_customer">
+        <el-form-item label="提成人员:" :label-width="formLabelWidth" prop="T_uuid_name">
           {{ form.T_uuid_name}}
         </el-form-item>
-        <el-form-item label="审批金额:" :label-width="formLabelWidth" prop="T_customer">
+        <el-form-item label="审批金额:" :label-width="formLabelWidth" prop="T_approval_money">
           {{ form.T_approval_money}}
         </el-form-item>
-        <el-form-item label="审批意见:" :label-width="formLabelWidth" prop="T_customer">
+        <el-form-item label="审批意见:" :label-width="formLabelWidth" prop="T_approval_opinion">
           {{ form.T_approval_opinion}}
         </el-form-item>
-        <el-form-item label="状态:" :label-width="formLabelWidth" prop="T_customer">
+        <el-form-item label="状态:" :label-width="formLabelWidth" prop="T_State">
           {{ useStapublicFun(form?.T_State) }}
         </el-form-item>
         <el-form-item label="打款明细:" :label-width="formLabelWidth" prop="T_remit">
@@ -355,9 +263,6 @@ defineExpose({
         </div>
       </template>
     </Drawer>
-    <ContractUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" title="合同负责人" />
-    <InStorageProduct v-if="isProduct" ref="drawerProductRef" :selectProductData="selectProductData"
-      @ontableData="ProductselectionChange" @ontableDataAll="ProductSelectionAllChange"></InStorageProduct>
   </div>
 </template>
 

+ 200 - 0
src/views/storehouse/sales/VerifyCompany.vue

@@ -0,0 +1,200 @@
+<script setup lang="ts">
+import {
+	Storehouse_VerifyCompany_List,
+	VerifyItem_Add,
+	Storehouse_VerifyCompany_Edit,
+	Storehouse_VerifyCompany_Del, Storehouse_VerifyCompany_Add,
+} from '@/api/storehouse/index'
+import { ref, reactive, nextTick } from 'vue'
+import Upload from '@/components/Upload/index.vue'
+import Drawer from '@/components/Drawer/index.vue'
+import TableBase from '@/components/TableBase/index.vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import type { FormInstance, FormRules } from 'element-plus'
+import { Edit, Delete, Plus } from '@element-plus/icons-vue'
+import type { ColumnProps } from '@/components/TableBase/interface/index'
+import ImageCom from '@/components/Image/index.vue'
+import { useTablePublic,options4 } from '@/hooks/useTablePublic'
+
+const isNew = ref(true)
+const formLabelWidth = ref('100px')
+const ruleFormRef = ref<FormInstance>()
+const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
+const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
+const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
+const { resetForm, globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
+
+const columns: ColumnProps[] = [
+  { type: 'index', label: '序号', width: 80 },
+  { prop: 'T_name', label: '公司名称' },
+  { prop: 'T_State', label: '状态' , name: 'T_State'},
+  { prop: 'operation', label: '操作', width: 150, fixed: 'right' }
+]
+
+const rules = reactive<FormRules>({
+  T_name: [{ required: true, message: '请输入公司名称', trigger: 'blur' }],
+  T_State: [{ required: true, message: '请选择状态', trigger: 'blur' }],
+})
+const form:any = ref({
+  T_uuid:'',
+  T_name: '',
+  T_State: 1,
+})
+
+const openDrawer = (type: string, row?: any) => {
+  isNew.value = type === 'new' ? true : false
+  if(type == 'edit'){
+    form.value.T_uuid = row.T_uuid
+    form.value.T_name = row.T_name
+    form.value.T_State = row.T_State
+  }else{
+    delete form.value.T_uuid
+    form.value.T_name = ''
+    form.value.T_State = 1
+  }
+  drawerRef.value?.openDrawer()
+}
+
+const AddVerifyCompany = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.validate(async (valid: boolean) => {
+    if (valid) {
+      let res: any = {}
+      if (isNew.value) {//新增
+        res = await Storehouse_VerifyCompany_Add({ User_tokey: globalStore.GET_User_tokey, ...form.value })
+      } else {//编辑
+        res = await Storehouse_VerifyCompany_Edit({
+          User_tokey: globalStore.GET_User_tokey,
+          ...form.value,
+        })
+      }
+      if (res.Code === 200) {
+        ElMessage.success(`公司回款管理${isNew.value ? '添加' : '修改'}成功!!`)
+        nextTick(() => {
+          drawerRef.value?.closeDrawer()
+          updateOnTableList(TableRef.value)
+          resetForm(ruleFormRef.value)
+          isNew.value = true
+        })
+      }
+    }
+  })
+}
+
+const VerifyCompanyDelete = (row: any) => {
+  ElMessageBox.confirm('您确定要删除该公司吗?', '警告', {
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+    type: 'warning'
+  })
+    .then(async () => {
+      const res: any = await Storehouse_VerifyCompany_Del({
+        User_tokey: globalStore.GET_User_tokey,
+        T_uuid: row.T_uuid
+      })
+      if (res.Code === 200) {
+        ElMessage.success('删除成功!')
+        nextTick(() => updateOnTableList(TableRef.value))
+      }
+    })
+    .catch(() => {
+      ElMessage.warning('取消成功!')
+    })
+}
+
+const callbackDrawer = (done: () => void) => {
+  resetForm(ruleFormRef.value)
+  uploadRef.value?.clearfileList()
+  done()
+}
+// 搜索
+const initParam = reactive({
+  User_tokey: globalStore.GET_User_tokey,
+  T_name: '',
+  T_state: ''
+})
+</script>
+
+<template>
+  <div class="production-list">
+    <TableBase ref="TableRef" :columns="columns" :requestApi="Storehouse_VerifyCompany_List" :initParam="initParam">
+      <template #table-header>
+        <div class="input-suffix">
+          <el-row :gutter="20" style="margin-bottom: 0">
+            <el-col :xl="6" :lg="8" :md="10">
+              <span class="inline-flex items-center">公司名称:</span>
+              <el-input
+                v-model="initParam.T_name"
+                type="text"
+                class="w-50 m-2"
+                placeholder="按公司名称搜索"
+                @change="searchOnTableList(TableRef)"
+              />
+            </el-col>
+            <el-col :xl="10" :md="12">
+              <span class="inline-flex items-center">状态:</span>
+              <el-select v-model="initParam.T_state" class="w-50 m-2" clearable placeholder="请选择状态~">
+                <el-option v-for="item in options4" :key="item.id" :label="item.name" :value="item.id" />
+              </el-select>
+              <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
+            </el-col>
+            <el-col :xl="6" :md="2" class="btn"
+              ><el-button type="primary" @click="openDrawer('new')">添加</el-button></el-col
+            >
+          </el-row>
+        </div>
+      </template>
+      <template #T_State="{ row }">
+        <el-tag :type="row.T_State === 1?'info':'success'" effect="dark">{{row.T_State === 1?'未回款':'已回款'}}</el-tag>
+      </template>
+      <template #right="{ row }">
+        <el-button link type="primary" size="small" :icon="Edit" @click="openDrawer('edit', row)">编辑</el-button>
+        <el-button link type="danger" size="small" :icon="Delete" @click="VerifyCompanyDelete(row)">删除</el-button>
+      </template>
+    </TableBase>
+    <Drawer ref="drawerRef" :handleClose="callbackDrawer">
+      <template #header="{ params }">
+        <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '添加' : '编辑' }} - 公司回款</h4>
+      </template>
+      <el-form ref="ruleFormRef" :model="form" :rules="rules">
+        <el-form-item label="公司名称:" class="m-b-6" :label-width="formLabelWidth" prop="T_name">
+          <el-input v-model="form.T_name" type="text" :disabled=!isNew autocomplete="off" placeholder="请填写公司名称" />
+        </el-form-item>
+        <el-form-item label="状态:" class="m-b-6" :label-width="formLabelWidth" prop="T_State">
+          <el-radio-group v-model="form.T_State" class="ml-4">
+            <el-radio :label="item.id" v-for="item,index in options4">{{item.name}}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        
+        <el-form-item :label-width="formLabelWidth">
+          <el-button v-if="isNew" color="#626aef" @click="AddVerifyCompany(ruleFormRef)">提交</el-button>
+          <el-button v-else color="#626aef" @click="AddVerifyCompany(ruleFormRef)">修改</el-button>
+        </el-form-item>
+      </el-form>
+    </Drawer>
+  </div>
+</template>
+
+<style scoped lang="scss">
+@import '@/styles/var.scss';
+.tooltip-content {
+  max-width: 500px;
+  overflow-y: auto;
+}
+.production-list {
+  @include f-direction;
+  .input-suffix {
+    width: 100%;
+    .inline-flex {
+      white-space: nowrap;
+    }
+    .btn {
+      display: flex;
+      justify-content: end;
+    }
+    .w-50 {
+      width: 12.5rem;
+    }
+  }
+}
+</style>

+ 1 - 0
src/views/storehouse/sales/VerifyForm.vue

@@ -62,6 +62,7 @@ const emit = defineEmits<{ (event: 'onTableList'): void }>()
 const form:any = ref<ContractFormType>({
   T_uuid: '',
   T_number: '',
+  T_task_id: '',
   T_product: '',
   T_money: '',
   T_discount: '',

+ 1 - 1
src/views/storehouse/verifyItem.vue

@@ -163,7 +163,7 @@ const initParam = reactive({
       </template>
       <el-form ref="ruleFormRef" :model="form" :rules="rules">
         <el-form-item label="项目名称:" class="m-b-6" :label-width="formLabelWidth" prop="T_name">
-          <el-input v-model="form.T_name" type="text" autocomplete="off" placeholder="请填写项目名称" />
+          <el-input v-model="form.T_name" type="text" :disabled=!isNew autocomplete="off" placeholder="请填写项目名称" />
         </el-form-item>
         <el-form-item label="类型:" class="m-b-6" :label-width="formLabelWidth" prop="T_type">
           <el-radio-group v-model="form.T_type" class="ml-4">