prod
|
@ -2,5 +2,5 @@
|
||||||
ENV = 'production'
|
ENV = 'production'
|
||||||
|
|
||||||
# base api
|
# base api
|
||||||
VUE_APP_BASE_API = '/prod-api'
|
VUE_APP_BASE_API = 'http://api.rt.myntv.cn/'
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-breadcrumb class="app-breadcrumb" separator="/">
|
<el-breadcrumb class="app-breadcrumb" separator="/" v-if="levelList[0].meta.title!=='首页'">
|
||||||
<transition-group name="breadcrumb">
|
<transition-group name="breadcrumb" >
|
||||||
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
|
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
|
||||||
<span
|
<span
|
||||||
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
|
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
|
||||||
|
@ -42,19 +42,20 @@ export default {
|
||||||
);
|
);
|
||||||
const first = matched[0];
|
const first = matched[0];
|
||||||
|
|
||||||
if (!this.isDashboard(first)) {
|
// if (!this.isDashboard(first)) {
|
||||||
matched = [{ path: "/dashboard", meta: { title: "首页" } }].concat(
|
// matched = [{ path: "/dashboard", meta: { title: "首页" } }].concat(
|
||||||
matched
|
// matched
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
|
|
||||||
this.levelList = matched.filter(
|
this.levelList = matched.filter(
|
||||||
item => item.meta && item.meta.title && item.meta.breadcrumb !== false
|
item => item.meta && item.meta.title && item.meta.breadcrumb !== false
|
||||||
);
|
);
|
||||||
// console.log(this.levelList);
|
// if(first.)
|
||||||
if (this.levelList.length > 1) {
|
// console.log(first.meta.title);
|
||||||
this.levelList.splice(0, 1);
|
// if (this.levelList.length > 1) {
|
||||||
}
|
// this.levelList.splice(0, 1);
|
||||||
|
// }
|
||||||
},
|
},
|
||||||
isDashboard(route) {
|
isDashboard(route) {
|
||||||
const name = route && route.name;
|
const name = route && route.name;
|
||||||
|
|
|
@ -27,7 +27,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
linkProps(to) {
|
linkProps(to) {
|
||||||
console.log(to);
|
// console.log(to);
|
||||||
if (this.isExternal) {
|
if (this.isExternal) {
|
||||||
return {
|
return {
|
||||||
href: to,
|
href: to,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
|
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
|
||||||
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
|
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
|
||||||
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
|
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
|
||||||
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
|
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.parentTitle?onlyOneChild.meta.parentTitle:onlyOneChild.meta.title" />
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</app-link>
|
</app-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 889 B |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 789 B |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 807 B |
|
@ -1,26 +0,0 @@
|
||||||
export default {
|
|
||||||
computed: {
|
|
||||||
device() {
|
|
||||||
return this.$store.state.app.device
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
// In order to fix the click on menu on the ios device will trigger the mouseleave bug
|
|
||||||
// https://github.com/PanJiaChen/vue-element-admin/issues/1135
|
|
||||||
this.fixBugIniOS()
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
fixBugIniOS() {
|
|
||||||
const $subMenu = this.$refs.subMenu
|
|
||||||
if ($subMenu) {
|
|
||||||
const handleMouseleave = $subMenu.handleMouseleave
|
|
||||||
$subMenu.handleMouseleave = (e) => {
|
|
||||||
if (this.device === 'mobile') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
handleMouseleave(e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'MenuItem',
|
|
||||||
functional: true,
|
|
||||||
props: {
|
|
||||||
icon: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
render(h, context) {
|
|
||||||
const { icon, title } = context.props
|
|
||||||
const vnodes = []
|
|
||||||
|
|
||||||
if (icon) {
|
|
||||||
if (icon.includes('el-icon')) {
|
|
||||||
vnodes.push(<i class={[icon, 'sub-el-icon']} />)
|
|
||||||
} else {
|
|
||||||
vnodes.push(
|
|
||||||
<div
|
|
||||||
class='menuIcon'
|
|
||||||
style='width:53px;height:53px;background:#9cbeff;border-radius:22px;display:flex;align-items: center;justify-content: center;'
|
|
||||||
>
|
|
||||||
<svg-icon icon-class={icon} />
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
// vnodes.push(<svg-icon icon-class={icon}/>)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (title) {
|
|
||||||
vnodes.push(<span slot='title'>{title}</span>)
|
|
||||||
}
|
|
||||||
return vnodes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.sub-el-icon {
|
|
||||||
color: currentColor;
|
|
||||||
width: 1em;
|
|
||||||
height: 1em;
|
|
||||||
/* width: 53px; */
|
|
||||||
/* height: 53px; */
|
|
||||||
}
|
|
||||||
#app .sidebar-container .svg-icon {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* .menuitem {
|
|
||||||
|
|
||||||
} */
|
|
||||||
/* .menuIcon .svg-icon{
|
|
||||||
margin-left: 0;
|
|
||||||
} */
|
|
||||||
</style>
|
|
|
@ -1,43 +0,0 @@
|
||||||
<template>
|
|
||||||
<component :is="type" v-bind="linkProps(to)">
|
|
||||||
<slot />
|
|
||||||
</component>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { isExternal } from '@/utils/validate'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
props: {
|
|
||||||
to: {
|
|
||||||
type: String,
|
|
||||||
required: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
isExternal() {
|
|
||||||
return isExternal(this.to)
|
|
||||||
},
|
|
||||||
type() {
|
|
||||||
if (this.isExternal) {
|
|
||||||
return 'a'
|
|
||||||
}
|
|
||||||
return 'router-link'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
linkProps(to) {
|
|
||||||
if (this.isExternal) {
|
|
||||||
return {
|
|
||||||
href: to,
|
|
||||||
target: '_blank',
|
|
||||||
rel: 'noopener'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
to: to
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
|
@ -1,82 +0,0 @@
|
||||||
<template>
|
|
||||||
<div class="sidebar-logo-container" :class="{'collapse':collapse}">
|
|
||||||
<transition name="sidebarLogoFade">
|
|
||||||
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
|
|
||||||
<img v-if="logo" :src="logo" class="sidebar-logo">
|
|
||||||
<h1 v-else class="sidebar-title">{{ title }} </h1>
|
|
||||||
</router-link>
|
|
||||||
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
|
|
||||||
<img v-if="logo" :src="logo" class="sidebar-logo">
|
|
||||||
<h1 class="sidebar-title">{{ title }} </h1>
|
|
||||||
</router-link>
|
|
||||||
</transition>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
name: 'SidebarLogo',
|
|
||||||
props: {
|
|
||||||
collapse: {
|
|
||||||
type: Boolean,
|
|
||||||
required: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
title: '定点服务系统',
|
|
||||||
logo: 'https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.sidebarLogoFade-enter-active {
|
|
||||||
transition: opacity 1.5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebarLogoFade-enter,
|
|
||||||
.sidebarLogoFade-leave-to {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sidebar-logo-container {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
height: 50px;
|
|
||||||
line-height: 50px;
|
|
||||||
background: #2b2f3a;
|
|
||||||
text-align: center;
|
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
& .sidebar-logo-link {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
& .sidebar-logo {
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-right: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
& .sidebar-title {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0;
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 600;
|
|
||||||
line-height: 50px;
|
|
||||||
font-size: 14px;
|
|
||||||
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.collapse {
|
|
||||||
.sidebar-logo {
|
|
||||||
margin-right: 0px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -1,95 +0,0 @@
|
||||||
<template>
|
|
||||||
<div v-if="!item.hidden">
|
|
||||||
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
|
|
||||||
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
|
|
||||||
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
|
|
||||||
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
|
|
||||||
</el-menu-item>
|
|
||||||
</app-link>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
|
|
||||||
<template slot="title">
|
|
||||||
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
|
|
||||||
</template>
|
|
||||||
<sidebar-item
|
|
||||||
v-for="child in item.children"
|
|
||||||
:key="child.path"
|
|
||||||
:is-nest="true"
|
|
||||||
:item="child"
|
|
||||||
:base-path="resolvePath(child.path)"
|
|
||||||
class="nest-menu"
|
|
||||||
/>
|
|
||||||
</el-submenu>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import path from 'path'
|
|
||||||
import { isExternal } from '@/utils/validate'
|
|
||||||
import Item from './Item'
|
|
||||||
import AppLink from './Link'
|
|
||||||
import FixiOSBug from './FixiOSBug'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'SidebarItem',
|
|
||||||
components: { Item, AppLink },
|
|
||||||
mixins: [FixiOSBug],
|
|
||||||
props: {
|
|
||||||
// route object
|
|
||||||
item: {
|
|
||||||
type: Object,
|
|
||||||
required: true
|
|
||||||
},
|
|
||||||
isNest: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
basePath: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
// To fix https://github.com/PanJiaChen/vue-admin-template/issues/237
|
|
||||||
// TODO: refactor with render function
|
|
||||||
this.onlyOneChild = null
|
|
||||||
return {}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
hasOneShowingChild(children = [], parent) {
|
|
||||||
const showingChildren = children.filter(item => {
|
|
||||||
if (item.hidden) {
|
|
||||||
return false
|
|
||||||
} else {
|
|
||||||
// Temp set(will be used if only has one showing child)
|
|
||||||
this.onlyOneChild = item
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// When there is only one child router, the child router is displayed by default
|
|
||||||
if (showingChildren.length === 1) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show parent if there are no child router to display
|
|
||||||
if (showingChildren.length === 0) {
|
|
||||||
this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
},
|
|
||||||
resolvePath(routePath) {
|
|
||||||
if (isExternal(routePath)) {
|
|
||||||
return routePath
|
|
||||||
}
|
|
||||||
if (isExternal(this.basePath)) {
|
|
||||||
return this.basePath
|
|
||||||
}
|
|
||||||
return path.resolve(this.basePath, routePath)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
|
@ -1,63 +0,0 @@
|
||||||
<template>
|
|
||||||
<div :class="{'has-logo':showLogo}">
|
|
||||||
<logo v-if="showLogo" :collapse="isCollapse" />
|
|
||||||
<el-scrollbar wrap-class="scrollbar-wrapper">
|
|
||||||
<el-menu
|
|
||||||
:default-active="activeMenu"
|
|
||||||
:collapse="isCollapse"
|
|
||||||
:background-color="variables.menuBg"
|
|
||||||
:text-color="variables.menuText"
|
|
||||||
:unique-opened="false"
|
|
||||||
:active-text-color="variables.menuActiveText"
|
|
||||||
:collapse-transition="false"
|
|
||||||
mode="vertical"
|
|
||||||
>
|
|
||||||
<sidebar-item v-for="route in permission_routes" :key="route.path" :item="route" :base-path="route.path" />
|
|
||||||
</el-menu>
|
|
||||||
</el-scrollbar>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { mapGetters } from 'vuex'
|
|
||||||
import Logo from './Logo'
|
|
||||||
import SidebarItem from './SidebarItem'
|
|
||||||
import variables from '@/styles/variables.scss'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
components: { SidebarItem, Logo },
|
|
||||||
computed: {
|
|
||||||
...mapGetters([
|
|
||||||
'permission_routes',
|
|
||||||
'sidebar'
|
|
||||||
]),
|
|
||||||
activeMenu() {
|
|
||||||
const route = this.$route
|
|
||||||
const { meta, path } = route
|
|
||||||
// if set path, the sidebar will highlight the path you set
|
|
||||||
if (meta.activeMenu) {
|
|
||||||
return meta.activeMenu
|
|
||||||
}
|
|
||||||
return path
|
|
||||||
},
|
|
||||||
showLogo() {
|
|
||||||
return this.$store.state.settings.sidebarLogo
|
|
||||||
},
|
|
||||||
variables() {
|
|
||||||
return variables
|
|
||||||
},
|
|
||||||
isCollapse() {
|
|
||||||
return !this.sidebar.opened
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style scoped>
|
|
||||||
/* .el-menu-item {
|
|
||||||
height: 153px;
|
|
||||||
justify-content: center;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
} */
|
|
||||||
</style>
|
|
|
@ -1,16 +1,16 @@
|
||||||
import Vue from 'vue'
|
import Vue from "vue";
|
||||||
import Router from 'vue-router'
|
import Router from "vue-router";
|
||||||
|
|
||||||
Vue.use(Router)
|
Vue.use(Router);
|
||||||
|
|
||||||
/* Layout */
|
/* Layout */
|
||||||
import Layout from '@/layout'
|
import Layout from "@/layout";
|
||||||
|
|
||||||
/* Router Modules */
|
/* Router Modules */
|
||||||
import componentsRouter from './modules/components'
|
import componentsRouter from "./modules/components";
|
||||||
import chartsRouter from './modules/charts'
|
import chartsRouter from "./modules/charts";
|
||||||
import tableRouter from './modules/table'
|
import tableRouter from "./modules/table";
|
||||||
import nestedRouter from './modules/nested'
|
import nestedRouter from "./modules/nested";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note: sub-menu only appear when route children.length >= 1
|
* Note: sub-menu only appear when route children.length >= 1
|
||||||
|
@ -40,106 +40,121 @@ import nestedRouter from './modules/nested'
|
||||||
*/
|
*/
|
||||||
export const constantRoutes = [
|
export const constantRoutes = [
|
||||||
{
|
{
|
||||||
path: '/redirect',
|
path: "/redirect",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
hidden: true,
|
hidden: true,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/redirect/:path(.*)',
|
path: "/redirect/:path(.*)",
|
||||||
component: () => import('@/views/redirect/index')
|
component: () => import("@/views/redirect/index")
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/login',
|
path: "/login",
|
||||||
component: () => import('@/views/login/index'),
|
component: () => import("@/views/login/index"),
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/auth-redirect',
|
path: "/auth-redirect",
|
||||||
component: () => import('@/views/login/auth-redirect'),
|
component: () => import("@/views/login/auth-redirect"),
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/404',
|
path: "/404",
|
||||||
component: () => import('@/views/error-page/404'),
|
component: () => import("@/views/error-page/404"),
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/401',
|
path: "/401",
|
||||||
component: () => import('@/views/error-page/401'),
|
component: () => import("@/views/error-page/401"),
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/',
|
path: "/",
|
||||||
name: 'Dashboard',
|
name: "Dashboard",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/dashboard',
|
redirect: "/dashboard",
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'dashboard',
|
path: "dashboard",
|
||||||
component: () => import('@/views/dashboard/index'),
|
component: () => import("@/views/dashboard/index"),
|
||||||
name: 'Dashboard',
|
name: "Dashboard",
|
||||||
meta: { title: '首页', icon: 'statistical', affix: true }
|
meta: { title: "首页", icon: "statistical", affix: true }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/convenience',
|
path: "/convenience",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
name: 'Convenience',
|
name: "Convenience",
|
||||||
redirect: '/convenience/list',
|
redirect: "/convenience/list",
|
||||||
meta: {
|
meta: {
|
||||||
title: '工单管理',
|
title: "工单管理",
|
||||||
icon: 'convenience',
|
icon: "convenience",
|
||||||
roles: ['admin', 'editor']
|
roles: ["admin", "editor"]
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'list',
|
path: "list",
|
||||||
component: () => import('@/views/convenience/list'),
|
component: () => import("@/views/convenience/list"),
|
||||||
name: 'ConvenienceList',
|
name: "ConvenienceList",
|
||||||
meta: { title: '工单列表', icon: 'convenience', affix: true }
|
meta: {
|
||||||
|
title: "工单列表",
|
||||||
|
icon: "convenience",
|
||||||
|
affix: true,
|
||||||
|
parentTitle: "工单管理"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'add',
|
path: "add",
|
||||||
component: () => import('@/views/convenience/add'),
|
component: () => import("@/views/convenience/add"),
|
||||||
name: 'ConvenienceList',
|
name: "ConvenienceList",
|
||||||
meta: { title: '创建工单', icon: 'convenience', affix: true },
|
meta: { title: "创建工单", icon: "convenience", affix: true },
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'detail',
|
path: "detail",
|
||||||
component: () => import('@/views/convenience/detail'),
|
component: () => import("@/views/convenience/detail"),
|
||||||
name: 'ConvenienceDetail',
|
name: "ConvenienceDetail",
|
||||||
meta: { title: '工单详情', icon: 'convenience', affix: true ,activeMenu:'/convenience/list'},
|
meta: {
|
||||||
|
title: "工单详情",
|
||||||
|
icon: "convenience",
|
||||||
|
affix: true,
|
||||||
|
activeMenu: "/convenience/list"
|
||||||
|
},
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'typeList',
|
path: "typeList",
|
||||||
component: () => import('@/views/convenience/typeList'),
|
component: () => import("@/views/convenience/typeList"),
|
||||||
name: 'ConvenienceTypeList',
|
name: "ConvenienceTypeList",
|
||||||
meta: { title: '工单类型列表', icon: 'convenience', affix: true },
|
meta: { title: "工单类型列表", icon: "convenience", affix: true },
|
||||||
hidden: true
|
hidden: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/workBook',
|
path: "/workBook",
|
||||||
component: Layout,
|
component: Layout,
|
||||||
name: 'WorkBook',
|
name: "WorkBook",
|
||||||
redirect: '/workBook/list',
|
redirect: "/workBook/list",
|
||||||
meta: {
|
meta: {
|
||||||
title: '工作手册',
|
title: "工作手册管理",
|
||||||
icon: 'list',
|
icon: "list",
|
||||||
roles: ['admin', 'editor']
|
roles: ["admin", "editor"]
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'list',
|
path: "list",
|
||||||
component: () => import('@/views/workBook/list'),
|
component: () => import("@/views/workBook/list"),
|
||||||
name: 'workBookList',
|
name: "workBookList",
|
||||||
meta: { title: '工作手册列表', icon: 'workBook', affix: true }
|
meta: {
|
||||||
|
title: "工作手册列表",
|
||||||
|
icon: "workBook",
|
||||||
|
affix: true,
|
||||||
|
parentTitle: "工作手册管理"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -200,7 +215,7 @@ export const constantRoutes = [
|
||||||
// }
|
// }
|
||||||
// ]
|
// ]
|
||||||
// }
|
// }
|
||||||
]
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* asyncRoutes
|
* asyncRoutes
|
||||||
|
@ -462,22 +477,22 @@ export const asyncRoutes = [
|
||||||
// },
|
// },
|
||||||
|
|
||||||
// 404 page must be placed at the end !!!
|
// 404 page must be placed at the end !!!
|
||||||
{ path: '*', redirect: '/404', hidden: true }
|
{ path: "*", redirect: "/404", hidden: true }
|
||||||
]
|
];
|
||||||
|
|
||||||
const createRouter = () =>
|
const createRouter = () =>
|
||||||
new Router({
|
new Router({
|
||||||
// mode: 'history', // require service support
|
// mode: 'history', // require service support
|
||||||
scrollBehavior: () => ({ y: 0 }),
|
scrollBehavior: () => ({ y: 0 }),
|
||||||
routes: constantRoutes
|
routes: constantRoutes
|
||||||
})
|
});
|
||||||
|
|
||||||
const router = createRouter()
|
const router = createRouter();
|
||||||
|
|
||||||
// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
|
// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
|
||||||
export function resetRouter() {
|
export function resetRouter() {
|
||||||
const newRouter = createRouter()
|
const newRouter = createRouter();
|
||||||
router.matcher = newRouter.matcher // reset router
|
router.matcher = newRouter.matcher; // reset router
|
||||||
}
|
}
|
||||||
|
|
||||||
export default router
|
export default router;
|
||||||
|
|
|
@ -20,8 +20,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="办事项目">
|
<el-form-item label="办事项目">
|
||||||
<!-- <el-input v-model="convenience.eventTypeId"></el-input> -->
|
<!-- <el-cascader
|
||||||
<el-cascader
|
|
||||||
v-model="convenience.eventTypeId"
|
v-model="convenience.eventTypeId"
|
||||||
:options="typeOptions"
|
:options="typeOptions"
|
||||||
:show-all-levels="false"
|
:show-all-levels="false"
|
||||||
|
@ -29,7 +28,16 @@
|
||||||
placeholder="选择大项目"
|
placeholder="选择大项目"
|
||||||
style="width:100%"
|
style="width:100%"
|
||||||
clearable
|
clearable
|
||||||
/>
|
/> -->
|
||||||
|
<el-select v-model="convenience.eventTypeId" placeholder="请选择">
|
||||||
|
<el-option
|
||||||
|
v-for="item in typeOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.eventName"
|
||||||
|
:value="item.id"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="文字说明">
|
<el-form-item label="文字说明">
|
||||||
|
@ -43,22 +51,6 @@
|
||||||
|
|
||||||
<el-form-item label="附件">
|
<el-form-item label="附件">
|
||||||
<AliOss v-model="convenience.attachment" multiple />
|
<AliOss v-model="convenience.attachment" multiple />
|
||||||
<!-- <el-upload
|
|
||||||
class="upload-demo"
|
|
||||||
action="https://jsonplaceholder.typicode.com/posts/"
|
|
||||||
:on-preview="handlePreview"
|
|
||||||
:on-remove="handleRemove"
|
|
||||||
:before-remove="beforeRemove"
|
|
||||||
multiple
|
|
||||||
:limit="3"
|
|
||||||
:on-exceed="handleExceed"
|
|
||||||
:file-list="fileList"
|
|
||||||
>
|
|
||||||
<el-button size="small" type="primary" plain>点击上传</el-button>
|
|
||||||
<div slot="tip" class="el-upload__tip">
|
|
||||||
只能上传jpg/png文件,且不超过500kb
|
|
||||||
</div>
|
|
||||||
</el-upload> -->
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleAdd">创建工单</el-button>
|
<el-button type="primary" @click="handleAdd">创建工单</el-button>
|
||||||
|
@ -72,30 +64,12 @@ import { add, typeList } from "@/api/convenience";
|
||||||
import { info } from "@/api/staff";
|
import { info } from "@/api/staff";
|
||||||
import AliOss from "@/components/AliOSS/index.vue";
|
import AliOss from "@/components/AliOSS/index.vue";
|
||||||
|
|
||||||
// import Pagination from "@/components/Pagination";
|
|
||||||
// import { list, typeList } from "@/api/convenience";
|
|
||||||
// import { parseTime } from "@/utils";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
AliOss
|
AliOss
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
var checkInfo = (rule, value, callback) => {
|
var checkInfo = (rule, value, callback) => {
|
||||||
// console.log(value);
|
|
||||||
// if (value === undefined) {
|
|
||||||
// console.log('if');
|
|
||||||
// return callback(new Error("受理人不能为空"));
|
|
||||||
// } else {
|
|
||||||
// console.log('else');
|
|
||||||
// info({ param: this.searchInput || undefined }).then(res => {
|
|
||||||
// if (!res.d) {
|
|
||||||
// return callback(new Error("查无此人"));
|
|
||||||
// } else {
|
|
||||||
// this.convenience.residentInformation = res.d.id;
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
if (value === "") {
|
if (value === "") {
|
||||||
callback(new Error("受理人不能为空"));
|
callback(new Error("受理人不能为空"));
|
||||||
// console.log('value==<>');
|
// console.log('value==<>');
|
||||||
|
@ -135,24 +109,25 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
getTypeList() {
|
getTypeList() {
|
||||||
typeList().then(res => {
|
typeList().then(res => {
|
||||||
this.typeOptions = [];
|
// this.typeOptions = [];
|
||||||
res.d.map(i => {
|
this.typeOptions = res.d
|
||||||
const children = [];
|
// res.d.map(i => {
|
||||||
|
// const children = [];
|
||||||
|
|
||||||
i.eventTypesList.map(c => {
|
// i.eventTypesList.map(c => {
|
||||||
const level2 = {
|
// const level2 = {
|
||||||
label: c.eventName,
|
// label: c.eventName,
|
||||||
value: c.id
|
// value: c.id
|
||||||
};
|
// };
|
||||||
children.push(level2);
|
// children.push(level2);
|
||||||
});
|
// });
|
||||||
const level1 = {
|
// const level1 = {
|
||||||
label: i.eventName,
|
// label: i.eventName,
|
||||||
children
|
// children
|
||||||
};
|
// };
|
||||||
|
|
||||||
this.typeOptions.push(level1);
|
// this.typeOptions.push(level1);
|
||||||
});
|
// });
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container" style="padding-top:0">
|
<div class="app-container" style="padding-top:0">
|
||||||
<!-- <div class="filter-container">
|
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<!-- <el-card class="box-card" shadow="never"> -->
|
|
||||||
<div class="recordLayout">
|
<div class="recordLayout">
|
||||||
<div style="border-left:5px solid #1890ff;padding-left:5px">工单详情</div>
|
<div style="border-left:5px solid #1890ff;padding-left:5px">工单详情</div>
|
||||||
|
|
||||||
|
@ -16,7 +12,7 @@
|
||||||
convenience && convenience.eventType.eventName
|
convenience && convenience.eventType.eventName
|
||||||
}}</span>
|
}}</span>
|
||||||
|
|
||||||
<el-cascader
|
<!-- <el-cascader
|
||||||
ref="cascader"
|
ref="cascader"
|
||||||
v-else
|
v-else
|
||||||
v-model="convenience.eventType.id"
|
v-model="convenience.eventType.id"
|
||||||
|
@ -25,7 +21,23 @@
|
||||||
:props="{ emitPath: false }"
|
:props="{ emitPath: false }"
|
||||||
placeholder="编辑"
|
placeholder="编辑"
|
||||||
@change="handleEventTypeChange"
|
@change="handleEventTypeChange"
|
||||||
/>
|
/> -->
|
||||||
|
<el-select
|
||||||
|
ref="eventTypeRef"
|
||||||
|
v-model="convenience.eventType.id"
|
||||||
|
placeholder="请选择"
|
||||||
|
@change="handleEventTypeChange"
|
||||||
|
v-else
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in typeOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.eventName"
|
||||||
|
:value="item.id"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="
|
v-if="
|
||||||
convenience &&
|
convenience &&
|
||||||
|
@ -35,49 +47,13 @@
|
||||||
convenience.statusList[0].status !== 'FORWARDED_APPLY' &&
|
convenience.statusList[0].status !== 'FORWARDED_APPLY' &&
|
||||||
convenience.statusList[0].status !== 'FORWARDED'
|
convenience.statusList[0].status !== 'FORWARDED'
|
||||||
"
|
"
|
||||||
icon="el-icon-edit"
|
|
||||||
type="text"
|
type="text"
|
||||||
|
style="font-size:16px"
|
||||||
@click="cascader"
|
@click="cascader"
|
||||||
>{{ isEventTypeChange ? "取消" : "编辑" }}</el-button
|
><i class="icon_edit"/>{{ isEventTypeChange ? "取消" : "编辑" }}</el-button
|
||||||
>
|
>
|
||||||
<!-- <i class="icon_timer"></i
|
|
||||||
><span class="text_timer">
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
this.totalTime.hour > 9
|
|
||||||
? this.totalTime.hour
|
|
||||||
: this.totalTime.hour
|
|
||||||
}:${
|
|
||||||
this.totalTime.minute > 9
|
|
||||||
? this.totalTime.minute
|
|
||||||
: this.totalTime.minute
|
|
||||||
}:${
|
|
||||||
this.totalTime.second > 9
|
|
||||||
? this.totalTime.second
|
|
||||||
: this.totalTime.second
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</span> -->
|
|
||||||
<!-- {{
|
|
||||||
`${
|
|
||||||
this.totalTime.hour > 9
|
|
||||||
? this.totalTime.hour
|
|
||||||
: "0" + this.totalTime.hour
|
|
||||||
}:${
|
|
||||||
this.totalTime.minute > 9
|
|
||||||
? this.totalTime.minute
|
|
||||||
: "0" + this.totalTime.minute
|
|
||||||
}:${
|
|
||||||
this.totalTime.second > 9
|
|
||||||
? this.totalTime.second
|
|
||||||
: "0" + this.totalTime.second
|
|
||||||
}`
|
|
||||||
}} -->
|
|
||||||
</div>
|
</div>
|
||||||
<div style="color:#787878;font-size:14px;">
|
<div style="color:#787878;font-size:14px;">
|
||||||
<!-- <el-tag type="danger" style="color:#ff5f40;background:#ffe0da">{{
|
|
||||||
convenience && convenience.phase | phaseFilter
|
|
||||||
}}</el-tag> -->
|
|
||||||
{{ convenience && convenience.sponsor | sponsorFilter }}创建于{{
|
{{ convenience && convenience.sponsor | sponsorFilter }}创建于{{
|
||||||
convenience &&
|
convenience &&
|
||||||
convenience.createDate | parseTime("{y}-{m}-{d} {h}:{i}:{s}")
|
convenience.createDate | parseTime("{y}-{m}-{d} {h}:{i}:{s}")
|
||||||
|
@ -87,22 +63,7 @@
|
||||||
}}</el-tag>
|
}}</el-tag>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- style="display: flex;flex-direction: row;justify-content: center;width: 25%;" -->
|
|
||||||
<div>
|
<div>
|
||||||
<!-- <el-button
|
|
||||||
v-if="
|
|
||||||
convenience &&
|
|
||||||
convenience.phase !== 'FINISH' &&
|
|
||||||
convenience.statusList[0].status !== 'WAIT_APPLY' &&
|
|
||||||
convenience.statusList[0].status !== 'SUBMIT_APPLY' &&
|
|
||||||
convenience.statusList[0].status !== 'FORWARDED_APPLY' &&
|
|
||||||
convenience.statusList[0].status !== 'FORWARDED'
|
|
||||||
"
|
|
||||||
type="primary"
|
|
||||||
@click="handleChangeEventType"
|
|
||||||
>编辑</el-button
|
|
||||||
> -->
|
|
||||||
<!-- v-if="convenience && convenience.phase === 'PENDING_ORDER'" -->
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="convenience && convenience.phase === 'PENDING_ORDER'"
|
v-if="convenience && convenience.phase === 'PENDING_ORDER'"
|
||||||
style="margin-right:16px"
|
style="margin-right:16px"
|
||||||
|
@ -175,19 +136,8 @@
|
||||||
<el-row :gutter="20" style="color:#787878;margin-bottom:30px">
|
<el-row :gutter="20" style="color:#787878;margin-bottom:30px">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<div>流水号:{{ convenience && convenience.serialNumber }}</div>
|
<div>流水号:{{ convenience && convenience.serialNumber }}</div>
|
||||||
<!-- <div>
|
|
||||||
创建人:{{ convenience && convenience.sponsor | sponsorFilter }}
|
|
||||||
</div> -->
|
|
||||||
</el-col>
|
</el-col>
|
||||||
<!-- <el-col :span="6">
|
|
||||||
<div>
|
|
||||||
创建时间:{{
|
|
||||||
convenience &&
|
|
||||||
convenience.createDate | parseTime("{y}-{m}-{d} {h}:{i}:{s}")
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</el-col
|
|
||||||
> -->
|
|
||||||
<el-col :span="6"
|
<el-col :span="6"
|
||||||
><div>
|
><div>
|
||||||
申办人:{{ convenience && convenience.residentInformation.name }}
|
申办人:{{ convenience && convenience.residentInformation.name }}
|
||||||
|
@ -224,29 +174,6 @@
|
||||||
:gutter="20"
|
:gutter="20"
|
||||||
style="color:#787878;display: flex;align-items: center;"
|
style="color:#787878;display: flex;align-items: center;"
|
||||||
>
|
>
|
||||||
<!-- <el-col :span="6">
|
|
||||||
任务阶段:{{ convenience && convenience.phase | phaseFilter }}
|
|
||||||
</el-col> -->
|
|
||||||
<!-- <el-col :span="6">
|
|
||||||
总办理时长:<i class="icon_timer" /><span class="text_timer">
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
this.totalTime.hour > 9
|
|
||||||
? this.totalTime.hour
|
|
||||||
: this.totalTime.hour
|
|
||||||
}:${
|
|
||||||
this.totalTime.minute > 9
|
|
||||||
? this.totalTime.minute
|
|
||||||
: this.totalTime.minute
|
|
||||||
}:${
|
|
||||||
this.totalTime.second > 9
|
|
||||||
? this.totalTime.second
|
|
||||||
: this.totalTime.second
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</span>
|
|
||||||
</el-col> -->
|
|
||||||
|
|
||||||
<el-col
|
<el-col
|
||||||
:span="6"
|
:span="6"
|
||||||
style="display: flex;align-items: center;flex-direction:column"
|
style="display: flex;align-items: center;flex-direction:column"
|
||||||
|
@ -287,17 +214,7 @@
|
||||||
>撤回</el-button
|
>撤回</el-button
|
||||||
>
|
>
|
||||||
</el-popover>
|
</el-popover>
|
||||||
<!-- <el-button
|
|
||||||
v-if="
|
|
||||||
convenience &&
|
|
||||||
convenience.phase !== 'FINISH' &&
|
|
||||||
convenience.statusList[0].status === 'SUBMIT_APPLY'
|
|
||||||
"
|
|
||||||
type="primary"
|
|
||||||
style="margin-left:10px"
|
|
||||||
@click="handleUpdate(12)"
|
|
||||||
>撤销</el-button
|
|
||||||
> -->
|
|
||||||
<el-button
|
<el-button
|
||||||
v-if="
|
v-if="
|
||||||
convenience &&
|
convenience &&
|
||||||
|
@ -326,111 +243,6 @@
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <ul v-if="convenience" class="approveUl">
|
|
||||||
<li v-for="(item, index) in convenience.applyVoList" :key="index">
|
|
||||||
<el-tag type="info" style="display: flex;align-items: center;"
|
|
||||||
><i
|
|
||||||
:class="{
|
|
||||||
icon_approve: true,
|
|
||||||
approve_pass: item.approve,
|
|
||||||
approve_null: item.approve === null,
|
|
||||||
approve_no: !item.approve
|
|
||||||
}"
|
|
||||||
/>{{
|
|
||||||
`${item.residentInformation.name}${
|
|
||||||
item.approve
|
|
||||||
? "已同意"
|
|
||||||
: item.approve === null
|
|
||||||
? "审批中"
|
|
||||||
: "已驳回"
|
|
||||||
}`
|
|
||||||
}}</el-tag
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
</ul> -->
|
|
||||||
<!-- <div>
|
|
||||||
<span
|
|
||||||
>(审批人:{{
|
|
||||||
convenience &&
|
|
||||||
convenience.applyVoList[0].residentInformation.name
|
|
||||||
}})</span
|
|
||||||
>
|
|
||||||
|
|
||||||
</div> -->
|
|
||||||
<!-- <div
|
|
||||||
v-if="
|
|
||||||
convenience && convenience.statusList[0].status === 'WAIT_APPLY'
|
|
||||||
"
|
|
||||||
style="margin-left:10px"
|
|
||||||
>
|
|
||||||
<el-button type="success" @click="handleApprove(true)"
|
|
||||||
>通过</el-button
|
|
||||||
><el-button type="danger" @click="handleApprove(false)"
|
|
||||||
>驳回</el-button
|
|
||||||
>
|
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<!-- <div
|
|
||||||
v-if="
|
|
||||||
convenience &&
|
|
||||||
convenience.phase !== 'FINISH' &&
|
|
||||||
convenience.statusList[0].status === 'FORWARDED_APPLY' &&
|
|
||||||
convenience &&
|
|
||||||
convenience.applyType === 'FORWARDED'
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
>(审批人:{{
|
|
||||||
convenience &&
|
|
||||||
convenience.applyVoList[0].residentInformation.name
|
|
||||||
}})</span
|
|
||||||
>
|
|
||||||
<el-button
|
|
||||||
style="margin-left:10px"
|
|
||||||
type="primary"
|
|
||||||
@click="handleUpdate(9)"
|
|
||||||
>撤销转交审批</el-button
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
v-if="
|
|
||||||
convenience &&
|
|
||||||
convenience.phase !== 'FINISH' &&
|
|
||||||
convenience.statusList[0].status === 'SUBMIT_APPLY'
|
|
||||||
"
|
|
||||||
style="margin-left:10px"
|
|
||||||
> -->
|
|
||||||
<!-- <el-popover
|
|
||||||
placement="bottom-start"
|
|
||||||
title=""
|
|
||||||
width="410"
|
|
||||||
trigger="click"
|
|
||||||
>
|
|
||||||
<ul class="approveUl">
|
|
||||||
<li
|
|
||||||
v-for="(item, index) in convenience.applyVoList"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<i
|
|
||||||
:class="{
|
|
||||||
icon_approve: true,
|
|
||||||
approve_pass: item.approve,
|
|
||||||
approve_null: item.approve === null,
|
|
||||||
approve_no: !item.approve
|
|
||||||
}"
|
|
||||||
/>{{ item.residentInformation.name }}
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
style="position:relative;left:155px;"
|
|
||||||
@click="handleUpdate(12)"
|
|
||||||
>撤销</el-button
|
|
||||||
>
|
|
||||||
<el-link slot="reference" type="primary">查看审批详情</el-link>
|
|
||||||
</el-popover> -->
|
|
||||||
|
|
||||||
<!-- </div> -->
|
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col
|
<el-col
|
||||||
:span="6"
|
:span="6"
|
||||||
|
@ -479,45 +291,6 @@
|
||||||
</ul>
|
</ul>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<!-- <div style="margin-top:32px;color:#787878">
|
|
||||||
<el-row :gutter="20" style="color:#787878">
|
|
||||||
<el-col :span="6"
|
|
||||||
><div style="display: flex;align-items: center;">
|
|
||||||
任务状态:{{
|
|
||||||
convenience && convenience.statusList[0].status | statusFilter
|
|
||||||
}}
|
|
||||||
<div
|
|
||||||
style="margin-left:10px"
|
|
||||||
v-if="
|
|
||||||
convenience &&
|
|
||||||
convenience.statusList[0].status === 'WAIT_APPLY'
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<el-button type="primary" @click="handleApprove(true)"
|
|
||||||
>通过</el-button
|
|
||||||
><el-button type="danger" @click="handleApprove(false)"
|
|
||||||
>驳回</el-button
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</div></el-col
|
|
||||||
>
|
|
||||||
<el-col
|
|
||||||
:span="6"
|
|
||||||
style="display:flex"
|
|
||||||
v-if="convenience && convenience.evaluation"
|
|
||||||
><div>
|
|
||||||
办事评价:
|
|
||||||
{{ convenience && convenience.evaluation | evaluationFilter }}
|
|
||||||
</div>
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
style="position: relative;top: -10px;left: 20px;"
|
|
||||||
@click="handleUpdate(16)"
|
|
||||||
>我要申诉</el-button
|
|
||||||
></el-col
|
|
||||||
>
|
|
||||||
</el-row>
|
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<el-row class="text-center acceptanceOptionsLayout">
|
<el-row class="text-center acceptanceOptionsLayout">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
@ -577,14 +350,6 @@
|
||||||
: this.prerequisitesTime.second
|
: this.prerequisitesTime.second
|
||||||
}`
|
}`
|
||||||
}}</span>
|
}}</span>
|
||||||
<!-- <span
|
|
||||||
v-if="acceptanceMsec > 57600 && acceptanceMsec < 86400"
|
|
||||||
class="timeout"
|
|
||||||
><i class="icon_timeout" />即将超时</span
|
|
||||||
>
|
|
||||||
<span v-if="acceptanceMsec > 86400" class="timeout"
|
|
||||||
><i class="icon_timeout" />已超时</span
|
|
||||||
> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
@ -621,11 +386,6 @@
|
||||||
}`
|
}`
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
<!-- {{
|
|
||||||
finishMsec +
|
|
||||||
":" +
|
|
||||||
convenience&&convenience.eventType.commitmentTimeLimit * 3600
|
|
||||||
}} -->
|
|
||||||
<span
|
<span
|
||||||
v-if="
|
v-if="
|
||||||
finishMsec >=
|
finishMsec >=
|
||||||
|
@ -648,116 +408,8 @@
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- <div class="acceptanceOptionsLayout">
|
|
||||||
<div>
|
|
||||||
<i class="a_times icon_acceptance"></i>
|
|
||||||
<p>受理</p>
|
|
||||||
<p class="text_left">承诺时长 24小时内</p>
|
|
||||||
<p>
|
|
||||||
实际时长
|
|
||||||
<span class="duration">{{
|
|
||||||
`${
|
|
||||||
this.acceptanceTime.hour > 9
|
|
||||||
? this.acceptanceTime.hour
|
|
||||||
: this.acceptanceTime.hour
|
|
||||||
}:${
|
|
||||||
this.acceptanceTime.minute > 9
|
|
||||||
? this.acceptanceTime.minute
|
|
||||||
: this.acceptanceTime.minute
|
|
||||||
}:${
|
|
||||||
this.acceptanceTime.second > 9
|
|
||||||
? this.acceptanceTime.second
|
|
||||||
: this.acceptanceTime.second
|
|
||||||
}`
|
|
||||||
}}</span
|
|
||||||
><span
|
|
||||||
class="timeout"
|
|
||||||
v-if="acceptanceMsec > 57600 && acceptanceMsec < 86400"
|
|
||||||
><i class="icon_timeout"></i>即将超时</span
|
|
||||||
>
|
|
||||||
<span class="timeout" v-if="acceptanceMsec > 86400"
|
|
||||||
><i class="icon_timeout"></i>已超时</span
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div style="padding: 0px 23%;">
|
|
||||||
<i class="a_times icon_prepare"></i>
|
|
||||||
<p>要件准备</p>
|
|
||||||
<p class="text_left">承诺时长 尽快</p>
|
|
||||||
<p class="text_left">
|
|
||||||
实际时长
|
|
||||||
<span>{{
|
|
||||||
`${
|
|
||||||
this.prerequisitesTime.hour > 9
|
|
||||||
? this.prerequisitesTime.hour
|
|
||||||
: this.prerequisitesTime.hour
|
|
||||||
}:${
|
|
||||||
this.prerequisitesTime.minute > 9
|
|
||||||
? this.prerequisitesTime.minute
|
|
||||||
: this.prerequisitesTime.minute
|
|
||||||
}:${
|
|
||||||
this.prerequisitesTime.second > 9
|
|
||||||
? this.prerequisitesTime.second
|
|
||||||
: this.prerequisitesTime.second
|
|
||||||
}`
|
|
||||||
}}</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<i class="a_times icon_finish"></i>
|
|
||||||
<p>办结</p>
|
|
||||||
<p class="text_left">
|
|
||||||
承诺时长
|
|
||||||
{{
|
|
||||||
convenience && convenience.eventType.commitmentTimeLimit
|
|
||||||
}}小时内
|
|
||||||
</p>
|
|
||||||
<p class="text_left">
|
|
||||||
法定时长
|
|
||||||
{{ convenience && convenience.eventType.legalTimeLimit }}小时内
|
|
||||||
</p>
|
|
||||||
<p class="text_left">
|
|
||||||
实际时长
|
|
||||||
<span class="duration">
|
|
||||||
{{
|
|
||||||
`${
|
|
||||||
this.finishTime.hour > 9
|
|
||||||
? this.finishTime.hour
|
|
||||||
: this.finishTime.hour
|
|
||||||
}:${
|
|
||||||
this.finishTime.minute > 9
|
|
||||||
? this.finishTime.minute
|
|
||||||
: this.finishTime.minute
|
|
||||||
}:${
|
|
||||||
this.finishTime.second > 9
|
|
||||||
? this.finishTime.second
|
|
||||||
: this.finishTime.second
|
|
||||||
}`
|
|
||||||
}}
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
class="timeout"
|
|
||||||
v-if="
|
|
||||||
finishMsec >= convenience &&
|
|
||||||
convenience.eventType.commitmentTimeLimit * 3600
|
|
||||||
"
|
|
||||||
><i class="icon_timeout"></i>已超时</span
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
class="timeout"
|
|
||||||
v-else-if="
|
|
||||||
finishMsec >= convenience &&
|
|
||||||
convenience.eventType.timeoutReminder * 3600
|
|
||||||
"
|
|
||||||
><i class="icon_timeout"></i>即将超时</span
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- </el-card> -->
|
|
||||||
|
|
||||||
<div class="recordLayout">
|
<div class="recordLayout">
|
||||||
<div style="border-left:5px solid #1890ff;padding-left:5px;float: left;">
|
<div style="border-left:5px solid #1890ff;padding-left:5px;float: left;">
|
||||||
|
@ -804,17 +456,10 @@
|
||||||
<h3>{{ item.content }}</h3>
|
<h3>{{ item.content }}</h3>
|
||||||
|
|
||||||
<p v-if="item.type === 11">审批人:{{ getNames(item.to) }}</p>
|
<p v-if="item.type === 11">审批人:{{ getNames(item.to) }}</p>
|
||||||
<p v-if="item.type === 3">
|
|
||||||
被沟通人:{{ getNames(item.to) }}
|
|
||||||
<!-- <span v-for="item in item.to" :key="item.id">{{
|
|
||||||
getNames(item.to)
|
|
||||||
}}</span> -->
|
|
||||||
</p>
|
|
||||||
<p
|
<p
|
||||||
v-for="(attachment, index) in item.attachmentList"
|
v-for="(attachment, index) in item.attachmentList"
|
||||||
:key="index"
|
:key="index"
|
||||||
>
|
>
|
||||||
<!-- url.substr(url.lastIndexOf(".") + 1) -->
|
|
||||||
<span
|
<span
|
||||||
v-if="
|
v-if="
|
||||||
isAssetTypeAnImage(
|
isAssetTypeAnImage(
|
||||||
|
@ -850,19 +495,22 @@
|
||||||
<span
|
<span
|
||||||
v-if="item.type === 14 || item.type === 8"
|
v-if="item.type === 14 || item.type === 8"
|
||||||
style="margin-left:164px"
|
style="margin-left:164px"
|
||||||
>被转交人:{{ item.to[0].name }}</span
|
>被转交人:{{
|
||||||
|
item.type === 14
|
||||||
|
? item.to[0].name
|
||||||
|
: item.type === 8
|
||||||
|
? item.to[1].name
|
||||||
|
: item.to[0].name
|
||||||
|
}}</span
|
||||||
>
|
>
|
||||||
</p>
|
</p>
|
||||||
<!-- <p v-if="item.type === 14 || item.type === 8">
|
|
||||||
被转交人:{{ item.to[0].name }}
|
|
||||||
</p> -->
|
|
||||||
<p v-if="item.type === 8">
|
<p v-if="item.type === 8">
|
||||||
转交超限审批人:{{ item.to[0].name }}
|
转交超限审批人:{{ item.to[0].name }}
|
||||||
</p>
|
</p>
|
||||||
<p v-if="item.type === 1">
|
<p v-if="item.type === 1">
|
||||||
办事项目:{{ convenience && convenience.eventType.eventName }}
|
办事项目:{{ convenience && convenience.eventType.eventName }}
|
||||||
</p>
|
</p>
|
||||||
<p v-if="item.remark">
|
<p v-if="item.remark && item.type !== 4">
|
||||||
{{
|
{{
|
||||||
item.type === 11
|
item.type === 11
|
||||||
? "审批备注:"
|
? "审批备注:"
|
||||||
|
@ -873,6 +521,11 @@
|
||||||
: "备注:"
|
: "备注:"
|
||||||
}}{{ item.remark }}
|
}}{{ item.remark }}
|
||||||
</p>
|
</p>
|
||||||
|
<p
|
||||||
|
style="line-height:25px"
|
||||||
|
v-if="item.type === 4"
|
||||||
|
v-html="item.remark.replace(/\n/g, '<br/>')"
|
||||||
|
></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
@ -902,7 +555,7 @@
|
||||||
:rules="rules"
|
:rules="rules"
|
||||||
:model="payload"
|
:model="payload"
|
||||||
>
|
>
|
||||||
<el-form-item label="选择被沟通人" prop="ids">
|
<!-- <el-form-item label="选择被沟通人" prop="ids">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="payload.ids"
|
v-model="payload.ids"
|
||||||
multiple
|
multiple
|
||||||
|
@ -916,7 +569,7 @@
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item> -->
|
||||||
<el-form-item label="请输入沟通内容" prop="remark">
|
<el-form-item label="请输入沟通内容" prop="remark">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="payload.remark"
|
v-model="payload.remark"
|
||||||
|
@ -1043,28 +696,6 @@
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- <el-dialog
|
|
||||||
title="编辑办事项目"
|
|
||||||
:visible.sync="dialogEventType"
|
|
||||||
width="30%"
|
|
||||||
center
|
|
||||||
>
|
|
||||||
<div>
|
|
||||||
<el-cascader
|
|
||||||
v-model="eventTypeId"
|
|
||||||
:options="typeOptions"
|
|
||||||
:show-all-levels="false"
|
|
||||||
:props="{ emitPath: false }"
|
|
||||||
placeholder="选择办事项目"
|
|
||||||
style="width:100%"
|
|
||||||
clearable
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<span slot="footer" class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="eventTypeUpdate">变更</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog> -->
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -1136,7 +767,6 @@ export default {
|
||||||
};
|
};
|
||||||
return statusMap[status];
|
return statusMap[status];
|
||||||
}
|
}
|
||||||
// 1 不满意, 2 满意, 3 非常满意
|
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
AliOss
|
AliOss
|
||||||
|
@ -1159,7 +789,6 @@ export default {
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
ids: [{ required: true, message: "请选择操作对象", trigger: "change" }]
|
ids: [{ required: true, message: "请选择操作对象", trigger: "change" }]
|
||||||
// category: [{ required: true, message: '请选择栏目板块', trigger: 'change' }]
|
|
||||||
},
|
},
|
||||||
updateType: undefined,
|
updateType: undefined,
|
||||||
communicationOptions: [],
|
communicationOptions: [],
|
||||||
|
@ -1219,7 +848,6 @@ export default {
|
||||||
this.convenience = res.d;
|
this.convenience = res.d;
|
||||||
const tempData = Object.assign({}, this.convenience);
|
const tempData = Object.assign({}, this.convenience);
|
||||||
const now = Date.parse(new Date()).toString() / 1000;
|
const now = Date.parse(new Date()).toString() / 1000;
|
||||||
// console.log(now);
|
|
||||||
clearInterval(this.acceptanceInterval);
|
clearInterval(this.acceptanceInterval);
|
||||||
clearInterval(this.prerequisitesInterval);
|
clearInterval(this.prerequisitesInterval);
|
||||||
clearInterval(this.finishTimeInterval);
|
clearInterval(this.finishTimeInterval);
|
||||||
|
@ -1259,7 +887,6 @@ export default {
|
||||||
break;
|
break;
|
||||||
// 办结
|
// 办结
|
||||||
case "FINISH":
|
case "FINISH":
|
||||||
// console.log(123);
|
|
||||||
if (tempData.finishTime !== null) {
|
if (tempData.finishTime !== null) {
|
||||||
this.finishMsec = tempData.finishTime;
|
this.finishMsec = tempData.finishTime;
|
||||||
this.acceptanceMsec = tempData.acceptanceTime;
|
this.acceptanceMsec = tempData.acceptanceTime;
|
||||||
|
@ -1272,62 +899,29 @@ export default {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// const now = Date.parse(new Date()).toString() / 1000;
|
|
||||||
// switch (this.convenience.phase) {
|
|
||||||
// case "PENDING_ORDER":
|
|
||||||
// if (this.convenience.acceptanceTime === null) {
|
|
||||||
// this.acceptanceMsec = now - this.convenience.createDate;
|
|
||||||
// } else {
|
|
||||||
// this.acceptanceMsec = this.convenience.acceptanceTime;
|
|
||||||
// }
|
|
||||||
// this.countdown("PENDING_ORDER");
|
|
||||||
// break;
|
|
||||||
// case "PREREQUISITES":
|
|
||||||
// if (this.convenience.prerequisitesTime === null) {
|
|
||||||
// this.preMsec = now - this.convenience.createDate;
|
|
||||||
// } else {
|
|
||||||
// this.preMsec = this.convenience.prerequisitesTime;
|
|
||||||
// }
|
|
||||||
// this.countdown("PREREQUISITES");
|
|
||||||
// break;
|
|
||||||
// case "PROCESSING":
|
|
||||||
// if (this.convenience.finishTime === null) {
|
|
||||||
// this.finishMsec =
|
|
||||||
// now - this.preMsec - this.convenience.createDate;
|
|
||||||
// } else {
|
|
||||||
// this.finishMsec = this.convenience.finishTime;
|
|
||||||
// }
|
|
||||||
// this.countdown("PROCESSING");
|
|
||||||
// break;
|
|
||||||
// default:
|
|
||||||
// this.acceptanceMsec = this.convenience.acceptanceTime;
|
|
||||||
// this.preMsec = this.convenience.prerequisitesTime;
|
|
||||||
// this.finishMsec = this.convenience.finishTime;
|
|
||||||
// this.countdown(this.convenience.phase);
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getTypeList() {
|
getTypeList() {
|
||||||
typeList().then(res => {
|
typeList().then(res => {
|
||||||
this.typeOptions = [];
|
this.typeOptions = res.d;
|
||||||
res.d.map(i => {
|
// this.typeOptions = [];
|
||||||
const children = [];
|
// res.d.map(i => {
|
||||||
|
// const children = [];
|
||||||
|
|
||||||
i.eventTypesList.map(c => {
|
// i.eventTypesList.map(c => {
|
||||||
const level2 = {
|
// const level2 = {
|
||||||
label: c.eventName,
|
// label: c.eventName,
|
||||||
value: c.id
|
// value: c.id
|
||||||
};
|
// };
|
||||||
children.push(level2);
|
// children.push(level2);
|
||||||
});
|
// });
|
||||||
const level1 = {
|
// const level1 = {
|
||||||
label: i.eventName,
|
// label: i.eventName,
|
||||||
children
|
// children
|
||||||
};
|
// };
|
||||||
|
|
||||||
this.typeOptions.push(level1);
|
// this.typeOptions.push(level1);
|
||||||
});
|
// });
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
countdown(phase) {
|
countdown(phase) {
|
||||||
|
@ -1354,7 +948,6 @@ export default {
|
||||||
}, 1000);
|
}, 1000);
|
||||||
} else if (phase === "PROCESSING") {
|
} else if (phase === "PROCESSING") {
|
||||||
this.finishTimeInterval = setInterval(() => {
|
this.finishTimeInterval = setInterval(() => {
|
||||||
// console.log(233);
|
|
||||||
this.timeFormat("finishTime", this.finishMsec);
|
this.timeFormat("finishTime", this.finishMsec);
|
||||||
this.finishMsec++;
|
this.finishMsec++;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
@ -1368,124 +961,13 @@ export default {
|
||||||
this.totalMsec++;
|
this.totalMsec++;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
} else if (phase === "FINISH") {
|
} else if (phase === "FINISH") {
|
||||||
// console.log(233);
|
|
||||||
this.finishMsec;
|
this.finishMsec;
|
||||||
this.totalMsec =
|
this.totalMsec =
|
||||||
this.convenience.acceptanceTime +
|
this.convenience.acceptanceTime +
|
||||||
this.convenience.prerequisitesTime +
|
this.convenience.prerequisitesTime +
|
||||||
this.convenience.finishTime;
|
this.convenience.finishTime;
|
||||||
this.timeFormat("totalTime", this.totalMsec);
|
this.timeFormat("totalTime", this.totalMsec);
|
||||||
// this.totalTimeInterval = setInterval(() => {
|
|
||||||
// this.totalMsec++;
|
|
||||||
// }, 1000);
|
|
||||||
} else {
|
|
||||||
// 除FINISH外total都要计时
|
|
||||||
// this.totalTimeInterval = setInterval(() => {
|
|
||||||
// this.timeFormat(this.totalTime, this.totalMsec);
|
|
||||||
// this.totalMsec++;
|
|
||||||
// }, 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (phase === "PENDING_ORDER") {
|
|
||||||
// // 受理
|
|
||||||
// if (this.convenience.acceptanceTime === null) {
|
|
||||||
// this.acceptanceInterval = setInterval(() => {
|
|
||||||
// this.acceptanceTime.hour = Math.floor(this.acceptanceMsec / 3600);
|
|
||||||
// this.acceptanceTime.minute = Math.floor(
|
|
||||||
// ((this.acceptanceMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.acceptanceTime.second = Math.floor(
|
|
||||||
// ((this.acceptanceMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// this.totalTime = this.acceptanceTime;
|
|
||||||
// this.acceptanceMsec++;
|
|
||||||
// }, 1000);
|
|
||||||
// } else {
|
|
||||||
// this.acceptanceTime.hour = Math.floor(this.acceptanceMsec / 3600);
|
|
||||||
// this.acceptanceTime.minute = Math.floor(
|
|
||||||
// ((this.acceptanceMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.acceptanceTime.second = Math.floor(
|
|
||||||
// ((this.acceptanceMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// } else if (phase === "PREREQUISITES") {
|
|
||||||
// // 要件准备
|
|
||||||
// if (this.convenience.prerequisitesTime === null) {
|
|
||||||
// this.prerequisitesInterval = setInterval(() => {
|
|
||||||
// this.prerequisitesTime.hour = Math.floor(this.preMsec / 3600);
|
|
||||||
// this.prerequisitesTime.minute = Math.floor(
|
|
||||||
// ((this.preMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.prerequisitesTime.second = Math.floor(
|
|
||||||
// ((this.preMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// // this.totalTime = this.acceptanceTime;
|
|
||||||
// this.totalMsec = this.acceptanceMsec + this.preMsec;
|
|
||||||
// this.totalTime.hour = Math.floor(this.totalMsec / 3600);
|
|
||||||
// this.totalTime.minute = Math.floor(
|
|
||||||
// ((this.totalMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.totalTime.second = Math.floor(
|
|
||||||
// ((this.totalMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// this.preMsec++;
|
|
||||||
// }, 1000);
|
|
||||||
// } else {
|
|
||||||
// this.prerequisitesTime.hour = Math.floor(this.preMsec / 3600);
|
|
||||||
// this.prerequisitesTime.minute = Math.floor(
|
|
||||||
// ((this.preMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.prerequisitesTime.second = Math.floor(
|
|
||||||
// ((this.preMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// } else if (phase === "PROCESSING") {
|
|
||||||
// // 办结
|
|
||||||
// if (this.convenience.finishTime === null) {
|
|
||||||
// this.finishTimeInterval = setInterval(() => {
|
|
||||||
// this.finishTime.hour = Math.floor(this.finishMsec / 3600);
|
|
||||||
// this.finishTime.minute = Math.floor(
|
|
||||||
// ((this.finishMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.finishTime.second = Math.floor(
|
|
||||||
// ((this.finishMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// this.finishMsec++;
|
|
||||||
// }, 1000);
|
|
||||||
// } else {
|
|
||||||
// this.finishTime.hour = Math.floor(this.finishMsec / 3600);
|
|
||||||
// this.finishTime.minute = Math.floor(
|
|
||||||
// ((this.finishMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.finishTime.second = Math.floor(
|
|
||||||
// ((this.finishMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// console.log(this.convenience.finishTime);
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// this.acceptanceTime.hour = Math.floor(this.acceptanceMsec / 3600);
|
|
||||||
// this.acceptanceTime.minute = Math.floor(
|
|
||||||
// ((this.acceptanceMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.acceptanceTime.second = Math.floor(
|
|
||||||
// ((this.acceptanceMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// this.prerequisitesTime.hour = Math.floor(this.preMsec / 3600);
|
|
||||||
// this.prerequisitesTime.minute = Math.floor(
|
|
||||||
// ((this.preMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.prerequisitesTime.second = Math.floor(
|
|
||||||
// ((this.preMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// this.finishTime.hour = Math.floor(this.finishMsec / 3600);
|
|
||||||
// this.finishTime.minute = Math.floor(
|
|
||||||
// ((this.finishMsec % 86400) % 3600) / 60
|
|
||||||
// );
|
|
||||||
// this.finishTime.second = Math.floor(
|
|
||||||
// ((this.finishMsec % 86400) % 3600) % 60
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
},
|
},
|
||||||
timeFormat(obj, timeStamp) {
|
timeFormat(obj, timeStamp) {
|
||||||
this[obj].hour =
|
this[obj].hour =
|
||||||
|
@ -1675,7 +1157,8 @@ export default {
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
// 评价申诉
|
// 评价申诉
|
||||||
this.applyDialog = true;
|
// this.applyDialog = true;
|
||||||
|
this.$notify.warning('功能尚未开发完成,敬请期待')
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
this.updateData();
|
this.updateData();
|
||||||
|
@ -1683,8 +1166,6 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleEventTypeChange(val) {
|
handleEventTypeChange(val) {
|
||||||
// console.log(val);
|
|
||||||
// handle
|
|
||||||
this.payload = {
|
this.payload = {
|
||||||
id: this.id,
|
id: this.id,
|
||||||
type: 4,
|
type: 4,
|
||||||
|
@ -1693,10 +1174,9 @@ export default {
|
||||||
};
|
};
|
||||||
this.updateType = 4;
|
this.updateType = 4;
|
||||||
this.updateData();
|
this.updateData();
|
||||||
// this.dialogEventType = false;
|
|
||||||
},
|
},
|
||||||
handleChange(val) {
|
handleChange(val) {
|
||||||
// console.log(val);
|
// console.log(val1);
|
||||||
},
|
},
|
||||||
apply() {
|
apply() {
|
||||||
// this.$refs.updateForm.validate(valid=>{
|
// this.$refs.updateForm.validate(valid=>{
|
||||||
|
@ -1791,11 +1271,14 @@ export default {
|
||||||
},
|
},
|
||||||
cascader() {
|
cascader() {
|
||||||
this.isEventTypeChange = !this.isEventTypeChange;
|
this.isEventTypeChange = !this.isEventTypeChange;
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
console.log(this.$refs.cascader)
|
const tempRef = this.$refs.eventTypeRef;
|
||||||
const tempRef = this.$refs.cascader;
|
console.log(tempRef);
|
||||||
tempRef.$el.style.display='inline-block'
|
if(tempRef)
|
||||||
this.$refs.cascader.focusFirstNode()
|
tempRef.toggleMenu();
|
||||||
|
// tempRef.$el.style.display = "inline-block";
|
||||||
|
// this.$refs.eventTypeRef.focusFirstNode();
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1805,22 +1288,6 @@ export default {
|
||||||
clearInterval(this.finishTimeInterval);
|
clearInterval(this.finishTimeInterval);
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
// timeFormat(timeStamp) {
|
|
||||||
// const timeStr = `${
|
|
||||||
// Math.floor(timeStamp / 3600) < 9
|
|
||||||
// ? "0" + Math.floor(timeStamp / 3600)
|
|
||||||
// : Math.floor(timeStamp / 3600)
|
|
||||||
// }:${
|
|
||||||
// Math.floor(((timeStamp % 86400) % 3600) / 60) < 9
|
|
||||||
// ? "0" + Math.floor(((timeStamp % 86400) % 3600) / 60)
|
|
||||||
// : Math.floor(((timeStamp % 86400) % 3600) / 60)
|
|
||||||
// }:${
|
|
||||||
// Math.floor(((timeStamp % 86400) % 3600) % 60) < 9
|
|
||||||
// ? "0" + Math.floor(((timeStamp % 86400) % 3600) % 60)
|
|
||||||
// : Math.floor(((timeStamp % 86400) % 3600) % 60)
|
|
||||||
// }`;
|
|
||||||
// return timeStr;
|
|
||||||
// }
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -2075,6 +1542,15 @@ h3 {
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
.icon_edit{
|
||||||
|
background: url("./img/icon_edit.png") no-repeat;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
display: inline-block;
|
||||||
|
background-size: cover;
|
||||||
|
margin-right: 3px;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
.icon_sh {
|
.icon_sh {
|
||||||
background: url("./img/icon_sh.png") no-repeat;
|
background: url("./img/icon_sh.png") no-repeat;
|
||||||
width: 19px;
|
width: 19px;
|
||||||
|
@ -2132,5 +1608,4 @@ h3 {
|
||||||
/* .el-cascader-panel{
|
/* .el-cascader-panel{
|
||||||
display: -webkit-inline-box;
|
display: -webkit-inline-box;
|
||||||
} */
|
} */
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 953 B After Width: | Height: | Size: 515 B |
After Width: | Height: | Size: 560 B |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 358 B |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 676 B |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 492 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 628 B |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 860 B |
Before Width: | Height: | Size: 770 B After Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 444 B |
Before Width: | Height: | Size: 726 B After Width: | Height: | Size: 390 B |
Before Width: | Height: | Size: 725 B After Width: | Height: | Size: 390 B |
|
@ -5,7 +5,8 @@
|
||||||
type="primary"
|
type="primary"
|
||||||
style="position:absolute;right:50px;margin-top:80px"
|
style="position:absolute;right:50px;margin-top:80px"
|
||||||
@click="$router.push('/convenience/add')"
|
@click="$router.push('/convenience/add')"
|
||||||
><i class="el-icon-plus" /> 直接建立工单</el-button>
|
><i class="el-icon-plus" /> 直接建立工单</el-button
|
||||||
|
>
|
||||||
<div class="title">工单列表</div>
|
<div class="title">工单列表</div>
|
||||||
<div style="margin-bottom:15px;margin-top:15px" />
|
<div style="margin-bottom:15px;margin-top:15px" />
|
||||||
<el-radio-group v-model="listQuery.phase">
|
<el-radio-group v-model="listQuery.phase">
|
||||||
|
@ -15,20 +16,20 @@
|
||||||
<el-radio-button label="PROCESSING">办理中</el-radio-button>
|
<el-radio-button label="PROCESSING">办理中</el-radio-button>
|
||||||
<el-radio-button label="FINISH">已办结</el-radio-button>
|
<el-radio-button label="FINISH">已办结</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
<br>
|
<br />
|
||||||
<br>
|
<br />
|
||||||
<el-radio-group v-model="listQuery.status">
|
<el-radio-group v-model="listQuery.status">
|
||||||
<el-radio-button :label="undefined">全部状态</el-radio-button>
|
<el-radio-button :label="undefined">全部状态</el-radio-button>
|
||||||
<el-radio-button label="MINE">我处理</el-radio-button>
|
<el-radio-button label="MINE">我处理</el-radio-button>
|
||||||
<el-radio-button label="FORWARDED">已转交</el-radio-button>
|
<el-radio-button label="FORWARDED">已转交</el-radio-button>
|
||||||
<el-radio-button
|
<el-radio-button label="FORWARDED_APPLY"
|
||||||
label="FORWARDED_APPLY"
|
>转交超限审批中</el-radio-button
|
||||||
>转交超限审批中</el-radio-button>
|
>
|
||||||
<el-radio-button label="SUBMIT_APPLY">已提交审批</el-radio-button>
|
<el-radio-button label="SUBMIT_APPLY">已提交审批</el-radio-button>
|
||||||
<el-radio-button label="WAIT_APPLY">待我审批</el-radio-button>
|
<el-radio-button label="WAIT_APPLY">待我审批</el-radio-button>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
<br>
|
<br />
|
||||||
<br>
|
<br />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="convenienceList" v-loading="listLoading">
|
<div class="convenienceList" v-loading="listLoading">
|
||||||
|
@ -206,10 +207,10 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// import Pagination from "@/components/Pagination";
|
// import Pagination from "@/components/Pagination";
|
||||||
import { list, typeList, update } from '@/api/convenience'
|
import { list, typeList, update } from "@/api/convenience";
|
||||||
import { parseTime } from '@/utils'
|
import { parseTime } from "@/utils";
|
||||||
import { staffList } from '@/api/staff'
|
import { staffList } from "@/api/staff";
|
||||||
import AliOss from '@/components/AliOSS/index.vue'
|
import AliOss from "@/components/AliOSS/index.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
@ -226,12 +227,12 @@ export default {
|
||||||
},
|
},
|
||||||
phaseFilter(status) {
|
phaseFilter(status) {
|
||||||
const statusMap = {
|
const statusMap = {
|
||||||
PENDING_ORDER: '待接单',
|
PENDING_ORDER: "待接单",
|
||||||
PREREQUISITES: '要件准备中',
|
PREREQUISITES: "要件准备中",
|
||||||
PROCESSING: '办理中',
|
PROCESSING: "办理中",
|
||||||
FINISH: '办结'
|
FINISH: "办结"
|
||||||
}
|
};
|
||||||
return statusMap[status]
|
return statusMap[status];
|
||||||
},
|
},
|
||||||
statusFilter(status) {
|
statusFilter(status) {
|
||||||
const statusMap = {
|
const statusMap = {
|
||||||
|
@ -245,22 +246,22 @@ export default {
|
||||||
},
|
},
|
||||||
typeFilter(status) {
|
typeFilter(status) {
|
||||||
const statusMap = {
|
const statusMap = {
|
||||||
1: '建立工单',
|
1: "建立工单",
|
||||||
2: '撤销工单',
|
2: "撤销工单",
|
||||||
3: '沟通',
|
3: "沟通",
|
||||||
4: '调整工单类别',
|
4: "调整工单类别",
|
||||||
5: '接单',
|
5: "接单",
|
||||||
6: '要件齐备',
|
6: "要件齐备",
|
||||||
7: '办结',
|
7: "办结",
|
||||||
8: '转交超限审批提交',
|
8: "转交超限审批提交",
|
||||||
9: '转交超限审批撤销',
|
9: "转交超限审批撤销",
|
||||||
10: '转交超限审批',
|
10: "转交超限审批",
|
||||||
11: '发起审批',
|
11: "发起审批",
|
||||||
12: '撤销审批',
|
12: "撤销审批",
|
||||||
13: '审批操作',
|
13: "审批操作",
|
||||||
14: '转交'
|
14: "转交"
|
||||||
}
|
};
|
||||||
return statusMap[status]
|
return statusMap[status];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
@ -291,37 +292,37 @@ export default {
|
||||||
},
|
},
|
||||||
msec: 0,
|
msec: 0,
|
||||||
rules: {
|
rules: {
|
||||||
ids: [{ required: true, message: '请选择操作对象', trigger: 'change' }]
|
ids: [{ required: true, message: "请选择操作对象", trigger: "change" }]
|
||||||
},
|
},
|
||||||
timers: undefined,
|
timers: undefined,
|
||||||
timersInterval: undefined
|
timersInterval: undefined
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'listQuery.phase': {
|
"listQuery.phase": {
|
||||||
// 深度监听,可监听到对象、数组的变化
|
// 深度监听,可监听到对象、数组的变化
|
||||||
handler(val) {
|
handler(val) {
|
||||||
this.listQuery.phase = val
|
this.listQuery.phase = val;
|
||||||
this.getList()
|
this.getList();
|
||||||
},
|
},
|
||||||
deep: true // true 深度监听
|
deep: true // true 深度监听
|
||||||
},
|
},
|
||||||
'listQuery.status': {
|
"listQuery.status": {
|
||||||
// 深度监听,可监听到对象、数组的变化
|
// 深度监听,可监听到对象、数组的变化
|
||||||
handler(val) {
|
handler(val) {
|
||||||
this.listQuery.status = val
|
this.listQuery.status = val;
|
||||||
this.getList()
|
this.getList();
|
||||||
},
|
},
|
||||||
deep: true // true 深度监听
|
deep: true // true 深度监听
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
this.getList()
|
this.getList();
|
||||||
this.getStaffList()
|
this.getStaffList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getList() {
|
getList() {
|
||||||
this.listLoading = true
|
this.listLoading = true;
|
||||||
list(this.listQuery).then(res => {
|
list(this.listQuery).then(res => {
|
||||||
this.list = res.d.records;
|
this.list = res.d.records;
|
||||||
this.listLoading = false;
|
this.listLoading = false;
|
||||||
|
@ -331,97 +332,133 @@ export default {
|
||||||
// console.log(now);
|
// console.log(now);
|
||||||
const arr = [];
|
const arr = [];
|
||||||
tempData.map((item, index) => {
|
tempData.map((item, index) => {
|
||||||
let msec = []
|
let msec = [];
|
||||||
let obj = {}
|
let obj = {};
|
||||||
switch (item.phase) {
|
switch (item.phase) {
|
||||||
case 'PENDING_ORDER':
|
case "PENDING_ORDER":
|
||||||
// 待接单
|
// 待接单
|
||||||
msec = now - item.createDate
|
msec = now - item.createDate;
|
||||||
obj = {
|
obj = {
|
||||||
time: msec,
|
time: msec,
|
||||||
phase: item.phase,
|
phase: item.phase,
|
||||||
status: null
|
status: null
|
||||||
}
|
};
|
||||||
arr.push(obj)
|
arr.push(obj);
|
||||||
break
|
break;
|
||||||
case 'PREREQUISITES':
|
case "PREREQUISITES":
|
||||||
// 要件准备
|
// 要件准备
|
||||||
msec = now - item.createDate;
|
msec = now - item.createDate;
|
||||||
obj = {
|
obj = {
|
||||||
time: msec,
|
time: msec,
|
||||||
phase: item.phase,
|
phase: item.phase,
|
||||||
status: null
|
status: null
|
||||||
}
|
};
|
||||||
arr.push(obj)
|
arr.push(obj);
|
||||||
break
|
break;
|
||||||
case 'PROCESSING':
|
case "PROCESSING":
|
||||||
// 办理中
|
// 办理中
|
||||||
msec = now - item.createDate;
|
msec = now - item.createDate;
|
||||||
obj = {
|
obj = {
|
||||||
time: msec,
|
time: msec,
|
||||||
phase: item.phase,
|
phase: item.phase,
|
||||||
status: null
|
status: null
|
||||||
}
|
};
|
||||||
arr.push(obj)
|
arr.push(obj);
|
||||||
break
|
break;
|
||||||
case 'FINISH':
|
case "FINISH":
|
||||||
msec =
|
msec =
|
||||||
item.acceptanceTime + item.prerequisitesTime + item.finishTime
|
item.acceptanceTime + item.prerequisitesTime + item.finishTime;
|
||||||
obj = {
|
obj = {
|
||||||
time: msec,
|
time: msec,
|
||||||
phase: item.phase,
|
phase: item.phase,
|
||||||
status: null
|
status: null
|
||||||
}
|
};
|
||||||
arr.push(obj)
|
arr.push(obj);
|
||||||
// 办结
|
// 办结
|
||||||
break
|
break;
|
||||||
default:
|
default:
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
if (arr.length > 0) {
|
||||||
|
arr.map((item, index) => {
|
||||||
|
if (item.phase !== "FINISH") {
|
||||||
|
item.time++;
|
||||||
|
if (this.list[index].phase === "PENDING_ORDER") {
|
||||||
|
if (item.status == null) {
|
||||||
|
if (item.time > 57600) {
|
||||||
|
item.status = false;
|
||||||
|
if (item.time >= 86400) {
|
||||||
|
item.status = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.list[index].phase === "PROCESSING") {
|
||||||
|
if (item.status == null) {
|
||||||
|
// &&item.time<this.list[index].eventType.commitmentTimeLimit
|
||||||
|
if (
|
||||||
|
item.time >
|
||||||
|
this.list[index].eventType.timeoutReminder * 3600
|
||||||
|
) {
|
||||||
|
item.status = false;
|
||||||
|
if (
|
||||||
|
item.time >=
|
||||||
|
this.list[index].eventType.commitmentTimeLimit * 3600
|
||||||
|
) {
|
||||||
|
item.status = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.timers = arr;
|
||||||
|
|
||||||
this.timersInterval = setInterval(() => {
|
this.timersInterval = setInterval(() => {
|
||||||
if (arr.length > 0) {
|
if (arr.length > 0) {
|
||||||
arr.map((item, index) => {
|
arr.map((item, index) => {
|
||||||
if (item.phase !== 'FINISH') {
|
if (item.phase !== "FINISH") {
|
||||||
item.time++
|
item.time++;
|
||||||
if (this.list[index].phase === 'PENDING_ORDER') {
|
if (this.list[index].phase === "PENDING_ORDER") {
|
||||||
if (item.status == null) {
|
if (item.status == null) {
|
||||||
if (item.time > 57600) {
|
if (item.time > 57600) {
|
||||||
item.status = false
|
item.status = false;
|
||||||
if (item.time >= 86400) {
|
if (item.time >= 86400) {
|
||||||
item.status = true
|
item.status = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.list[index].phase === 'PROCESSING') {
|
if (this.list[index].phase === "PROCESSING") {
|
||||||
if (item.status == null) {
|
if (item.status == null) {
|
||||||
// &&item.time<this.list[index].eventType.commitmentTimeLimit
|
// &&item.time<this.list[index].eventType.commitmentTimeLimit
|
||||||
if (
|
if (
|
||||||
item.time >
|
item.time >
|
||||||
this.list[index].eventType.timeoutReminder * 3600
|
this.list[index].eventType.timeoutReminder * 3600
|
||||||
) {
|
) {
|
||||||
item.status = false
|
item.status = false;
|
||||||
if (
|
if (
|
||||||
item.time >=
|
item.time >=
|
||||||
this.list[index].eventType.commitmentTimeLimit * 3600
|
this.list[index].eventType.commitmentTimeLimit * 3600
|
||||||
) {
|
) {
|
||||||
item.status = true
|
item.status = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
this.timers = arr
|
this.timers = arr;
|
||||||
}, 1000)
|
}, 1000);
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
getTypeList() {
|
getTypeList() {
|
||||||
typeList().then(res => {
|
typeList().then(res => {
|
||||||
// console.log(res);
|
// console.log(res);
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
getStaffList() {
|
getStaffList() {
|
||||||
staffList().then(res => {
|
staffList().then(res => {
|
||||||
|
@ -429,10 +466,10 @@ export default {
|
||||||
const obj = {
|
const obj = {
|
||||||
label: item.name,
|
label: item.name,
|
||||||
value: item.id
|
value: item.id
|
||||||
}
|
};
|
||||||
this.staffOptions.push(obj)
|
this.staffOptions.push(obj);
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
handleTypeChange() {},
|
handleTypeChange() {},
|
||||||
resetPayload() {
|
resetPayload() {
|
||||||
|
@ -444,79 +481,79 @@ export default {
|
||||||
attachmentList: undefined,
|
attachmentList: undefined,
|
||||||
approve: undefined,
|
approve: undefined,
|
||||||
evaluation: undefined
|
evaluation: undefined
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
handleUpdate(row, type) {
|
handleUpdate(row, type) {
|
||||||
this.resetPayload()
|
this.resetPayload();
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.applyForm.clearValidate()
|
this.$refs.applyForm.clearValidate();
|
||||||
})
|
});
|
||||||
this.updateType = type
|
this.updateType = type;
|
||||||
this.payload.id = row.id
|
this.payload.id = row.id;
|
||||||
this.payload.version = row.version
|
this.payload.version = row.version;
|
||||||
this.payload.type = type
|
this.payload.type = type;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 5:
|
case 5:
|
||||||
this.applyDialog = true
|
this.applyDialog = true;
|
||||||
break
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
this.applyDialog = true
|
this.applyDialog = true;
|
||||||
break
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
this.applyDialog = true
|
this.applyDialog = true;
|
||||||
break
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
this.applyDialog = true
|
this.applyDialog = true;
|
||||||
break
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
this.applyDialog = true
|
this.applyDialog = true;
|
||||||
break
|
break;
|
||||||
default:
|
default:
|
||||||
this.updateData()
|
this.updateData();
|
||||||
break
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateData() {
|
updateData() {
|
||||||
update(this.payload).then(res => {
|
update(this.payload).then(res => {
|
||||||
if (res.c === 200) {
|
if (res.c === 200) {
|
||||||
this.$notify.success('操作成功')
|
this.$notify.success("操作成功");
|
||||||
this.getList()
|
this.getList();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
apply() {
|
apply() {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$refs.applyForm.validate(valid => {
|
this.$refs.applyForm.validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.updateData()
|
this.updateData();
|
||||||
this.applyDialog = false
|
this.applyDialog = false;
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}, 100)
|
}, 100);
|
||||||
},
|
},
|
||||||
handleFilterPhase(phase, event) {
|
handleFilterPhase(phase, event) {
|
||||||
// console.log(event.target.tagName==='SPAN');
|
// console.log(event.target.tagName==='SPAN');
|
||||||
if (event.target.tagName === 'SPAN') {
|
if (event.target.tagName === "SPAN") {
|
||||||
event.target.parentElement.setAttribute(
|
event.target.parentElement.setAttribute(
|
||||||
'class',
|
"class",
|
||||||
'el-button el-button--' +
|
"el-button el-button--" +
|
||||||
(phase === undefined ? 'primary' : 'default') +
|
(phase === undefined ? "primary" : "default") +
|
||||||
' el-button--medium is-round'
|
" el-button--medium is-round"
|
||||||
)
|
);
|
||||||
} else {
|
} else {
|
||||||
event.target.setAttribute(
|
event.target.setAttribute(
|
||||||
'class',
|
"class",
|
||||||
'el-button el-button--' +
|
"el-button el-button--" +
|
||||||
(phase === undefined ? 'primary' : 'default') +
|
(phase === undefined ? "primary" : "default") +
|
||||||
' el-button--medium is-round'
|
" el-button--medium is-round"
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
this.listQuery.phase = phase
|
this.listQuery.phase = phase;
|
||||||
this.getList()
|
this.getList();
|
||||||
},
|
},
|
||||||
handleFilterStatus(status) {
|
handleFilterStatus(status) {
|
||||||
this.listQuery.status = status
|
this.listQuery.status = status;
|
||||||
this.getList()
|
this.getList();
|
||||||
},
|
},
|
||||||
handlePreview() {},
|
handlePreview() {},
|
||||||
handleRemove() {},
|
handleRemove() {},
|
||||||
|
@ -525,18 +562,18 @@ export default {
|
||||||
timeFormat(timeStamp) {
|
timeFormat(timeStamp) {
|
||||||
const timeStr = `${
|
const timeStr = `${
|
||||||
Math.floor(timeStamp / 3600) < 9
|
Math.floor(timeStamp / 3600) < 9
|
||||||
? '0' + Math.floor(timeStamp / 3600)
|
? "0" + Math.floor(timeStamp / 3600)
|
||||||
: Math.floor(timeStamp / 3600)
|
: Math.floor(timeStamp / 3600)
|
||||||
}:${
|
}:${
|
||||||
Math.floor(((timeStamp % 86400) % 3600) / 60) < 9
|
Math.floor(((timeStamp % 86400) % 3600) / 60) < 9
|
||||||
? '0' + Math.floor(((timeStamp % 86400) % 3600) / 60)
|
? "0" + Math.floor(((timeStamp % 86400) % 3600) / 60)
|
||||||
: Math.floor(((timeStamp % 86400) % 3600) / 60)
|
: Math.floor(((timeStamp % 86400) % 3600) / 60)
|
||||||
}:${
|
}:${
|
||||||
Math.floor(((timeStamp % 86400) % 3600) % 60) < 9
|
Math.floor(((timeStamp % 86400) % 3600) % 60) < 9
|
||||||
? '0' + Math.floor(((timeStamp % 86400) % 3600) % 60)
|
? "0" + Math.floor(((timeStamp % 86400) % 3600) % 60)
|
||||||
: Math.floor(((timeStamp % 86400) % 3600) % 60)
|
: Math.floor(((timeStamp % 86400) % 3600) % 60)
|
||||||
}`
|
}`;
|
||||||
return timeStr
|
return timeStr;
|
||||||
},
|
},
|
||||||
countdown(index, status) {
|
countdown(index, status) {
|
||||||
//
|
//
|
||||||
|
@ -554,7 +591,7 @@ export default {
|
||||||
// return statusEl;
|
// return statusEl;
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scope>
|
<style scope>
|
||||||
|
|
|
@ -29,7 +29,9 @@
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row> -->
|
</el-row> -->
|
||||||
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
|
<el-col :xs='24' :lg='24' :sm='24' style="color:#787878;margin-bottom:20px"><span>数据统计</span><span style="float:right">更新时间:{{new Date() | parseTime}}</span></el-col>
|
||||||
<el-col
|
<el-col
|
||||||
v-for="(value, key, index) in statisticalData"
|
v-for="(value, key, index) in statisticalData"
|
||||||
:key="index"
|
:key="index"
|
||||||
|
@ -58,6 +60,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import CountTo from "vue-count-to";
|
import CountTo from "vue-count-to";
|
||||||
|
import {parseTime} from '@/utils'
|
||||||
import { statisticalData } from "@/api/statisticalData";
|
import { statisticalData } from "@/api/statisticalData";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -95,7 +98,7 @@ export default {
|
||||||
} else {
|
} else {
|
||||||
str = value;
|
str = value;
|
||||||
}
|
}
|
||||||
console.log(str);
|
// console.log(str);
|
||||||
return str
|
return str
|
||||||
},
|
},
|
||||||
timeFormat(timeStamp) {
|
timeFormat(timeStamp) {
|
||||||
|
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 5.7 KiB |
|
@ -120,8 +120,8 @@ export default {
|
||||||
// password: '111111'
|
// password: '111111'
|
||||||
// },
|
// },
|
||||||
loginForm: {
|
loginForm: {
|
||||||
username: '18882564006',
|
username: '',
|
||||||
captcha: '111111',
|
captcha: '',
|
||||||
appVersion: '1.0.0',
|
appVersion: '1.0.0',
|
||||||
system: 'IOS',
|
system: 'IOS',
|
||||||
device: navigator.userAgent,
|
device: navigator.userAgent,
|
||||||
|
@ -142,7 +142,7 @@ export default {
|
||||||
redirect: undefined,
|
redirect: undefined,
|
||||||
otherQuery: {},
|
otherQuery: {},
|
||||||
codeText: '获取验证码',
|
codeText: '获取验证码',
|
||||||
time: 5,
|
time: 60,
|
||||||
getCodeDisabled: false
|
getCodeDisabled: false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -296,7 +296,7 @@ export default {
|
||||||
this.time--
|
this.time--
|
||||||
this.codeText = `${this.time}s 后重新获取`
|
this.codeText = `${this.time}s 后重新获取`
|
||||||
if (this.time === 0) {
|
if (this.time === 0) {
|
||||||
this.time = 5
|
this.time = 60
|
||||||
this.codeText = '获取验证码'
|
this.codeText = '获取验证码'
|
||||||
this.getCodeDisabled = false
|
this.getCodeDisabled = false
|
||||||
clearInterval(interval)
|
clearInterval(interval)
|
||||||
|
|
Before Width: | Height: | Size: 375 KiB After Width: | Height: | Size: 69 KiB |
|
@ -58,7 +58,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// import Pagination from '@/components/Pagination'
|
import Pagination from '@/components/Pagination'
|
||||||
import { workBookList } from '@/api/workBook'
|
import { workBookList } from '@/api/workBook'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|