44 changed files with 3202 additions and 1004 deletions
@ -0,0 +1,8 @@ |
|||||||
|
import request from "@/api/request"; |
||||||
|
|
||||||
|
export function listModelClueTask(query) { |
||||||
|
return request.get({ |
||||||
|
url: `/model/clue/tasks`, |
||||||
|
query |
||||||
|
}); |
||||||
|
} |
||||||
@ -0,0 +1,441 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog width="80vw" top="5vh" v-model="show" :title="title"> |
||||||
|
<div style="height: 600px"> |
||||||
|
<template v-if="step === 1"> |
||||||
|
<div class="mt-20"> |
||||||
|
<span>案件核查问题台账模板</span> |
||||||
|
<a |
||||||
|
class="link" |
||||||
|
:href="`${BASE_PATH}/templates/案件核查问题台账(模板).xlsx`" |
||||||
|
target="__blank" |
||||||
|
>下载</a |
||||||
|
> |
||||||
|
</div> |
||||||
|
<el-upload |
||||||
|
drag |
||||||
|
:multiple="false" |
||||||
|
:auto-upload="false" |
||||||
|
:show-file-list="false" |
||||||
|
v-model:file-list="fileList" |
||||||
|
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" |
||||||
|
class="mt-20" |
||||||
|
> |
||||||
|
<template v-if="fileList.length === 0"> |
||||||
|
<el-icon class="el-icon--upload" |
||||||
|
><upload-filled |
||||||
|
/></el-icon> |
||||||
|
<div class="el-upload__text"> |
||||||
|
点击或拖拽文件到此区域上传 |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<el-icon class="el-icon--upload"><Select /></el-icon> |
||||||
|
<div class="el-upload__text"> |
||||||
|
已选择文件:{{ fileList[fileList.length - 1].name }} |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</el-upload> |
||||||
|
<el-radio-group v-model="dataUpdateMethod" class="mt-20"> |
||||||
|
<el-radio value="incremental" border>增量更新</el-radio> |
||||||
|
<el-radio value="overwrite" border>覆盖更新</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<el-page-header @back="step = 1" class="mb-20"></el-page-header> |
||||||
|
<div style="height: 556px; overflow: hidden"> |
||||||
|
<el-scrollbar height="556px"> |
||||||
|
<el-tabs v-model="activeTab"> |
||||||
|
<el-tab-pane label="全部" name="all"> |
||||||
|
<div class="table-container"> |
||||||
|
<el-table |
||||||
|
:data="importTableData" |
||||||
|
ref="tableRef" |
||||||
|
> |
||||||
|
<el-table-column |
||||||
|
type="selection" |
||||||
|
:selectable=" |
||||||
|
(row) => row.state === 'success' |
||||||
|
" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="案件编号" |
||||||
|
prop="originId" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理时间" |
||||||
|
prop="discoveryTime" |
||||||
|
|
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="问题发生时间" |
||||||
|
prop="happenTime" |
||||||
|
width="160" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="问题来源" |
||||||
|
prop="problemSources" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人" |
||||||
|
prop="responderName" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人电话" |
||||||
|
prop="contactPhone" |
||||||
|
width="120" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="业务类别" |
||||||
|
prop="businessTypeName" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="涉嫌问题" |
||||||
|
prop="involveProblem" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="涉及警种" |
||||||
|
prop="policeTypeName" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="涉及单位" |
||||||
|
prop="involveDepartName" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ involveSecondDepartName }}</span> |
||||||
|
<span>{{ involveThirdDepartName }}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="数据校验" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tag |
||||||
|
type="success" |
||||||
|
v-if=" |
||||||
|
row.state === 'success' |
||||||
|
" |
||||||
|
>正确</el-tag |
||||||
|
> |
||||||
|
<el-tooltip |
||||||
|
effect="dark" |
||||||
|
:content="row.errMsg" |
||||||
|
placement="top-start" |
||||||
|
v-else |
||||||
|
> |
||||||
|
<el-tag type="danger" |
||||||
|
>异常</el-tag |
||||||
|
> |
||||||
|
</el-tooltip> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="操作" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleEdit(row)" |
||||||
|
>编辑</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane name="fail"> |
||||||
|
<template #label> |
||||||
|
<el-badge |
||||||
|
:value="importTableFailData.length" |
||||||
|
> |
||||||
|
<span>异常</span> |
||||||
|
</el-badge> |
||||||
|
</template> |
||||||
|
<div class="table-container"> |
||||||
|
<el-table :data="importTableFailData"> |
||||||
|
<el-table-column |
||||||
|
label="案件编号" |
||||||
|
prop="originId" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理时间" |
||||||
|
prop="discoveryTime" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="问题发生时间" |
||||||
|
prop="happenTime" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="问题来源" |
||||||
|
prop="problemSources" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人" |
||||||
|
prop="responderName" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人电话" |
||||||
|
prop="contactPhone" |
||||||
|
width="120" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="业务类别" |
||||||
|
prop="businessTypeName" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="涉嫌问题" |
||||||
|
prop="involveProblem" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="涉及警种" |
||||||
|
prop="policeTypeName" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="涉及单位" |
||||||
|
prop="complainedDepartName" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="数据校验" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tooltip |
||||||
|
effect="dark" |
||||||
|
:content="row.errMsg" |
||||||
|
placement="top-start" |
||||||
|
> |
||||||
|
<el-tag type="danger" |
||||||
|
>异常</el-tag |
||||||
|
> |
||||||
|
</el-tooltip> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="操作" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleEdit(row)" |
||||||
|
>编辑</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
</el-tab-pane> |
||||||
|
</el-tabs> |
||||||
|
</el-scrollbar> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
<footer class="flex end mt-20 v-center"> |
||||||
|
<span class="mr-20" v-if="step === 2" |
||||||
|
>选中:<b>{{ checkRowSize }}</b |
||||||
|
>条数据</span |
||||||
|
> |
||||||
|
<el-button size="large" @click="show = false">取消</el-button> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
size="large" |
||||||
|
@click="handleImport" |
||||||
|
:disabled="fileList.length === 0" |
||||||
|
v-if="step === 1" |
||||||
|
v-loading="loading" |
||||||
|
>下一步</el-button |
||||||
|
> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
size="large" |
||||||
|
@click="handleSaveImport" |
||||||
|
:disabled="checkRowSize === 0" |
||||||
|
v-else |
||||||
|
>确认导入</el-button |
||||||
|
> |
||||||
|
</footer> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
<el-dialog width="660px" top="5vh" v-model="editShow" title="编辑数据"> |
||||||
|
<el-form :label-width="120" :model="form" ref="formRef"> |
||||||
|
<el-form-item |
||||||
|
label="案件编号" |
||||||
|
prop="originId" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请选择', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<el-input placeholder="请输入" v-model="form.originId" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="受理时间"> |
||||||
|
<el-date-picker type="datetime" v-model="form.discoveryTime" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="问题发生时间"> |
||||||
|
<el-date-picker type="datetime" v-model="form.happenTime" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="问题来源"> |
||||||
|
<el-input placeholder="请输入" v-model="form.problemSources" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="投诉人"> |
||||||
|
<el-input placeholder="请输入" v-model="form.responderName" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="投诉人电话"> |
||||||
|
<el-input placeholder="请输入" v-model="form.contactPhone" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="业务类别"> |
||||||
|
<el-input placeholder="请输入" v-model="form.businessTypeName" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="涉嫌问题"> |
||||||
|
<el-input placeholder="请输入" v-model="form.involveProblem" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="涉及警种"> |
||||||
|
<el-input placeholder="请输入" v-model="form.policeTypeName" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item |
||||||
|
label="涉及单位" |
||||||
|
prop="involveThirdDepartId" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请选择', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<depart-tree-select |
||||||
|
v-model="form.involveThirdDepartId" |
||||||
|
:check-strictly="false" |
||||||
|
@node-click="(node) => form.involveThirdDepartName = node.shortName" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请输入', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<el-input type="textarea" v-model="form.thingDesc" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<footer class="flex end mt-20"> |
||||||
|
<el-button @click="editShow = false">取消</el-button> |
||||||
|
<el-button type="primary" @click="handleEditSumbit" |
||||||
|
>确认修改</el-button |
||||||
|
> |
||||||
|
</footer> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import { BASE_PATH } from "@/api/request"; |
||||||
|
import { getDictLable } from "@/utils/util"; |
||||||
|
import { importCaseVerif, addCaseVerif } from "@/api/data/caseVerif"; |
||||||
|
import feedback from "@/utils/feedback"; |
||||||
|
|
||||||
|
const props = defineProps({ |
||||||
|
modelValue: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
title: { |
||||||
|
type: String, |
||||||
|
} |
||||||
|
}); |
||||||
|
const emit = defineEmits(["update:modelValue", "close", "update"]); |
||||||
|
|
||||||
|
const show = ref(false); |
||||||
|
watch( |
||||||
|
() => props.modelValue, |
||||||
|
(val) => { |
||||||
|
show.value = val; |
||||||
|
} |
||||||
|
); |
||||||
|
watch(show, (val) => { |
||||||
|
emit("update:modelValue", val); |
||||||
|
}); |
||||||
|
|
||||||
|
const dataUpdateMethod = ref("incremental"); |
||||||
|
const fileList = ref([]); |
||||||
|
|
||||||
|
const importTableData = ref([]); |
||||||
|
const importTableFailData = computed(() => { |
||||||
|
return importTableData.value.filter((item) => item.state === "fail"); |
||||||
|
}); |
||||||
|
|
||||||
|
const step = ref(1); |
||||||
|
const loading = ref(false); |
||||||
|
async function handleImport() { |
||||||
|
const formData = new FormData(); |
||||||
|
formData.append("file", fileList.value[fileList.value.length - 1].raw); |
||||||
|
loading.value = true; |
||||||
|
try { |
||||||
|
importTableData.value = await importCaseVerif(formData); |
||||||
|
} catch(e) { |
||||||
|
loading.value = false; |
||||||
|
return |
||||||
|
} |
||||||
|
loading.value = false; |
||||||
|
step.value = 2; |
||||||
|
nextTick(() => {}); |
||||||
|
} |
||||||
|
|
||||||
|
const checkRowSize = computed( |
||||||
|
() => tableRef.value?.getSelectionRows().length || 0 |
||||||
|
); |
||||||
|
|
||||||
|
const tableRef = ref(null); |
||||||
|
async function handleSaveImport() { |
||||||
|
const rows = tableRef.value.getSelectionRows(); |
||||||
|
await addCaseVerif(dataUpdateMethod.value, [...rows]); |
||||||
|
feedback.msgSuccess(`成功导入${rows.length}条数据`); |
||||||
|
step.value = 1; |
||||||
|
importTableData.value = []; |
||||||
|
fileList.value = []; |
||||||
|
emit("close"); |
||||||
|
emit("update"); |
||||||
|
} |
||||||
|
|
||||||
|
let activeIndex = -1; |
||||||
|
function handleEdit(row) { |
||||||
|
form.value = { ...row }; |
||||||
|
activeIndex = importTableData.value.indexOf(row); |
||||||
|
editShow.value = true; |
||||||
|
} |
||||||
|
const editShow = ref(false); |
||||||
|
const form = ref({}); |
||||||
|
const formRef = ref(); |
||||||
|
const activeTab = ref("all"); |
||||||
|
|
||||||
|
async function handleEditSumbit() { |
||||||
|
await formRef.value.validate(); |
||||||
|
form.value.state = "success"; |
||||||
|
importTableData.value[activeIndex] = form.value; |
||||||
|
editShow.value = false; |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
@ -0,0 +1,585 @@ |
|||||||
|
<template> |
||||||
|
<el-dialog width="80vw" top="5vh" v-model="show" :title="title"> |
||||||
|
<div style="height: 600px"> |
||||||
|
<template v-if="step === 1"> |
||||||
|
<div class="mt-20"> |
||||||
|
<span>信访投诉数据台账模板</span> |
||||||
|
<a |
||||||
|
class="link" |
||||||
|
:href="`${BASE_PATH}/templates/信访投诉数据台账(模板).xlsx`" |
||||||
|
target="__blank" |
||||||
|
>下载</a |
||||||
|
> |
||||||
|
</div> |
||||||
|
<el-upload |
||||||
|
drag |
||||||
|
:multiple="false" |
||||||
|
:auto-upload="false" |
||||||
|
:show-file-list="false" |
||||||
|
v-model:file-list="fileList" |
||||||
|
accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" |
||||||
|
class="mt-20" |
||||||
|
> |
||||||
|
<template v-if="fileList.length === 0"> |
||||||
|
<el-icon class="el-icon--upload" |
||||||
|
><upload-filled |
||||||
|
/></el-icon> |
||||||
|
<div class="el-upload__text"> |
||||||
|
点击或拖拽文件到此区域上传 |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<el-icon class="el-icon--upload"><Select /></el-icon> |
||||||
|
<div class="el-upload__text"> |
||||||
|
已选择文件:{{ fileList[fileList.length - 1].name }} |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</el-upload> |
||||||
|
<el-radio-group v-model="dataUpdateMethod" class="mt-20"> |
||||||
|
<el-radio value="incremental" border>增量更新</el-radio> |
||||||
|
<el-radio value="overwrite" border>覆盖更新</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<el-page-header @back="step = 1" class="mb-20"></el-page-header> |
||||||
|
<div style="height: 556px; overflow: hidden"> |
||||||
|
<el-scrollbar height="556px"> |
||||||
|
<el-tabs v-model="activeTab"> |
||||||
|
<el-tab-pane label="全部" name="all"> |
||||||
|
<div class="table-container"> |
||||||
|
<el-table |
||||||
|
:data="importTableData" |
||||||
|
ref="tableRef" |
||||||
|
> |
||||||
|
<el-table-column |
||||||
|
type="selection" |
||||||
|
:selectable=" |
||||||
|
(row) => row.state === 'success' |
||||||
|
" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="信件编号" |
||||||
|
prop="originId" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉渠道" |
||||||
|
prop="channelForFilingComplaints" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理层级" |
||||||
|
prop="acceptanceLevel" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="登记时间" |
||||||
|
prop="discoveryTime" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人" |
||||||
|
prop="responderName" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人电话" |
||||||
|
prop="contactPhone" |
||||||
|
width="120" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="初重信访" |
||||||
|
align="center" |
||||||
|
width="90" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
getDictLable( |
||||||
|
dict.initialPetition, |
||||||
|
row.initialPetition |
||||||
|
) |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="缠访闹访" |
||||||
|
width="90" |
||||||
|
align="center" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.entanglementVisits === |
||||||
|
true |
||||||
|
" |
||||||
|
>是</span |
||||||
|
> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.entanglementVisits === |
||||||
|
false |
||||||
|
" |
||||||
|
>否</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="群众集访" |
||||||
|
width="90" |
||||||
|
align="center" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.massVisits === true |
||||||
|
" |
||||||
|
>是</span |
||||||
|
> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.massVisits === false |
||||||
|
" |
||||||
|
>否</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="被投诉机构" show-overflow-tooltip> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
row.involveSecondDepartName |
||||||
|
}}</span> |
||||||
|
<span>{{ |
||||||
|
row.involveThirdDepartName |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="数据校验" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tag |
||||||
|
type="success" |
||||||
|
v-if=" |
||||||
|
row.state === 'success' |
||||||
|
" |
||||||
|
>正确</el-tag |
||||||
|
> |
||||||
|
<el-tooltip |
||||||
|
effect="dark" |
||||||
|
:content="row.errMsg" |
||||||
|
placement="top-start" |
||||||
|
v-else |
||||||
|
> |
||||||
|
<el-tag type="danger" |
||||||
|
>异常</el-tag |
||||||
|
> |
||||||
|
</el-tooltip> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="操作" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleEdit(row)" |
||||||
|
>编辑</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane name="fail"> |
||||||
|
<template #label> |
||||||
|
<el-badge |
||||||
|
:value="importTableFailData.length" |
||||||
|
class="item" |
||||||
|
> |
||||||
|
<span>异常</span> |
||||||
|
</el-badge> |
||||||
|
</template> |
||||||
|
<div class="table-container"> |
||||||
|
<el-table :data="importTableFailData"> |
||||||
|
<el-table-column |
||||||
|
label="信件编号" |
||||||
|
prop="originId" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉渠道" |
||||||
|
prop="channelForFilingComplaints" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="受理层级" |
||||||
|
prop="acceptanceLevel" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="登记时间" |
||||||
|
prop="discoveryTime" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人" |
||||||
|
prop="responderName" |
||||||
|
width="90" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="投诉人电话" |
||||||
|
prop="contactPhone" |
||||||
|
width="120" |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="初重信访" |
||||||
|
align="center" |
||||||
|
width="90" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
getDictLable( |
||||||
|
dict.initialPetition, |
||||||
|
row.initialPetition |
||||||
|
) |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="缠访闹访" |
||||||
|
width="90" |
||||||
|
align="center" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.entanglementVisits === |
||||||
|
true |
||||||
|
" |
||||||
|
>是</span |
||||||
|
> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.entanglementVisits === |
||||||
|
false |
||||||
|
" |
||||||
|
>否</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="群众集访" |
||||||
|
width="90" |
||||||
|
align="center" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.massVisits === true |
||||||
|
" |
||||||
|
>是</span |
||||||
|
> |
||||||
|
<span |
||||||
|
v-if=" |
||||||
|
row.massVisits === false |
||||||
|
" |
||||||
|
>否</span |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="被投诉机构" show-overflow-tooltip> |
||||||
|
<template #default="{ row }"> |
||||||
|
<span>{{ |
||||||
|
row.involveSecondDepartName |
||||||
|
}}</span> |
||||||
|
<span>{{ |
||||||
|
row.involveThirdDepartName |
||||||
|
}}</span> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
show-overflow-tooltip |
||||||
|
/> |
||||||
|
<el-table-column |
||||||
|
label="数据校验" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-tooltip |
||||||
|
effect="dark" |
||||||
|
:content="row.errMsg" |
||||||
|
placement="top-start" |
||||||
|
> |
||||||
|
<el-tag type="danger" |
||||||
|
>异常</el-tag |
||||||
|
> |
||||||
|
</el-tooltip> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column |
||||||
|
label="操作" |
||||||
|
width="120" |
||||||
|
> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
link |
||||||
|
@click="handleEdit(row)" |
||||||
|
>编辑</el-button |
||||||
|
> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
</el-tab-pane> |
||||||
|
</el-tabs> |
||||||
|
</el-scrollbar> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
<footer class="flex end mt-20 v-center"> |
||||||
|
<span class="mr-20" v-if="step === 2" |
||||||
|
>选中:<b>{{ checkRowSize }}</b |
||||||
|
>条数据</span |
||||||
|
> |
||||||
|
<el-button size="large" @click="show = false">取消</el-button> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
size="large" |
||||||
|
@click="handleImport" |
||||||
|
:disabled="fileList.length === 0" |
||||||
|
v-if="step === 1" |
||||||
|
v-loading="loading" |
||||||
|
>下一步</el-button |
||||||
|
> |
||||||
|
<el-button |
||||||
|
type="primary" |
||||||
|
size="large" |
||||||
|
@click="handleSaveImport" |
||||||
|
:disabled="checkRowSize === 0" |
||||||
|
v-else |
||||||
|
>确认导入</el-button |
||||||
|
> |
||||||
|
</footer> |
||||||
|
</el-dialog> |
||||||
|
|
||||||
|
<el-dialog width="660px" top="5vh" v-model="editShow" title="编辑数据"> |
||||||
|
<el-form :label-width="120" :model="form" ref="formRef"> |
||||||
|
<el-form-item |
||||||
|
label="信件编号" |
||||||
|
prop="originId" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请选择', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<el-input placeholder="请输入" v-model="form.originId" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="投诉渠道"> |
||||||
|
<el-input |
||||||
|
placeholder="请输入" |
||||||
|
v-model="form.channelForFilingComplaints" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="受理层级"> |
||||||
|
<el-input placeholder="请输入" v-model="form.acceptanceLevel" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="登记时间"> |
||||||
|
<el-date-picker type="datetime" v-model="form.discoveryTime" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="投诉人"> |
||||||
|
<el-input placeholder="请输入" v-model="form.responderName" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="投诉人电话"> |
||||||
|
<el-input placeholder="请输入" v-model="form.contactPhone" /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item |
||||||
|
label="初重信访" |
||||||
|
prop="initialPetition" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请选择', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<el-select clearable v-model="form.initialPetition"> |
||||||
|
<el-option |
||||||
|
v-for="item in dict.initialPetition" |
||||||
|
:key="item.id" |
||||||
|
:label="item.dictLabel" |
||||||
|
:value="item.dictValue" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item |
||||||
|
label="缠访闹访" |
||||||
|
prop="entanglementVisits" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请选择', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<el-select v-model="form.entanglementVisits"> |
||||||
|
<el-option :value="true" label="是" /> |
||||||
|
<el-option :value="false" label="否" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item |
||||||
|
label="群众集访" |
||||||
|
prop="massVisits" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请选择', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<el-select v-model="form.massVisits"> |
||||||
|
<el-option :value="true" label="是" /> |
||||||
|
<el-option :value="false" label="否" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item |
||||||
|
label="被投诉机构" |
||||||
|
prop="involveThirdDepartId" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请选择', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<depart-tree-select |
||||||
|
v-model="form.involveThirdDepartId" |
||||||
|
:check-strictly="false" |
||||||
|
@node-click=" |
||||||
|
(node) => |
||||||
|
(form.involveThirdDepartName = node.shortName) |
||||||
|
" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item |
||||||
|
label="具体内容" |
||||||
|
prop="thingDesc" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请输入', |
||||||
|
trigger: ['blur'], |
||||||
|
}" |
||||||
|
> |
||||||
|
<el-input type="textarea" v-model="form.thingDesc" /> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
<footer class="flex end mt-20"> |
||||||
|
<el-button @click="editShow = false">取消</el-button> |
||||||
|
<el-button type="primary" @click="handleEditSumbit" |
||||||
|
>确认修改</el-button |
||||||
|
> |
||||||
|
</footer> |
||||||
|
</el-dialog> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import { BASE_PATH } from "@/api/request"; |
||||||
|
import { getDictLable } from "@/utils/util"; |
||||||
|
import { |
||||||
|
importPetitionComplaint, |
||||||
|
addPetitionComplaint, |
||||||
|
} from "@/api/data/petitionComplaint"; |
||||||
|
import feedback from "@/utils/feedback"; |
||||||
|
import useCatchStore from "@/stores/modules/catch"; |
||||||
|
import { computed } from "vue"; |
||||||
|
|
||||||
|
const catchStore = useCatchStore(); |
||||||
|
const dict = catchStore.getDicts(["initialPetition"]); |
||||||
|
|
||||||
|
const props = defineProps({ |
||||||
|
modelValue: { |
||||||
|
type: Boolean, |
||||||
|
default: false, |
||||||
|
}, |
||||||
|
title: { |
||||||
|
type: String, |
||||||
|
}, |
||||||
|
problemSourcesCode: { |
||||||
|
type: String, |
||||||
|
}, |
||||||
|
}); |
||||||
|
const emit = defineEmits(["update:modelValue", "close", "update"]); |
||||||
|
|
||||||
|
const show = ref(false); |
||||||
|
watch( |
||||||
|
() => props.modelValue, |
||||||
|
(val) => { |
||||||
|
show.value = val; |
||||||
|
} |
||||||
|
); |
||||||
|
watch(show, (val) => { |
||||||
|
emit("update:modelValue", val); |
||||||
|
}); |
||||||
|
|
||||||
|
const dataUpdateMethod = ref("incremental"); |
||||||
|
const fileList = ref([]); |
||||||
|
|
||||||
|
const importTableData = ref([]); |
||||||
|
const importTableFailData = computed(() => { |
||||||
|
return importTableData.value.filter((item) => item.state === "fail"); |
||||||
|
}); |
||||||
|
|
||||||
|
const step = ref(1); |
||||||
|
const loading = ref(false); |
||||||
|
async function handleImport() { |
||||||
|
const formData = new FormData(); |
||||||
|
formData.append("file", fileList.value[fileList.value.length - 1].raw); |
||||||
|
loading.value = true; |
||||||
|
importTableData.value = await importPetitionComplaint(formData); |
||||||
|
loading.value = false; |
||||||
|
step.value = 2; |
||||||
|
nextTick(() => {}); |
||||||
|
} |
||||||
|
|
||||||
|
const checkRowSize = computed( |
||||||
|
() => tableRef.value?.getSelectionRows().length || 0 |
||||||
|
); |
||||||
|
|
||||||
|
const tableRef = ref(null); |
||||||
|
async function handleSaveImport() { |
||||||
|
const rows = tableRef.value.getSelectionRows(); |
||||||
|
await addPetitionComplaint({ |
||||||
|
dataUpdateMethod: dataUpdateMethod.value, |
||||||
|
problemSourcesCode: props.problemSourcesCode, |
||||||
|
data: [...rows], |
||||||
|
}); |
||||||
|
feedback.msgSuccess(`成功导入${rows.length}条数据`); |
||||||
|
step.value = 1; |
||||||
|
importTableData.value = []; |
||||||
|
fileList.value = []; |
||||||
|
emit("close"); |
||||||
|
emit("update"); |
||||||
|
} |
||||||
|
|
||||||
|
let activeIndex = -1; |
||||||
|
function handleEdit(row) { |
||||||
|
form.value = { ...row }; |
||||||
|
activeIndex = importTableData.value.indexOf(row); |
||||||
|
editShow.value = true; |
||||||
|
} |
||||||
|
const editShow = ref(false); |
||||||
|
const form = ref({}); |
||||||
|
const formRef = ref(); |
||||||
|
const activeTab = ref("all"); |
||||||
|
|
||||||
|
async function handleEditSumbit() { |
||||||
|
await formRef.value.validate(); |
||||||
|
form.value.state = "success"; |
||||||
|
importTableData.value[activeIndex] = form.value; |
||||||
|
editShow.value = false; |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
<template> |
||||||
|
<div class="datav-col"> |
||||||
|
<label for="">统计周期:</label> |
||||||
|
<el-date-picker |
||||||
|
v-model="value" |
||||||
|
type="daterange" |
||||||
|
range-separator="-" |
||||||
|
start-placeholder="开始日期" |
||||||
|
end-placeholder="结束日期" |
||||||
|
format="YYYY年MM月DD日" |
||||||
|
style="--el-input-bg-color: transparent; box-shadow: none; --el-text-color-regular: #fff; --el-text-color-primary: #fff" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
const value = ref([]) |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
.datav-col { |
||||||
|
font-size: 14px; |
||||||
|
text-align: center; |
||||||
|
margin-bottom: 16px; |
||||||
|
label { |
||||||
|
color: #859DEC; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
@ -0,0 +1,19 @@ |
|||||||
|
<template> |
||||||
|
<div v-if="name === activeTab"> |
||||||
|
<slot /> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
defineProps({ |
||||||
|
label: { |
||||||
|
type: String, |
||||||
|
}, |
||||||
|
name: { |
||||||
|
type: String, |
||||||
|
}, |
||||||
|
}); |
||||||
|
const activeTab = inject("activeTab"); |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
|
||||||
|
</style> |
||||||
@ -0,0 +1,91 @@ |
|||||||
|
<template> |
||||||
|
<div class="tabs"> |
||||||
|
<div class="tab-header flex gap-20 mb-40" v-if="type === ''"> |
||||||
|
<div |
||||||
|
class="tab-title-item" |
||||||
|
v-for="item in slots" |
||||||
|
:key="item.props.name" |
||||||
|
:active="item.props.name === activeTab" |
||||||
|
@click="handleChangeActiveTab(item.props.name)" |
||||||
|
> |
||||||
|
{{ item.props.label }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="tabs-content"> |
||||||
|
<slot></slot> |
||||||
|
</div> |
||||||
|
<div |
||||||
|
class="flex tab-title flex center mt-20 mb-20" |
||||||
|
v-if="type === 'bottom-button'" |
||||||
|
> |
||||||
|
<div |
||||||
|
class="tab-title-item" |
||||||
|
v-for="item in slots" |
||||||
|
:key="item.props.name" |
||||||
|
:active="item.props.name === activeTab" |
||||||
|
@click="handleChangeActiveTab(item.props.name)" |
||||||
|
> |
||||||
|
{{ item.props.label }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
const props = defineProps({ |
||||||
|
modelValue: { |
||||||
|
type: String, |
||||||
|
}, |
||||||
|
// bottom-button |
||||||
|
type: { |
||||||
|
type: String, |
||||||
|
default: "", |
||||||
|
}, |
||||||
|
}); |
||||||
|
const emit = defineEmits(["update:modelValue"]); |
||||||
|
const activeTab = ref(props.modelValue); |
||||||
|
provide("activeTab", activeTab); |
||||||
|
|
||||||
|
const slots = useSlots().default(); |
||||||
|
|
||||||
|
function handleChangeActiveTab(name) { |
||||||
|
activeTab.value = name; |
||||||
|
emit("update:modelValue", name); |
||||||
|
} |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
.tab-header { |
||||||
|
.tab-title-item { |
||||||
|
font-size: 22px; |
||||||
|
line-height: 34px; |
||||||
|
color: #597ae9; |
||||||
|
border-bottom: 5px solid transparent; |
||||||
|
cursor: pointer; |
||||||
|
&[active="true"] { |
||||||
|
color: #fff; |
||||||
|
border-color: #28E6FF; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.tab-title { |
||||||
|
margin-bottom: 4px; |
||||||
|
cursor: pointer; |
||||||
|
.tab-title-item { |
||||||
|
width: 119px; |
||||||
|
height: 32px; |
||||||
|
line-height: 32px; |
||||||
|
border: 1px solid #24d2ee; |
||||||
|
text-align: center; |
||||||
|
|
||||||
|
&[active="true"] { |
||||||
|
background: #24d2ee; |
||||||
|
color: #0724b2; |
||||||
|
} |
||||||
|
&:first-child { |
||||||
|
border-radius: 103px 0px 0px 103px; |
||||||
|
} |
||||||
|
&:last-child { |
||||||
|
border-radius: 0 103px 103px 0; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
||||||
@ -0,0 +1,125 @@ |
|||||||
|
<template> |
||||||
|
<el-radio-group v-model="value" class="block"> |
||||||
|
<el-radio |
||||||
|
v-for="item in dict.timeLimit" |
||||||
|
:key="item.dictCode" |
||||||
|
:value="item.dictValue" |
||||||
|
>{{ item.dictLabel |
||||||
|
}}{{ item.remark ? `(${item.remark})` : "" }}</el-radio |
||||||
|
> |
||||||
|
</el-radio-group> |
||||||
|
<template v-if="value === TimeLimit.OTHER"> |
||||||
|
<el-row> |
||||||
|
<el-col :span="8"> |
||||||
|
<el-form-item |
||||||
|
label="签收" |
||||||
|
prop="maxSignDuration" |
||||||
|
label-width="80" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请输入最大签收时长' |
||||||
|
}" |
||||||
|
> |
||||||
|
<div class="flex gap"> |
||||||
|
<el-input |
||||||
|
v-model="maxSignDurationValue" |
||||||
|
type="number" |
||||||
|
style="width: 70px" |
||||||
|
:min="1" |
||||||
|
:max="99" |
||||||
|
/> |
||||||
|
<span style="width: 60px">工作日</span> |
||||||
|
</div> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="8"> |
||||||
|
<el-form-item |
||||||
|
label="办理" |
||||||
|
prop="maxHandleDuration" |
||||||
|
label-width="80" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请输入最大办理时长' |
||||||
|
}" |
||||||
|
> |
||||||
|
<div class="flex gap"> |
||||||
|
<el-input |
||||||
|
v-model="maxHandleDurationValue" |
||||||
|
type="number" |
||||||
|
style="width: 70px" |
||||||
|
:min="1" |
||||||
|
:max="99" |
||||||
|
/> |
||||||
|
<span style="width: 60px">工作日</span> |
||||||
|
</div> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
<el-col :span="8"> |
||||||
|
<el-form-item |
||||||
|
label="延期" |
||||||
|
prop="maxExtensionDuration" |
||||||
|
:rules="{ |
||||||
|
required: true, |
||||||
|
message: '请输入最大延期天数' |
||||||
|
}" |
||||||
|
> |
||||||
|
<div class="flex gap"> |
||||||
|
<el-input |
||||||
|
v-model="maxExtensionDurationValue" |
||||||
|
type="number" |
||||||
|
style="width: 70px" |
||||||
|
:min="1" |
||||||
|
:max="99" |
||||||
|
/> |
||||||
|
<span>天</span> |
||||||
|
</div> |
||||||
|
</el-form-item> |
||||||
|
</el-col> |
||||||
|
</el-row> |
||||||
|
</template> |
||||||
|
</template> |
||||||
|
<script setup> |
||||||
|
import { |
||||||
|
TimeLimit |
||||||
|
} from "@/enums/dictEnums"; |
||||||
|
import useCatchStore from "@/stores/modules/catch"; |
||||||
|
import { watch } from "vue"; |
||||||
|
|
||||||
|
const catchStore = useCatchStore(); |
||||||
|
const dict = catchStore.getDicts([ |
||||||
|
"timeLimit" |
||||||
|
]); |
||||||
|
const props = defineProps({ |
||||||
|
modelValue: { |
||||||
|
type: String |
||||||
|
}, |
||||||
|
maxSignDuration: { |
||||||
|
type: String |
||||||
|
}, |
||||||
|
maxHandleDuration: { |
||||||
|
type: String |
||||||
|
}, |
||||||
|
maxExtensionDuration: { |
||||||
|
type: String |
||||||
|
}, |
||||||
|
}) |
||||||
|
const emit = defineEmits(['update:modelValue', 'update:maxSignDuration', 'update:maxHandleDuration', 'update:maxExtensionDuration']) |
||||||
|
const value = ref(props.modelValue) |
||||||
|
const maxSignDurationValue = ref(props.maxSignDuration) |
||||||
|
const maxHandleDurationValue = ref(props.maxHandleDuration) |
||||||
|
const maxExtensionDurationValue = ref(props.maxExtensionDuration) |
||||||
|
watch(value, () => { |
||||||
|
emit('update:modelValue', value.value) |
||||||
|
}) |
||||||
|
watch(maxSignDurationValue, () => { |
||||||
|
emit('update:maxSignDuration', maxSignDurationValue.value) |
||||||
|
}) |
||||||
|
watch(maxHandleDurationValue, () => { |
||||||
|
emit('update:maxHandleDuration', maxHandleDurationValue.value) |
||||||
|
}) |
||||||
|
watch(maxExtensionDurationValue, () => { |
||||||
|
emit('update:maxExtensionDuration', maxExtensionDurationValue.value) |
||||||
|
}) |
||||||
|
</script> |
||||||
|
<style lang="scss" scoped> |
||||||
|
</style> |
||||||
@ -1,9 +0,0 @@ |
|||||||
<template> |
|
||||||
<img src="/imgs/lmgz/3.png" alt=""> |
|
||||||
</template> |
|
||||||
<script setup> |
|
||||||
|
|
||||||
</script> |
|
||||||
<style lang="scss" scoped> |
|
||||||
|
|
||||||
</style> |
|
||||||
@ -1,9 +0,0 @@ |
|||||||
<template> |
|
||||||
<img src="/imgs/lmgz/2.png" alt=""> |
|
||||||
</template> |
|
||||||
<script setup> |
|
||||||
|
|
||||||
</script> |
|
||||||
<style lang="scss" scoped> |
|
||||||
|
|
||||||
</style> |
|
||||||
@ -1,9 +0,0 @@ |
|||||||
<template> |
|
||||||
<img src="/imgs/lmgz/4.png" alt=""> |
|
||||||
</template> |
|
||||||
<script setup> |
|
||||||
|
|
||||||
</script> |
|
||||||
<style lang="scss" scoped> |
|
||||||
|
|
||||||
</style> |
|
||||||
Loading…
Reference in new issue