feat(dashboard): 添加看板页面

This commit is contained in:
woody 2025-07-18 14:53:41 +08:00
parent 09d18b63a0
commit df20087d3b
7 changed files with 1485 additions and 373 deletions

35
src/api/dashboard.js Normal file
View File

@ -0,0 +1,35 @@
import request from '@/utils/request'
// 会员汇总数据
export function getMemberSummary() {
return request({
url: '/system/manage/board/member-summary',
method: 'get'
})
}
// 日业绩数据
export function getDailyPerformance(params) {
return request({
url: '/system/manage/board/day-achieve',
method: 'get',
params
})
}
// 月业绩数据
export function getMonthlyPerformance() {
return request({
url: '/system/manage/board/month-achieve',
method: 'get'
})
}
// 充值汇总数据
export function getRechargeSummary() {
return request({
url: '/system/manage/board/recharge-summary',
method: 'get'
})
}

View File

@ -47,7 +47,7 @@ export const constantRoutes = [
{ {
path: '/', path: '/',
component: Layout, component: Layout,
redirect: '/dashboard', redirect: '/summaryDashboard',
name: 'index', name: 'index',
// alwaysShow: true, // alwaysShow: true,
meta: { title: '首页', icon: 'firstPage', icon1: 'firstPageSel' }, meta: { title: '首页', icon: 'firstPage', icon1: 'firstPageSel' },
@ -58,6 +58,13 @@ export const constantRoutes = [
component: () => import('@/views/dashboard/index'), component: () => import('@/views/dashboard/index'),
meta: { title: '首页', icon: 'firstPage', icon1: 'firstPageSel' } meta: { title: '首页', icon: 'firstPage', icon1: 'firstPageSel' }
}, },
{
path: 'summaryDashboard',
name: 'SummaryDashboard',
component: () => import('@/views/dashboard/dashboard'),
meta: { title: '汇总', icon: 'dashboard' },
hidden: true
},
{ {
path: 'hasIndex', path: 'hasIndex',
name: 'HasIndex', name: 'HasIndex',

File diff suppressed because it is too large Load Diff

View File

@ -14,11 +14,11 @@
<div class="page"> <div class="page">
<topBar <topBar
v-if="topList.length > 0" v-if="topList.length > 0"
:topList="topList" :top-list="topList"
:moren="moren" :moren="moren"
:waitApprovalNum="waitApprovalNum" :wait-approval-num="waitApprovalNum"
:receiveApprovalNum="receiveApprovalNum" :receive-approval-num="receiveApprovalNum"
></topBar> />
<div class="main"> <div class="main">
<div class="form_all"> <div class="form_all">
<el-form ref="select" :model="select" label-width="auto"> <el-form ref="select" :model="select" label-width="auto">
@ -35,45 +35,45 @@
</el-form-item> --> </el-form-item> -->
<el-form-item label="签呈编号"> <el-form-item label="签呈编号">
<el-input <el-input
clearable
v-model="select.approvalCode" v-model="select.approvalCode"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 一层 --> <!-- 一层 -->
<el-col :span="4"> <el-col :span="4">
<el-form-item :label="'业务类型'"> <el-form-item :label="'业务类型'">
<el-select <el-select
v-model="select.approvalBusiness"
clearable clearable
filterable filterable
v-model="select.approvalBusiness"
> >
<el-option <el-option
v-for="item in ywsqList" v-for="item in ywsqList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item label="业务类型内容"> <el-form-item label="业务类型内容">
<el-input <el-input
clearable
v-model="select.approvalBusinessVal" v-model="select.approvalBusinessVal"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item label="情况说明"> <el-form-item label="情况说明">
<el-input <el-input
clearable
v-model="select.remark" v-model="select.remark"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="4"> <!-- <el-col :span="4">
@ -89,13 +89,13 @@
</el-col> --> </el-col> -->
<el-col :span="4"> <el-col :span="4">
<el-form-item :label="'签呈状态'"> <el-form-item :label="'签呈状态'">
<el-select clearable v-model="select.approveStatus"> <el-select v-model="select.approveStatus" clearable>
<el-option <el-option
v-for="item in approveStatusList" v-for="item in approveStatusList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -108,8 +108,7 @@
:range-separator="'至'" :range-separator="'至'"
:start-placeholder="'开始日期'" :start-placeholder="'开始日期'"
:end-placeholder="'结束日期'" :end-placeholder="'结束日期'"
> />
</el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -121,14 +120,12 @@
:range-separator="'至'" :range-separator="'至'"
:start-placeholder="'开始日期'" :start-placeholder="'开始日期'"
:end-placeholder="'结束日期'" :end-placeholder="'结束日期'"
> />
</el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-button type="primary" @click="getDataList1"> <el-button type="primary" @click="getDataList1">
{{ '搜索' }}</el-button {{ '搜索' }}</el-button>
>
<el-button @click="reset"> {{ '重置' }}</el-button> <el-button @click="reset"> {{ '重置' }}</el-button>
</el-col> </el-col>
</el-row> </el-row>
@ -136,27 +133,24 @@
</div> </div>
<div class="main_a"> <div class="main_a">
<div class="mainbtn"> <div class="mainbtn">
<el-button size="small" @click="handleExport" class="exportBtn"> <el-button size="small" class="exportBtn" @click="handleExport">
{{ '导出' }}</el-button {{ '导出' }}</el-button>
>
</div> </div>
</div> </div>
<el-table <el-table
v-loading="loading"
:data="tableData1" :data="tableData1"
style="width: 100%" style="width: 100%"
height="100%" height="100%"
v-loading="loading"
:header-cell-style="{ background: '#EEEEEE' }" :header-cell-style="{ background: '#EEEEEE' }"
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
> >
<el-table-column align="center" prop="approvalCode" label="签呈编号"> <el-table-column align="center" prop="approvalCode" label="签呈编号" />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="approvalBusinessVal" prop="approvalBusinessVal"
:label="'业务类型'" :label="'业务类型'"
> />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="parentClassifyName" prop="parentClassifyName"
@ -179,19 +173,19 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div class="bz_a"> <div class="bz_a">
<div <div
class="bz_i"
v-for="(item, index) in scope.row.detailList" v-for="(item, index) in scope.row.detailList"
:key="index" :key="index"
class="bz_i"
> >
<div :class="item.useTime == undefined ? 'qiu' : 'quan'"></div> <div :class="item.useTime == undefined ? 'qiu' : 'quan'" />
<div <div
v-if="index != scope.row.detailList.length - 1"
:class=" :class="
scope.row.detailList[index + 1].useTime == undefined scope.row.detailList[index + 1].useTime == undefined
? 'gun1' ? 'gun1'
: 'gun' : 'gun'
" "
v-if="index != scope.row.detailList.length - 1" />
></div>
<div class="time">{{ item.useTime }}</div> <div class="time">{{ item.useTime }}</div>
<div class="zhi"> <div class="zhi">
<div>{{ item.nickName }}</div> <div>{{ item.nickName }}</div>
@ -223,8 +217,7 @@
align="center" align="center"
prop="useTime" prop="useTime"
:label="'总耗时'" :label="'总耗时'"
> />
</el-table-column>
<!-- <el-table-column align="center" <!-- <el-table-column align="center"
prop="approvalOperationVal" prop="approvalOperationVal"
:label="'审核状态'"> :label="'审核状态'">
@ -233,8 +226,7 @@
align="center" align="center"
prop="approveStatusVal" prop="approveStatusVal"
:label="'签呈状态'" :label="'签呈状态'"
> />
</el-table-column>
<!-- <el-table-column align="center" <!-- <el-table-column align="center"
prop="remark" prop="remark"
label="情况说明"> label="情况说明">
@ -243,10 +235,8 @@
align="center" align="center"
prop="creationTime" prop="creationTime"
:label="'创建日期'" :label="'创建日期'"
> />
</el-table-column> <el-table-column align="center" prop="endTime" :label="'终审日期'" />
<el-table-column align="center" prop="endTime" :label="'终审日期'">
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
@ -256,9 +246,9 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="toFixed(scope.row.approvalCode, 1)"
type="text" type="text"
size="small" size="small"
@click="toFixed(scope.row.approvalCode, 1)"
> >
{{ '查看签呈' }} {{ '查看签呈' }}
</el-button> </el-button>
@ -276,159 +266,137 @@
</template> </template>
<script> <script>
import { mapGetters } from "vuex"; import { mapGetters } from 'vuex'
import * as api from "@/api/manage.js"; import * as api from '@/api/manage.js'
import topBar from "@/components/topBar"; import topBar from '@/components/topBar'
import topBarMixin from './mixins/top-bar-mixin'
export default { export default {
name: "Dashboard", name: 'Dashboard',
components: { mixins: [topBarMixin],
topBar,
},
computed: { computed: {
...mapGetters(["name"]), ...mapGetters(['name'])
}, },
data() { data() {
return { return {
loading: false, loading: false,
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 50, pageSize: 50
}, },
total: 0, total: 0,
tableData: [], tableData: [],
tableData1: [], tableData1: [],
tabActive: 0, tabActive: 0,
select: {}, select: {},
moren: "hasIndex", moren: 'hasIndex',
topList: [
{
name: "代办",
path: "dashboard",
},
{
name: "已办",
path: "hasIndex",
},
{
name: "抄送查阅/操作",
path: "receiveIndex",
},
// {
// name: '',
// path: 'goodsCheck',
// },
// {
// name: '',
// path: 'productCheck',
// },
],
ywsqList: [], ywsqList: [],
checkList: [], checkList: [],
sourceList: [], sourceList: [],
approveStatusList: [], approveStatusList: [],
waitApprovalNum: "", waitApprovalNum: '',
receiveApprovalNum: "", receiveApprovalNum: ''
}; }
}, },
mounted() { mounted() {
// //
this.getDataList1(); this.getDataList1()
this.getApprove(); this.getApprove()
this.getSignType(); this.getSignType()
this.getSource(); this.getSource()
this.getApprovalStatus(); this.getApprovalStatus()
}, },
methods: { methods: {
reset() { reset() {
this.select = {}; this.select = {}
this.getDataList1(); this.getDataList1()
}, },
getApprove() { getApprove() {
api.approvalBusiness().then((res) => { api.approvalBusiness().then((res) => {
this.ywsqList = res.data; this.ywsqList = res.data
}); })
}, },
getSource() { getSource() {
api.signSource().then((res) => { api.signSource().then((res) => {
this.sourceList = res.data; this.sourceList = res.data
}); })
}, },
getSignType() { getSignType() {
api.approvalOperation().then((res) => { api.approvalOperation().then((res) => {
this.checkList = res.data; this.checkList = res.data
}); })
}, },
getApprovalStatus() { getApprovalStatus() {
api.approvalStatus().then((res) => { api.approvalStatus().then((res) => {
this.approveStatusList = res.data; this.approveStatusList = res.data
}); })
api.waitApprovalNum().then((res) => { api.waitApprovalNum().then((res) => {
this.waitApprovalNum = res.data; this.waitApprovalNum = res.data
}); })
api.receiveApprovalNum().then((res) => { api.receiveApprovalNum().then((res) => {
this.receiveApprovalNum = res.data; this.receiveApprovalNum = res.data
}); })
}, },
// tab // tab
handleLink(id) { handleLink(id) {
this.tabActive = id; this.tabActive = id
if (id == 0) { if (id == 0) {
// //
this.getDataList(); this.getDataList()
} else { } else {
// //
this.getDataList1(); this.getDataList1()
} }
}, },
getDataList() { getDataList() {
api.waitApproval().then((res) => { api.waitApproval().then((res) => {
this.tableData = res.data; this.tableData = res.data
}); })
}, },
getDataList1() { getDataList1() {
this.loading = true; this.loading = true
api api
.completeApproval(Object.assign({}, this.queryParams, this.select)) .completeApproval(Object.assign({}, this.queryParams, this.select))
.then((res) => { .then((res) => {
this.loading = false; this.loading = false
this.tableData1 = res.rows; this.tableData1 = res.rows
this.total = res.total; this.total = res.total
}); })
}, },
toFixed(id, index) { toFixed(id, index) {
this.$router.push({ this.$router.push({
path: "manageDetails", path: 'manageDetails',
query: { query: {
id: id, id: id,
index: index, index: index
}, }
}); })
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.$confirm('是否确认导出所有数据项?', '警告', { this.$confirm('是否确认导出所有数据项?', '警告', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: "warning", type: 'warning'
}).then((_) => { }).then((_) => {
this.download( this.download(
"/system/manage/index/export-approval", '/system/manage/index/export-approval',
Object.assign({}, this.queryParams, this.select), Object.assign({}, this.queryParams, this.select),
`已办${new Date().getTime()}.xlsx` `已办${new Date().getTime()}.xlsx`
); )
}); })
}, },
tableRowClassName({ row, rowIndex }) { tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 == 1) { if (rowIndex % 2 == 1) {
return "warning-row"; return 'warning-row'
} else if (rowIndex % 2 == 0) { } else if (rowIndex % 2 == 0) {
return "success-row"; return 'success-row'
} }
return ""; return ''
}, }
}, }
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -8,12 +8,12 @@
<div class="page"> <div class="page">
<topBar <topBar
v-if="topList.length > 0 && userInfo.userType != 9" v-if="topList.length > 0 && userInfo.userType != 9"
:topList="topList" :top-list="topList"
:moren="moren" :moren="moren"
:waitApprovalNum="waitApprovalNum" :wait-approval-num="waitApprovalNum"
:receiveApprovalNum="receiveApprovalNum" :receive-approval-num="receiveApprovalNum"
></topBar> />
<div class="main" v-if="userInfo.userType != 9"> <div v-if="userInfo.userType != 9" class="main">
<div> <div>
<div class="form_all"> <div class="form_all">
<el-form ref="select" :model="select" label-width="auto"> <el-form ref="select" :model="select" label-width="auto">
@ -21,45 +21,45 @@
<el-col :span="6"> <el-col :span="6">
<el-form-item label="签呈编号"> <el-form-item label="签呈编号">
<el-input <el-input
clearable
v-model="select.approvalCode" v-model="select.approvalCode"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 一层 --> <!-- 一层 -->
<el-col :span="6"> <el-col :span="6">
<el-form-item :label="'业务类型'"> <el-form-item :label="'业务类型'">
<el-select <el-select
v-model="select.approvalBusiness"
clearable clearable
filterable filterable
v-model="select.approvalBusiness"
> >
<el-option <el-option
v-for="item in ywsqList" v-for="item in ywsqList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="业务类型内容"> <el-form-item label="业务类型内容">
<el-input <el-input
clearable
v-model="select.approvalBusinessVal" v-model="select.approvalBusinessVal"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="情况说明"> <el-form-item label="情况说明">
<el-input <el-input
clearable
v-model="select.remark" v-model="select.remark"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -83,8 +83,7 @@
:range-separator="'至'" :range-separator="'至'"
:start-placeholder="'开始日期'" :start-placeholder="'开始日期'"
:end-placeholder="'结束日期'" :end-placeholder="'结束日期'"
> />
</el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
@ -100,17 +99,16 @@
</el-col> --> </el-col> -->
<el-col :span="4"> <el-col :span="4">
<el-button type="primary" @click="getDataList"> <el-button type="primary" @click="getDataList">
{{ '搜索' }}</el-button {{ '搜索' }}</el-button>
>
<el-button @click="reset"> {{ '重置' }}</el-button> <el-button @click="reset"> {{ '重置' }}</el-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
</div> </div>
<el-table <el-table
v-loading="loading"
:data="tableData" :data="tableData"
height="700px" height="700px"
v-loading="loading"
:element-loading-text="'正在加载'" :element-loading-text="'正在加载'"
:header-cell-style="{ background: '#EEEEEE' }" :header-cell-style="{ background: '#EEEEEE' }"
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
@ -119,17 +117,14 @@
align="center" align="center"
prop="creation" prop="creation"
:label="'发起人'" :label="'发起人'"
> />
</el-table-column> <el-table-column align="center" prop="approvalCode" label="签呈编号" />
<el-table-column align="center" prop="approvalCode" label="签呈编号">
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="approvalBusinessVal" prop="approvalBusinessVal"
:label="'业务类型'" :label="'业务类型'"
> />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="parentClassifyName" prop="parentClassifyName"
@ -139,21 +134,21 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div class="bz_a"> <div class="bz_a">
<div <div
class="bz_i"
v-for="(item, index) in scope.row.detailList" v-for="(item, index) in scope.row.detailList"
:key="index" :key="index"
class="bz_i"
> >
<div <div
:class="item.useTime == undefined ? 'qiu' : 'quan'" :class="item.useTime == undefined ? 'qiu' : 'quan'"
></div> />
<div <div
v-if="index != scope.row.detailList.length - 1"
:class=" :class="
scope.row.detailList[index + 1].useTime == undefined scope.row.detailList[index + 1].useTime == undefined
? 'gun1' ? 'gun1'
: 'gun' : 'gun'
" "
v-if="index != scope.row.detailList.length - 1" />
></div>
<div class="time">{{ item.useTime }}</div> <div class="time">{{ item.useTime }}</div>
<div class="zhi"> <div class="zhi">
<div>{{ item.nickName }}</div> <div>{{ item.nickName }}</div>
@ -172,9 +167,9 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-show="scope.row.approvalFlag == 0" v-show="scope.row.approvalFlag == 0"
@click="toFixed(scope.row.approvalCode, 0)"
type="text" type="text"
size="small" size="small"
@click="toFixed(scope.row.approvalCode, 0)"
> >
{{ '审核' }} {{ '审核' }}
</el-button> </el-button>
@ -185,8 +180,7 @@
prop="creationTime" prop="creationTime"
width="100" width="100"
:label="'创建日期'" :label="'创建日期'"
> />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="time" prop="time"
@ -196,9 +190,9 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="toFixed(scope.row.approvalCode, 0)"
type="text" type="text"
size="small" size="small"
@click="toFixed(scope.row.approvalCode, 0)"
> >
{{ '查看签呈' }} {{ '查看签呈' }}
</el-button> </el-button>
@ -229,7 +223,7 @@
<div class="title"> <div class="title">
{{ noticeObj.title }} {{ noticeObj.title }}
</div> </div>
<div v-html="noticeObj.content" class="img-auto"></div> <div class="img-auto" v-html="noticeObj.content" />
<!-- <span slot="footer"--> <!-- <span slot="footer"-->
<!-- class="dialog-footer">--> <!-- class="dialog-footer">-->
<!-- <el-button type="primary"--> <!-- <el-button type="primary"-->
@ -240,28 +234,30 @@
</template> </template>
<script> <script>
import { mapGetters } from "vuex"; import { mapGetters } from 'vuex'
import * as api from "@/api/manage.js"; import * as api from '@/api/manage.js'
import topBar from "@/components/topBar"; import topBar from '@/components/topBar'
import * as not from "@/api/notice.js"; import * as not from '@/api/notice.js'
import topBarMixin from './mixins/top-bar-mixin'
export default { export default {
name: "Dashboard", name: 'Dashboard',
components: { components: {
topBar, topBar
}, },
mixins: [topBarMixin],
computed: { computed: {
...mapGetters(["name", "user"]), ...mapGetters(['name', 'user'])
}, },
data() { data() {
return { return {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 50, pageSize: 50
}, },
select: { select: {
websiteType: 2, websiteType: 2,
functionType: 1, functionType: 1
}, },
approveStatusList: [], approveStatusList: [],
@ -271,149 +267,127 @@ export default {
tabActive: 0, tabActive: 0,
loading: false, loading: false,
select: {}, select: {},
moren: "dashboard", moren: 'dashboard',
topList: [
{
name: "代办",
path: "dashboard",
},
{
name: "已办",
path: "hasIndex",
},
{
name: "抄送查阅/操作",
path: "receiveIndex",
},
// {
// name: '',
// path: 'goodsCheck',
// },
// {
// name: '',
// path: 'productCheck',
// },
],
ywsqList: [], ywsqList: [],
checkList: [], checkList: [],
tableList: [], tableList: [],
userInfo: "", userInfo: '',
isNotice: false, isNotice: false,
waitApprovalNum: "", waitApprovalNum: '',
receiveApprovalNum: "", receiveApprovalNum: '',
noticeObj: [ noticeObj: [
{ {
title: "", title: '',
content: "", content: ''
}, }
], ]
}; }
}, },
mounted() { mounted() {
// //
this.getDataList(); this.getDataList()
this.getApprove(); this.getApprove()
this.getSignType(); this.getSignType()
this.getNoticePop(); this.getNoticePop()
this.getApprovalStatus(); this.getApprovalStatus()
this.userInfo = JSON.parse(localStorage.getItem("userInfo")); this.userInfo = JSON.parse(localStorage.getItem('userInfo'))
}, },
methods: { methods: {
reset() { reset() {
this.select = {}; this.select = {}
this.getDataList(); this.getDataList()
}, },
handleClose() { handleClose() {
this.isNotice = false; this.isNotice = false
}, },
getNoticePop() { getNoticePop() {
// this.getUser // this.getUser
let userInfo = JSON.parse(localStorage.getItem("userInfo")); const userInfo = JSON.parse(localStorage.getItem('userInfo'))
api api
.noticeShow({ .noticeShow({
roles: userInfo.roleIds, roles: userInfo.roleIds
}) })
.then((res) => { .then((res) => {
if (res.data.length > 0) { if (res.data.length > 0) {
this.noticeObj = res.data[0]; this.noticeObj = res.data[0]
this.isNotice = true; this.isNotice = true
} }
}); })
}, },
getApprovalStatus() { getApprovalStatus() {
api.approvalStatus().then((res) => { api.approvalStatus().then((res) => {
this.approveStatusList = res.data; this.approveStatusList = res.data
}); })
api.waitApprovalNum().then((res) => { api.waitApprovalNum().then((res) => {
this.waitApprovalNum = res.data; this.waitApprovalNum = res.data
}); })
api.receiveApprovalNum().then((res) => { api.receiveApprovalNum().then((res) => {
this.receiveApprovalNum = res.data; this.receiveApprovalNum = res.data
}); })
}, },
goNotice(item) { goNotice(item) {
this.$router.push({ this.$router.push({
path: "/announcement/noticeList/details", path: '/announcement/noticeList/details',
query: { query: {
pkId: item.pkId, pkId: item.pkId,
type: 1, type: 1
// functionType:this.select.functionType // functionType:this.select.functionType
}, }
}); })
}, },
openNotice() { openNotice() {
this.$router.push({ this.$router.push({
path: "/announcement/noticeList/details", path: '/announcement/noticeList/details',
query: { query: {
isAdmin: true, isAdmin: true
}, }
}); })
}, },
getApprove() { getApprove() {
api.approvalBusiness().then((res) => { api.approvalBusiness().then((res) => {
this.ywsqList = res.data; this.ywsqList = res.data
}); })
}, },
getSignType() { getSignType() {
api.approvalOperation().then((res) => { api.approvalOperation().then((res) => {
this.checkList = res.data; this.checkList = res.data
}); })
}, },
getDataList() { getDataList() {
this.loading = true; this.loading = true
api.waitApproval(this.select).then((res) => { api.waitApproval(this.select).then((res) => {
this.tableData = res.data; this.tableData = res.data
this.loading = false; this.loading = false
}); })
not.indexNoticeAdminList(this.select).then((res) => { not.indexNoticeAdminList(this.select).then((res) => {
this.tableList = res.rows; this.tableList = res.rows
this.tableList.forEach((item) => { this.tableList.forEach((item) => {
if (item.title.length > 20) { if (item.title.length > 20) {
item.title = item.title.substring(0, 20) + "..."; item.title = item.title.substring(0, 20) + '...'
} }
item.creationTime = item.creationTime.substring(0, 10); item.creationTime = item.creationTime.substring(0, 10)
}); })
}); })
}, },
toFixed(id, index) { toFixed(id, index) {
this.$router.push({ this.$router.push({
path: "manageDetails", path: 'manageDetails',
query: { query: {
id: id, id: id,
index: index, index: index
}, }
}); })
}, },
tableRowClassName({ row, rowIndex }) { tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 == 1) { if (rowIndex % 2 == 1) {
return "warning-row"; return 'warning-row'
} else if (rowIndex % 2 == 0) { } else if (rowIndex % 2 == 0) {
return "success-row"; return 'success-row'
} }
return ""; return ''
}, }
}, }
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@ -0,0 +1,73 @@
import * as api from '@/api/manage.js'
import { mapGetters } from 'vuex'
import { getRouters } from '@/api/settle'
export default {
data() {
return {
waitApprovalNum: '',
receiveApprovalNum: '',
defaultTabItem: 'dashboard',
topList: [
{
name: '看板',
path: 'summaryDashboard'
},
{
name: '代办',
path: 'dashboard'
},
{
name: '已办',
path: 'hasIndex'
},
{
name: '抄送查阅/操作',
path: 'receiveIndex'
}
// {
// name: '商品审核',
// path: 'goodsCheck',
// },
// {
// name: '产品审核',
// path: 'productCheck',
// },
],
roleMenu: []
}
},
computed: {
...mapGetters(['name', 'user'])
},
created() {
this.getRoles()
},
methods: {
getApprovalStatus() {
api.waitApprovalNum().then((res) => {
this.waitApprovalNum = res.data
})
api.receiveApprovalNum().then((res) => {
this.receiveApprovalNum = res.data
})
},
getRoles() {
return new Promise((resolve, reject) => {
getRouters().then((res) => {
this.roleMenu = res.data || []
if (!this.roleMenu.find((item) => item.routeName === 'summaryDashboard')) {
this.topList.splice(0, 1)
if (this.$route.name === 'SummaryDashboard') {
this.$router.replace({
name: 'Dashboard'
})
}
reject()
return
}
resolve()
})
})
}
}
}

