|
|
|
<template>
|
|
|
|
<main :class="['aui-content', { 'aui-content--tabs': $route.meta.isTab }]">
|
|
|
|
<!-- tab展示内容 -->
|
|
|
|
<template v-if="$route.meta.isTab && !$store.state.inIframe">
|
|
|
|
<el-dropdown class="aui-content--tabs-tools">
|
|
|
|
<i class="el-icon-arrow-down"></i>
|
|
|
|
<el-dropdown-menu slot="dropdown" :show-timeout="0">
|
|
|
|
<el-dropdown-item
|
|
|
|
@click.native="tabRemoveHandle($store.state.contentTabsActiveName)"
|
|
|
|
>{{ $t("contentTabs.closeCurrent") }}</el-dropdown-item
|
|
|
|
>
|
|
|
|
<el-dropdown-item @click.native="tabsCloseOtherHandle()">{{
|
|
|
|
$t("contentTabs.closeOther")
|
|
|
|
}}</el-dropdown-item>
|
|
|
|
<el-dropdown-item @click.native="tabsCloseAllHandle()">{{
|
|
|
|
$t("contentTabs.closeAll")
|
|
|
|
}}</el-dropdown-item>
|
|
|
|
</el-dropdown-menu>
|
|
|
|
</el-dropdown>
|
|
|
|
<el-tabs
|
|
|
|
v-model="$store.state.contentTabsActiveName"
|
|
|
|
@tab-click="tabSelectedHandle"
|
|
|
|
@tab-remove="tabRemoveHandle"
|
|
|
|
>
|
|
|
|
<el-tab-pane
|
|
|
|
v-for="item in $store.state.contentTabs"
|
|
|
|
:key="item.name"
|
|
|
|
:name="item.name"
|
|
|
|
:label="item.title"
|
|
|
|
:closable="item.name !== 'indexWork'"
|
|
|
|
:class="{ 'is-iframe': tabIsIframe(item.iframeURL) }"
|
|
|
|
>
|
|
|
|
<template v-if="item.name === 'indexWork'">
|
|
|
|
<svg
|
|
|
|
slot="label"
|
|
|
|
class="icon-svg aui-content--tabs-icon-nav"
|
|
|
|
aria-hidden="true"
|
|
|
|
>
|
|
|
|
<use xlink:href="#icon-home"></use>
|
|
|
|
</svg>
|
|
|
|
</template>
|
|
|
|
<template v-if="tabIsIframe(item.iframeURL)">
|
|
|
|
<iframe
|
|
|
|
:src="
|
|
|
|
item.iframeURL + '?token=' + token + '&customerId=' + customerId
|
|
|
|
"
|
|
|
|
ref="iframes"
|
|
|
|
class="iframes"
|
|
|
|
id="iframes"
|
|
|
|
width="100%"
|
|
|
|
height="100%"
|
|
|
|
frameborder="0"
|
|
|
|
scrolling="yes"
|
|
|
|
></iframe>
|
|
|
|
<!-- <div v-if="tabIsIframe(item.iframeURL)" id="addend-iframe" style="height: 100%;"> </div> -->
|
|
|
|
</template>
|
|
|
|
<keep-alive v-else>
|
|
|
|
<router-view
|
|
|
|
v-if="item.name === $store.state.contentTabsActiveName"
|
|
|
|
@changeCustomerName="changeCustomerName"
|
|
|
|
/>
|
|
|
|
</keep-alive>
|
|
|
|
</el-tab-pane>
|
|
|
|
</el-tabs>
|
|
|
|
</template>
|
|
|
|
<!-- 其他方式, 展示内容 -->
|
|
|
|
<template v-else>
|
|
|
|
<keep-alive>
|
|
|
|
<router-view />
|
|
|
|
</keep-alive>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<template v-for="(item, index) in msgList">
|
|
|
|
<Tips :key="item.memoId"
|
|
|
|
:info="item"
|
|
|
|
:show="msgList.length > 0 ? true : false"
|
|
|
|
@look="handleLook(item, index)" @close="handleClose(item, index)" />
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<el-dialog :title="dialogTitle"
|
|
|
|
:visible.sync="dialogFormVisible"
|
|
|
|
:close-on-click-modal="false"
|
|
|
|
top="5vh"
|
|
|
|
width="70%"
|
|
|
|
class="dialog-h"
|
|
|
|
append-to-body>
|
|
|
|
<work-form v-if="formType == 'work_diary'" ref="ref_form"
|
|
|
|
@dialogCancle="dialogFormVisible = false; formType=''" />
|
|
|
|
|
|
|
|
<h-form v-if="formType == 'concern'" ref="concern_form"
|
|
|
|
@dialogCancle="dialogFormVisible = false; formType=''" />
|
|
|
|
|
|
|
|
<d-form v-if="formType == 'difficulty'" ref="difficulty_form"
|
|
|
|
@dialogCancle="dialogFormVisible = false; formType=''" />
|
|
|
|
|
|
|
|
</el-dialog>
|
|
|
|
</main>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import { isURL } from "@/utils/validate";
|
|
|
|
import Cookie from "js-cookie";
|
|
|
|
import Tips from './tips.vue'
|
|
|
|
import { requestPost } from "@/js/dai/request";
|
|
|
|
import workForm from './modules/secretaryLog/workLog/form.vue'
|
|
|
|
import dForm from './modules/secretaryLog/difficulty/difficultyForm.vue'
|
|
|
|
import hForm from './modules/secretaryLog/humanisticCare/careForm.vue'
|
|
|
|
export default {
|
|
|
|
components: {
|
|
|
|
Tips,
|
|
|
|
workForm,
|
|
|
|
dForm,
|
|
|
|
hForm
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
dialogTitle: '',
|
|
|
|
dialogFormVisible: false,
|
|
|
|
iframeUrl: "",
|
|
|
|
token: "",
|
|
|
|
customerId: "",
|
|
|
|
form: {},
|
|
|
|
formType: '',
|
|
|
|
formLabelWidth: '120px',
|
|
|
|
tipsList: []
|
|
|
|
};
|
|
|
|
},
|
|
|
|
created() {
|
|
|
|
// this.$nextTick(() => {
|
|
|
|
// this.sendMessage()
|
|
|
|
// })
|
|
|
|
this.token = localStorage.getItem("token");
|
|
|
|
this.customerId = localStorage.getItem("customerId");
|
|
|
|
|
|
|
|
this.loopTips()
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
msgList() {
|
|
|
|
return this.$store.state.tipsList
|
|
|
|
}
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
changeCustomerName(customerName) {
|
|
|
|
this.$emit("changeCustomerName", customerName);
|
|
|
|
},
|
|
|
|
// tabs, 是否通过iframe展示
|
|
|
|
tabIsIframe(url) {
|
|
|
|
// this.appendIframe(url)
|
|
|
|
this.iframeUrl =
|
|
|
|
url +
|
|
|
|
"?token=" +
|
|
|
|
localStorage.getItem("token") +
|
|
|
|
"&customerId=" +
|
|
|
|
localStorage.getItem("customerId");
|
|
|
|
return isURL(url);
|
|
|
|
},
|
|
|
|
// tabs, 选中tab
|
|
|
|
tabSelectedHandle(tab) {
|
|
|
|
tab = this.$store.state.contentTabs.filter(
|
|
|
|
(item) => item.name === tab.name
|
|
|
|
)[0];
|
|
|
|
if (tab) {
|
|
|
|
this.$router.push({
|
|
|
|
name: tab.name,
|
|
|
|
params: { ...tab.params },
|
|
|
|
query: { ...tab.query },
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// tabs, 删除tab
|
|
|
|
tabRemoveHandle(tabName) {
|
|
|
|
if (tabName === "home") {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
|
|
|
|
(item) => item.name !== tabName
|
|
|
|
);
|
|
|
|
if (this.$store.state.contentTabs.length <= 0) {
|
|
|
|
this.$store.state.sidebarMenuActiveName =
|
|
|
|
this.$store.state.contentTabsActiveName = "home";
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
// 当前选中tab被删除
|
|
|
|
if (tabName === this.$store.state.contentTabsActiveName) {
|
|
|
|
let tab =
|
|
|
|
this.$store.state.contentTabs[
|
|
|
|
this.$store.state.contentTabs.length - 1
|
|
|
|
];
|
|
|
|
this.$router.push({
|
|
|
|
name: tab.name,
|
|
|
|
params: { ...tab.params },
|
|
|
|
query: { ...tab.query },
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
// tabs, 关闭其它
|
|
|
|
tabsCloseOtherHandle() {
|
|
|
|
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
|
|
|
|
(item) => {
|
|
|
|
return (
|
|
|
|
item.name === "home" ||
|
|
|
|
item.name === this.$store.state.contentTabsActiveName
|
|
|
|
);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
// tabs, 关闭全部
|
|
|
|
tabsCloseAllHandle() {
|
|
|
|
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
|
|
|
|
(item) => item.name === "home"
|
|
|
|
);
|
|
|
|
this.$router.push({ name: "home" });
|
|
|
|
},
|
|
|
|
sendMessage() {
|
|
|
|
// const iframe = this.$refs.iframes.contentWindow
|
|
|
|
const iframe =
|
|
|
|
document.getElementsByClassName("iframes")[0].contentWindow;
|
|
|
|
|
|
|
|
console.log("iframe", iframe);
|
|
|
|
// iframe.postMessage({
|
|
|
|
// token: localStorage.getItem('token'),
|
|
|
|
// customerId: localStorage.getItem('customerId')
|
|
|
|
// }, '*')
|
|
|
|
iframe.postMessage({ name: "lalalal" }, "*");
|
|
|
|
},
|
|
|
|
loopTips() {
|
|
|
|
this.$store.dispatch('setTipsList')
|
|
|
|
this.$store.dispatch('setTipsTime')
|
|
|
|
// let id = 1
|
|
|
|
// this.timer = setInterval(() => {
|
|
|
|
// id = id + 1
|
|
|
|
// if (id == 5) clearInterval(this.timer)
|
|
|
|
// this.tipsList.push(id)
|
|
|
|
// console.log('id------0', id)
|
|
|
|
// }, 1000)
|
|
|
|
},
|
|
|
|
async closeTips(memoId) {
|
|
|
|
const url = '/gov/project/memoAttr/setReaded'
|
|
|
|
const params = {
|
|
|
|
memoId
|
|
|
|
}
|
|
|
|
const { data, code, msg } = await requestPost(url, params)
|
|
|
|
if (code != 0) this.$message.error(msg)
|
|
|
|
},
|
|
|
|
async getInfo(item) {
|
|
|
|
const urls = {
|
|
|
|
work_diary: '/gov/project/memoWorkDiary',
|
|
|
|
concern: '/gov/project/memoConcern',
|
|
|
|
difficulty: '/gov/project/memoDifficulty/detail'
|
|
|
|
}
|
|
|
|
const params = {
|
|
|
|
id: item.memoId,
|
|
|
|
readFlag: 0
|
|
|
|
}
|
|
|
|
const { data, code, msg } = await requestPost(urls[item.type], params)
|
|
|
|
if (code == 0) {
|
|
|
|
this.form = { ...data }
|
|
|
|
} else this.$message.error(msg)
|
|
|
|
},
|
|
|
|
handleClose(item, index) {
|
|
|
|
console.log('close-----', item)
|
|
|
|
this.$store.state.tipsList.splice(index, 1)
|
|
|
|
this.closeTips(item.memoId)
|
|
|
|
},
|
|
|
|
async handleLook(item, index) {
|
|
|
|
console.log('look-----', item)
|
|
|
|
const formType = {
|
|
|
|
work_diary: 'ref_form',
|
|
|
|
concern: 'concern_form',
|
|
|
|
difficulty: 'difficulty_form'
|
|
|
|
}
|
|
|
|
this.dialogTitle = item.typeName
|
|
|
|
// await this.getInfo(item)
|
|
|
|
this.formType = item.type
|
|
|
|
this.dialogFormVisible = true
|
|
|
|
|
|
|
|
console.log('ref0-----', this.formType)
|
|
|
|
this.$nextTick(() => {
|
|
|
|
console.log('this.$refs-----', this.$refs)
|
|
|
|
this.$refs[formType[item.type]].initForm('look', item.memoId)
|
|
|
|
this.$store.state.tipsList.splice(index, 1)
|
|
|
|
this.closeTips(item.memoId)
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.aui-content {
|
|
|
|
position: relative;
|
|
|
|
// height: calc(100vh -50px) !important;
|
|
|
|
overflow: hidden;
|
|
|
|
}
|
|
|
|
|
|
|
|
</style>
|