This commit is contained in:
lonewolfyx 2025-01-08 16:15:16 +08:00
parent cc77824dc9
commit aee3851c90
10 changed files with 1074 additions and 558 deletions

View File

@ -44,6 +44,7 @@
"mitt": "^3.0.1", "mitt": "^3.0.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.1.7", "pinia": "^2.1.7",
"print-js": "^1.6.0",
"tippy.js": "^6.3.7", "tippy.js": "^6.3.7",
"vue": "^3.5.5", "vue": "^3.5.5",
"vue-cropper": "^1.1.1", "vue-cropper": "^1.1.1",

303
public/print.css Normal file
View File

@ -0,0 +1,303 @@
/* stylelint-disable */
html,
body {
width: 100%;
height: 100%;
}
input::-ms-clear,
input::-ms-reveal {
display: none;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
@-ms-viewport {
width: device-width;
}
body {
margin: 0;
}
[tabindex='-1']:focus {
outline: none;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin-top: 0;
margin-bottom: 0.5em;
font-weight: 500;
}
p {
margin-top: 0;
margin-bottom: 1em;
}
abbr[title],
abbr[data-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline;
text-decoration: underline dotted;
border-bottom: 0;
cursor: help;
}
address {
margin-bottom: 1em;
font-style: normal;
line-height: inherit;
}
input[type='text'],
input[type='password'],
input[type='number'],
textarea {
-webkit-appearance: none;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1em;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 500;
}
dd {
margin-bottom: 0.5em;
margin-left: 0;
}
blockquote {
margin: 0 0 1em;
}
dfn {
font-style: italic;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
pre,
code,
kbd,
samp {
font-size: 1em;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
}
pre {
margin-top: 0;
margin-bottom: 1em;
overflow: auto;
}
figure {
margin: 0 0 1em;
}
img {
vertical-align: middle;
border-style: none;
}
a,
area,
button,
[role='button'],
input:not([type='range']),
label,
select,
summary,
textarea {
touch-action: manipulation;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75em;
padding-bottom: 0.3em;
text-align: left;
caption-side: bottom;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
color: inherit;
font-size: inherit;
font-family: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html [type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type='radio'],
input[type='checkbox'] {
box-sizing: border-box;
padding: 0;
}
input[type='date'],
input[type='time'],
input[type='datetime-local'],
input[type='month'] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
margin: 0;
padding: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
margin-bottom: 0.5em;
padding: 0;
color: inherit;
font-size: 1.5em;
line-height: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
height: auto;
}
[type='search'] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type='search']::-webkit-search-cancel-button,
[type='search']::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
mark {
padding: 0.2em;
background-color: #feffe6;
}

View File

@ -1,237 +0,0 @@
<template>
<el-drawer
v-model="isShow"
size="50%"
:append-to-body="true"
:destroy-on-close="true"
@close="closeHandle"
:close-on-press-escape="false"
:close-on-click-modal="false"
:show-close="false"
>
<template #header="{ close, titleId, titleClass }">
<h4 :id="titleId" :class="titleClass">{{ title }}</h4>
</template>
<el-form :model="form" label-width="auto" label-position="right" ref="formRef" :rules="rules" v-loading="loading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="上访人" required prop="name">
<el-input v-model="form.name" :disabled="form.name !== ''" placeholder="请输入案件名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电话" required prop="Tel">
<el-input v-model="form.Tel" placeholder="请输入上访人电话"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号" required prop="idcard">
<el-input v-model="form.idcard" placeholder="请输入身份证号"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工作单位">
<el-input v-model="form.danwei" placeholder="请输入案件名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="家庭地址">
<el-input v-model="form.address" placeholder="请输入案件名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="重点人员" required prop="name">
<el-radio-group v-model="form.radio">
<el-radio-button label="是" value="yes" />
<el-radio-button label="否" value="no" />
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="来访类型" required prop="name">
<el-select v-model="form.casetype" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="级别" required prop="name">
<el-select v-model="form.level" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="相关领域" required prop="name">
<el-select v-model="form.fields" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="答复形式" required prop="name">
<el-select v-model="form.ResponseFormat" clearable>
<el-option
v-for="item in nj_anjian_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="反映事项" required prop="ReflectionMatters">
<el-input
v-model="form.ReflectionMatters"
:rows="3"
type="textarea"
:autosize="false"
resize="none"
placeholder="请输入来访人员反映事项"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="处理情况" required prop="HandlingSituation">
<el-input
v-model="form.HandlingSituation"
:rows="3"
type="textarea"
:autosize="false"
resize="none"
placeholder="请输入处理情况"
/>
</el-form-item>
</el-col>
<el-divider></el-divider> <!-- 普通分割线 -->
<el-col :span="24">
<p class="mt-2 mb-2" style="color:#1388F5;font-weight: bold">历史来访信息</p>
</el-col>
<el-col :span="24" style="width:100%">
<!-- 表格区域 两种方式一种弹框显示一种是下拉显示 -->
<!-- <AddEditRegistVisitTable ref="AddEditRegistVisitTableRef" /> -->
<collapseTbale ref="collapseRef" />
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button type="primary" @click="submitHandle">提交</el-button>
<el-button @click="isShow = false">关闭</el-button>
</template>
</el-drawer>
</template>
<script setup>
import {getCurrentInstance} from "vue";
const {proxy} = getCurrentInstance()
import AddEditRegistVisitTable from "./AddEditRegistVisitTable.vue"; //
import collapseTbale from "./collapseTbale.vue"; //
import {validateIdCard,validatePhoneNumber} from "@/validate/validateIdCard.js";
const {nj_anjian_type,nj_anjian_status } = proxy.useDict('nj_anjian_type','nj_anjian_status')
//
const isShow = ref(false)
const loading = ref(false)
//
const title = ref('')
const rules = {
name: [{ required: true, message: "案件名称不能为空", trigger: "blur" }],
//
Tel: [
{required: true, message: '请填写手机号', trigger: 'blur'},
{validator: validatePhoneNumber, trigger: 'blur'}
],
//
idcard: [
{required: true, message: '请填写身份证号', trigger: 'blur'},
{validator: validateIdCard, trigger: 'blur'}
],
casetype: [{ required: true, message: "来访类型不能为空", trigger: "blur" }],
level: [{ required: true, message: "级别不能为空", trigger: "blur" }],
fields: [{ required: true, message: "相关领域不能为空", trigger: "change" }],
ResponseFormat: [{ required: true, message: "答复形式不能为空", trigger: "change" }],
ReflectionMatters: [{ required: true, message: "反映事项不能为空", trigger: "change" }],
HandlingSituation: [{ required: true, message: "处理情况不能为空", trigger: "change" }],
}
const isAdd = ref(false)
const form = ref({
name:'哈哈哈',
radio:'no'
})
//
const emit = defineEmits(['getList'])
const changeShowStatus = () => {
isShow.value = !isShow.value
}
onMounted(() => {
})
const showAddCase = () => {
title.value = '来访登记';
isAdd.value = true
changeShowStatus()
}
const showEditCase = async (data) => {
title.value = '修改案件信息'
changeShowStatus()
}
defineExpose({showAddCase,showEditCase})
const submitHandle = async () => {
proxy.$refs["formRef"].validate(valid => {
if (valid) {
// if (form.value['caseCaseinfoId']) {
// editCaseInfo(form.value).then(res => {
// changeShowStatus()
// emit('getList', '')
// })
// } else {
// createCaseInfo(form.value).then(res => {
// changeShowStatus()
// emit('getList', '')
// })
// }
}
});
}
//
const closeHandle = () => {
console.log(123123)
emit('getList','123')
}
</script>
<style lang="scss" scoped>
h4{margin:0;}
.el-divider--horizontal{margin:0}
:deep().el-descriptions__label{width:15%}
:deep().el-descriptions__content{width:35%}
</style>

View File

@ -1,85 +0,0 @@
<template>
<el-table
ref="CaseTableRef"
v-loading="loading"
:data="CaseTables"
show-overflow-tooltip
>
<el-table-column label="时间" prop="name" />
<el-table-column label="单位" prop="unitname" />
<el-table-column label="接待人" prop="casetype" />
<el-table-column label="答复形式" prop="unitname" />
<el-table-column label="级别" prop="state">
<template #default="scope">
<dict-tag :options="nj_anjian_status" :value="scope.row.state" />
</template>
</el-table-column>
<el-table-column label="反映事项" prop="depname"/>
<el-table-column label="处理情况" prop="depname"/>
<el-table-column fixed="right" align="center" label="操作" width="80">
<template #default="scope">
<el-button link size="small" type="warning" @click="VisitingHistoryInfoRef.showEditCase(scope.row)">
<el-icon class="me-1">
<Edit />
</el-icon>
详情
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
v-show="total > 0"
:total="total"
v-model:page="paging.pageNum"
v-model:limit="paging.pageSize"
@pagination="getLists"
/>
<VisitingHistoryInfo ref="VisitingHistoryInfoRef" />
</template>
<script setup>
import {getCurrentInstance} from "vue";
const {proxy} = getCurrentInstance()
import PageEnum from "@/enum/PageEnum.js";
import VisitingHistoryInfo from "./VisitingHistoryInfo.vue";
const {nj_anjian_type,nj_anjian_status } = proxy.useDict('nj_anjian_type','nj_anjian_status')
const loading = ref(false);
const VisitingHistoryInfoRef = ref();
const paging = ref({
pageNum: 1,
pageSize: PageEnum.SIZE,
});
const queryParams = ref({
name: "",
casecode: "",
brief: "",
state: "1,2",
});
const total = ref(0);
const CaseTables = ref([
{
name: "1",
depname:'啊啊后阿达说的啊啊后阿达说的阿萨德啊啊后阿达说的阿萨德啊啊后阿达说的阿萨德啊啊后阿达说的阿萨德阿萨德'
},
{
name: "2",
},
]);
//
const getLists = async () => {
// loading.value = true
// await getCaseInfoList(queryParams.value, paging.value).then(res => {
// CaseTables.value = res.rows
// total.value = res.total
// loading.value = false
// })
};
//
const GetInfo = async (row) => {
console.log(row)
};
</script>

View File

@ -60,6 +60,51 @@
<el-input placeholder="请填写上访人工作单位或住址" v-model="queryParams.visitorContact"/> <el-input placeholder="请填写上访人工作单位或住址" v-model="queryParams.visitorContact"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="性别">
<el-select
v-model="queryParams.visitorSex"
placeholder="请选择性别"
>
<el-option
v-for="item in sys_user_sex"
:label="item.label"
:value="item.value"
:key="item.label"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="学历">
<el-select
v-model="queryParams.visitorDegree"
placeholder="请选择学历"
>
<el-option
v-for="item in people_degree"
:label="item.label"
:value="item.value"
:key="item.label"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="来源">
<el-input placeholder="请填写来源" v-model="queryParams.source"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年龄">
<el-input placeholder="请填写年龄" type="number" :min="1" v-model="queryParams.visitorAge"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="联系住址">
<el-input placeholder="请填写联系住址" v-model="queryParams.visitorAddress"/>
</el-form-item>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="19"> <el-col :span="19">
@ -213,7 +258,9 @@ const {
visit_reply_type, visit_reply_type,
visit_field, visit_field,
visit_type, visit_type,
} = proxy.useDict('boolean_yes_no', 'visit_level', 'visit_field', 'visit_type', 'visit_reply_type') sys_user_sex,
people_degree
} = proxy.useDict('boolean_yes_no', 'visit_level', 'visit_field', 'visit_type', 'visit_reply_type', 'sys_user_sex', 'people_degree')
const emit = defineEmits(['refresh']) const emit = defineEmits(['refresh'])
@ -254,7 +301,17 @@ const defaultParams = {
// //
isKeyPerson: '1', isKeyPerson: '1',
// //
level: '' level: '',
//
visitorSex: '',
//
visitorDegree: '',
//
source: '',
//
visitorAge: '',
//
visitorAddress: ''
} }
const queryParams = ref({...defaultParams}) const queryParams = ref({...defaultParams})
const registerList = ref([]) const registerList = ref([])

