Browse Source

首页添加会签提醒

master
parent
commit
cc4fe6defd
  1. 8
      src/api/work/index.ts
  2. 21
      src/components/home/work/index.vue
  3. 271
      src/components/home/work/my-countersign.vue

8
src/api/work/index.ts

@ -13,3 +13,11 @@ export function listDones(query) {
query
});
}
export function listTodoCountersign(query) {
return request.get({
url: '/work/todoCountersign',
query
});
}

21
src/components/home/work/index.vue

@ -54,11 +54,21 @@
<home-work-my-alarm :data="alarms" @update="getAlarmList" />
</div>
</el-tab-pane>
<el-tab-pane name="countersign">
<template #label>
<el-badge :value="countersignTodos.length" v-if="countersignTodos.length">
<span class="tab-nav-title">会签提醒</span>
</el-badge>
<span class="tab-nav-title" v-else>会签提醒</span>
</template>
<div v-loading="loading" class="pt-20">
<home-work-my-countersign :data="countersignTodos" @update="getList" />
</div>
</el-tab-pane>
</el-tabs>
</template>
<script setup>
import { listTodos } from "@/api/work";
import {listTodoCountersign, listTodos} from "@/api/work";
import {
alarmNotificationPageByTodo
} from "@/api/work/alarm";
@ -74,6 +84,7 @@ const alarms = ref([])
const myAlarmTotal = ref(0)
const loading = ref(true)
const countersignTodos = ref([]);
function getList() {
loading.value = true
listTodos({
@ -85,6 +96,12 @@ function getList() {
todoToExpires.value = data.records.filter(item => item.remainingDuration < 43200)
loading.value = false
});
listTodoCountersign({
current: 1,
size: 100,
}).then((data) => {
countersignTodos.value = data.records;
});
}
const alarmLoading = ref(false)

271
src/components/home/work/my-countersign.vue

@ -0,0 +1,271 @@
<template>
<div>
<div class="relative">
<el-tabs v-model="myTodoActionTab">
<el-tab-pane
v-for="item in tabs"
:key="item.name"
:name="item.name"
>
<template #label>
<el-badge :value="item.total">
<span class="tab-nav-title_second">{{
item.name
}}</span>
</el-badge>
</template>
</el-tab-pane>
</el-tabs>
<!-- <el-button-->
<!-- type="primary"-->
<!-- @click="addShow = true"-->
<!-- v-perms="['negative:add']"-->
<!-- plain-->
<!-- class="add-btn"-->
<!-- ><template #icon> <icon name="el-icon-Plus" /> </template-->
<!-- >问题下发</el-button-->
<!-- >-->
</div>
<div class="table-container" style="height: 500px;overflow-x: auto">
<el-table :data="todos">
<el-table-column type="expand">
<template #default="{ row }">
<div class="row mt-12">
<div class="col col-12">
<label>样本源头编号</label>
<span>{{ row.originId }}</span>
</div>
<div class="col col-6">
<label>问题发现时间</label>
<span>{{ row.discoveryTime }}</span>
</div>
<div class="col col-6">
<label>问题发生时间</label>
<span>{{ row.happenTime || "/" }}</span>
</div>
<div class="col col-6">
<label>问题录入时间</label>
<span>{{ row.crtTime || "/" }}</span>
</div>
<div class="col col-6">
<label>问题来源</label>
<span>{{ row.problemSources }}</span>
</div>
<div class="col col-6">
<label>业务类别</label>
<span>{{ row.businessTypeName }}</span>
</div>
<div class="col col-6">
<label>涉及警种</label>
<span>{{ row.policeTypeName || "/" }}</span>
</div>
<div class="col col-12">
<label>涉嫌问题</label>
<span>{{
getInvolveProblem(row.involveProblem, dict.suspectProblem) || "/"
}}</span>
</div>
<div class="col col-6" v-if="row.responderName">
<label>投诉反映人</label>
<span>{{ row.responderName }}</span>
</div>
<div class="col col-6" v-if="row.contactPhone">
<label>联系电话</label>
<span>{{ row.contactPhone }}</span>
</div>
<div class="col col-6">
<label>涉及单位</label>
<span>{{ row.involveDepartName || "/" }}</span>
</div>
</div>
<div class="row mt-12">
<div class="col col-24">
<label>事情简要描述</label>
<span>{{ row.thingDesc }}</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column
label="问题发现时间"
prop="discoveryTime"
width="156"
/>
<el-table-column
label="问题来源"
prop="problemSources"
width="108"
show-overflow-tooltip
/>
<el-table-column
label="业务类别"
prop="businessTypeName"
width="98"
/>
<el-table-column
label="问题内容"
prop="thingDesc"
show-overflow-tooltip
/>
<el-table-column
label="是否属实"
prop="checkStatusName"
width="100"
align="center"
/>
<el-table-column label="办理状态" width="110" align="center">
<template #default="{ row }">
<el-tag
>{{
getDictLable(
dict.processingStatus,
row.processingStatus
)
}}{{
row.extensionApplyFlag ? "" : "(延期申请)"
}}{{
row.workFlowKey === 'countersign' ? "(单位会签)" : ""
}}</el-tag
>
</template>
</el-table-column>
<el-table-column label="会签状态" width="110" align="center">
<template #default="{ row }">
<!-- 只在会签流程显示 -->
<el-tag
:type="row.countersignCompleted === '1' ? 'success' : 'warning'"
>
{{ row.countersignCompleted === '1' ? '会签待确认' : '会签进行中' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="流程节点" width="100" show-overflow-tooltip>
<template #default="{ row }">
<span>{{
flowNodes.filter(
(item) => item.flowKey === row.flowKey
)[0]?.flowName
}}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="90" fixed="right">
<template #default="{ row }">
<el-button
type="primary"
link
@click="handleAction(row)"
>立即处理</el-button
>
</template>
</el-table-column>
</el-table>
</div>
</div>
<negative-dialog
v-model="show"
:id="activeNegativeId"
@change="handleUpdate"
@close="show = false"
:disabled="false"
/>
<negative-add v-model="addShow" @close="addShow = false" />
</template>
<script setup>
import { listTodos } from "@/api/work";
import { getDictLable, getInvolveProblem } from "@/utils/util";
import useCatchStore from "@/stores/modules/catch";
const catchStore = useCatchStore();
const dict = catchStore.getDicts(["processingStatus", "suspectProblem"]);
const flowNodes = catchStore.getFlowNodes();
const props = defineProps({
data: {
type: Array,
required: [],
},
});
const emit = defineEmits(["update"]);
const ALL_LABEL = "全部";
const tabs = ref([
{
name: ALL_LABEL,
total: 0,
},
]);
const todos = ref([]);
watch(
() => props.data,
(val) => {
getTodos()
tabs.value = [];
tabs.value.push({
name: "全部",
total: val.length,
});
new Set(val.map((item) => item.problemSources)).forEach(
(problemSources) => {
tabs.value.push({
name: problemSources,
total: val.filter(
(item) => item.problemSources === problemSources
).length,
});
}
);
}
);
const myTodoActionTab = ref(ALL_LABEL);
watch(myTodoActionTab, getTodos);
function getTodos() {
if (myTodoActionTab.value === ALL_LABEL) {
todos.value = props.data
return
}
const filtered = props.data.filter(
(item) => item.problemSources === myTodoActionTab.value
)
if (filtered.length === 0) {
myTodoActionTab.value = ALL_LABEL
todos.value = props.data
} else {
todos.value = filtered
}
}
const show = ref(false);
const activeNegativeId = ref("");
const activeWork = ref({});
provide("work", activeWork);
function handleAction(row) {
show.value = true;
activeNegativeId.value = row.negativeId;
activeWork.value = row;
}
const addShow = ref(false);
function handleUpdate() {
emit('update')
}
</script>
<style lang="scss" scoped>
.add-btn {
position: absolute;
top: 0;
right: 0;
}
</style>
Loading…
Cancel
Save