Browse Source

二线出区核放单

CzRger 10 months ago
parent
commit
a530524c79

+ 34 - 0
snowy-admin-web/src/api/biz/qySecondlineHfdDzApi.js

@@ -0,0 +1,34 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/qysecondlinehfddz/` + url, ...arg)
+
+/**
+ * 二线核注关联单证表Api接口管理器
+ *
+ * @author 曹钊瑞
+ * @date  2024/07/06 18:05
+ **/
+export default {
+	// 获取二线核注关联单证表分页
+	qySecondlineHfdDzPage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交二线核注关联单证表表单 edit为true时为编辑,默认为新增
+	qySecondlineHfdDzSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除二线核注关联单证表
+	qySecondlineHfdDzDelete(data) {
+		return request('delete', data)
+	},
+	// 导出二线核注关联单证表
+    qySecondlineHfdDzExport(data) {
+        return request('export', data, 'post', {
+            responseType: 'blob'
+        })
+    },
+	// 获取二线核注关联单证表详情
+	qySecondlineHfdDzDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

+ 34 - 0
snowy-admin-web/src/api/biz/qySecondlineHfdProductApi.js

@@ -0,0 +1,34 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/qysecondlinehfdproduct/` + url, ...arg)
+
+/**
+ * 二线核放清单关联商品表Api接口管理器
+ *
+ * @author 曹钊瑞
+ * @date  2024/07/06 17:32
+ **/
+export default {
+	// 获取二线核放清单关联商品表分页
+	qySecondlineHfdProductPage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交二线核放清单关联商品表表单 edit为true时为编辑,默认为新增
+	qySecondlineHfdProductSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除二线核放清单关联商品表
+	qySecondlineHfdProductDelete(data) {
+		return request('delete', data)
+	},
+	// 导出二线核放清单关联商品表
+    qySecondlineHfdProductExport(data) {
+        return request('export', data, 'post', {
+            responseType: 'blob'
+        })
+    },
+	// 获取二线核放清单关联商品表详情
+	qySecondlineHfdProductDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

+ 21 - 0
snowy-admin-web/src/api/yqyc/qySecondLineHzdTzApi.js

@@ -0,0 +1,21 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/qysecondlinehzdtz/` + url, ...arg)
+export default {
+	// 获取台账编号列表
+	qySecondLineHzdTzTzCodeByCondition(data) {
+		return request('tzCodeByCondition', data, 'get')
+	},
+	// 获取关联核注单编号
+	qySecondLineHzdTzHgHzdCodeByTzCode(data) {
+		return request('hgHzdCodeByTzCode', data, 'get')
+	},
+	// 获取表体
+	qySecondLineHzdTzGetProductByHgHzdCode(data) {
+		return request('getProductByHgHzdCode', data, 'get')
+	},
+	// 获取回执
+	qySecondLineHzdTzGetListByHfdId(data) {
+		return baseRequest('/biz/qysecondlinehfdlist/getListByHfdId', data, 'get')
+	},
+}

+ 34 - 0
snowy-admin-web/src/api/yqyc/qySecondlineHfdApi.js

@@ -0,0 +1,34 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/qysecondlinehfd/` + url, ...arg)
+
+/**
+ * 二线出区核放单管理Api接口管理器
+ *
+ * @author wenjinbiao
+ * @date  2024/07/06 16:48
+ **/
+export default {
+	// 获取二线出区核放单管理分页
+	qySecondlineHfdPage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交二线出区核放单管理表单 edit为true时为编辑,默认为新增
+	qySecondlineHfdSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除二线出区核放单管理
+	qySecondlineHfdDelete(data) {
+		return request('delete', data)
+	},
+	// 导出二线出区核放单管理
+    qySecondlineHfdExport(data) {
+        return request('export', data, 'post', {
+            responseType: 'blob'
+        })
+    },
+	// 获取二线出区核放单管理详情
+	qySecondlineHfdDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

+ 103 - 0
snowy-admin-web/src/views/biz/qysecondlinehfddz/detail.vue

@@ -0,0 +1,103 @@
+<template>
+    <a-card :bordered="false">
+		<a-page-header
+            :title="formData.id ? '编辑二线核注关联单证表' : '新增二线核注关联单证表'"
+			@back="onClose"
+		>
+			<template #extra>
+				<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+				<a-popconfirm title="请确认是否保存?" @confirm="onSubmit" v-if="!isView">
+                    <a-button type="primary" :loading="submitLoading">保存</a-button>
+                </a-popconfirm>
+			</template>
+		</a-page-header>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+            <a-row :gutter="16">
+                <a-col :span="12">
+                    <a-form-item label="二线核放单id:" name="hfdId">
+                        <a-input v-model:value="formData.hfdId" :disabled="isView" placeholder="请输入二线核放单id" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="核放清单编号:" name="hfdCode">
+                        <a-input v-model:value="formData.hfdCode" :disabled="isView" placeholder="请输入核放清单编号" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="关联单证类型:" name="dzType">
+                        <a-select v-model:value="formData.dzType" :disabled="isView" placeholder="请选择关联单证类型" :options="dzTypeOptions" show-search allow-clear option-filter-prop="label"/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="关联单证编号:" name="dzCode">
+                        <a-input v-model:value="formData.dzCode" :disabled="isView" placeholder="请输入关联单证编号" allow-clear />
+                    </a-form-item>
+                </a-col>
+            </a-row>
+        </a-form>
+	</a-card>
+</template>
+
+<script setup name="qySecondlineHfdDzDetail">
+	import tool from '@/utils/tool'
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import qySecondlineHfdDzApi from '@/api/biz/qySecondlineHfdDzApi'
+	// 抽屉状态
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+	const isView = ref(false)
+	const dzTypeOptions = ref([])
+
+	// 打开抽屉
+	const onOpen = (record, view = false) => {
+	    isView.value = view
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+		dzTypeOptions.value = tool.dictList('gldzlx')
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		isView.value = true
+		emit('onClose')
+	}
+	// 默认要校验的
+	const formRules = {
+		hfdCode: [required('请输入核放清单编号')],
+		dzType: [required('请输入关联单证类型')],
+		dzCode: [required('请输入关联单证编号')],
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				qySecondlineHfdDzApi
+					.qySecondlineHfdDzSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>
+
+<style lang="less" scoped>
+</style>

+ 173 - 0
snowy-admin-web/src/views/biz/qysecondlinehfddz/index.vue

@@ -0,0 +1,173 @@
+<template>
+	<a-card :bordered="false" v-if="indexShow">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.id"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+			v-model:filterParam="filterParam"
+			:scroll="{ x: 2000 }"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="onDetail()" v-if="hasPerm('qySecondlineHfdDzAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-delete
+						v-if="hasPerm('qySecondlineHfdDzDelete')"
+						:selectedRowKeys="selectedRowKeys"
+						@batchDelete="deleteBatchQySecondlineHfdDz"
+					/>
+					<a-button @click="onExport" v-if="hasPerm('qySecondlineHfdDzBatchExport')">
+                        <template #icon><export-outlined /></template>
+                        批量导出
+                    </a-button>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'dzType'">
+					{{ $TOOL.dictTypeData('gldzlx', record.dzType) }}
+				</template>
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+					    <a @click="onDetail(record, true)" v-if="hasPerm('qySecondlineHfdDzView')">查看</a>
+                        <a-divider type="vertical" v-if="hasPerm('qySecondlineHfdDzView') && hasPerm(['qySecondlineHfdDzEdit', 'qySecondlineHfdDzDelete'], 'or')" />
+						<a @click="onDetail(record)" v-if="hasPerm('qySecondlineHfdDzEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['qySecondlineHfdDzEdit', 'qySecondlineHfdDzDelete'], 'and')" />
+						<a-popconfirm title="确定要删除吗?" @confirm="deleteQySecondlineHfdDz(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('qySecondlineHfdDzDelete')">删除</a-button>
+						</a-popconfirm>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Detail v-else ref="detailRef" @onClose="indexShow = true" @successful="onSearch()" />
+</template>
+
+<script setup name="qysecondlinehfddz">
+	import { cloneDeep } from 'lodash-es'
+	import Detail from './detail.vue'
+	import qySecondlineHfdDzApi from '@/api/biz/qySecondlineHfdDzApi'
+	import downloadUtil from "@/utils/downloadUtil";
+    const { proxy } = getCurrentInstance()
+	const tableRef = ref()
+	const filterParam = ref({})
+	const detailRef = ref()
+	const indexShow = ref(true)
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '二线核放单id',
+			dataIndex: 'hfdId',
+		},
+		{
+			title: '核放清单编号',
+			dataIndex: 'hfdCode',
+		},
+		{
+			title: '关联单证类型',
+			dataIndex: 'dzType',
+		},
+		{
+			title: '关联单证编号',
+			dataIndex: 'dzCode',
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['qySecondlineHfdDzEdit', 'qySecondlineHfdDzDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 200,
+			fixed: 'right',
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+        tableRef.value.clearSelected()
+        return qySecondlineHfdDzApi.qySecondlineHfdDzPage(parameter).then((data) => {
+            return data
+        })
+    }
+    // 搜索同时备份参数
+    const onSearch = (parameter) => {
+        searchFormStateReal.value = cloneDeep(Object.assign(searchFormState.value, filterParam.value))
+        nextTick(() => {
+            tableRef.value.refresh(parameter)
+        })
+    }
+    // 重置
+    const reset = () => {
+        searchFormRef.value.resetFields()
+        onSearch(true)
+    }
+	// 删除
+	const deleteQySecondlineHfdDz = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		qySecondlineHfdDzApi.qySecondlineHfdDzDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchQySecondlineHfdDz = (params) => {
+		qySecondlineHfdDzApi.qySecondlineHfdDzDelete(params).then(() => {
+			tableRef.value.clearRefreshSelected()
+		})
+	}
+	// 批量导出
+    const onExport = () => {
+        const params = {
+            ...filterParam.value
+        }
+        if (selectedRowKeys.value.length > 0) {
+            params.ids = selectedRowKeys.value
+        } else {
+            Object.entries(searchFormStateReal.value).forEach(([key, value]) => {
+                console.log(key)
+                if (proxy.$util.isValue(value)) {
+                    params[key] = value
+                }
+            })
+        }
+        qySecondlineHfdDzApi.qySecondlineHfdDzExport(params).then((res) => {
+            downloadUtil.resultDownload(res)
+            tableRef.value.clearSelected()
+        })
+    }
+	// 切换至表单
+    const onDetail = (record = null, view) => {
+    	indexShow.value = false
+    	nextTick(() => {
+            detailRef.value.onOpen(record, view)
+    	})
+    }
+</script>
+
+<style lang="less" scoped>
+</style>

+ 130 - 0
snowy-admin-web/src/views/biz/qysecondlinehfdproduct/detail.vue

@@ -0,0 +1,130 @@
+<template>
+    <a-card :bordered="false">
+		<a-page-header
+            :title="formData.id ? '编辑二线核放清单关联商品表' : '新增二线核放清单关联商品表'"
+			@back="onClose"
+		>
+			<template #extra>
+				<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+				<a-popconfirm title="请确认是否保存?" @confirm="onSubmit" v-if="!isView">
+                    <a-button type="primary" :loading="submitLoading">保存</a-button>
+                </a-popconfirm>
+			</template>
+		</a-page-header>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+            <a-row :gutter="16">
+                <a-col :span="12">
+                    <a-form-item label="核放单id:" name="hfdId">
+                        <a-input v-model:value="formData.hfdId" :disabled="isView" placeholder="请输入核放单id" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="关联商品序号:" name="productId">
+                        <a-input v-model:value="formData.productId" :disabled="isView" placeholder="请输入关联商品序号" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="商品编号:" name="productCode">
+                        <a-input v-model:value="formData.productCode" :disabled="isView" placeholder="请输入商品编号" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="商品名称:" name="productName">
+                        <a-input v-model:value="formData.productName" :disabled="isView" placeholder="请输入商品名称" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="申报计量单位:" name="declareUnit">
+                        <a-input v-model:value="formData.declareUnit" :disabled="isView" placeholder="请输入申报计量单位" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="申报数量:" name="recordQuantity">
+                        <a-input v-model:value="formData.recordQuantity" :disabled="isView" placeholder="请输入申报数量" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="货物毛重:" name="grossWeight">
+                        <a-input v-model:value="formData.grossWeight" :disabled="isView" placeholder="请输入货物毛重" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="货物净重:" name="netWeight">
+                        <a-input v-model:value="formData.netWeight" :disabled="isView" placeholder="请输入货物净重" allow-clear />
+                    </a-form-item>
+                </a-col>
+                <a-col :span="12">
+                    <a-form-item label="备注:" name="remark">
+                        <a-input v-model:value="formData.remark" :disabled="isView" placeholder="请输入备注" allow-clear />
+                    </a-form-item>
+                </a-col>
+            </a-row>
+        </a-form>
+	</a-card>
+</template>
+
+<script setup name="qySecondlineHfdProductDetail">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import qySecondlineHfdProductApi from '@/api/biz/qySecondlineHfdProductApi'
+	// 抽屉状态
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+	const isView = ref(false)
+
+	// 打开抽屉
+	const onOpen = (record, view = false) => {
+	    isView.value = view
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		isView.value = true
+		emit('onClose')
+	}
+	// 默认要校验的
+	const formRules = {
+		productId: [required('请输入关联商品序号')],
+		productCode: [required('请输入商品编号')],
+		productName: [required('请输入商品名称')],
+		declareUnit: [required('请输入申报计量单位')],
+		recordQuantity: [required('请输入申报数量')],
+		grossWeight: [required('请输入货物毛重')],
+		netWeight: [required('请输入货物净重')],
+		remark: [required('请输入备注')],
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				qySecondlineHfdProductApi
+					.qySecondlineHfdProductSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>
+
+<style lang="less" scoped>
+</style>

+ 190 - 0
snowy-admin-web/src/views/biz/qysecondlinehfdproduct/index.vue

@@ -0,0 +1,190 @@
+<template>
+	<a-card :bordered="false" v-if="indexShow">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.id"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+			v-model:filterParam="filterParam"
+			:scroll="{ x: 2000 }"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="onDetail()" v-if="hasPerm('qySecondlineHfdProductAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-delete
+						v-if="hasPerm('qySecondlineHfdProductDelete')"
+						:selectedRowKeys="selectedRowKeys"
+						@batchDelete="deleteBatchQySecondlineHfdProduct"
+					/>
+					<a-button @click="onExport" v-if="hasPerm('qySecondlineHfdProductBatchExport')">
+                        <template #icon><export-outlined /></template>
+                        批量导出
+                    </a-button>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+					    <a @click="onDetail(record, true)" v-if="hasPerm('qySecondlineHfdProductView')">查看</a>
+                        <a-divider type="vertical" v-if="hasPerm('qySecondlineHfdProductView') && hasPerm(['qySecondlineHfdProductEdit', 'qySecondlineHfdProductDelete'], 'or')" />
+						<a @click="onDetail(record)" v-if="hasPerm('qySecondlineHfdProductEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['qySecondlineHfdProductEdit', 'qySecondlineHfdProductDelete'], 'and')" />
+						<a-popconfirm title="确定要删除吗?" @confirm="deleteQySecondlineHfdProduct(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('qySecondlineHfdProductDelete')">删除</a-button>
+						</a-popconfirm>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Detail v-else ref="detailRef" @onClose="indexShow = true" @successful="onSearch()" />
+</template>
+
+<script setup name="qysecondlinehfdproduct">
+	import { cloneDeep } from 'lodash-es'
+	import Detail from './detail.vue'
+	import qySecondlineHfdProductApi from '@/api/biz/qySecondlineHfdProductApi'
+	import downloadUtil from "@/utils/downloadUtil";
+    const { proxy } = getCurrentInstance()
+	const tableRef = ref()
+	const filterParam = ref({})
+	const detailRef = ref()
+	const indexShow = ref(true)
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '核放单id',
+			dataIndex: 'hfdId',
+		},
+		{
+			title: '关联商品序号',
+			dataIndex: 'productId',
+		},
+		{
+			title: '商品编号',
+			dataIndex: 'productCode',
+		},
+		{
+			title: '商品名称',
+			dataIndex: 'productName',
+		},
+		{
+			title: '申报计量单位',
+			dataIndex: 'declareUnit',
+		},
+		{
+			title: '申报数量',
+			dataIndex: 'recordQuantity',
+		},
+		{
+			title: '货物毛重',
+			dataIndex: 'grossWeight',
+		},
+		{
+			title: '货物净重',
+			dataIndex: 'netWeight',
+		},
+		{
+			title: '备注',
+			dataIndex: 'remark',
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['qySecondlineHfdProductEdit', 'qySecondlineHfdProductDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 200,
+			fixed: 'right',
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+        tableRef.value.clearSelected()
+        return qySecondlineHfdProductApi.qySecondlineHfdProductPage(parameter).then((data) => {
+            return data
+        })
+    }
+    // 搜索同时备份参数
+    const onSearch = (parameter) => {
+        searchFormStateReal.value = cloneDeep(Object.assign(searchFormState.value, filterParam.value))
+        nextTick(() => {
+            tableRef.value.refresh(parameter)
+        })
+    }
+    // 重置
+    const reset = () => {
+        searchFormRef.value.resetFields()
+        onSearch(true)
+    }
+	// 删除
+	const deleteQySecondlineHfdProduct = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		qySecondlineHfdProductApi.qySecondlineHfdProductDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchQySecondlineHfdProduct = (params) => {
+		qySecondlineHfdProductApi.qySecondlineHfdProductDelete(params).then(() => {
+			tableRef.value.clearRefreshSelected()
+		})
+	}
+	// 批量导出
+    const onExport = () => {
+        const params = {
+            ...filterParam.value
+        }
+        if (selectedRowKeys.value.length > 0) {
+            params.ids = selectedRowKeys.value
+        } else {
+            Object.entries(searchFormStateReal.value).forEach(([key, value]) => {
+                console.log(key)
+                if (proxy.$util.isValue(value)) {
+                    params[key] = value
+                }
+            })
+        }
+        qySecondlineHfdProductApi.qySecondlineHfdProductExport(params).then((res) => {
+            downloadUtil.resultDownload(res)
+            tableRef.value.clearSelected()
+        })
+    }
+	// 切换至表单
+    const onDetail = (record = null, view) => {
+    	indexShow.value = false
+    	nextTick(() => {
+            detailRef.value.onOpen(record, view)
+    	})
+    }
+</script>
+
+<style lang="less" scoped>
+</style>

+ 2 - 2
snowy-admin-web/src/views/yqyc/component/enterprise/detail.vue

@@ -17,8 +17,8 @@
           </a-row>
         </a-checkbox-group>
         <div class="__cus-title_1">基本信息</div>
-        <a-form ref="formRef" :model="formData" layout="inline">
-          <a-row :gutter="[0, 16]">
+        <a-form ref="formRef" :model="formData">
+          <a-row :gutter="16">
             <a-col :span="8">
               <a-form-item label="统一社会信用代码:" name="companyCode">
                 <a-input v-model:value="formData.companyCode" :disabled="true"/>

+ 4 - 4
snowy-admin-web/src/views/yqyc/general-ledger/one/goods.vue

@@ -7,8 +7,8 @@
   >
       <div class="goods-detail">
         <a-card>
-          <a-form ref="formRef" :model="formData" layout="inline">
-            <a-row :gutter="[0, 16]">
+          <a-form ref="formRef" :model="formData">
+            <a-row :gutter="16">
               <a-col :span="8">
                 <a-form-item :label="(formData?.warehouseType == 0 ? '入' :'出') + '库单预录入编号'" name="reWarehouseNumber">
                   <a-input v-model:value="formData.reWarehouseNumber" :disabled="true"/>
@@ -123,8 +123,8 @@
           </a-form>
         </a-card>
         <a-card style="margin-top: 10px;">
-          <a-form ref="formRef" :model="formData" layout="inline">
-            <a-row :gutter="[0, 16]">
+          <a-form ref="formRef" :model="formData">
+            <a-row :gutter="16">
               <a-col :span="8">
                 <a-form-item label="物料编号" name="wlbh">
                   <a-input v-model:value="formData.wlbh" :disabled="true"/>

+ 4 - 4
snowy-admin-web/src/views/yqyc/general-ledger/two/goods.vue

@@ -7,8 +7,8 @@
   >
       <div class="goods-detail">
         <a-card>
-          <a-form ref="formRef" :model="formData" layout="inline">
-            <a-row :gutter="[0, 16]">
+          <a-form ref="formRef" :model="formData">
+            <a-row :gutter="16">
               <a-col :span="8">
                 <a-form-item label="出库单预录入编号" name="reWarehouseNumber">
                   <a-input v-model:value="formData.reWarehouseNumber" :disabled="true"/>
@@ -123,8 +123,8 @@
           </a-form>
         </a-card>
         <a-card style="margin-top: 10px;">
-          <a-form ref="formRef" :model="formData" layout="inline">
-            <a-row :gutter="[0, 16]">
+          <a-form ref="formRef" :model="formData">
+            <a-row :gutter="16">
               <a-col :span="8">
                 <a-form-item label="物料编号" name="wlbh">
                   <a-input v-model:value="formData.wlbh" :disabled="true"/>

+ 5 - 5
snowy-admin-web/src/views/yqyc/zero/enterprise-ledger/detail.vue

@@ -16,8 +16,8 @@
 		</a-page-header>
 		<a-collapse v-model:activeKey="activeKey" expand-icon-position="end">
 			<a-collapse-panel key="1" header="基本信息">
-				<a-form ref="formRef" :model="formData" :rules="formRules" layout="inline">
-					<a-row :gutter="[0, 16]">
+				<a-form ref="formRef" :model="formData" :rules="formRules">
+					<a-row :gutter="16">
 						<a-col :span="8">
 							<a-form-item label="预录入台账编号:" name="ylTzCode">
 								<a-input v-model:value="formData.ylTzCode" :disabled="true" placeholder="请输入预录入台账编号"
@@ -95,8 +95,8 @@
 			</a-collapse-panel>
 			<a-collapse-panel key="2" header="表体信息">
 				<a-button type="primary" @click="onBodyReset" v-if="!isView">重置</a-button>
-				<a-form ref="bodyFormRef" :model="bodyData" :rules="bodyRules" layout="inline" style="margin-bottom: 20px;">
-					<a-row :gutter="[0, 16]">
+				<a-form ref="bodyFormRef" :model="bodyData" :rules="bodyRules" style="margin-bottom: 20px;">
+					<a-row :gutter="16">
 						<a-col :span="8">
 							<a-form-item label="商品编码:" name="productCode">
 								<a-input v-model:value="bodyData.productCode" :disabled="isView" placeholder="请输入商品编码" allow-clear />
@@ -838,7 +838,7 @@ const onFileDel = (recode, index) => {
 const deleteBatchFile = () => {
 	fileList.value = fileList.value.filter(v => {
 		let flag = true
-		bodySelectedRowKeys.value.forEach(s => {
+		fileSelectedRowKeys.value.forEach(s => {
 			if ((v.id && (v.id === s.id)) || (v.__index && (v.__index === s.__index))) {
 				flag = false
 			}

+ 4 - 4
snowy-admin-web/src/views/yqyc/zero/enterprise-qualification/detail.vue

@@ -14,8 +14,8 @@
         </a-popconfirm>
       </template>
     </a-page-header>
-    <a-form ref="formRef" :model="formData" :rules="formRules" layout="inline">
-      <a-row :gutter="[0, 16]">
+    <a-form ref="formRef" :model="formData" :rules="formRules">
+      <a-row :gutter="16">
         <a-col :span="24">
           <a-form-item label="资质类型:" name="zzType">
             <a-radio-group v-model:value="formData.zzType" :disabled="isView" placeholder="请选择资质类型"
@@ -24,7 +24,7 @@
         </a-col>
       </a-row>
       <div class="__cus-title_1">基本信息<span style="color: #d9001b;margin-left: auto">请务必仔细核对企业基本信息</span></div>
-      <a-row :gutter="[0, 16]">
+      <a-row :gutter="16">
         <a-col :span="8">
           <a-form-item label="统一社会信用代码:" name="companyCode">
             <a-input v-model:value="formData.companyCode" :disabled="true" placeholder="请输入统一社会信用代码"
@@ -123,7 +123,7 @@
         </a-col>
       </a-row>
       <div class="__cus-title_1">申报信息</div>
-      <a-row :gutter="[0, 16]">
+      <a-row :gutter="16">
         <a-col :span="8">
           <a-form-item label="申报类型:" name="baType">
             <a-select v-model:value="formData.baType" :disabled="true" placeholder="请选择备案类型"

+ 833 - 0
snowy-admin-web/src/views/yqyc/zero/two/out-nuclear-release/detail.vue

@@ -0,0 +1,833 @@
+<template>
+    <a-card :bordered="false">
+		<a-page-header
+            :title="formData.id ? '二线出区核放单' : '新增二线出区核放单'"
+			@back="onClose"
+		>
+			<template #extra>
+				<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+				<a-popconfirm title="请确认是否保存?" @confirm="onTemp" v-if="!isView">
+					<a-button style="margin-right: 8px" :loading="submitLoading">保存</a-button>
+				</a-popconfirm>
+				<a-popconfirm title="请确认是否申报?" @confirm="onSubmit" v-if="!isView">
+					<a-button type="primary" :loading="submitLoading">申报</a-button>
+				</a-popconfirm>
+			</template>
+		</a-page-header>
+		<a-collapse v-model:activeKey="activeKey" expand-icon-position="end">
+			<a-collapse-panel key="1" header="基本信息">
+				<a-form ref="formRef" :model="formData" :rules="formRules">
+					<a-row :gutter="16">
+						<a-col :span="8">
+							<a-form-item label="核放单预录入号:" name="hfdrCode">
+								<a-input v-model:value="formData.hfdrCode" :disabled="isView" placeholder="请输入核放单预录入号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="核放单号:" name="hfdCode">
+								<a-input v-model:value="formData.hfdCode" :disabled="true" placeholder="请输入核放单号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="核放单类型:" name="hfdLx">
+								<a-select v-model:value="formData.hfdLx" :disabled="isView" placeholder="请选择核放单类型" :options="hfdLxOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="台账编号:" name="ledgerCode">
+								<a-select v-model:value="formData.ledgerCode" :disabled="isView" placeholder="请选择台账编号" :options="tzOptions" show-search allow-clear option-filter-prop="label" @change="onChangTz"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="进出标志:" name="jcbz">
+								<a-select v-model:value="formData.jcbz" :disabled="isView" placeholder="请选择进出标志" :options="jcbzOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="绑定类型:" name="bdlx">
+								<a-select v-model:value="formData.bdlx" :disabled="isView" placeholder="请选择绑定类型" :options="bdlxOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="关联核注清单编号:" name="glhzqdbh">
+								<a-select v-model:value="formData.glhzqdbh" :disabled="isView" placeholder="请输入关联核注清单编号" :options="hzqdOptions" show-search allow-clear option-filter-prop="label" @change="onChangHzqd"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报类型:" name="sblx">
+								<a-select v-model:value="formData.sblx" :disabled="true" placeholder="请选择申报类型" :options="sblxOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="承运车车牌号:" name="cyccph">
+								<a-input v-model:value="formData.cyccph" :disabled="isView" placeholder="请输入承运车车牌号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="IC卡号(电子车牌):" name="ickh">
+								<a-input v-model:value="formData.ickh" :disabled="isView" placeholder="请输入ic卡号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="车架号:" name="cjh">
+								<a-input v-model:value="formData.cjh" :disabled="isView" placeholder="请输入车架号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="车架重:" name="cjz">
+								<a-input v-model:value="formData.cjz" :disabled="isView" placeholder="请输入车架重" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="车自重:" name="czz">
+								<a-input v-model:value="formData.czz" :disabled="isView" placeholder="请输入车自重" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="集装箱号:" name="jzxh">
+								<a-input v-model:value="formData.jzxh" :disabled="isView" placeholder="请输入集装箱号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="集装箱类型:" name="jzxlx">
+								<a-input v-model:value="formData.jzxlx" :disabled="isView" placeholder="请输入集装箱类型" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="总重量(kg):" name="zzl">
+								<a-input v-model:value="formData.zzl" :disabled="isView" placeholder="请输入总重量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="货物毛重量(kg):" name="hwmzl">
+								<a-input v-model:value="formData.hwmzl" :disabled="isView" placeholder="请输入货物毛重量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="货物总净重(kg):" name="hwjzl">
+								<a-input v-model:value="formData.hwjzl" :disabled="isView" placeholder="请输入货物总净重" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报企业名称:" name="sbqymc">
+								<a-input v-model:value="formData.sbqymc" :disabled="true" placeholder="请输入申报企业名称" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报企业编号:" name="sbqybh">
+								<a-input v-model:value="formData.sbqybh" :disabled="isView" placeholder="请输入申报企业编号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报企业社会信用代码:" name="sbqyshxydm">
+								<a-input v-model:value="formData.sbqyshxydm" :disabled="true" placeholder="请输入申报企业社会信用代码" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="录入单位代码:" name="lrdwdm">
+								<a-input v-model:value="formData.lrdwdm" :disabled="isView" placeholder="请输入录入单位代码" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="录入单位社会信用代码:" name="lrdwshxydm">
+								<a-input v-model:value="formData.lrdwshxydm" :disabled="isView" placeholder="请输入录入单位社会信用代码" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="录入单位名称:" name="lrdwmc">
+								<a-input v-model:value="formData.lrdwmc" :disabled="isView" placeholder="请输入录入单位名称" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="企业单位内部编号:" name="qydwnbbh">
+								<a-input v-model:value="formData.qydwnbbh" :disabled="isView" placeholder="请输入企业单位内部编号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="过卡1时间:" name="gkonesj">
+								<a-date-picker v-model:value="formData.gkonesj" :disabled="isView" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择过卡1时间" style="width: 100%" allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="过卡2时间:" name="gktwosj">
+								<a-date-picker v-model:value="formData.gktwosj" :disabled="isView" value-format="YYYY-MM-DD HH:mm:ss" show-time placeholder="请选择过卡2时间" style="width: 100%" allow-clear/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申请人:" name="sqr">
+								<a-input v-model:value="formData.sqr" :disabled="isView" placeholder="请输入申请人" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申请人联系方式:" name="sqrlxfs">
+								<a-input v-model:value="formData.sqrlxfs" :disabled="isView" placeholder="请输入申请人联系方式" allow-clear />
+							</a-form-item>
+						</a-col>
+					</a-row>
+				</a-form>
+			</a-collapse-panel>
+			<a-collapse-panel key="2" header="核放单表体">
+				<a-button type="primary" @click="onBodyReset" v-if="!isView">重置</a-button>
+				<a-form ref="bodyFormRef" :model="bodyData" :rules="bodyRules" style="margin-bottom: 20px;">
+					<a-row :gutter="16">
+						<a-col :span="8">
+							<a-form-item label="关联商品序号:" name="productId">
+								<a-input v-model:value="bodyData.productId" :disabled="isView" placeholder="请输入关联商品序号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="商品编号:" name="productCode">
+								<a-input v-model:value="bodyData.productCode" :disabled="isView" placeholder="请输入商品编号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="商品名称:" name="productName">
+								<a-input v-model:value="bodyData.productName" :disabled="isView" placeholder="请输入商品名称" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报计量单位:" name="declareUnit">
+								<a-input v-model:value="bodyData.declareUnit" :disabled="isView" placeholder="请输入申报计量单位" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="申报数量:" name="recordQuantity">
+								<a-input v-model:value="bodyData.recordQuantity" :disabled="isView" placeholder="请输入申报数量" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="货物毛重:" name="grossWeight">
+								<a-input v-model:value="bodyData.grossWeight" :disabled="isView" placeholder="请输入货物毛重" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="货物净重:" name="netWeight">
+								<a-input v-model:value="bodyData.netWeight" :disabled="isView" placeholder="请输入货物净重" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="备注:" name="remark">
+								<a-input v-model:value="bodyData.remark" :disabled="isView" placeholder="请输入备注" allow-clear />
+							</a-form-item>
+						</a-col>
+					</a-row>
+				</a-form>
+				<template v-if="!isView">
+					<a-button type="primary" style="margin-right: 8px;" v-if="!(bodyData.id || bodyData.__index)" @click="onBodyAdd">插入</a-button>
+					<a-button type="primary" style="margin-right: 8px;" v-else @click="onBodyEdit">保存</a-button>
+					<xn-batch-delete
+						:selectedRowKeys="bodySelectedRowKeys"
+						@batchDelete="deleteBatchBody"
+					/>
+				</template>
+				<a-table
+					style="margin-top: 10px"
+					bordered
+					:dataSource="bodyList"
+					:columns="bodyColumns"
+					:pagination="false"
+					:scroll="{ x: 2000 }"
+					:row-selection="bodyOptions.rowSelection"
+				>
+					<template #bodyCell="{ column, record, index }">
+						<template v-if="column.dataIndex === 'action'">
+							<template v-if="isView">
+								<a-button type="link" primary size="small" @click="onBodyReset(), bodyData = cloneDeep(record)">查看</a-button>
+							</template>
+							<template v-else>
+								<a-button type="link" primary size="small" @click="onBodyReset(), bodyData = cloneDeep(record)">编辑</a-button>
+								<a-button type="link" danger size="small" @click="onBodyDel(index)">删除</a-button>
+							</template>
+						</template>
+					</template>
+				</a-table>
+			</a-collapse-panel>
+			<a-collapse-panel key="4" header="关联单证">
+				<a-button type="primary" @click="onRelationReset" v-if="!isView">重置</a-button>
+				<a-form ref="relationFormRef" :model="relationData" :rules="relationRules" style="margin-bottom: 20px;">
+					<a-row :gutter="16">
+						<a-col :span="8">
+							<a-form-item label="核放清单编号:" name="hfdCode">
+								<a-input v-model:value="relationData.hfdCode" :disabled="isView" placeholder="请输入核放清单编号" allow-clear />
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="关联单证类型:" name="dzType">
+								<a-select v-model:value="relationData.dzType" :disabled="isView" placeholder="请选择关联单证类型" :options="dzTypeOptions" show-search allow-clear option-filter-prop="label"/>
+							</a-form-item>
+						</a-col>
+						<a-col :span="8">
+							<a-form-item label="关联单证编号:" name="dzCode">
+								<a-input v-model:value="relationData.dzCode" :disabled="isView" placeholder="请输入关联单证编号" allow-clear />
+							</a-form-item>
+						</a-col>
+					</a-row>
+				</a-form>
+				<template v-if="!isView">
+					<a-button type="primary" style="margin-right: 8px;" v-if="!(relationData.id || relationData.__index)" @click="onRelationAdd">插入</a-button>
+					<a-button type="primary" style="margin-right: 8px;" v-else @click="onRelationEdit">保存</a-button>
+					<xn-batch-delete
+						:selectedRowKeys="relationSelectedRowKeys"
+						@batchDelete="deleteBatchRelation"
+					/>
+				</template>
+				<a-table
+					style="margin-top: 10px"
+					bordered
+					:dataSource="relationList"
+					:columns="relationColumns"
+					:pagination="false"
+					:scroll="{ x: 2000 }"
+					:row-selection="relationOptions.rowSelection"
+				>
+					<template #bodyCell="{ column, record, index }">
+						<template v-if="column.dataIndex === 'action'">
+							<template v-if="isView">
+								<a-button type="link" primary size="small" @click="onRelationReset(), relationData = cloneDeep(record)">查看</a-button>
+							</template>
+							<template v-else>
+								<a-button type="link" primary size="small" @click="onRelationReset(), relationData = cloneDeep(record)">编辑</a-button>
+								<a-button type="link" danger size="small" @click="onRelationDel(index)">删除</a-button>
+							</template>
+						</template>
+					</template>
+				</a-table>
+			</a-collapse-panel>
+			<a-collapse-panel key="3" header="附件信息">
+				<template v-if="!isView">
+					<div>
+						友情提示<br/>
+						1、附件大小要求不超过4M,如果文件过大,建议拆分多个上传;<br/>
+						2、附件格式要求:PDF文件;<br/>
+						3、同一附件类型可以上传多个附件;<br/>
+						4、附件传输过程中会出现传输失败的情况,请随时关注附件传输状态;<br/>
+						5、要求上传复印件的可上传原件的扫描件。
+					</div>
+					<xn-upload ref="ref_upload" v-model:value="fileData.fileUrl" @onChange="fileChange" accept=".pdf" v-if="showFileUpload"/>
+					<xn-batch-delete
+						:selectedRowKeys="fileSelectedRowKeys"
+						@batchDelete="deleteBatchFile"
+					/>
+				</template>
+				<a-table
+					style="margin-top: 10px"
+					bordered
+					:dataSource="fileList"
+					:columns="fileColumns"
+					:pagination="false"
+					:row-selection="fileOptions.rowSelection"
+				>
+					<template #bodyCell="{ column, record, index, text }">
+						<template v-if="['attachmentName', 'attachmentFormat', 'attachmentContent'].includes(column.dataIndex)">
+							<div>
+								<a-input
+									v-if="!isView"
+									v-model:value="record[column.dataIndex]"
+									style="margin: -5px 0"
+								/>
+								<template v-else>
+									{{ text }}
+								</template>
+							</div>
+						</template>
+						<template v-if="column.dataIndex === 'action'">
+							<template v-if="isView">
+							</template>
+							<template v-else>
+								<a-button type="link" danger size="small" @click="onFileDel(index)" v-if="!isView">删除</a-button>
+							</template>
+						</template>
+					</template>
+				</a-table>
+			</a-collapse-panel>
+		</a-collapse>
+
+
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+        </a-form>
+	</a-card>
+</template>
+
+<script setup name="qySecondlineHfdDetail">
+	import tool from '@/utils/tool'
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import qySecondlineHfdApi from '@/api/yqyc/qySecondlineHfdApi'
+	import qyRecordInfoApi from "@/api/yqyc/qyRecordInfoApi";
+	import {message, Modal} from "ant-design-vue";
+	import {createVNode} from "vue";
+	import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
+	import qySecondLineHzdTzApi from "@/api/yqyc/qySecondLineHzdTzApi";
+	const { proxy } = getCurrentInstance()
+
+	// 抽屉状态
+	const emit = defineEmits({ successful: null, onClose: null })
+	const formRef = ref()
+	const bodyFormRef = ref()
+	const relationFormRef = ref()
+	const ref_upload = ref()
+	const activeKey = ref('1')
+	// 表单数据
+	const formData = ref({})
+	const bodyData = ref({})
+	const fileData = ref({})
+	const relationData = ref({})
+	const submitLoading = ref(false)
+	const isView = ref(false)
+	const hfdLxOptions = ref([])
+	const jcbzOptions = ref([])
+	const sblxOptions = ref([])
+	const bdlxOptions = ref([])
+	const dzTypeOptions = ref([])
+	const hzqdOptions = ref([])
+	const tzOptions = ref([])
+	const statusOptions = ref([])
+	const userInfo = tool.data.get('USER_INFO')
+	const showFileUpload = ref(true)
+
+	const bodySelectedRowKeys = ref([])
+	const bodyList = ref([])
+	// 列表选择配置
+	const bodyOptions = {
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				bodySelectedRowKeys.value = selectedRows
+			}
+		}
+	}
+	const relationSelectedRowKeys = ref([])
+	const relationList = ref([])
+	// 列表选择配置
+	const relationOptions = {
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				relationSelectedRowKeys.value = selectedRows
+			}
+		}
+	}
+	const fileSelectedRowKeys = ref([])
+	const fileList = ref([])
+	// 列表选择配置
+	const fileOptions = {
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				fileSelectedRowKeys.value = selectedRows
+			}
+		}
+	}
+
+	const bodyColumns = [
+		{
+			title: '关联商品序号',
+			dataIndex: 'productId',
+		},
+		{
+			title: '商品编号',
+			dataIndex: 'productCode',
+		},
+		{
+			title: '商品名称',
+			dataIndex: 'productName',
+		},
+		{
+			title: '申报计量单位',
+			dataIndex: 'declareUnit',
+		},
+		{
+			title: '申报数量',
+			dataIndex: 'recordQuantity',
+		},
+		{
+			title: '货物毛重',
+			dataIndex: 'grossWeight',
+		},
+		{
+			title: '货物净重',
+			dataIndex: 'netWeight',
+		},
+		{
+			title: '备注',
+			dataIndex: 'remark',
+		},
+		{
+			title: '操作',
+			dataIndex: 'action',
+			width: 200,
+			fixed: 'right'
+		},
+	]
+	const relationColumns = [
+		{
+			title: '核放清单编号',
+			dataIndex: 'hfdCode',
+		},
+		{
+			title: '关联单证编号',
+			dataIndex: 'dzCode',
+		},
+		{
+			title: '关联单证类型',
+			dataIndex: 'dzType',
+		},
+		{
+			title: '操作',
+			dataIndex: 'action',
+		},
+	]
+	const fileColumns = [
+		{
+			title: '附件名称',
+			dataIndex: 'attachmentName',
+		},
+		{
+			title: '附件格式',
+			dataIndex: 'attachmentFormat',
+		},
+		{
+			title: '附件内容',
+			dataIndex: 'attachmentContent',
+		},
+		{
+			title: '上传时间',
+			dataIndex: 'uploadTime',
+		},
+		{
+			title: '操作',
+			dataIndex: 'action',
+		},
+	]
+	// 打开抽屉
+	const onOpen = (record, view = false, type, copy) => {
+	    isView.value = view
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+			qySecondlineHfdApi.qySecondlineHfdDetail({id: record.id}).then(res => {
+				formData.value = res.baseInfo
+				bodyList.value = res.productList
+				relationList.value = res.dzList
+				fileList.value = res.attachmentList
+				if (type) {
+					formData.value.sblx = type
+				}
+				if (formData.value.ledgerCode) {
+					qySecondLineHzdTzApi.qySecondLineHzdTzHgHzdCodeByTzCode({tzCode: formData.value.ledgerCode}).then(res => {
+						hzqdOptions.value = res.map(v => ({label: v, value: v}))
+					})
+				}
+				if (copy) {
+					delete formData.value.id
+				}
+			})
+		} else {
+			formData.value.sbqymc = userInfo.companyName
+			formData.value.sbqyshxydm = userInfo.companyNumber
+			formData.value.sblx = type
+		}
+		qySecondLineHzdTzApi.qySecondLineHzdTzTzCodeByCondition().then(res => {
+			tzOptions.value = res.map(v => ({label: v, value: v}))
+		})
+		hfdLxOptions.value = tool.dictList('hfdlx')
+		jcbzOptions.value = tool.dictList('jcbz')
+		sblxOptions.value = tool.dictList('lgs_sblx')
+		bdlxOptions.value = tool.dictList('bdlx')
+		statusOptions.value = tool.dictList('djzt')
+		dzTypeOptions.value = tool.dictList('gldzlx')
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value?.resetFields()
+		formData.value = {}
+		isView.value = true
+		emit('onClose')
+	}
+	// 默认要校验的
+	const formRules = {
+		hfdLx: [required('请选择核放单类型')],
+		ledgerCode: [required('请选择台账编号')],
+		jcbz: [required('请选择进出口标志')],
+		bdlx: [required('请选择绑定类型')],
+		glhzqdbh: [required('请输入关联核注单编号')],
+		sblx: [required('请选择申报类型')],
+		cyccph: [required('请输入承运车车牌号')],
+		ickh: [required('请输入IC卡号(电子车牌)')],
+		cjh: [required('请输入车架号')],
+		cjz: [required('请输入车架重')],
+		czz: [required('请输入车自重')],
+		zzl: [required('请输入总重量(kg)')],
+		hwmzl: [required('货物毛净重(kg)')],
+		hwjzl: [required('货物总净重(kg)')],
+	}
+	// 默认要校验的
+	const bodyRules = {
+		productId: [required('请输入关联商品序号')],
+		productCode: [required('请输入商品编号')],
+		productName: [required('请输入商品名称')],
+		declareUnit: [required('请输入申报计量单位')],
+		recordQuantity: [required('请输入申报数量')],
+		grossWeight: [required('请输入货物毛重')],
+		netWeight: [required('请输入货物净重')],
+	}
+	// 默认要校验的
+	const relationRules = {
+		hfdCode: [required('请输入核放清单编号')],
+		dzType: [required('请输入关联单证类型')],
+		dzCode: [required('请输入关联单证编号')],
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const params = {
+					baseInfo: Object.assign(formData.value, {status: '2'}),
+					productList: bodyList.value,
+					dzList: relationList.value,
+					attachmentList: fileList.value,
+				}
+				qySecondlineHfdApi
+					.qySecondlineHfdSubmitForm(params, formData.value.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	const onTemp = () => {
+		formRef.value
+		.validate()
+		.then(() => {
+			submitLoading.value = true
+			const params = {
+				baseInfo: Object.assign(formData.value, {status: '1'}),
+				productList: bodyList.value,
+				dzList: relationList.value,
+				attachmentList: fileList.value,
+			}
+			qySecondlineHfdApi
+			.qySecondlineHfdSubmitForm(params, formData.value.id)
+			.then(() => {
+				onClose()
+				emit('successful')
+			})
+			.finally(() => {
+				submitLoading.value = false
+			})
+		})
+		.catch(() => {
+		})
+	}
+	const onBodyReset = () => {
+		bodyFormRef.value?.resetFields()
+		bodyData.value = {}
+	}
+	const onBodyAdd = () => {
+		bodyFormRef.value
+		.validate()
+		.then(() => {
+			bodyList.value.push(Object.assign({__index: new Date().getTime()}, bodyData.value))
+			onBodyReset()
+			message.success('插入表体信息成功!')
+		})
+		.catch(() => {
+		})
+	}
+	const onBodyEdit = () => {
+		bodyFormRef.value
+		.validate()
+		.then(() => {
+			let k = ''
+			if (bodyData.value.id) {
+				k = 'id'
+			} else if (bodyData.value.__index) {
+				k = '__index'
+			}
+			if (k) {
+				bodyList.value.forEach(v => {
+					if (v[k] === bodyData.value[k]) {
+						Object.assign(v, bodyData.value)
+					}
+				})
+			}
+			onBodyReset()
+			message.success('编辑表体信息成功!')
+		})
+		.catch(() => {
+		})
+	}
+	const onBodyDel = (recode, index) => {
+		Modal.confirm({
+			title: '提示',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: createVNode('div', { style: 'color:red;' }, `是否要删除${record.productName}?`),
+			centered: true,
+			onOk() {
+				bodyList.value.splice(index, 1)
+			},
+			onCancel() {
+			},
+		});
+	}
+	const deleteBatchBody = () => {
+		bodyList.value = bodyList.value.filter(v => {
+			let flag = true
+			bodySelectedRowKeys.value.forEach(s => {
+				if ((v.id && (v.id === s.id)) || (v.__index && (v.__index === s.__index))) {
+					flag = false
+				}
+			})
+			return flag
+		})
+	}
+	const onRelationReset = () => {
+		relationFormRef.value?.resetFields()
+		relationData.value = {}
+	}
+	const onRelationAdd = () => {
+		relationFormRef.value
+		.validate()
+		.then(() => {
+			relationList.value.push(Object.assign({__index: new Date().getTime()}, relationData.value))
+			onRelationReset()
+			message.success('插入表体信息成功!')
+		})
+		.catch(() => {
+		})
+	}
+	const onRelationEdit = () => {
+		relationFormRef.value
+		.validate()
+		.then(() => {
+			let k = ''
+			if (relationData.value.id) {
+				k = 'id'
+			} else if (relationData.value.__index) {
+				k = '__index'
+			}
+			if (k) {
+				relationList.value.forEach(v => {
+					if (v[k] === relationData.value[k]) {
+						Object.assign(v, relationData.value)
+					}
+				})
+			}
+			onRelationReset()
+			message.success('编辑表体信息成功!')
+		})
+		.catch(() => {
+		})
+	}
+	const onRelationDel = (recode, index) => {
+		Modal.confirm({
+			title: '提示',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: createVNode('div', { style: 'color:red;' }, `是否要删除${record.productName}?`),
+			centered: true,
+			onOk() {
+				relationList.value.splice(index, 1)
+			},
+			onCancel() {
+			},
+		});
+	}
+	const deleteBatchRelation = () => {
+		relationList.value = relationList.value.filter(v => {
+			let flag = true
+			relationSelectedRowKeys.value.forEach(s => {
+				if ((v.id && (v.id === s.id)) || (v.__index && (v.__index === s.__index))) {
+					flag = false
+				}
+			})
+			return flag
+		})
+	}
+	const getFileExtension = (filename) => {
+		// 使用lastIndexOf查找最后一个"."的位置
+		var dotIndex = filename.lastIndexOf(".");
+
+		// 如果找到了".",则提取从"."之后的子串作为后缀名
+		if (dotIndex !== -1 && dotIndex < filename.length - 1) { // 确保"."不是字符串的最后一个字符
+			return filename.slice(dotIndex + 1); // slice从dotIndex+1开始到字符串结束
+		} else {
+			// 如果没有找到".",返回空字符串表示没有后缀
+			return "";
+		}
+	}
+	const fileChange = (file) => {
+		if (file) {
+			const f = ref_upload.value.uploadFileList()[0]
+			fileList.value.push({
+				__index: new Date().getTime(),
+				attachmentUrl: f.url,
+				attachmentName: f.name,
+				attachmentFormat: getFileExtension(f.name),
+				attachmentContent: '',
+				uploadTime: proxy.$util.YMDHms(new Date()),
+			})
+			fileData.value.fileUrl = ''
+			showFileUpload.value = false
+			setTimeout(() => {
+				showFileUpload.value = true
+			}, 0)
+		}
+	}
+	const onFileDel = (recode, index) => {
+		Modal.confirm({
+			title: '提示',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: createVNode('div', { style: 'color:red;' }, `是否要删除?`),
+			centered: true,
+			onOk() {
+				fileList.value.splice(index, 1)
+			},
+			onCancel() {
+			},
+		});
+	}
+	const deleteBatchFile = () => {
+		fileList.value = fileList.value.filter(v => {
+			let flag = true
+			fileSelectedRowKeys.value.forEach(s => {
+				if ((v.id && (v.id === s.id)) || (v.__index && (v.__index === s.__index))) {
+					flag = false
+				}
+			})
+			return flag
+		})
+	}
+	const onChangTz = (val) => {
+		if (val) {
+			qySecondLineHzdTzApi.qySecondLineHzdTzHgHzdCodeByTzCode({tzCode: val}).then(res => {
+				hzqdOptions.value = res.map(v => ({label: v, value: v}))
+			})
+		} else {
+			formData.value.glhzqdbh = ''
+			hzqdOptions.value = []
+			bodyList.value = []
+			onBodyReset()
+		}
+	}
+	const onChangHzqd = (val) => {
+		if (val) {
+			qySecondLineHzdTzApi.qySecondLineHzdTzGetProductByHgHzdCode({hgHzCode: val}).then(res => {
+				bodyList.value = res
+				onBodyReset()
+			})
+		} else {
+			bodyList.value = []
+			onBodyReset()
+		}
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>
+
+<style lang="less" scoped>
+</style>

+ 294 - 0
snowy-admin-web/src/views/yqyc/zero/two/out-nuclear-release/index.vue

@@ -0,0 +1,294 @@
+<template>
+	<a-card :bordered="false" v-if="indexShow">
+		<a-tabs v-model:activeKey="searchFormState.sblx" @change="onSearch()">
+			<a-tab-pane key="1" tab="备案"/>
+			<a-tab-pane key="2" tab="变更"/>
+			<a-tab-pane key="3" tab="作废"/>
+		</a-tabs>
+		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
+            <a-row :gutter="24">
+                <a-col :span="6">
+                    <a-form-item label="核放单预录入号" name="hfdrCode">
+                        <a-input v-model:value="searchFormState.hfdrCode" placeholder="请输入核放单预录入号" allow-clear/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="核放单号" name="hfdCode">
+                        <a-input v-model:value="searchFormState.hfdCode" placeholder="请输入核放单号" allow-clear/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="台账编号" name="ledgerCode">
+                        <a-input v-model:value="searchFormState.ledgerCode" placeholder="请输入台账编号" allow-clear/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="进出标志" name="jcbz">
+                        <a-select v-model:value="searchFormState.jcbz" placeholder="请选择进出标志" :options="jcbzOptions" show-search allow-clear option-filter-prop="label"/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="关联核注清单编号" name="glhzqdbh">
+                        <a-input v-model:value="searchFormState.glhzqdbh" placeholder="请输入关联核注清单编号" allow-clear/>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="6">
+                    <a-form-item label="单据状态" name="status">
+                        <a-select v-model:value="searchFormState.status" placeholder="请选择单据状态" :options="statusOptions" show-search allow-clear option-filter-prop="label"/>
+                    </a-form-item>
+                </a-col>
+				<a-col :span="6" :offset="6">
+					<div style="width: 100%;display: flex;justify-content: flex-end">
+						<a-button type="primary" @click="onSearch()">查询</a-button>
+						<a-button style="margin: 0 0 0 8px" @click="reset">重置</a-button>
+					</div>
+				</a-col>
+            </a-row>
+        </a-form>
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.id"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+			v-model:filterParam="filterParam"
+			:scroll="{ x: 2000 }"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="onDetail(null, false, '1')" v-if="hasPerm('qySecondlineHfdAdd') && searchFormState.sblx == 1">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+<!--					<xn-batch-delete-->
+<!--						v-if="hasPerm('qySecondlineHfdDelete')"-->
+<!--						:selectedRowKeys="selectedRowKeys"-->
+<!--						@batchDelete="deleteBatchQySecondlineHfd"-->
+<!--					/>-->
+					<a-button @click="onExport" v-if="hasPerm('qySecondlineHfdBatchExport')">
+                        <template #icon><export-outlined /></template>
+                        批量导出
+                    </a-button>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'hfdLx'">
+					{{ $TOOL.dictTypeData('hfdlx', record.hfdLx) }}
+				</template>
+				<template v-if="column.dataIndex === 'status'">
+					{{ $TOOL.dictTypeData('djzt', record.status) }}
+				</template>
+				<template v-if="column.dataIndex === 'sblx'">
+					{{ $TOOL.dictTypeData('lgs_sblx', record.sblx) }}
+				</template>
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+					    <a @click="onDetail(record, true)" v-if="hasPerm('qySecondlineHfdView')">查看</a>
+						<a @click="onDetail(record)" v-if="hasPerm('qySecondlineHfdEdit')">编辑</a>
+						<a-popconfirm title="确定要删除吗?" @confirm="deleteQySecondlineHfd(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('qySecondlineHfdDelete')">删除</a-button>
+						</a-popconfirm>
+						<a @click="onDetail(record, false, null, true)">复制</a>
+                        <a @click="resultDetailRef.onOpen(record)" v-if="record.status == 3 || record.status == 4">查看回执</a>
+                        <a @click="onChange(record)" v-if="record.sblx == 2 && record.status == 3">变更</a>
+                        <a-button type="link" danger size="small" @click="onKill(record)" v-if="record.sblx == 1 && record.status == 3">作废</a-button>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Detail v-else ref="detailRef" @onClose="indexShow = true" @successful="onSearch()" />
+    <ResultDetail ref="resultDetailRef"/>
+</template>
+
+<script setup name="qysecondlinehfd">
+	import tool from '@/utils/tool'
+	import { cloneDeep } from 'lodash-es'
+	import Detail from './detail.vue'
+	import qySecondlineHfdApi from '@/api/yqyc/qySecondlineHfdApi'
+	import downloadUtil from "@/utils/downloadUtil";
+	import {Modal} from "ant-design-vue";
+	import {createVNode} from "vue";
+	import {ExclamationCircleOutlined} from "@ant-design/icons-vue";
+	import qyRecordInfoApi from "@/api/yqyc/qyRecordInfoApi";
+    import qySecondLineHzdTzApi from "@/api/yqyc/qySecondLineHzdTzApi";
+    import ResultDetail from "./result.vue";
+    const { proxy } = getCurrentInstance()
+	const searchFormState = ref({
+		sblx: '1'
+	})
+	const searchFormStateReal = ref(searchFormState.value) // 点击搜索后备份的查询参数
+	const searchFormRef = ref()
+	const resultDetailRef = ref()
+	const tableRef = ref()
+	const filterParam = ref({})
+	const detailRef = ref()
+	const indexShow = ref(true)
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	// 查询区域显示更多控制
+	const advanced = ref(false)
+	const toggleAdvanced = () => {
+		advanced.value = !advanced.value
+	}
+	const columns = [
+		{
+			title: '核放单预录入号',
+			dataIndex: 'hfdrCode',
+		},
+		{
+			title: '核放单号',
+			dataIndex: 'hfdCode',
+		},
+		{
+			title: '核放单类型',
+			dataIndex: 'hfdLx',
+		},
+		{
+			title: '台账编号',
+			dataIndex: 'ledgerCode',
+		},
+		{
+			title: '关联核注清单编号',
+			dataIndex: 'glhzqdbh',
+		},
+		{
+			title: '申报类型',
+			dataIndex: 'sblx',
+		},
+		{
+			title: '申报时间',
+			dataIndex: 'sbsj',
+            sorter: true,
+		},
+		{
+			title: '单据状态',
+			dataIndex: 'status',
+		},
+		  {
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 300,
+			fixed: 'right',
+		  }
+	]
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+        tableRef.value.clearSelected()
+        return qySecondlineHfdApi.qySecondlineHfdPage(Object.assign(parameter, searchFormStateReal.value)).then((data) => {
+            return data
+        })
+    }
+    // 搜索同时备份参数
+    const onSearch = (parameter) => {
+        searchFormStateReal.value = cloneDeep(Object.assign(searchFormState.value, filterParam.value))
+        nextTick(() => {
+            tableRef.value.refresh(parameter)
+        })
+    }
+    // 重置
+    const reset = () => {
+        searchFormRef.value.resetFields()
+        onSearch(true)
+    }
+	// 删除
+	const deleteQySecondlineHfd = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		qySecondlineHfdApi.qySecondlineHfdDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchQySecondlineHfd = (params) => {
+		qySecondlineHfdApi.qySecondlineHfdDelete(params).then(() => {
+			tableRef.value.clearRefreshSelected()
+		})
+	}
+	// 批量导出
+    const onExport = () => {
+        const params = {
+            ...filterParam.value
+        }
+        if (selectedRowKeys.value.length > 0) {
+            params.ids = selectedRowKeys.value
+        } else {
+            Object.entries(searchFormStateReal.value).forEach(([key, value]) => {
+                console.log(key)
+                if (proxy.$util.isValue(value)) {
+                    params[key] = value
+                }
+            })
+        }
+        qySecondlineHfdApi.qySecondlineHfdExport(params).then((res) => {
+            downloadUtil.resultDownload(res)
+            tableRef.value.clearSelected()
+        })
+    }
+	// 切换至表单
+    const onDetail = (record = null, view, type, copy) => {
+    	indexShow.value = false
+    	nextTick(() => {
+            detailRef.value.onOpen(record, view, type, copy)
+    	})
+    }
+	const onChange = (record) => {
+		Modal.confirm({
+			title: '请确定是否变更',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: createVNode('div', { style: 'color:red;' }, '变更后将重新进行申报'),
+			centered: true,
+			onOk() {
+              onDetail(record, false, '2')
+			},
+			onCancel() {
+			},
+		});
+	}
+	const onKill = (record) => {
+		Modal.confirm({
+			title: '确定是否作废该核放单',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: createVNode('div', { style: 'color:red;' }, '提交作废申请后由海关审批'),
+			centered: true,
+			onOk() {
+              qySecondlineHfdApi.qySecondlineHfdDetail({id: record.id}).then(res => {
+                const params = res
+                params.baseInfo.sblx = '3'
+                params.baseInfo.status = '2'
+                qySecondlineHfdApi.qySecondlineHfdSubmitForm(params, record.id).then(() => {
+                  onSearch()
+                })
+              })
+			},
+			onCancel() {
+			},
+		});
+	}
+	const jcbzOptions = tool.dictList('jcbz')
+	const statusOptions = tool.dictList('djzt')
+</script>
+
+<style lang="less" scoped>
+</style>

+ 77 - 0
snowy-admin-web/src/views/yqyc/zero/two/out-nuclear-release/result.vue

@@ -0,0 +1,77 @@
+<template>
+	<a-modal
+		v-model:open="open"
+		title="查看回执"
+		centered
+		width="90%"
+	>
+		<div class="result-detail">
+			<a-page-header
+			>
+				<template #tags>
+					<a-tag :color="formData.status == 3 ? 'green' : 'red'">{{ $TOOL.dictTypeData('djzt', formData.status) }}</a-tag>
+					<a-tooltip :title="resultList[resultList.length - 1]?.result">
+						<InfoCircleOutlined />
+					</a-tooltip>
+				</template>
+			</a-page-header>
+			<a-table
+				style="margin-top: 10px"
+				bordered
+				:dataSource="resultList"
+				:columns="[
+				  {title: '单据类型',dataIndex: 'applyType',key: 'applyType'},
+				  {title: '审核状态',dataIndex: 'status',key: 'status'},
+				  {title: '申请人',dataIndex: 'applicant',key: 'applicant'},
+				  {title: '审核人',dataIndex: 'applyMan',key: 'applyMan'},
+				  {title: '审核时间',dataIndex: 'checkTime',key: 'checkTime'},
+				  {title: '审核结果回执',dataIndex: 'result',key: 'result'},
+				]"
+				:pagination="false"
+			>
+			</a-table>
+		</div>
+		<template #footer></template>
+	</a-modal>
+</template>
+
+<script setup name="enterpriseDetail">
+import tool from '@/utils/tool'
+import {cloneDeep} from 'lodash-es'
+// 抽屉状态
+const open = ref(false)
+const emit = defineEmits({successful: null})
+const formRef = ref()
+// 表单数据
+const formData = ref({})
+const resultList = ref([])
+import qyImg from '@/views/yqyc/zero/enterprise-qualification/qy.png'
+import qySecondLineHzdTzApi from "@/api/yqyc/qySecondLineHzdTzApi";
+
+// 打开抽屉
+const onOpen = (record, view = false) => {
+	open.value = true
+	if (record) {
+		formData.value = Object.assign({}, record)
+		qySecondLineHzdTzApi.qySecondLineHzdTzGetListByHfdId({id: record.id}).then(res => {
+			resultList.value = res
+		})
+	}
+}
+// 关闭抽屉
+const onClose = () => {
+	formRef.value.resetFields()
+	formData.value = {}
+	open.value = false
+}
+// 抛出函数
+defineExpose({
+	onOpen
+})
+</script>
+<style lang="less" scoped>
+.goods-detail {
+	max-height: 800px;
+	overflow-y: auto;
+}
+</style>

+ 2 - 1
snowy-plugin/snowy-plugin-gen/src/main/resources/frontend/detail.vue.btl

@@ -107,7 +107,8 @@
 	import { required } from '@/utils/formRules'
 	import ${classNameFirstLower}Api from '@/api/${moduleName}/${classNameFirstLower}Api'
 	// 抽屉状态
-	const emit = defineEmits({ successful: null })
+    const { proxy } = getCurrentInstance()
+	const emit = defineEmits({ successful: null, onClose: null })
 	const formRef = ref()
 	// 表单数据
 	const formData = ref({})

+ 2 - 0
snowy-plugin/snowy-plugin-gen/src/main/resources/frontend/form.vue.btl

@@ -105,9 +105,11 @@
 	import tool from '@/utils/tool'
 	<% } %>
 	import { cloneDeep } from 'lodash-es'
+
 	import { required } from '@/utils/formRules'
 	import ${classNameFirstLower}Api from '@/api/${moduleName}/${classNameFirstLower}Api'
 	// 抽屉状态
+    const { proxy } = getCurrentInstance()
 	const open = ref(false)
 	const emit = defineEmits({ successful: null })
 	const formRef = ref()