Browse Source

Merge remote-tracking branch 'origin/master'

master
laishajiang 2 years ago
parent
commit
6d77802626
  1. 0
      public/mp3/new-mail.mp3
  2. BIN
      public/mp3/todo.mp3
  3. 11
      src/layout/Index.vue
  4. 15
      src/layout/components/MultipleTabs.vue
  5. 6
      src/layout/components/NoticeMessage.vue
  6. 3
      src/permission.ts
  7. 2
      src/stores/modules/multipleTabs.ts
  8. 2
      src/utils/echartsInstance.js
  9. 14
      src/views/home/components/MailTable.vue
  10. 8
      src/views/work/components/InitiateCountersign.vue
  11. 13
      src/views/work/components/MailDialog.vue
  12. 2
      src/views/work/components/ReviewComments.vue
  13. 7
      src/views/work/components/templates/CountersignForm.vue
  14. 4
      src/views/work/components/templates/MailTypeForm.vue
  15. 87
      src/views/work/components/templates/ThreeHandling.vue

0
public/mp3/notice.mp3 → public/mp3/new-mail.mp3

BIN
public/mp3/todo.mp3

Binary file not shown.

11
src/layout/Index.vue

@ -4,7 +4,13 @@
<LayoutAside /> <LayoutAside />
<div> <div>
<MultipleTabs /> <MultipleTabs />
<main><router-view /></main> <main>
<router-view v-slot="{ Component, route }">
<keep-alive :max="20">
<component :is="Component" :key="route.fullPath" />
</keep-alive>
</router-view>
</main>
</div> </div>
</div> </div>
</template> </template>
@ -12,6 +18,9 @@
import Header from "./components/Header.vue"; import Header from "./components/Header.vue";
import LayoutAside from "./components/Aside.vue"; import LayoutAside from "./components/Aside.vue";
import MultipleTabs from "./components/MultipleTabs.vue"; import MultipleTabs from "./components/MultipleTabs.vue";
import useTabsStore from '@/stores/modules/multipleTabs'
const tabsStore = useTabsStore()
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

15
src/layout/components/MultipleTabs.vue