View File

@ -14,11 +14,11 @@
<div class="page"> <div class="page">
<topBar <topBar
v-if="topList.length > 0" v-if="topList.length > 0"
:topList="topList" :top-list="topList"
:moren="moren" :moren="moren"
:waitApprovalNum="waitApprovalNum" :wait-approval-num="waitApprovalNum"
:receiveApprovalNum="receiveApprovalNum" :receive-approval-num="receiveApprovalNum"
></topBar> />
<div class="main"> <div class="main">
<div class="form_all"> <div class="form_all">
<el-form ref="select" :model="select" label-width="auto"> <el-form ref="select" :model="select" label-width="auto">
@ -27,37 +27,37 @@
<el-col :span="4"> <el-col :span="4">
<el-form-item :label="'业务类型'"> <el-form-item :label="'业务类型'">
<el-select <el-select
v-model="select.approvalBusiness"
clearable clearable
filterable filterable
v-model="select.approvalBusiness"
> >
<el-option <el-option
v-for="item in ywsqList" v-for="item in ywsqList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item :label="'发起人'"> <el-form-item :label="'发起人'">
<el-input <el-input
clearable
v-model="select.userName" v-model="select.userName"
clearable
:placeholder="'请输入'" :placeholder="'请输入'"
></el-input> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item :label="'签呈状态'"> <el-form-item :label="'签呈状态'">
<el-select clearable v-model="select.receiveStatus"> <el-select v-model="select.receiveStatus" clearable>
<el-option <el-option
v-for="item in readStateList" v-for="item in readStateList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -70,8 +70,7 @@
:range-separator="'至'" :range-separator="'至'"
:start-placeholder="'开始日期'" :start-placeholder="'开始日期'"
:end-placeholder="'结束日期'" :end-placeholder="'结束日期'"
> />
</el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -83,14 +82,12 @@
:range-separator="'至'" :range-separator="'至'"
:start-placeholder="'开始日期'" :start-placeholder="'开始日期'"
:end-placeholder="'结束日期'" :end-placeholder="'结束日期'"
> />
</el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-button type="primary" @click="getDataList1"> <el-button type="primary" @click="getDataList1">
{{ '搜索' }}</el-button {{ '搜索' }}</el-button>
>
<el-button @click="reset"> {{ '重置' }}</el-button> <el-button @click="reset"> {{ '重置' }}</el-button>
</el-col> </el-col>
</el-row> </el-row>
@ -101,37 +98,33 @@
<el-button <el-button
size="small" size="small"
:disabled="pkIdList.length == 0" :disabled="pkIdList.length == 0"
@click="toReceive(0)"
type="success" type="success"
>{{ '接收' }}</el-button @click="toReceive(0)"
> >{{ '接收' }}</el-button>
<el-button size="small" @click="handleExport" class="exportBtn"> <el-button size="small" class="exportBtn" @click="handleExport">
{{ '导出' }}</el-button {{ '导出' }}</el-button>
>
</div> </div>
</div> </div>
<el-table <el-table
v-loading="loading"
:data="tableData1" :data="tableData1"
style="width: 100%" style="width: 100%"
height="100%" height="100%"
v-loading="loading"
@selection-change="handleSelectionChange"
:header-cell-style="{ background: '#EEEEEE' }" :header-cell-style="{ background: '#EEEEEE' }"
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
@selection-change="handleSelectionChange"
> >
<el-table-column type="selection" width="55"> </el-table-column> <el-table-column type="selection" width="55" />
<el-table-column <el-table-column
align="center" align="center"
prop="userName" prop="userName"
:label="'发起人'" :label="'发起人'"
> />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="approvalBusinessVal" prop="approvalBusinessVal"
:label="'业务类型'" :label="'业务类型'"
> />
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
@ -149,10 +142,8 @@
align="center" align="center"
prop="creationTime" prop="creationTime"
:label="'创建日期'" :label="'创建日期'"
> />
</el-table-column> <el-table-column align="center" prop="sendTime" :label="'终审日期'" />
<el-table-column align="center" prop="sendTime" :label="'终审日期'">
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
@ -163,18 +154,18 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
style="color: #48b2fd" style="color: #48b2fd"
@click="toFixed(scope.row.approvalCode, 2, scope.row.pkId)"
type="text" type="text"
size="small" size="small"
@click="toFixed(scope.row.approvalCode, 2, scope.row.pkId)"
> >
{{ '查看签呈' }} {{ '查看签呈' }}
</el-button> </el-button>
<el-button <el-button
style="color: #53b11e"
v-show="scope.row.receiveStatus == 1" v-show="scope.row.receiveStatus == 1"
@click="toReceive(1, scope.row.pkId)" style="color: #53b11e"
type="text" type="text"
size="small" size="small"
@click="toReceive(1, scope.row.pkId)"
> >
{{ '接收' }} {{ '接收' }}
</el-button> </el-button>
@ -192,186 +183,166 @@
</template> </template>
<script> <script>
import { mapGetters } from "vuex"; import { mapGetters } from 'vuex'
import * as api from "@/api/manage.js"; import * as api from '@/api/manage.js'
import topBar from "@/components/topBar"; import topBar from '@/components/topBar'
import topBarMixin from './mixins/top-bar-mixin'
export default { export default {
name: "Dashboard", name: 'Dashboard',
components: { components: {
topBar, topBar
}, },
mixins: [topBarMixin],
computed: { computed: {
...mapGetters(["name"]), ...mapGetters(['name'])
}, },
data() { data() {
return { return {
loading: false, loading: false,
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 50, pageSize: 50
}, },
total: 0, total: 0,
tableData: [], tableData: [],
tableData1: [], tableData1: [],
tabActive: 0, tabActive: 0,
select: {}, select: {},
moren: "receiveIndex", moren: 'receiveIndex',
topList: [
{
name: "代办",
path: "dashboard",
},
{
name: "已办",
path: "hasIndex",
},
{
name: "抄送查阅/操作",
path: "receiveIndex",
},
// {
// name: '',
// path: 'goodsCheck',
// },
// {
// name: '',
// path: 'productCheck',
// },
],
ywsqList: [], ywsqList: [],
checkList: [], checkList: [],
sourceList: [], sourceList: [],
approveStatusList: [], approveStatusList: [],
pkIdList: [], pkIdList: [],
readStateList: [], readStateList: [],
waitApprovalNum: "", waitApprovalNum: '',
receiveApprovalNum: "", receiveApprovalNum: ''
}; }
}, },
mounted() { mounted() {
// //
this.getDataList1(); this.getDataList1()
this.getApprove(); this.getApprove()
this.getSignType(); this.getSignType()
this.getSource(); this.getSource()
this.getreadState(); this.getreadState()
this.getApprovalStatus(); this.getApprovalStatus()
}, },
methods: { methods: {
reset() { reset() {
this.select = {}; this.select = {}
this.getDataList1(); this.getDataList1()
}, },
getApprove() { getApprove() {
api.approvalBusiness().then((res) => { api.approvalBusiness().then((res) => {
this.ywsqList = res.data; this.ywsqList = res.data
}); })
}, },
getreadState() { getreadState() {
api.readState().then((res) => { api.readState().then((res) => {
this.readStateList = res.data; this.readStateList = res.data
}); })
}, },
getSource() { getSource() {
api.signSource().then((res) => { api.signSource().then((res) => {
this.sourceList = res.data; this.sourceList = res.data
}); })
}, },
getSignType() { getSignType() {
api.approvalOperation().then((res) => { api.approvalOperation().then((res) => {
this.checkList = res.data; this.checkList = res.data
}); })
}, },
getApprovalStatus() { getApprovalStatus() {
api.approvalStatus().then((res) => { api.approvalStatus().then((res) => {
this.approveStatusList = res.data; this.approveStatusList = res.data
}); })
api.waitApprovalNum().then((res) => { api.waitApprovalNum().then((res) => {
this.waitApprovalNum = res.data; this.waitApprovalNum = res.data
}); })
api.receiveApprovalNum().then((res) => { api.receiveApprovalNum().then((res) => {
this.receiveApprovalNum = res.data; this.receiveApprovalNum = res.data
}); })
}, },
getDataList1() { getDataList1() {
this.loading = true; this.loading = true
api api
.receiveApprovalList(Object.assign({}, this.queryParams, this.select)) .receiveApprovalList(Object.assign({}, this.queryParams, this.select))
.then((res) => { .then((res) => {
this.loading = false; this.loading = false
this.tableData1 = res.rows; this.tableData1 = res.rows
this.total = res.total; this.total = res.total
}); })
}, },
handleSelectionChange(val) { handleSelectionChange(val) {
if (val.length > 0) { if (val.length > 0) {
let pkIdList = val.map((item) => { const pkIdList = val.map((item) => {
return item.pkId; return item.pkId
}); })
this.pkIdList = pkIdList; this.pkIdList = pkIdList
console.log( console.log(
"%c [ this.pkIdList ]-274", '%c [ this.pkIdList ]-274',
"font-size:13px; background:#69b38c; color:#adf7d0;", 'font-size:13px; background:#69b38c; color:#adf7d0;',
this.pkIdList this.pkIdList
); )
} else { } else {
this.pkIdList = []; this.pkIdList = []
} }
}, },
toReceive(index, id) { toReceive(index, id) {
if (index) { if (index) {
this.pkIdList = [id]; this.pkIdList = [id]
} }
api api
.receiveApproval({ .receiveApproval({
pkIdList: this.pkIdList, pkIdList: this.pkIdList
}) })
.then((res) => { .then((res) => {
if (res.code == 200) { if (res.code == 200) {
this.$message({ this.$message({
type: "success", type: 'success',
message: res.msg, message: res.msg
}); })
this.getDataList1(); this.getDataList1()
this.getApprovalStatus(); this.getApprovalStatus()
} }
}); })
}, },
toFixed(id, index, pkId) { toFixed(id, index, pkId) {
this.$router.push({ this.$router.push({
path: "manageDetails", path: 'manageDetails',
query: { query: {
id: id, id: id,
index: index, index: index,
pkId: pkId, pkId: pkId
}, }
}); })
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.$confirm('是否确认导出所有数据项?', '警告', { this.$confirm('是否确认导出所有数据项?', '警告', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: "warning", type: 'warning'
}).then((_) => { }).then((_) => {
this.download( this.download(
"/system/manage/index/receive-approval-export", '/system/manage/index/receive-approval-export',
Object.assign({}, this.queryParams, this.select), Object.assign({}, this.queryParams, this.select),
`签呈接收${new Date().getTime()}.xlsx` `签呈接收${new Date().getTime()}.xlsx`
); )
}); })
}, },
tableRowClassName({ row, rowIndex }) { tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 == 1) { if (rowIndex % 2 == 1) {
return "warning-row"; return 'warning-row'
} else if (rowIndex % 2 == 0) { } else if (rowIndex % 2 == 0) {
return "success-row"; return 'success-row'
} }
return ""; return ''
}, }
}, }
}; }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>