View File

@ -1,123 +0,0 @@
<template>
<el-drawer
v-model="isShow"
size="40%"
:destroy-on-close="true"
@close="closeHandle"
:show-close="false"
>
<!-- :direction="'ltr'" 在左侧打开 -->
<template #header="{ close, titleId, titleClass }">
<h4 :id="titleId" :class="titleClass">{{ title }}</h4>
</template>
<el-form :model="form" label-width="auto" label-position="right" ref="formRef" v-loading="loading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="时间">
<el-input v-model="form.name" readonly="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位">
<el-input v-model="form.Tel" readonly="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="接待人">
<el-input v-model="form.idcard" readonly="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="答复形式">
<el-input v-model="form.danwei" readonly="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="级别">
<el-input v-model="form.address" readonly="true"/>
</el-form-item>
</el-col>
<el-col :span="12">
</el-col>
<el-col :span="12">
<el-form-item label="反映事项">
<el-input
v-model="form.ReflectionMatters"
:rows="6"
type="textarea"
:autosize="false"
resize="none"
placeholder=""
readonly="true"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="处理情况">
<el-input
v-model="form.HandlingSituation"
:rows="6"
type="textarea"
:autosize="false"
resize="none"
placeholder=""
readonly="true"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="isShow = false">关闭</el-button>
</template>
</el-drawer>
</template>
<script setup>
import {getCurrentInstance} from "vue";
const {proxy} = getCurrentInstance()
const {nj_anjian_type,nj_anjian_status } = proxy.useDict('nj_anjian_type','nj_anjian_status')
//
const isShow = ref(false)
const loading = ref(false)
//
const title = ref('')
const form = ref({
name:'2024-12-12',
})
//
const emit = defineEmits(['getList'])
const changeShowStatus = () => {
isShow.value = !isShow.value
}
onMounted(() => {
})
const showEditCase = async (data) => {
title.value = '来访历史详情'
changeShowStatus()
}
defineExpose({showEditCase})
//
const closeHandle = () => {
console.log(123123)
emit('getList','123')
}
</script>
<style lang="scss" scoped>
h4{margin:0;}
.el-divider--horizontal{margin:0}
:deep().el-descriptions__label{width:15%}
:deep().el-descriptions__content{width:35%}
</style>

