申请用印页面接口对接、入库登记页面接口对接

This commit is contained in:
雷校云
2025-12-18 17:00:35 +08:00
parent c5b3fc166f
commit 0493fdebf2
17 changed files with 1111 additions and 89 deletions

View File

@@ -0,0 +1,46 @@
import request from '@/utils/request'
const AUTH_BASE_URL = '/api2'
/*
* 申请用印
* */
// 新增申请用印
export const BusinessApplication = (data: any) => {
const formData = new FormData()
formData.append('Printingpurpose', data.Printingpurpose)
formData.append('CaseNumber', data.CaseNumber)
formData.append('Reason', data.Reason)
formData.append('seal_number', data.seal_number)
formData.append('seal_type', data.seal_type)
formData.append('file', data.file)
formData.append('personincharge', data.personincharge)
return request({
url: `${AUTH_BASE_URL}/business/application`,
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
// 申请用印展示
export const BusinessApplicationdetail = (data: any) => {
const formData = new FormData()
formData.append('page', data.pageNum)
formData.append('per_page', data.pageSize)
if (data.times && data.times.length) {
formData.append('times', data.times[0])
formData.append('end_time', data.times[1])
}
formData.append('seal_type', data.seal_type)
return request({
url: `${AUTH_BASE_URL}/business/applicationdetail`,
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}

View File

@@ -0,0 +1,44 @@
import request from '@/utils/request'
const AUTH_BASE_URL = '/api2'
/*
* 入库登记
* */
// 新增入库登记
export const BusinessWarehousing = (data: any) => {
const formData = new FormData()
formData.append('unit', data.unit)
formData.append('mark', data.mark)
formData.append('lawyer', data.lawyer)
formData.append('deadline', data.deadline)
formData.append('contract', data.contract)
return request({
url: `${AUTH_BASE_URL}/business/warehousing`,
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
// 入库登记 展示
export const BusinessWarehousingdetail = (data: any) => {
const formData = new FormData()
formData.append('page', data.pageNum)
formData.append('per_page', data.pageSize)
if (data.times && data.times.length) {
formData.append('times', data.times[0])
formData.append('end_time', data.times[1])
}
formData.append('unit', data.unit)
return request({
url: `${AUTH_BASE_URL}/business/warehousingdetail`,
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data'
}
})
}

View File

@@ -224,12 +224,11 @@ export const constantRoutes: RouteRecordRaw[] = [
title: '申请用印',
icon: 'setting'
},
redirect: '/stamp/index',
children: [
{
path: 'index',
name: 'StampApplicationIndex',
component: () => import('@/views/stamp-application/index.vue'),
path: 'applicationForSealApproval',
name: 'ApplicationForSealApproval',
component: () => import('@/views/calibration/applicationForSealApproval/index.vue'),
meta: {
title: '申请用印'
}
@@ -266,12 +265,11 @@ export const constantRoutes: RouteRecordRaw[] = [
title: '入库登记',
icon: 'setting'
},
redirect: '/registration/index',
children: [
{
path: 'index',
name: 'RegistrationIndex',
component: () => import('@/views/registration/index.vue'),
path: 'inventoryRegistration',
name: 'InventoryRegistration',
component: () => import('@/views/calibration/inventoryRegistration/index.vue'),
meta: {
title: '入库登记'
}

View File

@@ -0,0 +1,199 @@
<template>
<div class="pre-registration-form">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="auto"
label-position="top"
>
<el-form-item label="用印用途" prop="Printingpurpose">
<el-select v-model="formData.Printingpurpose" placeholder="请选择">
<el-option
v-for="(item, index) in PrintingpurposeList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="案件编号" prop="CaseNumber">
<el-input v-model="formData.CaseNumber" placeholder="请输入" />
</el-form-item>
<el-form-item label="用印事由" prop="Reason">
<el-input v-model="formData.Reason" placeholder="请输入" />
</el-form-item>
<el-form-item label="盖章份数" prop="seal_number">
<el-input v-model="formData.seal_number" placeholder="请输入" />
</el-form-item>
<el-form-item label="盖着类型" prop="seal_type">
<el-select v-model="formData.seal_type" placeholder="请选择">
<el-option
v-for="(item, index) in seal_typeList"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="用印文件" prop="file">
<el-upload
class="avatar-uploader"
action="#"
:auto-upload="false"
:show-file-list="false"
:on-change="(file) => handleFileSelect(file, 'file')"
:before-upload="handleBeforeUpload"
>
<div v-if="formData.file" class="upload-preview">
<span>{{ formData.file.name }}</span>
<el-button type="danger" size="small" @click.stop="removeFile('file')">删除</el-button>
</div>
<el-button v-else size="small" type="primary">点击选择文件</el-button>
</el-upload>
</el-form-item>
<el-form-item label="代办负责人" prop="personincharge">
<el-select v-model="formData.personincharge" placeholder="请选择">
<el-option
v-for="item in PersoninchargeList"
:key="item.id"
:label="item.username"
:value="item.username"
/>
</el-select>
</el-form-item>
</el-form>
</div>
</template>
<script lang="ts" setup>
import { UserPersonneldisplay } from '@/api/calibration/personnelManagement'
import { ElMessage } from 'element-plus'
const formRef = ref()
// 表单数据
const formData = reactive<any>({
Printingpurpose: '',
CaseNumber: '',
Reason: '',
seal_number: '',
seal_type: '',
file: undefined,
personincharge: ''
})
const PersoninchargeList = ref<any[]>([])
const PrintingpurposeList = ref<any[]>([
{ name: '律师函', value: '律师函' },
{ name: '法律服务协议', value: '法律服务协议' },
{ name: '所函', value: '所函' },
{ name: '介绍信', value: '介绍信' },
{ name: '法律意见书', value: '法律意见书' },
{ name: '致函件', value: '致函件' },
{ name: '投标文件', value: '投标文件' },
{ name: '其他文件', value: '其他文件' },
{ name: '授权委托书', value: '授权委托书' },
{ name: '三方转承协议', value: '三方转承协议' },
{ name: '工作报告', value: '工作报告' },
{ name: '尽调报告', value: '尽调报告' },
{ name: '非业务类用章', value: '非业务类用章' }
])
const seal_typeList = ref<any[]>([
{ name: '公章', value: '公章' },
{ name: '合同章', value: '合同章' },
{ name: '电子公章', value: '电子公章' }
])
const formRules = reactive<any>({
Printingpurpose: [{ required: true, message: '请选择', trigger: 'blur' }],
CaseNumber: [{ required: true, message: '请输入', trigger: 'blur' }],
Reason: [{ required: true, message: '请输入', trigger: 'blur' }],
seal_number: [{ required: true, message: '请输入', trigger: 'blur' }],
seal_type: [{ required: true, message: '请选择', trigger: 'blur' }],
file: [{ required: true, message: '请选择', trigger: 'blur' }],
personincharge: [{ required: true, message: '请选择', trigger: 'blur' }]
})
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
formRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}
function handleBeforeUpload(file: File): boolean {
// 可以在这里添加文件类型和大小的校验
const isLt10M = file.size / 1024 / 1024 < 10
if (!isLt10M) {
ElMessage.error('上传文件大小不能超过 10MB!')
return false
}
return true
}
function removeFile(field: string): void {
formData[field] = undefined
ElMessage.success('文件已删除')
}
const DepartmentList = () => {
UserPersonneldisplay().then((res: any) => {
PersoninchargeList.value = res.data
})
}
onMounted(() => {
DepartmentList()
})
const getForm = () => {
return formData
}
const submit = (): Promise<boolean> => {
return new Promise((resolve, reject) => {
formRef.value?.validate((valid: boolean) => {
if (valid) {
resolve(true)
} else {
ElMessage.error('请完善必填信息')
reject(false)
}
})
})
}
defineExpose({
submit,
getForm
})
</script>
<style scoped lang="scss">
.pre-registration-form {
width: 100%;
padding-right: 20px;
overflow: hidden;
overflow-y: auto;
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-track {
background: transparent;
}
&::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.3);
border-radius: 3px;
}
&::-webkit-scrollbar-thumb:hover {
background: rgba(0, 0, 0, 0.5);
}
}
.section {
display: flex;
flex-direction: column;
gap: 20px;
}
</style>

View File

@@ -0,0 +1,294 @@
<template>
<div class="app-container">
<!-- 搜索区域 -->
<div class="search-container">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item prop="seal_type" label="用印用途">
<el-input
v-model="queryParams.seal_type"
placeholder="请输入"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="创建时间" prop="times">
<el-date-picker
v-model="queryParams.times"
type="daterange"
value-format="YYYY-MM-DD"
placeholder="请选择创建时间"
range-separator=""
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</el-form-item>
<el-form-item class="search-buttons">
<el-button type="primary" icon="search" @click="handleQuery">搜索</el-button>
<el-button icon="refresh" @click="handleResetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<el-card shadow="hover" class="data-table">
<div class="data-table__toolbar">
<div class="data-table__toolbar--actions">
<el-button type="success" icon="plus" @click="handleOpenDialog()">新增</el-button>
<el-button
type="danger"
:disabled="ids.length === 0"
icon="delete"
@click="handleDelete()"
>
删除
</el-button>
</div>
</div>
<el-table
ref="dataTableRef"
v-loading="loading"
:data="roleList"
highlight-current-row
border
class="data-table__content"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="用印用途" prop="Printingpurpose" />
<el-table-column label="案件编号" prop="CaseNumber" />
<el-table-column label="用印事由" prop="Reason" />
<el-table-column label="盖章份数" prop="seal_number" />
<el-table-column label="盖着类型" prop="seal_type" />
<el-table-column label="用印文件" prop="file">
<template #default="{ row }">
<el-link
v-if="row.file && isValidJson(row.file)"
:href="getFileInfo(row.file)?.url"
target="_blank"
>
{{ getFileInfo(row.file)?.name }}
</el-link>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="状态" prop="state" />
<el-table-column label="时间" prop="times" />
<el-table-column fixed="right" label="操作" width="140">
<template #default="scope">
<el-button
type="primary"
size="small"
link
icon="edit"
@click="handleOpenDialog(scope.row.id)"
>
编辑
</el-button>
<el-button
type="danger"
size="small"
link
icon="delete"
@click="onUserDeleteDepartment(scope.row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="fetchData"
/>
</el-card>
</div>
</template>
<script setup lang="ts">
import RoleAPI, { RolePageVO } from '@/api/system/role-api'
import { UserDeleteDepartment } from '@/api/calibration/department'
import { UserPersonneldisplay } from '@/api/calibration/personnelManagement'
import { functionDialogBox } from '@/utils/functionDialogBox'
import StampingForm from './components/StampingForm.vue'
import { getFileInfo, isValidJson } from '@/utils/auxiliaryFunction'
import {
BusinessApplication,
BusinessApplicationdetail
} from '@/api/calibration/applicationForSealApproval'
defineOptions({
name: 'Role',
inheritAttrs: false
})
const queryFormRef = ref()
const loading = ref(false)
const ids = ref<number[]>([])
const total = ref(0)
const personinchargeList = ref<any[]>([])
const queryParams = reactive<any>({
pageNum: 1,
pageSize: 10,
times: [],
seal_type: ''
})
// 表格数据
const roleList = ref<RolePageVO[]>()
// 弹窗
const dialog = reactive({
title: '',
visible: false
})
// 获取数据
function fetchData() {
loading.value = true
BusinessApplicationdetail(queryParams)
.then((res: any) => {
roleList.value = res.data
total.value = res.total
})
.finally(() => {
loading.value = false
})
}
// 查询(重置页码后获取数据)
function handleQuery() {
queryParams.pageNum = 1
fetchData()
}
// 重置查询
function handleResetQuery() {
if (queryFormRef.value) queryFormRef.value.resetFields()
queryParams.pageNum = 1
fetchData()
}
// 行复选框选中
function handleSelectionChange(selection: any) {
ids.value = selection.map((item: any) => item.id)
}
// 打开角色弹窗
function handleOpenDialog(roleId?: string) {
dialog.visible = true
if (roleId) {
functionDialogBox(
StampingForm,
{},
{
title: '编辑申请用印',
width: '900',
ok(value: any) {
console.log('value', value)
}
// cancel() {
// console.log("value");
// },
}
)
} else {
functionDialogBox(
StampingForm,
{},
{
title: '新增申请用印',
width: '900',
ok(value: any) {
handleSubmit(value)
}
}
)
}
}
// 提交角色表单
function handleSubmit(data: any) {
loading.value = true
const roleId = data.id
if (roleId) {
// RoleAPI.update(roleId, formData)
// .then(() => {
// ElMessage.success('修改成功')
// handleCloseDialog()
// handleResetQuery()
// })
// .finally(() => (loading.value = false))
} else {
BusinessApplication(data)
.then(() => {
ElMessage.success('新增成功')
handleResetQuery()
})
.finally(() => (loading.value = false))
}
}
const onUserDeleteDepartment = (id: string) => {
ElMessageBox.confirm('确认删除已选中的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(
() => {
loading.value = true
UserDeleteDepartment(id)
.then(() => {
ElMessage.success('删除成功')
handleResetQuery()
})
.finally(() => (loading.value = false))
},
() => {
ElMessage.info('已取消删除')
}
)
}
// 删除角色
function handleDelete(roleId?: number) {
const roleIds = [roleId || ids.value].join(',')
if (!roleIds) {
ElMessage.warning('请勾选删除项')
return
}
ElMessageBox.confirm('确认删除已选中的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(
() => {
loading.value = true
RoleAPI.deleteByIds(roleIds)
.then(() => {
ElMessage.success('删除成功')
handleResetQuery()
})
.finally(() => (loading.value = false))
},
() => {
ElMessage.info('已取消删除')
}
)
}
const DepartmentList = () => {
UserPersonneldisplay().then((res: any) => {
personinchargeList.value = res.data
})
}
onMounted(() => {
handleQuery()
DepartmentList()
})
</script>

View File

@@ -84,11 +84,6 @@
<el-button v-else size="small" type="primary">点击选择文件</el-button>
</el-upload>
</el-form-item>
<!-- 提交按钮 -->
<!-- <div class="form-actions">-->
<!-- <el-button type="primary" @click="handleSubmit">提交</el-button>-->
<!-- <el-button @click="handleSaveDraft">暂存</el-button>-->
<!-- </div>-->
</el-form>
</div>
</template>
@@ -99,6 +94,13 @@ import { ElMessage } from 'element-plus'
import { BusinessProjectquerytype } from '@/api/calibration/conflictOfInterestSearch'
import { BusinessRegistrationlist } from '@/api/calibration/preRegistration'
const props = defineProps({
data: {
type: Object,
default: () => ({})
}
})
const typeList = [
{ name: '法律顾问', value: '顾' },
{ name: '专项服务', value: '专' },
@@ -140,7 +142,6 @@ const formRules = reactive<any>({
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
console.log(formData[field])
formRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}
@@ -187,11 +188,39 @@ const onBusinessRegistrationlist = () => {
})
}
const setFormData = (data: any) => {
if (data) {
Object.keys(formData).forEach((key) => {
if (Object.prototype.hasOwnProperty.call(data, key)) {
formData[key as keyof typeof formData] = data[key]
}
})
}
}
onMounted(() => {
onBusinessRegistrationlist()
DepartmentList()
console.log(props.data)
setFormData(props.data)
})
// watch(
// () => props.data,
// (newValue) => {
// // type: '',
// // ContractNo: '',
// // times: '',
// // responsiblefor: '',
// // charge: '',
// // contract: undefined,
// // personincharge: '',
// // user_id: ''
// console.log(newValue)
// },
// { immediate: true }
// )
const getForm = () => {
return formData
}

View File

@@ -3,7 +3,7 @@
<div class="app-container">
<!-- 搜索区域 -->
<div class="search-container">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="auto">
<el-form ref="queryFormRef" :model="searchs" :inline="true" label-width="auto">
<el-form-item label="委托人信息" prop="client_username">
<el-input
v-model="searchs.client_username"
@@ -41,7 +41,7 @@
row-key="id"
@selection-change="handleSelectionChange"
>
<el-table-column label="委托人信息" prop="client_username">
<el-table-column label="委托人信息" align="center" prop="client_username">
<el-table-column v-slot="{ row }" prop="client_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.client_username)
@@ -57,7 +57,7 @@
}}
</el-table-column>
</el-table-column>
<el-table-column label="相对方信息" prop="party_username">
<el-table-column label="相对方信息" align="center" prop="party_username">
<el-table-column v-slot="{ row }" prop="party_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.party_username)
@@ -97,7 +97,7 @@
icon="edit"
size="small"
link
@click="handleResetPassword(scope.row)"
@click="handleOpenDialog(scope.row)"
>
编辑
</el-button>
@@ -127,7 +127,7 @@
row-key="id"
@selection-change="handleSelectionChange"
>
<el-table-column label="委托人信息" prop="client_username">
<el-table-column label="委托人信息" align="center" prop="client_username">
<el-table-column v-slot="{ row }" prop="client_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.client_username)
@@ -143,7 +143,7 @@
}}
</el-table-column>
</el-table-column>
<el-table-column label="相对方信息" prop="party_username">
<el-table-column label="相对方信息" align="center" prop="party_username">
<el-table-column v-slot="{ row }" prop="party_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.party_username)
@@ -338,68 +338,36 @@ function handleResetPassword(row: UserPageVO): void {
})
}
// ==================== 弹窗操作 ====================
async function handleOpenDialog(): Promise<void> {
// dialog.visible = true
// dialog.title = titleString
//
// // 并行加载下拉选项数据
// try {
// ;[roleOptions.value, deptOptions.value] = await Promise.all([
// RoleAPI.getOptions(),
// DeptAPI.getOptions()
// ])
// } catch (error) {
// ElMessage.error('加载选项数据失败')
// console.error('加载选项数据失败:', error)
// }
//
// // 编辑:加载用户数据
// if (id) {
// try {
// const data = await UserAPI.getFormData(id)
// Object.assign(formData, data)
// } catch (error) {
// ElMessage.error('加载用户数据失败')
// console.error('加载用户数据失败:', error)
// }
// }
functionDialogBox(
BusinessProjectForm,
{},
{
title: '新增立案登记',
width: '900',
ok(value: any) {
handleSubmit(value)
function handleOpenDialog(data: any = null) {
if (data) {
functionDialogBox(
BusinessProjectForm,
{
data
},
{
title: '编辑立案登记',
width: '900',
ok(value: any) {
handleSubmit(value)
}
}
}
)
)
} else {
functionDialogBox(
BusinessProjectForm,
{},
{
title: '新增立案登记',
width: '900',
ok(value: any) {
handleSubmit(value)
}
}
)
}
}
async function handleOpenDialog2(): Promise<void> {
// dialog.visible = true
// dialog.title = titleString
//
// // 并行加载下拉选项数据
// try {
// ;[roleOptions.value, deptOptions.value] = await Promise.all([
// RoleAPI.getOptions(),
// DeptAPI.getOptions()
// ])
// } catch (error) {
// ElMessage.error('加载选项数据失败')
// console.error('加载选项数据失败:', error)
// }
//
// // 编辑:加载用户数据
// if (id) {
// try {
// const data = await UserAPI.getFormData(id)
// Object.assign(formData, data)
// } catch (error) {
// ElMessage.error('加载用户数据失败')
// console.error('加载用户数据失败:', error)
// }
// }
functionDialogBox(
BidRegistrationForm,
{},

View File

@@ -52,7 +52,7 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="委托人信息" prop="client_username">
<el-table-column label="委托人信息" align="center" prop="client_username">
<el-table-column v-slot="{ row }" prop="client_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.client_username)
@@ -68,7 +68,7 @@
}}
</el-table-column>
</el-table-column>
<el-table-column label="相对方信息" prop="party_username">
<el-table-column label="相对方信息" align="center" prop="party_username">
<el-table-column v-slot="{ row }" prop="party_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.party_username)

View File

@@ -48,7 +48,6 @@ const formRules = reactive<any>({
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
console.log(formData[field])
formRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}

View File

@@ -48,7 +48,6 @@ const formRules = reactive<any>({
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
console.log(formData[field])
formRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}

View File

@@ -146,7 +146,6 @@ const formRules = reactive<any>({
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
console.log(formData[field])
formRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}

View File

@@ -91,7 +91,7 @@
</el-table-column>
<el-table-column label="变更申请" prop="ChangeRequest" />
<el-table-column label="已收款" prop="paymentcollection" />
<el-table-column label="委托人信息" prop="client_username">
<el-table-column label="委托人信息" align="center" prop="client_username">
<el-table-column v-slot="{ row }" prop="client_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.client_username)
@@ -107,7 +107,7 @@
}}
</el-table-column>
</el-table-column>
<el-table-column label="相对方信息" prop="party_username">
<el-table-column label="相对方信息" align="center" prop="party_username">
<el-table-column v-slot="{ row }" prop="party_username" label="自然人姓名/法人名称">
{{
JSON.parse(row.party_username)

View File

@@ -823,7 +823,6 @@ function handleDelete(id?: string | number): void {
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
console.log(formData[field])
userFormRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}

View File

@@ -0,0 +1,158 @@
<template>
<div class="pre-registration-form">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="auto"
label-position="top"
>
<el-form-item label="单位" prop="unit">
<el-input v-model="formData.unit" placeholder="请输入" />
</el-form-item>
<el-form-item label="入库标的" prop="mark">
<el-input v-model="formData.mark" placeholder="请输入" />
</el-form-item>
<el-form-item label="主办律师" prop="lawyer">
<el-select v-model="formData.lawyer" placeholder="请选择">
<el-option
v-for="item in PersoninchargeList"
:key="item.id"
:label="item.username"
:value="item.username"
/>
</el-select>
</el-form-item>
<el-form-item label="入库期限" prop="deadline">
<el-input v-model="formData.deadline" placeholder="请输入" />
</el-form-item>
<el-form-item label="入库合同" prop="contract">
<el-upload
class="avatar-uploader"
action="#"
:auto-upload="false"
:show-file-list="false"
:on-change="(file) => handleFileSelect(file, 'contract')"
:before-upload="handleBeforeUpload"
>
<div v-if="formData.contract" class="upload-preview">
<span>{{ formData.contract.name }}</span>
<el-button type="danger" size="small" @click.stop="removeFile('contract')">
删除
</el-button>
</div>
<el-button v-else size="small" type="primary">点击选择文件</el-button>
</el-upload>
</el-form-item>
</el-form>
</div>
</template>
<script lang="ts" setup>
import { UserPersonneldisplay } from '@/api/calibration/personnelManagement'
import { ElMessage } from 'element-plus'
const formRef = ref()
// 表单数据
const formData = reactive<any>({
unit: '',
mark: '',
lawyer: '',
deadline: '',
contract: undefined
})
const PersoninchargeList = ref<any[]>([])
const formRules = reactive<any>({
unit: [{ required: true, message: '请输入', trigger: 'blur' }],
mark: [{ required: true, message: '请输入', trigger: 'blur' }],
lawyer: [{ required: true, message: '请选择', trigger: 'blur' }],
deadline: [{ required: true, message: '请输入', trigger: 'blur' }],
contract: [{ required: true, message: '请选择', trigger: 'blur' }]
})
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
formRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}
function handleBeforeUpload(file: File): boolean {
// 可以在这里添加文件类型和大小的校验
const isLt10M = file.size / 1024 / 1024 < 10
if (!isLt10M) {
ElMessage.error('上传文件大小不能超过 10MB!')
return false
}
return true
}
function removeFile(field: string): void {
formData[field] = undefined
ElMessage.success('文件已删除')
}
const DepartmentList = () => {
UserPersonneldisplay().then((res: any) => {
PersoninchargeList.value = res.data
})
}
onMounted(() => {
DepartmentList()
})
const getForm = () => {
return formData
}
const submit = (): Promise<boolean> => {
return new Promise((resolve, reject) => {
formRef.value?.validate((valid: boolean) => {
if (valid) {
resolve(true)
} else {
ElMessage.error('请完善必填信息')
reject(false)
}
})
})
}
defineExpose({
submit,
getForm
})
</script>
<style scoped lang="scss">
.pre-registration-form {
width: 100%;
padding-right: 20px;
overflow: hidden;
overflow-y: auto;
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-track {
background: transparent;
}
&::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.3);
border-radius: 3px;
}
&::-webkit-scrollbar-thumb:hover {
background: rgba(0, 0, 0, 0.5);
}
}
.section {
display: flex;
flex-direction: column;
gap: 20px;
}
</style>

View File

@@ -0,0 +1,292 @@
<template>
<div class="app-container">
<!-- 搜索区域 -->
<div class="search-container">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item prop="unit" label="单位">
<el-input
v-model="queryParams.unit"
placeholder="请输入"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="创建时间" prop="times">
<el-date-picker
v-model="queryParams.times"
type="daterange"
value-format="YYYY-MM-DD"
placeholder="请选择创建时间"
range-separator=""
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</el-form-item>
<el-form-item class="search-buttons">
<el-button type="primary" icon="search" @click="handleQuery">搜索</el-button>
<el-button icon="refresh" @click="handleResetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<el-card shadow="hover" class="data-table">
<div class="data-table__toolbar">
<div class="data-table__toolbar--actions">
<el-button type="success" icon="plus" @click="handleOpenDialog()">新增</el-button>
<el-button
type="danger"
:disabled="ids.length === 0"
icon="delete"
@click="handleDelete()"
>
删除
</el-button>
</div>
</div>
<el-table
ref="dataTableRef"
v-loading="loading"
:data="roleList"
highlight-current-row
border
class="data-table__content"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="单位" prop="unit" />
<el-table-column label="入库标的" prop="mark" />
<el-table-column label="主办律师" prop="lawyer" />
<el-table-column label="入库期限" prop="deadline" />
<el-table-column label="用印文件" prop="contract">
<template #default="{ row }">
<el-link
v-if="row.contract && isValidJson(row.contract)"
:href="getFileInfo(row.contract)?.url"
target="_blank"
>
{{ getFileInfo(row.contract)?.name }}
</el-link>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="时间" prop="times" />
<el-table-column fixed="right" label="操作" width="140">
<template #default="scope">
<el-button
type="primary"
size="small"
link
icon="edit"
@click="handleOpenDialog(scope.row.id)"
>
编辑
</el-button>
<el-button
type="danger"
size="small"
link
icon="delete"
@click="onUserDeleteDepartment(scope.row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="fetchData"
/>
</el-card>
</div>
</template>
<script setup lang="ts">
import RoleAPI, { RolePageVO } from '@/api/system/role-api'
import { UserDeleteDepartment } from '@/api/calibration/department'
import { UserPersonneldisplay } from '@/api/calibration/personnelManagement'
import { functionDialogBox } from '@/utils/functionDialogBox'
import StampingForm from './components/StampingForm.vue'
import { getFileInfo, isValidJson } from '@/utils/auxiliaryFunction'
import {
BusinessWarehousing,
BusinessWarehousingdetail
} from '@/api/calibration/inventoryRegistration'
defineOptions({
name: 'Role',
inheritAttrs: false
})
const queryFormRef = ref()
const loading = ref(false)
const ids = ref<number[]>([])
const total = ref(0)
const personinchargeList = ref<any[]>([])
const queryParams = reactive<any>({
pageNum: 1,
pageSize: 10,
times: [],
unit: ''
})
// 表格数据
const roleList = ref<RolePageVO[]>()
// 弹窗
const dialog = reactive({
title: '',
visible: false
})
// 获取数据
function fetchData() {
loading.value = true
BusinessWarehousingdetail(queryParams)
.then((res: any) => {
roleList.value = res.data
total.value = res.total
})
.finally(() => {
loading.value = false
})
}
// 查询(重置页码后获取数据)
function handleQuery() {
queryParams.pageNum = 1
fetchData()
}
// 重置查询
function handleResetQuery() {
if (queryFormRef.value) queryFormRef.value.resetFields()
queryParams.pageNum = 1
fetchData()
}
// 行复选框选中
function handleSelectionChange(selection: any) {
ids.value = selection.map((item: any) => item.id)
}
// 打开角色弹窗
function handleOpenDialog(roleId?: string) {
dialog.visible = true
if (roleId) {
functionDialogBox(
StampingForm,
{},
{
title: '编辑申请用印',
width: '900',
ok(value: any) {
console.log('value', value)
}
// cancel() {
// console.log("value");
// },
}
)
} else {
functionDialogBox(
StampingForm,
{},
{
title: '新增申请用印',
width: '900',
ok(value: any) {
handleSubmit(value)
}
}
)
}
}
// 提交角色表单
function handleSubmit(data: any) {
loading.value = true
const roleId = data.id
if (roleId) {
// RoleAPI.update(roleId, formData)
// .then(() => {
// ElMessage.success('修改成功')
// handleCloseDialog()
// handleResetQuery()
// })
// .finally(() => (loading.value = false))
} else {
BusinessWarehousing(data)
.then(() => {
ElMessage.success('新增成功')
handleResetQuery()
})
.finally(() => (loading.value = false))
}
}
const onUserDeleteDepartment = (id: string) => {
ElMessageBox.confirm('确认删除已选中的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(
() => {
loading.value = true
UserDeleteDepartment(id)
.then(() => {
ElMessage.success('删除成功')
handleResetQuery()
})
.finally(() => (loading.value = false))
},
() => {
ElMessage.info('已取消删除')
}
)
}
// 删除角色
function handleDelete(roleId?: number) {
const roleIds = [roleId || ids.value].join(',')
if (!roleIds) {
ElMessage.warning('请勾选删除项')
return
}
ElMessageBox.confirm('确认删除已选中的数据项?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(
() => {
loading.value = true
RoleAPI.deleteByIds(roleIds)
.then(() => {
ElMessage.success('删除成功')
handleResetQuery()
})
.finally(() => (loading.value = false))
},
() => {
ElMessage.info('已取消删除')
}
)
}
const DepartmentList = () => {
UserPersonneldisplay().then((res: any) => {
personinchargeList.value = res.data
})
}
onMounted(() => {
handleQuery()
DepartmentList()
})
</script>

View File

@@ -877,7 +877,6 @@ function handleDelete(id?: string | number): void {
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
console.log(formData[field])
userFormRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}

View File

@@ -823,7 +823,6 @@ function handleDelete(id?: string | number): void {
function handleFileSelect(file: any, field: string): void {
// 将文件对象保存到表单数据中
formData[field] = file.raw // file.raw 是实际的 File 对象
console.log(formData[field])
userFormRef.value.clearValidate(field)
ElMessage.success('文件选择成功')
}