16
src/App.vue
|
@ -32,4 +32,20 @@ export default {
|
|||
font-size: 14px;
|
||||
border-radius: 15px;
|
||||
}
|
||||
.appeal .el-button{
|
||||
padding: 7px 10px;
|
||||
font-size: 14px;
|
||||
border-radius: 15px;
|
||||
width: 63px;
|
||||
}
|
||||
.el-button--text{
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.el-loading-spinner {
|
||||
top: 50%;
|
||||
/* margin-top: -21px; */
|
||||
width: 90%;
|
||||
text-align: center;
|
||||
position: fixed;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -54,25 +54,29 @@ export default {
|
|||
console.log(fileList)
|
||||
fileList.forEach(item => {
|
||||
if (item.status === 'ready') {
|
||||
const suffix = item.name.split('.')[1]
|
||||
// const suffix = item.name.split('.')[1]
|
||||
const suffix = item.name.substr(item.name.lastIndexOf('.')+1)
|
||||
const fileName = UUID.generate() + '.' + suffix
|
||||
item.name = fileName
|
||||
OSS(item.raw, fileName).then(res => {
|
||||
this.$emit('input', res.url)
|
||||
item.url = res.url
|
||||
|
||||
this.$emit('input', 'http://storage.myntv.cn/'+res.name)
|
||||
item.url = 'http://storage.myntv.cn/'+res.name
|
||||
item.status = 'success'
|
||||
const list = fileList.filter(item => item.status === 'success').map(item => item.url)
|
||||
console.log(list);
|
||||
this.$emit('input', list)
|
||||
})
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const suffix = file.name.split('.')[0]
|
||||
// const suffix = file.name.split('.')[0]
|
||||
const suffix = item.name.substr(item.name.lastIndexOf('.')+1)
|
||||
const fileName = UUID.generate() + '.' + suffix
|
||||
file.name = fileName
|
||||
this.fileList = [file]
|
||||
OSS(file.raw, fileName).then(res => {
|
||||
this.$emit('input', res.url)
|
||||
this.$emit('input', 'http://storage.myntv.cn/'+res.name)
|
||||
})
|
||||
}
|
||||
},
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
<template>
|
||||
<el-breadcrumb class="app-breadcrumb" separator="/">
|
||||
<transition-group name="breadcrumb">
|
||||
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
|
||||
<span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
|
||||
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
|
||||
<span
|
||||
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
|
||||
class="no-redirect"
|
||||
>{{ item.meta.title }}</span
|
||||
>
|
||||
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
|
||||
</el-breadcrumb-item>
|
||||
</transition-group>
|
||||
|
@ -10,61 +14,73 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import pathToRegexp from 'path-to-regexp'
|
||||
import pathToRegexp from "path-to-regexp";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
levelList: null
|
||||
}
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
$route(route) {
|
||||
// if you go to the redirect page, do not update the breadcrumbs
|
||||
if (route.path.startsWith('/redirect/')) {
|
||||
return
|
||||
if (route.path.startsWith("/redirect/")) {
|
||||
return;
|
||||
}
|
||||
this.getBreadcrumb()
|
||||
this.getBreadcrumb();
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getBreadcrumb()
|
||||
this.getBreadcrumb();
|
||||
},
|
||||
methods: {
|
||||
getBreadcrumb() {
|
||||
// only show routes with meta.title
|
||||
let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
|
||||
const first = matched[0]
|
||||
let matched = this.$route.matched.filter(
|
||||
item => item.meta && item.meta.title
|
||||
);
|
||||
const first = matched[0];
|
||||
|
||||
if (!this.isDashboard(first)) {
|
||||
matched = [{ path: '/dashboard', meta: { title: '首页' }}].concat(matched)
|
||||
matched = [{ path: "/dashboard", meta: { title: "首页" } }].concat(
|
||||
matched
|
||||
);
|
||||
}
|
||||
|
||||
this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
|
||||
this.levelList = matched.filter(
|
||||
item => item.meta && item.meta.title && item.meta.breadcrumb !== false
|
||||
);
|
||||
// console.log(this.levelList);
|
||||
if (this.levelList.length > 1) {
|
||||
this.levelList.splice(0, 1);
|
||||
}
|
||||
},
|
||||
isDashboard(route) {
|
||||
const name = route && route.name
|
||||
const name = route && route.name;
|
||||
if (!name) {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()
|
||||
return (
|
||||
name.trim().toLocaleLowerCase() === "Dashboard".toLocaleLowerCase()
|
||||
);
|
||||
},
|
||||
pathCompile(path) {
|
||||
// To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
|
||||
const { params } = this.$route
|
||||
var toPath = pathToRegexp.compile(path)
|
||||
return toPath(params)
|
||||
const { params } = this.$route;
|
||||
var toPath = pathToRegexp.compile(path);
|
||||
return toPath(params);
|
||||
},
|
||||
handleLink(item) {
|
||||
const { redirect, path } = item
|
||||
const { redirect, path } = item;
|
||||
if (redirect) {
|
||||
this.$router.push(redirect)
|
||||
return
|
||||
this.$router.push(redirect);
|
||||
return;
|
||||
}
|
||||
this.$router.push(this.pathCompile(path))
|
||||
this.$router.push(this.pathCompile(path));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
@ -27,6 +27,7 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
linkProps(to) {
|
||||
console.log(to);
|
||||
if (this.isExternal) {
|
||||
return {
|
||||
href: to,
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<logo v-if="showLogo" :collapse="isCollapse" />
|
||||
<el-scrollbar :id="activeMenu" wrap-class="scrollbar-wrapper">
|
||||
<!-- {{activeMenu}} -->
|
||||
<!-- dddd activeMenu-->
|
||||
<el-menu
|
||||
:default-active="activeMenu"
|
||||
:collapse="isCollapse"
|
||||
|
|
|
@ -112,7 +112,7 @@ export const constantRoutes = [
|
|||
path: 'detail',
|
||||
component: () => import('@/views/convenience/detail'),
|
||||
name: 'ConvenienceDetail',
|
||||
meta: { title: '工单详情', icon: 'convenience', affix: true },
|
||||
meta: { title: '工单详情', icon: 'convenience', affix: true ,activeMenu:'/convenience/list'},
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
|
|
|
@ -13,7 +13,10 @@
|
|||
class="el-form"
|
||||
>
|
||||
<el-form-item label="受理人" prop="residentInformation">
|
||||
<el-input v-model="searchInput" placeholder="群众身份证号或者手机号" />
|
||||
<el-input
|
||||
v-model="convenience.residentInformation"
|
||||
placeholder="群众身份证号或者手机号"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="办事项目">
|
||||
|
@ -65,9 +68,9 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import { add, typeList } from '@/api/convenience'
|
||||
import { info } from '@/api/staff'
|
||||
import AliOss from '@/components/AliOSS/index.vue'
|
||||
import { add, typeList } from "@/api/convenience";
|
||||
import { info } from "@/api/staff";
|
||||
import AliOss from "@/components/AliOSS/index.vue";
|
||||
|
||||
// import Pagination from "@/components/Pagination";
|
||||
// import { list, typeList } from "@/api/convenience";
|
||||
|
@ -79,70 +82,98 @@ export default {
|
|||
},
|
||||
data() {
|
||||
var checkInfo = (rule, value, callback) => {
|
||||
info({ param: this.searchInput || undefined }).then(res => {
|
||||
if (!res.d) {
|
||||
return callback(new Error('查无此人'))
|
||||
} else {
|
||||
this.convenience.residentInformation = res.d.id
|
||||
}
|
||||
})
|
||||
}
|
||||
// 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 === "") {
|
||||
callback(new Error("受理人不能为空"));
|
||||
// console.log('value==<>');
|
||||
} else {
|
||||
info({ param: this.convenience.residentInformation || undefined }).then(
|
||||
res => {
|
||||
if (!res.d) {
|
||||
return callback(new Error("查无此人"));
|
||||
} else {
|
||||
this.searchInput = res.d.id;
|
||||
callback();
|
||||
// this.convenience.residentInformation = res.d.id;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
return {
|
||||
convenience: {
|
||||
residentInformation: undefined,
|
||||
residentInformation: "",
|
||||
eventTypeId: undefined,
|
||||
remark: undefined,
|
||||
sponsor: 'STAFF',
|
||||
sponsor: "STAFF",
|
||||
attachment: undefined
|
||||
},
|
||||
typeOptions: [],
|
||||
rules: {
|
||||
residentInformation: [{ validator: checkInfo, trigger: 'blur' }]
|
||||
residentInformation: [{ validator: checkInfo, trigger: "blur" }]
|
||||
},
|
||||
fileList: undefined,
|
||||
searchInput: undefined
|
||||
}
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getTypeList()
|
||||
this.getTypeList();
|
||||
},
|
||||
methods: {
|
||||
getTypeList() {
|
||||
typeList().then(res => {
|
||||
this.typeOptions = []
|
||||
this.typeOptions = [];
|
||||
res.d.map(i => {
|
||||
const children = []
|
||||
const children = [];
|
||||
|
||||
i.eventTypesList.map(c => {
|
||||
const level2 = {
|
||||
label: c.eventName,
|
||||
value: c.id
|
||||
}
|
||||
children.push(level2)
|
||||
})
|
||||
};
|
||||
children.push(level2);
|
||||
});
|
||||
const level1 = {
|
||||
label: i.eventName,
|
||||
children
|
||||
}
|
||||
};
|
||||
|
||||
this.typeOptions.push(level1)
|
||||
})
|
||||
})
|
||||
this.typeOptions.push(level1);
|
||||
});
|
||||
});
|
||||
},
|
||||
handleAdd() {
|
||||
add(this.convenience).then(res => {
|
||||
if (res.c === 200) {
|
||||
this.$notify.success('创建成功')
|
||||
this.$router.push('/convenience/list')
|
||||
this.$refs.convenienceForm.validate(valid => {
|
||||
if (valid) {
|
||||
this.convenience.residentInformation = this.searchInput;
|
||||
add(this.convenience).then(res => {
|
||||
if (res.c === 200) {
|
||||
this.$notify.success("创建成功");
|
||||
this.$router.push("/convenience/list");
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
handlePreview() {},
|
||||
handleRemove() {},
|
||||
beforeRemove() {},
|
||||
handleExceed() {}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scope></style>
|
||||
|
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 770 B |
After Width: | Height: | Size: 726 B |
After Width: | Height: | Size: 725 B |
|
@ -3,7 +3,7 @@
|
|||
<div class="filter-container">
|
||||
<el-button
|
||||
type="primary"
|
||||
style="position:absolute;right:50px;top:120px"
|
||||
style="position:absolute;right:50px;margin-top:80px"
|
||||
@click="$router.push('/convenience/add')"
|
||||
><i class="el-icon-plus" /> 直接建立工单</el-button>
|
||||
<div class="title">工单列表</div>
|
||||
|
@ -31,7 +31,7 @@
|
|||
<br>
|
||||
</div>
|
||||
|
||||
<div class="convenienceList">
|
||||
<div class="convenienceList" v-loading="listLoading">
|
||||
<div
|
||||
v-for="(item, index) in list"
|
||||
:key="item.id"
|
||||
|
@ -43,7 +43,7 @@
|
|||
<div class="convenience_item_title" style="flex:1">
|
||||
<i class="icon_list" />
|
||||
<div>
|
||||
<div class="cTitle">城乡养老保险个人变更登记</div>
|
||||
<div class="cTitle">{{ item.eventType.eventName }}</div>
|
||||
<div class="createDate">
|
||||
{{ item.sponsor | sponsorFilter }}创建于{{
|
||||
item.createDate | parseTime("{y}-{m}-{d} {h}:{i}:{s}")
|
||||
|
@ -56,13 +56,16 @@
|
|||
<p>流水号:{{ item.serialNumber }}</p>
|
||||
<p>
|
||||
阶段:{{ item.phase | phaseFilter }}
|
||||
<i v-if="timers&&timers[index].status !== null" class="icon_timeout" />
|
||||
<i
|
||||
class="icon_timeout"
|
||||
v-if="timers && timers[index].status !== null"
|
||||
></i>
|
||||
<span style="color:#ff3000">{{
|
||||
timers && timers[index].status === null
|
||||
? ""
|
||||
: timers&&timers[index].status
|
||||
? "已超时"
|
||||
: "即将超时"
|
||||
: timers && timers[index].status
|
||||
? "已超时"
|
||||
: "即将超时"
|
||||
}}</span>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -76,10 +79,12 @@
|
|||
</p>
|
||||
</div>
|
||||
<div style="flex:1">
|
||||
<p>受理人:{{ item.currentResponsiblePerson.name }}</p>
|
||||
<p>受理人:{{ item.firstResponsiblePerson.name }}</p>
|
||||
</div>
|
||||
<div style="flex:1">
|
||||
<p style="font-size:20px;color:#ff6918">
|
||||
<div
|
||||
style="flex:1;align-items: center;justify-items: center;display: flex;"
|
||||
>
|
||||
<!-- <p style="font-size:20px;color:#ff6918">
|
||||
<i class="icon_timer" />{{
|
||||
(timers && timeFormat(timers[index].time)) || "00:00:00"
|
||||
}}
|
||||
|
@ -87,12 +92,28 @@
|
|||
<p>
|
||||
<el-button
|
||||
v-if="item.phase === 'PENDING_ORDER'"
|
||||
style="margin-left:50px"
|
||||
style="margin-left:44px;font-size:14px;padding:7px 10px;width:70px"
|
||||
type="primary"
|
||||
size="mini"
|
||||
@click="handleUpdate(item, 5)"
|
||||
>接单</el-button>
|
||||
</p>
|
||||
>接单</el-button
|
||||
>
|
||||
</p> -->
|
||||
<div style="font-size:20px;color:#ff6918">
|
||||
<i class="icon_timer" />{{
|
||||
(timers && timeFormat(timers[index].time)) || "00:00:00"
|
||||
}}
|
||||
<div>
|
||||
<el-button
|
||||
v-if="item.phase === 'PENDING_ORDER'"
|
||||
style="margin-left:44px;font-size:14px;padding:7px 10px;width:70px;margin-top:12px"
|
||||
type="primary"
|
||||
size="mini"
|
||||
@click.stop="handleUpdate(item, 5)"
|
||||
>接单</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -198,10 +219,10 @@ export default {
|
|||
filters: {
|
||||
sponsorFilter(status) {
|
||||
const statusMap = {
|
||||
SELF: '居民',
|
||||
STAFF: '工作人员'
|
||||
}
|
||||
return statusMap[status]
|
||||
SELF: "群众",
|
||||
STAFF: "工作人员"
|
||||
};
|
||||
return statusMap[status];
|
||||
},
|
||||
phaseFilter(status) {
|
||||
const statusMap = {
|
||||
|
@ -214,13 +235,13 @@ export default {
|
|||
},
|
||||
statusFilter(status) {
|
||||
const statusMap = {
|
||||
MINE: '待我处理',
|
||||
FORWARDED: '已转交',
|
||||
FORWARDED_APPLY: '转交超限审批中',
|
||||
SUBMIT_APPLY: '提交申请',
|
||||
WAIT_APPLY: '待审核'
|
||||
}
|
||||
return statusMap[status]
|
||||
MINE: "我处理",
|
||||
FORWARDED: "已转交",
|
||||
FORWARDED_APPLY: "转交超限审批中",
|
||||
SUBMIT_APPLY: "已提交审批",
|
||||
WAIT_APPLY: "待审核"
|
||||
};
|
||||
return statusMap[status];
|
||||
},
|
||||
typeFilter(status) {
|
||||
const statusMap = {
|
||||
|
@ -302,12 +323,13 @@ export default {
|
|||
getList() {
|
||||
this.listLoading = true
|
||||
list(this.listQuery).then(res => {
|
||||
this.list = res.d.records
|
||||
this.listLoading = false
|
||||
clearInterval(this.timersInterval)
|
||||
const tempData = res.d.records
|
||||
const now = Date.parse(new Date()).toString() / 1000
|
||||
const arr = []
|
||||
this.list = res.d.records;
|
||||
this.listLoading = false;
|
||||
clearInterval(this.timersInterval);
|
||||
const tempData = res.d.records;
|
||||
const now = Date.parse(new Date()).toString() / 1000;
|
||||
// console.log(now);
|
||||
const arr = [];
|
||||
tempData.map((item, index) => {
|
||||
let msec = []
|
||||
let obj = {}
|
||||
|
@ -324,7 +346,7 @@ export default {
|
|||
break
|
||||
case 'PREREQUISITES':
|
||||
// 要件准备
|
||||
msec = now - item.createDate - item.acceptanceTime
|
||||
msec = now - item.createDate;
|
||||
obj = {
|
||||
time: msec,
|
||||
phase: item.phase,
|
||||
|
@ -334,11 +356,7 @@ export default {
|
|||
break
|
||||
case 'PROCESSING':
|
||||
// 办理中
|
||||
msec =
|
||||
now -
|
||||
item.createDate -
|
||||
item.acceptanceTime -
|
||||
item.prerequisitesTime
|
||||
msec = now - item.createDate;
|
||||
obj = {
|
||||
time: msec,
|
||||
phase: item.phase,
|
||||
|
|
|
@ -1,21 +1,24 @@
|
|||
<template>
|
||||
<el-row :gutter="40" class="panel-group">
|
||||
<!-- <el-row :gutter="40" class="panel-group">
|
||||
<el-col
|
||||
v-for="(value, key, index) in statisticalData"
|
||||
:key="index"
|
||||
:xs="12"
|
||||
:sm="12"
|
||||
:lg="6"
|
||||
:lg="key==='all'?12:6"
|
||||
class="card-panel-col"
|
||||
>
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-people">
|
||||
<svg-icon icon-class="peoples" class-name="card-panel-icon" />
|
||||
<i class="icon_"></i>
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div v-if="key==='all'">累计服务量 :</div>
|
||||
<div class="card-panel-text">
|
||||
{{ key == "all" ? "总服务量" : key }}
|
||||
</div>
|
||||
<div class="numText">{{value}}</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="value"
|
||||
|
@ -25,372 +28,37 @@
|
|||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<!-- <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-people">
|
||||
<svg-icon icon-class="peoples" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
不满意率
|
||||
</el-row> -->
|
||||
<el-row :gutter="20">
|
||||
<el-col
|
||||
v-for="(value, key, index) in statisticalData"
|
||||
:key="index"
|
||||
:xs="12"
|
||||
:sm="12"
|
||||
:lg="key === 'all' ? 12 : 6"
|
||||
>
|
||||
<div class="countLayout">
|
||||
<i :class="`countIcon icon_${index}`"></i>
|
||||
<span v-if="key === 'all'" style="font-size:24px"
|
||||
>累计服务量 :<span style="color:#ff663d;font-size:49px;vertical-align: middle;">{{ value }}</span></span
|
||||
>
|
||||
<div
|
||||
v-else
|
||||
style="flex: 1;text-align: right;padding-right:51px;font-size:16px;"
|
||||
>
|
||||
<div style="margin-bottom:17px">{{ key }}</div>
|
||||
<div style="font-size:20px;color:#787878;">
|
||||
{{ formatUnit(key, value) }}
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="102400"
|
||||
:duration="2600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-message">
|
||||
<svg-icon icon-class="message" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
不满意量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="81212"
|
||||
:duration="3000"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-money">
|
||||
<svg-icon icon-class="money" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
平均办结时间
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="9280"
|
||||
:duration="3200"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
平均受理时间
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
按时办结率
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
按时办结量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
按时受理率:
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
按时受理量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
未办结率
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
未办结量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
未受理率
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
未受理量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
满意率
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
满意量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
群众非常满意率
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
超时办结率
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
超时办结量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
超时受理率
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
超时受理量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
|
||||
<div class="card-panel">
|
||||
<div class="card-panel-icon-wrapper icon-shopping">
|
||||
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
|
||||
</div>
|
||||
<div class="card-panel-description">
|
||||
<div class="card-panel-text">
|
||||
非常满意量
|
||||
</div>
|
||||
<count-to
|
||||
:start-val="0"
|
||||
:end-val="13600"
|
||||
:duration="3600"
|
||||
class="card-panel-num"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import CountTo from 'vue-count-to'
|
||||
import { statisticalData } from '@/api/statisticalData'
|
||||
import CountTo from "vue-count-to";
|
||||
import { statisticalData } from "@/api/statisticalData";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
@ -403,10 +71,10 @@ export default {
|
|||
eventTypeId: undefined
|
||||
},
|
||||
statisticalData: undefined
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getStatisticalData()
|
||||
this.getStatisticalData();
|
||||
},
|
||||
methods: {
|
||||
// handleSetLineChartData(type) {
|
||||
|
@ -414,14 +82,141 @@ export default {
|
|||
// }
|
||||
getStatisticalData() {
|
||||
statisticalData(this.listQuery).then(res => {
|
||||
this.statisticalData = res.d
|
||||
})
|
||||
}
|
||||
this.statisticalData = res.d;
|
||||
});
|
||||
},
|
||||
formatUnit(key, value) {
|
||||
// console.log(key,value);
|
||||
let str = '';
|
||||
if (key.indexOf("率")!= -1) {
|
||||
str = `${(value * 100).toFixed(2)}%`;
|
||||
} else if (key.indexOf("时间")!= -1) {
|
||||
str = this.timeFormat(value);
|
||||
} else {
|
||||
str = value;
|
||||
}
|
||||
console.log(str);
|
||||
return str
|
||||
},
|
||||
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>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.countLayout {
|
||||
background: #fff;
|
||||
margin-bottom: 18px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.countIcon {
|
||||
display: inline-block;
|
||||
background-size: cover !important;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
margin: 38px 38px 38px 55px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.icon_0 {
|
||||
background: url("./img/icon_0.png") no-repeat;
|
||||
}
|
||||
.icon_1 {
|
||||
background: url("./img/icon_1.png") no-repeat;
|
||||
}
|
||||
.icon_2 {
|
||||
background: url("./img/icon_2.png") no-repeat;
|
||||
}
|
||||
.icon_3 {
|
||||
background: url("./img/icon_3.png") no-repeat;
|
||||
}
|
||||
.icon_4 {
|
||||
background: url("./img/icon_3.png") no-repeat;
|
||||
}
|
||||
.icon_5 {
|
||||
background: url("./img/icon_4.png") no-repeat;
|
||||
}
|
||||
.icon_6 {
|
||||
background: url("./img/icon_4.png") no-repeat;
|
||||
}
|
||||
.icon_7 {
|
||||
background: url("./img/icon_5.png") no-repeat;
|
||||
}
|
||||
.icon_8 {
|
||||
background: url("./img/icon_5.png") no-repeat;
|
||||
}
|
||||
.icon_9 {
|
||||
background: url("./img/icon_6.png") no-repeat;
|
||||
}
|
||||
.icon_10 {
|
||||
background: url("./img/icon_6.png") no-repeat;
|
||||
}
|
||||
.icon_11 {
|
||||
background: url("./img/icon_7.png") no-repeat;
|
||||
}
|
||||
.icon_12 {
|
||||
background: url("./img/icon_7.png") no-repeat;
|
||||
}
|
||||
.icon_13 {
|
||||
background: url("./img/icon_8.png") no-repeat;
|
||||
}
|
||||
.icon_14 {
|
||||
background: url("./img/icon_8.png") no-repeat;
|
||||
}
|
||||
.icon_15 {
|
||||
background: url("./img/icon_9.png") no-repeat;
|
||||
width: 63px;
|
||||
height: 54px;
|
||||
}
|
||||
.icon_16 {
|
||||
background: url("./img/icon_9.png") no-repeat;
|
||||
width: 63px;
|
||||
height: 54px;
|
||||
}
|
||||
.icon_17 {
|
||||
background: url("./img/icon_10.png") no-repeat;
|
||||
width: 63px;
|
||||
height: 54px;
|
||||
}
|
||||
.icon_18 {
|
||||
background: url("./img/icon_10.png") no-repeat;
|
||||
width: 63px;
|
||||
height: 54px;
|
||||
}
|
||||
.icon_19 {
|
||||
background: url("./img/icon_11.png") no-repeat;
|
||||
width: 63px;
|
||||
height: 54px;
|
||||
}
|
||||
.icon_20 {
|
||||
background: url("./img/icon_11.png") no-repeat;
|
||||
width: 63px;
|
||||
height: 54px;
|
||||
}
|
||||
// .icon_21{
|
||||
// background:url('./img/icon_1.png')no-repeat;
|
||||
// }
|
||||
.numText {
|
||||
font-size: 20px;
|
||||
color: #787878;
|
||||
font-family: PingFang-SC-Regular;
|
||||
text-align: right;
|
||||
}
|
||||
.panel-group {
|
||||
margin-top: 18px;
|
||||
|
||||
|
|
After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 8.6 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 427 B |
|
@ -2,8 +2,10 @@
|
|||
<div
|
||||
class="login-container"
|
||||
style="display: flex;
|
||||
align-items: center;"
|
||||
align-items: center;flex-direction: column;
|
||||
justify-content: center;"
|
||||
>
|
||||
<div class="systemTitle"><i class="login_titleLine_left"/>壤塘家园定点服务系统 <i class="login_titleLine_left" style="transform: rotate(180deg);margin-left:29px"/></div>
|
||||
<div
|
||||
style="background: white;
|
||||
width: 1053px;
|
||||
|
@ -444,5 +446,21 @@ $light_gray: #1890ff;
|
|||
padding: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.login_titleLine_left{
|
||||
background: url('./img/login_titleLine_left.png')no-repeat;
|
||||
background-size: cover;
|
||||
display: inline-block;
|
||||
width: 315px;
|
||||
height: 1px;
|
||||
margin-right: 29px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.systemTitle{
|
||||
font-size: 37px;
|
||||
color: rgb(255, 255, 255);
|
||||
margin-bottom: 63px;
|
||||
min-width: 1098px;
|
||||
margin: 63px auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import Pagination from '@/components/Pagination'
|
||||
// import Pagination from '@/components/Pagination'
|
||||
import { workBookList } from '@/api/workBook'
|
||||
|
||||
export default {
|
||||
|
|