@ -3,7 +3,6 @@
<div> <div>
<el-tabs <el-tabs
:model-value="currentTab" :model-value="currentTab"
:closable="tabsLists.length > 1"
@tab-change="handleChange" @tab-change="handleChange"
@tab-remove="removeTab($event)" @tab-remove="removeTab($event)"
type="border-card" type="border-card"
@ -17,18 +16,6 @@
</template> </template>
</el-tabs> </el-tabs>
</div> </div>
<!-- <el-dropdown @command="handleCommand">
<span class="flex items-center px-3">
<icon :size="16" name="el-icon-arrow-down" />
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="closeCurrent"> 关闭当前 </el-dropdown-item>
<el-dropdown-item command="closeOther"> 关闭其他 </el-dropdown-item>
<el-dropdown-item command="closeAll"> 关闭全部 </el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown> -->
</div> </div>
</template> </template>
@ -57,8 +44,6 @@ const handleChange = (fullPath: any) => {
router.push(getRouteParams(tabItem)); router.push(getRouteParams(tabItem));
}; };
console.log("tabsLists", tabsLists);
const handleCommand = (command: any) => { const handleCommand = (command: any) => {
switch (command) { switch (command) {
case "closeCurrent": case "closeCurrent":

6
src/layout/components/NoticeMessage.vue

@ -5,7 +5,7 @@
</el-badge> </el-badge>
<div class="ml-20">{{ notice.content }}</div> <div class="ml-20">{{ notice.content }}</div>
<audio src="/mp3/notice.mp3" ref="audioRef"></audio> <audio src="/mp3/todo.mp3" ref="todoAudioRef"></audio>
</div> </div>
</template> </template>
<script setup> <script setup>
@ -16,11 +16,11 @@ import { noticeTotal } from '@/api/notice'
initSocket() initSocket()
const audioRef = ref() const todoAudioRef = ref()
emitter.on('notice',()=>{ emitter.on('notice',()=>{
console.log('notice event') console.log('notice event')
getNoticeTotal() getNoticeTotal()
audioRef.value.play() todoAudioRef.value.play()
}) })
const total = ref(0) const total = ref(0)

3
src/permission.ts

@ -53,7 +53,6 @@ router.beforeEach(async (to, from, next) => {
} }
tabsStore.setRouteName(routeName!) tabsStore.setRouteName(routeName!)
INDEX_ROUTE.redirect = { name: routeName } INDEX_ROUTE.redirect = { name: routeName }
// 动态添加index路由 // 动态添加index路由
router.addRoute(INDEX_ROUTE) router.addRoute(INDEX_ROUTE)
@ -73,7 +72,7 @@ router.beforeEach(async (to, from, next) => {
} catch (err) { } catch (err) {
//ext({ ...to, replace: true }) //ext({ ...to, replace: true })
clearAuthInfo() clearAuthInfo()
next({ path: loginPath, query: { redirect: to.fullPath } }) next({ path: loginPath })
} }
} }
} else { } else {

2
src/stores/modules/multipleTabs.ts

@ -45,7 +45,6 @@ const findTabsIndex = (fullPath: string, tabList: TabItem[]) => {
} }
const getComponentName = (route: RouteLocationNormalized) => { const getComponentName = (route: RouteLocationNormalized) => {
console.log(route)
return route.matched.at(-1)?.components?.default?.name return route.matched.at(-1)?.components?.default?.name
} }
@ -85,7 +84,6 @@ const useTabsStore = defineStore({
if (componentName && this.cacheTabList.has(componentName)) { if (componentName && this.cacheTabList.has(componentName)) {
this.cacheTabList.delete(componentName) this.cacheTabList.delete(componentName)
} }
console.log(this.cacheTabList)
}, },
clearCache() { clearCache() {
this.cacheTabList.clear() this.cacheTabList.clear()

2
src/utils/echartsInstance.js

@ -426,14 +426,12 @@ const allOptions = {
} }
}, },
barOptions: (dataList) => { barOptions: (dataList) => {
console.log(dataList)
let length = dataList.series.length let length = dataList.series.length
if(dataList.series.length>6){ if(dataList.series.length>6){
dataList.xAxis = dataList.xAxis.slice(0,6) dataList.xAxis = dataList.xAxis.slice(0,6)
dataList.series = dataList.series.slice(0,6) dataList.series = dataList.series.slice(0,6)
}else if(dataList.series.length&&dataList.series.length<6){ }else if(dataList.series.length&&dataList.series.length<6){
for(var i=0;i<6-length;i++){ for(var i=0;i<6-length;i++){
console.log(i)
dataList.series.push(0) dataList.series.push(0)
dataList.xAxis.push('') dataList.xAxis.push('')
} }

14
src/views/home/components/MailTable.vue

@ -196,9 +196,13 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<audio loop ref="newMailAudioRef">
<source :src="NewMailMp3" type="audio/mpeg">
</audio>
</template> </template>
<script setup> <script setup>
import TabsTable from "./TabsTable.vue"; import TabsTable from "./TabsTable.vue";
import NewMailMp3 from '/mp3/new-mail.mp3'
import { useDictData } from "@/hooks/useDictOptions"; import { useDictData } from "@/hooks/useDictOptions";
import { getTodos } from "@/api/work"; import { getTodos } from "@/api/work";
@ -206,6 +210,7 @@ import { getDictLable, getFlowTagType } from "@/utils/util";
const { dictData } = useDictData(["mail_state"]); const { dictData } = useDictData(["mail_state"]);
import emitter from "@/utils/bus"; import emitter from "@/utils/bus";
import { nextTick } from "vue";
emitter.on('notice',()=>{ emitter.on('notice',()=>{
todoList() todoList()
@ -228,6 +233,14 @@ const todos = ref([]);
const superviseTodos = ref([]); const superviseTodos = ref([]);
const highTodos = ref([]); const highTodos = ref([]);
const showModel = ref(false); const showModel = ref(false);
const newMailAudioRef = ref()
watch(todos, (val) => {
nextTick(() => {
todos.value.filter(item => item.flowName === '待签收').length > 0 ? newMailAudioRef.value.play() : newMailAudioRef.value.pause()
})
})
todoList(); todoList();
function todoList() { function todoList() {
getTodos({ getTodos({
@ -261,6 +274,7 @@ function highTodoList() {
const activeMailId = ref(""); const activeMailId = ref("");
const activeWorkId = ref(0); const activeWorkId = ref(0);
const activeWorkType = ref(""); const activeWorkType = ref("");
function handleMail(row) { function handleMail(row) {
showModel.value = true; showModel.value = true;
activeMailId.value = row.mailId; activeMailId.value = row.mailId;

8
src/views/work/components/InitiateCountersign.vue

@ -105,6 +105,14 @@ const props = defineProps({
}, },
}); });
const selectLeaderVisible = ref(false); const selectLeaderVisible = ref(false);
watch(
() => props.mail.id,
(val) => {
formRef.value?.resetFields();
countersignDeptIds.value = [];
}
);
watch( watch(
() => props.flowKey, () => props.flowKey,
(val) => { (val) => {

13
src/views/work/components/MailDialog.vue

@ -154,7 +154,7 @@
item.createTime item.createTime
}}</span> }}</span>
<span class="mr-8">{{ <span class="mr-8">{{
item.handlerDeptName getFlowHandler(item)
}}</span> }}</span>
<span class="primary">{{ <span class="primary">{{
item.flowAfterName item.flowAfterName
@ -337,7 +337,7 @@
<el-button <el-button
size="large" size="large"
type="primary" type="primary"
@click="handleAction('countersign')" @click="handleAction('submitCountersign')"
>提交会签</el-button >提交会签</el-button
> >
</template> </template>
@ -589,7 +589,7 @@ watch(
if ( if (
requestData.value.mailFirstCategory === "无效类" || requestData.value.mailFirstCategory === "无效类" ||
requestData.value.mailFirstCategory === "终止类" || requestData.value.mailFirstCategory === "终止类" ||
requestData.value.mailFirstCategory === "感谢信" requestData.value.mailFirstCategory === "感谢信"
) { ) {
completionBtnFlag.value = true; completionBtnFlag.value = true;
} else { } else {
@ -774,6 +774,13 @@ function handleExtensionApprovalSubmit() {
handleExtensionApproval(false) handleExtensionApproval(false)
}) })
} }
function getFlowHandler(item) {
if (item.handlerRoleId === 1 || item.handlerRoleId === 2 || item.handlerRoleId === 3) {
return `${item.handlerDeptName}专班 ${item.handlerName}`
}
return `${item.handlerDeptName} ${item.handlerName}`
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.dialog-header { .dialog-header {

2
src/views/work/components/ReviewComments.vue

@ -57,7 +57,7 @@ const props = defineProps({
}, },
}); });
watch(() => props.mail.id, () => { watch(() => props.mail.id, () => {
form = reactive({}) formRef.value?.resetFields();
}) })
const selectLeaderVisible = ref(false) const selectLeaderVisible = ref(false)

7
src/views/work/components/templates/CountersignForm.vue

@ -28,7 +28,7 @@
</el-form-item> </el-form-item>
<div class="flex"> <div class="flex">
<div style="width: 50%"> <div style="width: 50%">
<el-form-item label="上传材料"> <el-form-item label="上传材料" prop="attachments">
<Upload v-model="form.attachments" /> <Upload v-model="form.attachments" />
</el-form-item> </el-form-item>
</div> </div>
@ -43,6 +43,7 @@
</template> </template>
<script setup> <script setup>
import feedback from "@/utils/feedback"; import feedback from "@/utils/feedback";
import { watch } from "vue";
const form = reactive({}) const form = reactive({})
const formRef = ref() const formRef = ref()
@ -65,6 +66,10 @@ const props = defineProps({
default: {}, default: {},
} }
}); });
watch(() => props.mail.id, () => {
formRef.value.resetFields();
form.attachments = []
})
const emits = defineEmits(["update:data"]); const emits = defineEmits(["update:data"]);

4
src/views/work/components/templates/MailTypeForm.vue

@ -16,7 +16,7 @@
label="信件等级" label="信件等级"
prop="mailLevel" prop="mailLevel"
v-if=" v-if="
form.mailCategory !== '感谢信' && form.mailCategory !== '感谢信' &&
form.mailCategory !== '无效类' && form.mailCategory !== '无效类' &&
form.mailCategory !== '终止类' form.mailCategory !== '终止类'
" "
@ -75,7 +75,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
label="下发单位" label="下发单位"
v-if="form.mailCategory === '感谢信'" v-if="form.mailCategory === '感谢信'"
> >
<div class="flex gap" style="width: 100%"> <div class="flex gap" style="width: 100%">
<el-select <el-select

87
src/views/work/components/templates/ThreeHandling.vue

@ -357,8 +357,18 @@
请上传核查办理报告处理反馈表及相关的法律文件比如受案回执立案决定书不予立案决定书等和佐证材料比如谈话笔录调解协议等 请上传核查办理报告处理反馈表及相关的法律文件比如受案回执立案决定书不予立案决定书等和佐证材料比如谈话笔录调解协议等
</div> </div>
<div> <div>
<a :href="`${VITE_API_URL}/api/file/download/template/《核查办理报告》.doc`" target="_blank" class="link">核查办理报告 下载</a> <a
<a :href="`${VITE_API_URL}/api/file/download/template/《处理反馈表》.doc`" target="_blank" class="link">处理反馈表 下载</a> :href="`${VITE_API_URL}/api/file/download/template/《核查办理报告》.doc`"
target="_blank"
class="link"
>核查办理报告 下载</a
>
<a
:href="`${VITE_API_URL}/api/file/download/template/《处理反馈表》.doc`"
target="_blank"
class="link"
>处理反馈表 下载</a
>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -544,26 +554,33 @@ if (props.mail.simpleFlowFlag) {
} }
const step = ref(1); const step = ref(1);
watch(
() => props.mail.id,
() => {
formRef.value.resetFields();
initForm()
}
);
watch( watch(
() => props.mail.flowKey, () => props.mail.flowKey,
() => { () => {
updateStep(); updateStep();
} }
); );
watch( watch(
() => props.mail.coHandlingPolices, () => props.mail.coHandlingPolices,
(val) => updateCoHandlingPolices); (val) => updateCoHandlingPolices
);
if (props.mail.coHandlingPolices) { if (props.mail.coHandlingPolices) {
updateCoHandlingPolices() updateCoHandlingPolices();
} }
function updateCoHandlingPolices() { function updateCoHandlingPolices() {
const data = { ...props.data}; const data = { ...props.data };
data.coHandlingPolices = props.mail.coHandlingPolices data.coHandlingPolices = props.mail.coHandlingPolices;
emits("update:data", data); emits("update:data", data);
} }
@ -614,8 +631,8 @@ function getDepts(mail) {
depts.value = []; depts.value = [];
depts.value.push({ depts.value.push({
id: mail.threeDeptId, id: mail.threeDeptId,
name: mail.threeDeptName name: mail.threeDeptName,
}) });
} }
} }
@ -635,28 +652,33 @@ function handleChangePolice(val, index) {
reportedPolices.value[index].name = police.name; reportedPolices.value[index].name = police.name;
} }
const form = ref({ const form = ref({});
contactPolice: props.mail.contactPolice,
contactFlag: props.mail.contactFlag, initForm();
contactTime: props.mail.contactTime, function initForm() {
contactDuration: props.mail.contactDuration, form.value = {
// 访 contactPolice: props.mail.contactPolice,
interviewType: props.mail.verifyDetails, contactFlag: props.mail.contactFlag,
interviewIsLeader: props.mail.interviewIsLeader, contactTime: props.mail.contactTime,
interviewPoliceEmpNo: props.mail.interviewPoliceEmpNo, contactDuration: props.mail.contactDuration,
interviewDetails: props.mail.interviewDetails, // 访
interviewAttachments: props.mail.interviewAttachments, interviewType: props.mail.verifyDetails,
// interviewIsLeader: props.mail.interviewIsLeader,
verifyDetails: props.mail.verifyDetails, interviewPoliceEmpNo: props.mail.interviewPoliceEmpNo,
verifyIsTrue: props.mail.verifyIsTrue, interviewDetails: props.mail.interviewDetails,
verifyProblem: props.mail.verifyProblem || [], interviewAttachments: props.mail.interviewAttachments,
verifyNeedAccountability: props.mail.verifyNeedAccountability, //
verifyIsResolved: props.mail.verifyIsResolved, verifyDetails: props.mail.verifyDetails,
verifyFeedback: props.mail.verifyFeedback, verifyIsTrue: props.mail.verifyIsTrue,
verifyFollowupPolice: props.mail.verifyFollowupPolice, verifyProblem: props.mail.verifyProblem || [],
verifyAttachments: props.mail.verifyAttachments || [], verifyNeedAccountability: props.mail.verifyNeedAccountability,
verifyPunish: props.mail.verifyPunish || [], verifyIsResolved: props.mail.verifyIsResolved,
}); verifyFeedback: props.mail.verifyFeedback,
verifyFollowupPolice: props.mail.verifyFollowupPolice,
verifyAttachments: props.mail.verifyAttachments || [],
verifyPunish: props.mail.verifyPunish || [],
};
}
const reportedPolices = ref([]); const reportedPolices = ref([]);
const formRef = ref(); const formRef = ref();
@ -721,5 +743,4 @@ span[danger="true"] {
p { p {
margin: 0; margin: 0;
} }
</style> </style>
Loading…
Cancel
Save