View File

@ -1,102 +0,0 @@
<template>
<el-collapse accordion >
<el-collapse-item v-for="(item, index) in CaseTables" :key="index" :name="String(index + 1)" >
<template #title>
<el-row style="width:100%;text-align: left;font-size: 16px;" :gutter="20">
<el-col :span="5">日期{{ item.date }}</el-col>
<el-col :span="7" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;">
<el-tooltip content="昆山市人昆山市人民检察院民检察院" placement="top">
<span>单位:昆山市人民检察院</span>
</el-tooltip>
</el-col>
<el-col :span="5">接待人:张毅{{ item.name }}</el-col>
<el-col :span="4">答复形式:</el-col>
<el-col :span="3">级别:L0</el-col>
</el-row>
</template>
<div>
<el-form :model="form" class="mt-3" label-width="80px" label-position="right" ref="formRef" v-loading="loading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="时间">
<el-input v-model="form.name" :readonly="readonly" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位">
<el-input v-model="form.Tel" :readonly="readonly" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="接待人">
<el-input v-model="form.idcard" :readonly="readonly" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="答复形式">
<el-input v-model="form.danwei" :readonly="readonly" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="级别">
<el-input v-model="form.address" :readonly="readonly"/>
</el-form-item>
</el-col>
<el-col :span="12">
</el-col>
<el-col :span="12">
<el-form-item label="反映事项">
<el-input
v-model="form.ReflectionMatters"
:rows="6"
type="textarea"
:autosize="false"
resize="none"
placeholder=""
:readonly="readonly"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="处理情况">
<el-input
v-model="form.HandlingSituation"
:rows="6"
type="textarea"
:autosize="false"
resize="none"
placeholder=""
:readonly="readonly"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</el-collapse-item>
</el-collapse>
</template>
<script setup>
import {getCurrentInstance} from "vue";
const {proxy} = getCurrentInstance()
const loading = ref(false)
const readonly = ref(true)
const form = ref({
name:'哈哈哈',
radio:'no'
})
const CaseTables = ref([
{
date:'2020-12-12',
name: "1",
depname:'啊啊后阿达说的啊啊后阿达说的阿萨德啊啊后阿达说的阿萨德啊啊后阿达说的阿萨德啊啊后阿达说的阿萨德阿萨德'
},
{
date:'2024-11-01',
name: "2",
},
]);
</script>

View File

@ -5,8 +5,26 @@
:inline="true" :inline="true"
:model="queryParams" :model="queryParams"
> >
<el-form-item label="上访人" prop="name"> <el-form-item label="上访人" prop="visitorName">
<el-input v-model="queryParams.name"/> <el-input v-model="queryParams.visitorName" clearable placeholder="请输入上访人"/>
</el-form-item>
<el-form-item label="电话" prop="visitorMobile">
<el-input v-model="queryParams.visitorMobile" clearable placeholder="请输入电话"/>
</el-form-item>
<el-form-item label="身份证" prop="visitorCode">
<el-input v-model="queryParams.visitorCode" clearable placeholder="请输入身份证"/>
</el-form-item>
<el-form-item label="时间" prop="visitorName">
<el-date-picker
v-model="searchTime"
type="daterange"
unlink-panels
range-separator="-"
start-placeholder="开始时间"
end-placeholder="截止时间"
value-format="YYYY-MM-DD"
@change="changeDateTimerHandle"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -79,7 +97,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" prop="remark" width="230"/> <el-table-column label="备注" prop="remark" width="230"/>
<el-table-column fixed="right" align="center" label="操作" width="240"> <el-table-column fixed="right" align="center" label="操作" width="250">
<template #default="scope"> <template #default="scope">
<el-button link size="small" type="primary" <el-button link size="small" type="primary"
@click="AddEditRegisterVisitRef.showEditRegisterVisit(scope.row)"> @click="AddEditRegisterVisitRef.showEditRegisterVisit(scope.row)">
@ -101,6 +119,12 @@
</el-icon> </el-icon>
取消 取消
</el-button> </el-button>
<el-button link size="small" type="info" @click="printRef.printMeetingForm(scope.row)">
<el-icon class="me-1">
<Printer/>
</el-icon>
打印
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -116,6 +140,7 @@
</div> </div>
<AddEditRegisterVisit ref="AddEditRegisterVisitRef" @refresh="getLists"/> <AddEditRegisterVisit ref="AddEditRegisterVisitRef" @refresh="getLists"/>
<Print ref="printRef"/>
</template> </template>
<script setup> <script setup>
@ -127,32 +152,31 @@ import {deleteVisit, getVisitList} from '@/api/RegistVisitApi/RegistVisitApi.js'
import DictTag from '@/components/DictTag/index.vue'; import DictTag from '@/components/DictTag/index.vue';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Upload from '@/views/PoliceWork/RegisterVisit/components/upload.vue'; import Upload from '@/views/PoliceWork/RegisterVisit/components/upload.vue';
import Print from '@/views/PoliceWork/RegisterVisit/print.vue';
const {proxy} = getCurrentInstance(); const {proxy} = getCurrentInstance();
const {visit_reply_type} = proxy.useDict('visit_reply_type'); const {visit_reply_type} = proxy.useDict('visit_reply_type');
const loading = ref(false); const loading = ref(false);
const searchTime = ref([]);
const paging = ref({ const paging = ref({
pageNum: 1, pageNum: 1,
pageSize: PageEnum.SIZE, pageSize: PageEnum.SIZE,
}); });
const queryParams = ref({ const queryParams = ref({
name: '', visitorName: '',
}); });
const tableDataRef = useTemplateRef('tableDataRef') const tableDataRef = useTemplateRef('tableDataRef')
const AddEditRegisterVisitRef = useTemplateRef('AddEditRegisterVisitRef') const AddEditRegisterVisitRef = useTemplateRef('AddEditRegisterVisitRef')
const uploadRef = useTemplateRef('uploadRef') const uploadRef = useTemplateRef('uploadRef')
const queryParamsRef = useTemplateRef('queryParamsRef') const queryParamsRef = useTemplateRef('queryParamsRef')
const printRef = useTemplateRef('printRef')
const total = ref(0); const total = ref(0);
const tableData = ref([ const tableData = ref([])
{
name: '1'
}
])
onMounted(() => { onMounted(() => {
@ -191,6 +215,29 @@ const handleRest = (formEl) => {
formEl.resetFields(); formEl.resetFields();
// console.log() // console.log()
}; };
//
const changeDateTimerHandle = (date) => {
if (date) {
queryParams.value = {
...queryParams.value,
params: {
beginTime: date[0],
endTime: date[1]
}
}
} else {
queryParams.value = {
...queryParams.value,
params: {
beginTime: '',
endTime: ''
}
}
}
getLists()
}
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@ -0,0 +1,481 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
/* stylelint-disable */
html,
body {
width: 100%;
height: 100%;
}
input::-ms-clear,
input::-ms-reveal {
display: none;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-family: sans-serif;
line-height: 1.15;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-ms-overflow-style: scrollbar;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
@-ms-viewport {
width: device-width;
}
body {
margin: 0;
}
[tabindex='-1']:focus {
outline: none;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin-top: 0;
margin-bottom: 0.5em;
font-weight: 500;
}
p {
margin-top: 0;
margin-bottom: 1em;
}
abbr[title],
abbr[data-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline;
text-decoration: underline dotted;
border-bottom: 0;
cursor: help;
}
address {
margin-bottom: 1em;
font-style: normal;
line-height: inherit;
}
input[type='text'],
input[type='password'],
input[type='number'],
textarea {
-webkit-appearance: none;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1em;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 500;
}
dd {
margin-bottom: 0.5em;
margin-left: 0;
}
blockquote {
margin: 0 0 1em;
}
dfn {
font-style: italic;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 80%;
}
sub,
sup {
position: relative;
font-size: 75%;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
pre,
code,
kbd,
samp {
font-size: 1em;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
}
pre {
margin-top: 0;
margin-bottom: 1em;
overflow: auto;
}
figure {
margin: 0 0 1em;
}
img {
vertical-align: middle;
border-style: none;
}
a,
area,
button,
[role='button'],
input:not([type='range']),
label,
select,
summary,
textarea {
touch-action: manipulation;
}
table {
border-collapse: collapse;
}
caption {
padding-top: 0.75em;
padding-bottom: 0.3em;
text-align: left;
caption-side: bottom;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
color: inherit;
font-size: inherit;
font-family: inherit;
line-height: inherit;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html [type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}
button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
padding: 0;
border-style: none;
}
input[type='radio'],
input[type='checkbox'] {
box-sizing: border-box;
padding: 0;
}
input[type='date'],
input[type='time'],
input[type='datetime-local'],
input[type='month'] {
-webkit-appearance: listbox;
}
textarea {
overflow: auto;
resize: vertical;
}
fieldset {
min-width: 0;
margin: 0;
padding: 0;
border: 0;
}
legend {
display: block;
width: 100%;
max-width: 100%;
margin-bottom: 0.5em;
padding: 0;
color: inherit;
font-size: 1.5em;
line-height: inherit;
white-space: normal;
}
progress {
vertical-align: baseline;
}
[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
height: auto;
}
[type='search'] {
outline-offset: -2px;
-webkit-appearance: none;
}
[type='search']::-webkit-search-cancel-button,
[type='search']::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
summary {
display: list-item;
}
template {
display: none;
}
[hidden] {
display: none !important;
}
mark {
padding: 0.2em;
background-color: #feffe6;
}
</style>
</head>
<body>
<div id="printContent">
<div style="display: flex;flex-direction: column;align-items: center;flex-wrap: nowrap;margin-bottom: 20px;">
<span>常熟市人民检察院</span>
<h1 style="font-weight: normal;margin: 0;">控告申诉登记表</h1>
</div>
<p style="text-align: center;margin: 0">常检控申2025年第 号</p>
<table border=1 cellspacing=0 style="margin: 0 auto;">
<tr style="height: 45px">
<td style="text-align: center;width: 80px;" colspan="2">信访形式</td>
<td style="text-align: center;width: 80px;" colspan="3"></td>
<td width=72 style="text-align: center;">信访时间</td>
<td width=104 style="text-align: center;" colspan="4"></td>
<td width=87 style="text-align: center;" colspan="4">承办(接待)人</td>
<td width=77 style="text-align: center;" colspan="2"></td>
</tr>
<tr style="height: 45px">
<td style="text-align: center;width: 80px;" colspan="2">信访类型</td>
<td style="text-align: center;" colspan="3"></td>
<td width=49 style="text-align: center;">来源</td>
<td width=104 colspan="4"></td>
<td width=130 colspan="4" style="text-align: center;">是否重复信访</td>
<td width=77 colspan="2" style="text-align: center;"></td>
</tr>
<tr>
<td width=30 rowspan="3" style="text-align: center;height: 150px">来信来访人情况</td>
<td width=41 style="text-align: center;">姓名</td>
<td width=120 style="text-align: center;" colspan="5"></td>
<td width=42 style="text-align: center;">性别</td>
<td width=40 style="text-align: center;" colspan=""></td>
<td width=37 style="text-align: center;" colspan="2">年龄</td>
<td width=38 style="text-align: center;" colspan="2"></td>
<td width=90 style="text-align: center;" colspan="2">文化程度</td>
<td width=50 style="text-align: center;"></td>
</tr>
<tr>
<td width=69 style="font-size: 12px;text-align: center;" colspan=3>
工作单位及职务
</td>
<td width=134 style="text-align: center;" colspan=4></td>
<td width=77 style="text-align: center;" colspan=4>身份证号码</td>
<td width=127 style="text-align: center;" colspan=4></td>
</tr>
<tr>
<td width=69 colspan=3 style="text-align: center;">联系住址</td>
<td width=134 colspan=4></td>
<td width=77 colspan=4 style="text-align: center;">联系电话</td>
<td width=127 colspan=4></td>
</tr>
<tr style="height: 200px;">
<td width=30 style="text-align: center;">来信来访内容摘要</td>
<td width=409 colspan=15></td>
</tr>
<tr>
<td width=81 colspan=3 style="text-align: center;">
<div style="display: flex;flex-direction: column;margin: 10px 0;row-gap: 6px;">
<span>承办</span>
<span>(接待)人</span>
<span>意见</span>
</div>
</td>
<td width=358 colspan=13></td>
</tr>
<tr style="height: 45px">
<td width=81 colspan=3 style="text-align: center;">
<div style="display: flex;flex-direction: column;margin: 10px 0;row-gap: 6px;">
<span>部门</span>
<span>负责人</span>
<span>意见</span>
</div>
</td>
<td width=358 colspan=13></td>
</tr>
<tr>
<td width=81 colspan=3 style="text-align: center;">
<div style="display: flex;flex-direction: column;margin: 10px 0;row-gap: 20px;">
<span>分管领导</span>
<span>意见</span>
</div>
</td>
<td width=358 colspan=13 style=""></td>
</tr>
<tr style="height: 50px">
<td width=81 colspan=3 style="text-align: center;">处理结果</td>
<td width=358 valign=top colspan=13></td>
</tr>
<tr style="height: 60px">
<td width=81 colspan=3 style="text-align: center;">备注</td>
<td width=358 valign=top colspan=13></td>
</tr>
</table>
<table border="1" cellspacing="0" style="display: none">
<tr>
<td>信访形式</td>
<td>来信</td>
<td>信访时间</td>
<td>2024.12.10</td>
<td>承办(接待)人</td>
<td>2024.12.10</td>
</tr>
<tr>
<td>信访类型</td>
<td>司法救助</td>
<td>来源</td>
<td>直接受理</td>
<td>是否重复信访</td>
<td></td>
</tr>
<tr>
<td rowspan="3">来信来访人情况</td>
<td width="80">姓名</td>
<td>***</td>
<td>性别</td>
<td></td>
<td>年龄</td>
<td>36</td>
<td>文化程度</td>
<td>/</td>
</tr>
<tr>
<td>工作单位及职务</td>
<td>/</td>
<td>身份证</td>
<td>/</td>
</tr>
<tr>
<td>联系住址</td>
<td>撒打算大</td>
<td>联系电话</td>
<td>1341341234</td>
</tr>
<tr>
<td>来信来访内容摘要</td>
<td colspan="5" height="100"></td>
</tr>
<tr>
<td>承办(接待)人意见</td>
<td colspan="5" height="120"></td>
</tr>
<tr>
<td>部门负责人意见</td>
<td colspan="5" height="120"></td>
</tr>
<tr>
<td>分管领导意见</td>
<td colspan="5" height="120"></td>
</tr>
<tr>
<td>处理结果</td>
<td colspan="5" height="120"></td>
</tr>
<tr>
<td>备注</td>
<td colspan="5" height="120"></td>
</tr>
</table>
</div>
</body>
</html>

View File

@ -0,0 +1,174 @@
<template>
<!-- <el-button @click="printMeetingForm">-->
<!-- <el-icon class="me-1">-->
<!-- <Printer/>-->
<!-- </el-icon>-->
<!-- 打印-->
<!-- </el-button>-->
<div id="printContent" class="d-none">
<div style="display: flex;flex-direction: column;align-items: center;flex-wrap: nowrap;margin-bottom: 20px;">
<span>常熟市人民检察院</span>
<h1 style="font-weight: normal;margin: 0;">控告申诉登记表</h1>
</div>
<p style="text-align: center;margin: 0">{{ queryParams.visitNo }}</p>
<table border=1 cellspacing=0 style="margin: 0 auto;">
<tbody>
<tr style="height: 45px">
<td style="text-align: center;width: 80px;" colspan="2">信访形式</td>
<td style="text-align: center;width: 80px;" colspan="3">信访形式</td>
<td width=72 style="text-align: center;">信访时间</td>
<td width=104 style="text-align: center;" colspan="4">
{{ dayjs(queryParams.visitTime).format('YYYY-MM-DD') }}
</td>
<td width=87 style="text-align: center;" colspan="4">承办(接待)</td>
<td width=77 style="text-align: center;" colspan="2">{{ queryParams.createBy }}</td>
</tr>
<tr style="height: 45px">
<td style="text-align: center;width: 80px;" colspan="2">信访类型</td>
<td style="text-align: center;" colspan="3">{{ queryParams.typeName }}</td>
<td width=49 style="text-align: center;">来源</td>
<td width=104 colspan="4" style="text-align: center;">{{ queryParams.source }}</td>
<td width=130 colspan="4" style="text-align: center;">是否重复信访</td>
<td width=77 colspan="2" style="text-align: center;">{{ queryParams.isVisited ? '是' : '否' }}</td>
</tr>
<tr>
<td width=30 rowspan="3" style="text-align: center;height: 150px">来信来访人情况</td>
<td width=41 style="text-align: center;">姓名</td>
<td width=120 style="text-align: center;" colspan="5">{{ queryParams.visitorName }}</td>
<td width=42 style="text-align: center;">性别</td>
<td width=40 style="text-align: center;" colspan="">{{ queryParams.visitorSexName }}</td>
<td width=37 style="text-align: center;" colspan="2">年龄</td>
<td width=38 style="text-align: center;" colspan="2">{{ queryParams.visitorAge }}</td>
<td width=90 style="text-align: center;" colspan="2">文化程度</td>
<td width=50 style="text-align: center;">{{ queryParams.visitorDegreeName }}</td>
</tr>
<tr>
<td width=69 style="font-size: 12px;text-align: center;" colspan=3>
工作单位及职务
</td>
<td width=134 style="text-align: center;font-size: 12px;" colspan=4>{{ queryParams.visitorContact }}
</td>
<td width=77 style="text-align: center;" colspan=4>身份证号码</td>
<td width=127 style="text-align: center;" colspan=4>{{ queryParams.visitorCode }}</td>
</tr>
<tr>
<td width=69 colspan=3 style="text-align: center;">联系住址</td>
<td width=134 colspan=4 style="text-align:center;font-size: 12px;">{{ queryParams.visitorAddress }}</td>
<td width=77 colspan=4 style="text-align: center;">联系电话</td>
<td width=127 colspan=4 style="text-align: center;">{{ queryParams.visitorMobile }}</td>
</tr>
<tr style="height: 200px;">
<td width=30 style="text-align: center;">来信来访内容摘要</td>
<td width=409 colspan=15></td>
</tr>
<tr>
<td width=81 colspan=3 style="text-align: center;">
<div style="display: flex;flex-direction: column;margin: 10px 0;row-gap: 6px;">
<span>承办</span>
<span>(接待)</span>
<span>意见</span>
</div>
</td>
<td width=358 colspan=13></td>
</tr>
<tr style="height: 45px">
<td width=81 colspan=3 style="text-align: center;">
<div style="display: flex;flex-direction: column;margin: 10px 0;row-gap: 6px;">
<span>部门</span>
<span>负责人</span>
<span>意见</span>
</div>
</td>
<td width=358 colspan=13></td>
</tr>
<tr>
<td width=81 colspan=3 style="text-align: center;">
<div style="display: flex;flex-direction: column;margin: 10px 0;row-gap: 20px;">
<span>分管领导</span>
<span>意见</span>
</div>
</td>
<td width=358 colspan=13 style=""></td>
</tr>
<tr style="height: 50px">
<td width=81 colspan=3 style="text-align: center;">处理结果</td>
<td width=358 valign=top colspan=13></td>
</tr>
<tr style="height: 60px">
<td width=81 colspan=3 style="text-align: center;">备注</td>
<td width=358 valign=top colspan="13"></td>
</tr>
</tbody>
</table>
</div>
</template>
<script setup>
import {ElMessageBox} from 'element-plus';
import printJS from 'print-js';
import {getVisitInfo} from '@/api/RegistVisitApi/RegistVisitApi.js';
import dayjs from 'dayjs';
defineOptions({
name: 'Print'
})
const queryParams = ref({})
const printMeetingForm = (data) => {
ElMessageBox({
title: '',
message: '您是否确认要打印当前的会见单据?',
showCancelButton: true,
confirmButtonText: '确定',
cancelButtonText: '取消',
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
instance.confirmButtonLoading = true
instance.confirmButtonText = '获取打印数据中...'
// new Promise(resolve => {
// setTimeout(() => {
// resolve()
// }, 1000)
// }).then(() => {
// instance.confirmButtonLoading = false
// done()
// })
getDetail(data).then(() => {
instance.confirmButtonLoading = false
done()
})
} else {
done()
}
},
}).then((action) => {
printJS({
printable: 'printContent',
type: 'html',
css: [
'/print.css'
],
scanStyles: false
})
})
}
defineExpose({printMeetingForm})
//
const getDetail = async (row) => {
const res = await getVisitInfo(row.visitId)
queryParams.value = res.data;
}
</script>
<style scoped lang="scss">
</style>