瀏覽代碼

Merge branch 'bianww' into 'master'

Bianww

See merge request spfm/spfm-market-front!144
徐兴安 2 年之前
父節點
當前提交
26a506a4f7

+ 1 - 0
src/components/p-header.vue

@@ -164,6 +164,7 @@ export default {
             window.sessionStorage.menus = undefined;
             window.sessionStorage.userInfo = undefined;
             window.sessionStorage.childrenMenus = undefined;
+            window.sessionStorage.removeItem("antiSpoofingSearchParams")
             window.opener = null;
             window.open(" ", "_self");
             window.close();

+ 1 - 0
src/components/upload.vue

@@ -122,6 +122,7 @@
                         this.$refs['upload'].clearFiles();
                         this.$emit('uploadBack',res)
                         if(res.data.result==0){
+                            this.$emit('onSuccess',file)
                             _this.$message({
                                 message: res.data.desc,
                                 type: 'success'

+ 292 - 0
src/pages/main/antiSpoofing/channel.vue

@@ -0,0 +1,292 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search" v-if="!provincialCompany">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <div v-if="!provincialCompany">
+                    <el-button class="btn-check" plain size="medium" type="primary" @click="downloadTemplate">下载模板
+                    </el-button>
+                    <myUpload style="display:inline-block;" :fileInfo="fileInfo" @onSuccess="onSuccess"
+                              :fileList="fileInfo.fileList"></myUpload>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" :key="key" :height="height" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column align="center" :label="toolTit">
+                        <el-table-column prop="cityName" align="center" label="地市" >
+                        </el-table-column>
+                        <el-table-column prop="channelName" align="center" label="渠道名称" >
+                        </el-table-column>
+                        <el-table-column prop="year" align="center" label="扣罚年份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[0]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="month" align="center" label="扣罚月份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[1]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="fineMoney" align="center" label="扣罚金额" >
+                        </el-table-column>
+                        <el-table-column prop="shutDownMonth" align="center" label="关停工号(1个月、3个月)" >
+                        </el-table-column>
+                        <el-table-column prop="isSixNotAllow" align="center" label="6个月不允许开户" >
+                        </el-table-column>
+                        <el-table-column prop="isCancelCooperation" align="center" label="取消合作" >
+                        </el-table-column>
+                        <el-table-column prop="warnEducation" align="center" label="警示教育(约谈、通报)" >
+                        </el-table-column>
+                        <el-table-column prop="terminalSixNotAllow" align="center" label="末梢渠道6个月不允许开户" >
+                        </el-table-column>
+                        <el-table-column prop="terminalCancelCooperation" align="center" label="末梢渠道取消合作" >
+                        </el-table-column>
+                        <el-table-column prop="terminalWarnEducation" align="center" label="末梢渠道警示教育" >
+                        </el-table-column>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import myUpload from '../../../components/upload'
+
+    export default {
+        components: {
+            mySearch,
+            myUpload
+        },
+        data() {
+
+            return {
+                toolTit: '渠道考核报表',
+                searchList: [{
+                    type: 'month',
+                    tit: '月份',
+                    value: '',
+                    width: '100%',
+                }
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                params: {},
+                fileInfo: {
+                    type: 'btn',
+                    typename: '导入',
+                    btntype: 'primary',
+                    limit: 1,
+                    url: '/market/antiSpoofing/importChannelTemplate',
+                    fileList: [],
+                    typexz:"xlsx"
+                },
+                provincialCompany:false,
+                height:"calc(100% - 40px)",
+                key:0,
+                loading:false
+            }
+        },
+        methods: {
+            onSuccess(file){
+                this.searchInfo([this.searchList[0].value], 1);
+            },
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else if (rowIndex === 1){
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            downloadTemplate(){
+                let param = new FormData();
+                param.append("type", 'channel');
+                this.$http({
+                    url: '/market/antiSpoofing/excelExport',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, '渠道考核模板.xlsx');
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = '渠道考核模板.xlsx';
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            //搜索数据
+            searchInfo(v) {
+                this.params = new FormData();
+                this.params.append("date", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01' : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                v.append("type",'channel');
+                let item = window.sessionStorage.getItem("antiSpoofingSearchParams");
+                if (item){
+                    let parse = JSON.parse(item);
+                    v.append("cityName", parse.city)
+                    if (!v.get('date')){
+                        v.append("startDate", parse.queryTime[0])
+                        v.append("endDate", parse.queryTime[1])
+                    }
+                }
+                this.$http({
+                    url: "/market/antiSpoofing/getImportData",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false;
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.searchInfo([this.searchList[0].value], this.pageSize);
+            },
+            getUser() {
+                let menus = JSON.parse(window.sessionStorage.childrenMenus);
+                let flag = false
+                for(let n=0;n<menus.length;n++){
+                    if (menus[n].jspUrl === "/antiSpoofingCityScreen") {
+                        flag = true
+                    }
+                }
+                if (!flag){
+                    this.provincialCompany = true
+                    this.height = "calc(100%)"
+                    this.key += 1
+                }
+            }
+        },
+        mounted() {
+            this.getUser()
+            let param = JSON.parse(window.sessionStorage.getItem("antiSpoofingSearchParams"));
+            if (param){
+                this.searchInfo([], 1);
+            }else {
+                this.searchList[0].value = new Date()
+                this.searchInfo([this.searchList[0].value], 1);
+            }
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

+ 282 - 0
src/pages/main/antiSpoofing/districtCounty.vue

@@ -0,0 +1,282 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search"  v-if="!provincialCompany">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <div v-if="!provincialCompany">
+                    <el-button class="btn-check" plain size="medium" type="primary" @click="downloadTemplate">下载模板
+                    </el-button>
+                    <myUpload style="display:inline-block;" :fileInfo="fileInfo" @onSuccess="onSuccess"
+                              :fileList="fileInfo.fileList"></myUpload>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" :key="key" height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                    tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column align="center" :label="toolTit">
+                        <el-table-column prop="cityName" align="center" label="地市" >
+                        </el-table-column>
+                        <el-table-column prop="districtCountyName" align="center" label="区县名" >
+                        </el-table-column>
+                        <el-table-column prop="year" align="center" label="扣罚年份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[0]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="month" align="center" label="扣罚月份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[1]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="deductPoints" align="center" label="扣分" >
+                        </el-table-column>
+                        <el-table-column prop="interview"  align="center" label="约谈" width="300">
+                        </el-table-column>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                    :total="total">
+                </el-pagination>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import toolList from "../../../components/toolList.vue";
+    import myUpload from '../../../components/upload';
+
+    export default {
+        components: {
+            mySearch,
+            toolList,
+            myUpload
+        },
+        data() {
+
+            return {
+                toolTit: '区县考核报表',
+                searchList: [{
+                        type: 'month',
+                        tit: '月份',
+                        value: '',
+                        width: '100%',
+                    }
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                userInfo: {},
+                params: {},
+                fileInfo: {
+                    type: 'btn',
+                    typename: '导入',
+                    btntype: 'primary',
+                    limit: 1,
+                    url: '/market/antiSpoofing/importDistrictCountyTemplate',
+                    fileList: [],
+                    typexz:"xlsx"
+                },
+                provincialCompany:false,
+                key:0,
+                loading:false
+            }
+        },
+        methods: {
+            onSuccess(file){
+                this.searchInfo([this.searchList[0].value], 1);
+            },
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else if (rowIndex === 1){
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            downloadTemplate(){
+                let param = new FormData();
+                param.append("type", 'districtCounty');
+                this.$http({
+                    url: '/market/antiSpoofing/excelExport',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, '区县考核模板.xlsx');
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = '区县考核模板.xlsx';
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            //搜索数据
+            searchInfo(v) {
+                this.params = new FormData();
+                this.params.append("date", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01'  : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                v.append("type",'districtCounty');
+                let item = window.sessionStorage.getItem("antiSpoofingSearchParams");
+                if (item){
+                    let parse = JSON.parse(item);
+                    v.append("cityName", parse.city)
+                    if (!v.get('date')){
+                        v.append("startDate", parse.queryTime[0])
+                        v.append("endDate", parse.queryTime[1])
+                    }
+                }
+                this.$http({
+                    url: "/market/antiSpoofing/getImportData",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false;
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.searchInfo([this.searchList[0].value], this.pageSize);
+            },
+            getUser() {
+                let menus = JSON.parse(window.sessionStorage.childrenMenus);
+                let flag = false
+                for(let n=0;n<menus.length;n++){
+                    if (menus[n].jspUrl === "/antiSpoofingCityScreen") {
+                        flag = true
+                    }
+                }
+                if (!flag){
+                    this.provincialCompany = true
+                    this.height = "calc(100%)"
+                    this.key += 1
+                }
+            }
+        },
+        mounted() {
+            this.getUser()
+            let param = JSON.parse(window.sessionStorage.getItem("antiSpoofingSearchParams"));
+            if (param){
+                this.searchInfo([], 1);
+            }else {
+                this.searchList[0].value = new Date()
+                this.searchInfo([this.searchList[0].value], 1);
+            }
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

+ 83 - 0
src/pages/main/antiSpoofing/home.vue

@@ -0,0 +1,83 @@
+<template>
+  <div class="inner-container">
+    <div v-if="menuList.indexOf(activeName) >= 0">
+        <el-col :span="3"
+        ><el-tabs
+            tab-position="left"
+            v-model="activeName"
+            @tab-click="handleClick"
+        >
+            <el-tab-pane
+                v-for="(item, index) in routerList"
+                :key="index"
+                :name="item.path"
+                :label="item.label"
+            ></el-tab-pane>
+        </el-tabs>
+        </el-col>
+        <el-col :span="21" style="background: #f4f4f4;">
+            <div style="height: 100%">
+                <router-view />
+            </div>
+        </el-col>
+    </div>
+      <div v-else>
+          <div style="height: 100%;background: #f4f4f4;">
+              <router-view />
+          </div>
+      </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      activeName: "",
+      showList: [],
+      routerList: [
+        { label: "区县考核报表", path: "/districtCounty", name: "districtCounty" },
+        { label: "人员考核报表", path: "/personnel", name: "personnel" },
+        { label: "渠道考核报表", path: "/channel", name: "channel" }
+      ],
+    };
+  },
+  computed: {
+    menuList: function () {
+      let arr = [];
+      this.routerList.map((item) => {
+        this.showList.map((row) => {
+          if (item.path == row) {
+            arr.push(item.path);
+          }
+        });
+      });
+      return arr;
+    },
+  },
+  methods: {
+    handleClick(val) {
+      if (this.$route.path != this.activeName) {
+        this.$router.push(this.activeName);
+      }
+    },
+  },
+  mounted() {
+    this.activeName = this.$route.path;
+  },
+  created() {
+    JSON.parse(sessionStorage.childrenMenus).map((item) => {
+      this.showList.push(item.jspUrl);
+    });
+  },
+  watch: {
+    $route(to, from) {
+      this.activeName = this.$route.path;
+    },
+  },
+};
+</script>
+<style>
+.el-tabs__content {
+  display: none;
+}
+</style>

+ 289 - 0
src/pages/main/antiSpoofing/personnel.vue

@@ -0,0 +1,289 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search" v-if="!provincialCompany">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <div>
+                    <el-button class="btn-check" plain size="medium" type="primary" @click="downloadTemplate">下载模板
+                    </el-button>
+                    <myUpload style="display:inline-block;" :fileInfo="fileInfo" @onSuccess="onSuccess"
+                              :fileList="fileInfo.fileList"></myUpload>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" :key="key" :height="height" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column align="center" :label="toolTit">
+                        <el-table-column prop="cityName" align="center" label="地市" >
+                        </el-table-column>
+                        <el-table-column prop="jobNumber" align="center" label="工号" >
+                        </el-table-column>
+                        <el-table-column prop="userName" align="center" label="人员姓名" >
+                        </el-table-column>
+                        <el-table-column prop="post" align="center" label="职务" >
+                        </el-table-column>
+                        <el-table-column prop="year" align="center" label="扣罚年份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[0]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="month" align="center" label="扣罚月份" >
+                            <template slot-scope="scope">
+                                {{$formatDate(scope.row.yearMonth, "YYYY-MM").split("-")[1]}}
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="deductPoints" align="center" label="扣绩效(分)" >
+                        </el-table-column>
+                        <el-table-column prop="fineMoney" align="center" label="罚款" >
+                        </el-table-column>
+                        <el-table-column prop="notification"  align="center" label="通报" width="300">
+                        </el-table-column>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+    import toolList from "../../../components/toolList.vue";
+    import myUpload from '../../../components/upload';
+
+
+    export default {
+        components: {
+            mySearch,
+            toolList,
+            myUpload
+        },
+        data() {
+
+            return {
+                toolTit: '人员考核报表',
+                searchList: [{
+                    type: 'month',
+                    tit: '月份',
+                    value: '',
+                    width: '100%',
+                }
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                params: {},
+                fileInfo: {
+                    type: 'btn',
+                    typename: '导入',
+                    btntype: 'primary',
+                    limit: 1,
+                    url: '/market/antiSpoofing/importPersonnelTemplate',
+                    fileList: [],
+                    typexz:"xlsx"
+                },
+                provincialCompany:false,
+                height:'calc(100% - 40px)',
+                key:0,
+                loading:false
+            }
+        },
+        methods: {
+            onSuccess(file){
+                this.searchInfo([this.searchList[0].value], 1);
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else if (rowIndex === 1){
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            downloadTemplate(){
+                let param = new FormData();
+                param.append("type", 'personnel');
+                this.$http({
+                    url: '/market/antiSpoofing/excelExport',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, '人员考核模板.xlsx');
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = '人员考核模板.xlsx';
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            //搜索数据
+            searchInfo(v) {
+                this.params = new FormData();
+                this.params.append("date", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01'  : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                v.append("type",'personnel');
+                let item = window.sessionStorage.getItem("antiSpoofingSearchParams");
+                if (item){
+                    let parse = JSON.parse(item);
+                    v.append("cityName", parse.city)
+                    if (!v.get('date')){
+                        v.append("startDate", parse.queryTime[0])
+                        v.append("endDate", parse.queryTime[1])
+                    }
+                }
+                this.$http({
+                    url: "/market/antiSpoofing/getImportData",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false;
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            // 分页
+            currchange(v) {
+                this.pageSize = v;
+                this.searchInfo([this.searchList[0].value], this.pageSize);
+            },
+            getUser() {
+                let menus = JSON.parse(window.sessionStorage.childrenMenus);
+                let flag = false
+                for(let n=0;n<menus.length;n++){
+                    if (menus[n].jspUrl === "/antiSpoofingCityScreen") {
+                        flag = true
+                    }
+                }
+                if (!flag){
+                    this.provincialCompany = true
+                    this.height = "calc(100%)"
+                    this.key += 1
+                }
+            }
+        },
+        mounted() {
+            this.getUser()
+            let param = JSON.parse(window.sessionStorage.getItem("antiSpoofingSearchParams"));
+            if (param){
+                this.searchInfo([], 1);
+            }else {
+                this.searchList[0].value = new Date()
+                this.searchInfo([this.searchList[0].value], 1);
+            }
+        },
+        created() {
+
+        },
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

+ 301 - 0
src/pages/main/antiSpoofing/standingBook.vue

@@ -0,0 +1,301 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;">
+        <div class="container-box">
+            <div class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                <el-button class="btn-check" size="medium" type="primary" @click="outList">导出
+                </el-button>
+            </div>
+            <div class="tabbox">
+                <el-table v-loading="loading" height="100%" class="com-table" ref="multipleTable" :data="tableData" :show-summary="true" :summary-method="getSummaries"
+                    tooltip-effect="dark" size="small" border style="width: 100%" :header-cell-style="headerStyleFun" :cell-style="cellStyle">
+                    <el-table-column prop="cityName" align="center" fixed="left" label="地市"></el-table-column>
+                    <el-table-column align="center" width="800px" :label="tooltit">
+                        <el-table-column align="center" label="区县">
+                            <el-table-column prop="countyCount" align="center" label="区县个数" ></el-table-column>
+                            <el-table-column prop="countyDeductCount"  align="center" label="扣罚次数"></el-table-column>
+                            <el-table-column prop="countyDeductPoints" align="center" label="扣分" ></el-table-column>
+                            <el-table-column prop="countyInterview"  align="center" label="约谈"></el-table-column>
+                        </el-table-column>
+                        <el-table-column align="center" label="人员">
+                            <el-table-column prop="personnelPeopleNumber" align="center" label="扣罚人数" ></el-table-column>
+                            <el-table-column prop="personnelDeductCount" align="center" label="扣罚人次" ></el-table-column>
+                            <el-table-column prop="personnelDeductPoints" align="center" label="扣分" ></el-table-column>
+                            <el-table-column prop="personnelFineMoney" align="center" label="罚款" ></el-table-column>
+                            <el-table-column prop="personnelNotification"  align="center" label="通报"></el-table-column>
+                        </el-table-column>
+                        <el-table-column align="center" label="渠道">
+                            <el-table-column prop="channelCount" align="center" label="渠道个数" ></el-table-column>
+                            <el-table-column prop="channelDeductCount" align="center" label="扣罚次数" ></el-table-column>
+                            <el-table-column prop="channelFineMoney" align="center" label="扣罚金额" ></el-table-column>
+                            <el-table-column prop="channelShutDownMonth" align="center" width="100" label="关停工号(1个月、3个月)" ></el-table-column>
+                            <el-table-column prop="channelIsSixNotAllow" align="center" label="6个月不允许开户" ></el-table-column>
+                            <el-table-column prop="channelIsCancelCooperation" align="center" label="取消合作" ></el-table-column>
+                            <el-table-column prop="channelWarnEducation" align="center" width="100" label="警示教育(约谈、通报)" ></el-table-column>
+                            <el-table-column prop="channelTerminalSixNotAllow" align="center" width="100" label="末梢渠道6个月不允许开户" ></el-table-column>
+                            <el-table-column prop="channelTerminalCancelCooperation" align="center" label="末梢渠道取消合作" ></el-table-column>
+                            <el-table-column prop="channelTerminalWarnEducation" align="center" label="末梢渠道警示教育" ></el-table-column>
+                        </el-table-column>
+                    </el-table-column>
+                    <el-table-column align="center" fixed="right" label="操作">
+                        <template slot-scope="scope">
+                            <el-button @click="handleClick(scope.row)" type="text" size="small">详情</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+        </div>
+    </fullscreen>
+</template>
+<script>
+    import mySearch from "../../../components/search.vue";
+
+    export default {
+        components: {
+            mySearch
+        },
+        data() {
+
+            return {
+                tooltit: '处罚台账',
+                searchList: [{
+                        type: 'month',
+                        tit: '开始月份',
+                        value: new Date(),
+                        width: '49%',
+                    },
+                    {
+                        type: 'month',
+                        tit: '结束月份',
+                        value: new Date(),
+                        width: '49%',
+                    },
+                ],
+                fullscreen: false,
+                total: 0,
+                pageSize: 1,
+                tableData: [],
+                params: new FormData(),
+                loading:false
+            }
+        },
+        methods: {
+            cellStyle({row, column, rowIndex, columnIndex}){
+                if (columnIndex === 0){
+                    return "font-weight:bold;"
+                }else {
+                    return "";
+                }
+            },
+            headerStyleFun({row, column, rowIndex, columnIndex}){
+                if (rowIndex === 0){
+                    return "background-color:#d8e4bc;font-size:14px;font-weight:bold;color:black;"
+                }else {
+                    return "background-color:#d8e4bc;font-size:12px;font-weight:bold;color:black;"
+                }
+            },
+            handleClick(row){
+                window.sessionStorage.setItem("antiSpoofingSearchParams", JSON.stringify({
+                    queryTime:[this.$formatDate(this.searchList[0].value, "YYYY-MM") + '-01', this.$formatDate(this.searchList[1].value, "YYYY-MM") + '-01'],
+                    city:row.cityName
+                }))
+                this.$router.push({
+                    path: "/districtCounty"
+                });
+            },
+            //搜索数据
+            searchInfo(v) {
+                if (v[0] && v[1]){
+                    let begin = this.$formatDate(v[0], "YYYY-MM");
+                    let end = this.$formatDate(v[1], "YYYY-MM");
+                    if ((new Date(end)).getTime() < (new Date(begin)).getTime()){
+                        this.$message.error(
+                            "开始时间不能大于结束时间"
+                        );
+                        return
+                    }
+                }
+                this.params = new FormData();
+                this.params.append("startDate", v[0] ?  this.$formatDate(v[0], "YYYY-MM") + '-01'  : '');
+                this.params.append("endDate", v[1] ? this.$formatDate(v[1], "YYYY-MM") + '-01'  : '');
+                this.getList(this.params, this.pageSize);
+            },
+            //获取列表
+            getList(v, n) {
+                this.loading = true
+                this.pageSize = n;
+                this.$http({
+                    url: "/market/antiSpoofing/getAllStandingBook",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                        "page": '{"pageNo":"' + n + '","pageSize":"20"}'
+                    },
+                    data: v,
+                }).then((res) => {
+                    if (res.data.retCode === '1'){
+                        this.$message.error(res.data.retMsg);
+                    }else {
+                        res.data.data.forEach((data)=> {
+                            if (!data.countyCount){
+                                data.countyCount = "未填写"
+                            }
+                        })
+                        this.tableData = res.data.data;
+                        this.total = res.data.totalRecord;
+                        this.loading = false
+                    }
+                }).catch(() => {
+                    this.tableData = []
+                    this.total = 0
+                    this.loading = false;
+                });
+            },
+            outList() {
+                let param = new FormData();
+                let startDate = this.searchList[0].value ? this.$formatDate(this.searchList[0].value, "YYYY-MM") + '-01' : '';
+                let endDate = this.searchList[1].value ? this.$formatDate(this.searchList[1].value, "YYYY-MM") + '-01' : '';
+                param.append("startDate", startDate);
+                param.append("endDate", endDate);
+                this.$http({
+                    url: '/market/antiSpoofing/exportStandingBook',
+                    method: "post",
+                    responseType: 'blob',
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: param,
+                }).then((response) => {
+                    let fileName = '省公司汇总台账_'+(startDate===endDate ? startDate : startDate+'-'+endDate)+'.xlsx';
+                    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                        let blob = new Blob([response.data], {
+                            type: response.data.type
+                        });
+                        window.navigator.msSaveOrOpenBlob(blob, fileName);
+                    } else {
+                        /* 火狐谷歌的文件下载方式 */
+                        var blob = new Blob([response.data])
+                        var downloadElement = document.createElement('a')
+                        var href = window.URL.createObjectURL(blob);
+                        downloadElement.href = href;
+                        downloadElement.download = fileName;
+                        document.body.appendChild(downloadElement);
+                        downloadElement.click();
+                        document.body.removeChild(downloadElement);
+                        window.URL.revokeObjectURL(href);
+                    }
+                })
+            },
+            getSummaries(param) {
+                const { columns, data } = param;
+                const sums = [];
+                columns.forEach((column, index) => {
+                    if (index === 0) {
+                        sums[index] = '总计';
+                        return;
+                    }
+                    if (index === 20){
+                        sums[index] = 'N/A';
+                        return;
+                    }
+                    const values = data.map(item => Number(item[column.property]));
+                    if (!values.every(value => isNaN(value))) {
+                        sums[index] = values.reduce((prev, curr) => {
+                            const value = Number(curr);
+                            if (!isNaN(value)) {
+                                return prev + curr;
+                            } else {
+                                return prev;
+                            }
+                        }, 0);
+                    } else {
+                        sums[index] = '0';
+                    }
+                });
+                return sums;
+            }
+        },
+        mounted() {
+            this.searchInfo([this.searchList[0].value, this.searchList[1].value], 1);
+        },
+        updated() {
+            this.$nextTick(() => {
+                this.$refs.multipleTable.doLayout()
+            })
+        },
+        created() {
+
+        }
+    }
+</script>
+<style scoped lang="scss">
+    .onetab {
+        margin-bottom: 20px;
+        padding: 0 20px;
+    }
+
+    .titbox {
+        div {
+            float: right;
+
+            i {
+                font-size: 22px;
+                margin-left: 20px;
+                cursor: pointer;
+            }
+        }
+    }
+
+    .tabbox {
+        margin-top: 15px;
+    }
+
+    .pageBox {
+        text-align: right;
+        margin-top: 10px;
+    }
+
+    .info-line {
+        width: 100%;
+        display: block;
+        padding-left: 20px;
+
+        div {
+            width: 50%;
+            display: inline-block;
+        }
+
+        span {
+            width: 80px;
+            display: inline-block;
+            text-align: left;
+
+            i {
+                color: red;
+                display: inline-block;
+                padding-right: 5px;
+            }
+        }
+
+        .el-select,
+        .el-input {
+            width: calc(100% - 100px);
+        }
+    }
+
+    .online {
+        width: 100%;
+
+        .el-select {
+            width: calc(100% - 100px);
+        }
+
+        span {
+            vertical-align: top;
+        }
+
+        .el-textarea {
+            width: calc(100% - 100px);
+        }
+    }
+</style>

+ 36 - 1
src/router/index.js

@@ -1834,6 +1834,42 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/redir/redir'], resolve)
         },
         {
+            meta: { name:  '反诈骗处罚报表', keepAlive: false },
+            path: '/antiSpoofing',
+            name: 'antiSpoofing',
+            redirect: 'districtCounty',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/antiSpoofing/home.vue'], resolve),
+            children: [
+                {
+                    meta: { name:  '地市公司-区县考核报表', keepAlive: false },
+                    path: '/districtCounty',
+                    name: 'districtCounty',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/antiSpoofing/districtCounty'], resolve)
+                },
+                {
+                    meta: { name:  '地市公司-人员考核报表', keepAlive: false },
+                    path: '/personnel',
+                    name: 'personnel',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/antiSpoofing/personnel'], resolve)
+                },
+                {
+                    meta: { name:  '地市公司-渠道考核报表', keepAlive: false },
+                    path: '/channel',
+                    name: 'channel',
+                    component: (resolve) => require( /* webpackChunkName: "system" */
+                        ['../pages/main/antiSpoofing/channel'], resolve)
+                },
+                {
+                    meta: { name:  '省公司处罚台账', keepAlive: false },
+                    path: '/standingBook',
+                    name: 'standingBook',
+                    component: (resolve) => require( /* webpackChunkName: "system" */
+                        ['../pages/main/antiSpoofing/standingBook'], resolve)
+                }
+            ]
+        },
+        {
             meta: { name: '日志查询', keepAlive: false },
             path: '/logQueryList',
             name: 'logQueryList',
@@ -1849,7 +1885,6 @@ const routes = [{
             name: 'collect',
             component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/collect/index'], resolve)
         },
-
     ]
 },
 {

+ 4 - 4
vue.config.js

@@ -93,7 +93,7 @@ module.exports = {
         proxy: {
             // 开发环境变化可注释 ⬇️⬇️
             "/market/CMK": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -101,7 +101,7 @@ module.exports = {
                 },
             },
             "/market/mk": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -109,7 +109,7 @@ module.exports = {
                 },
             },
             "/market/techcentergj": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {
@@ -117,7 +117,7 @@ module.exports = {
                 },
             },
             "/mkWangge": {
-                target: "http://mbx14sduu65j.ngrok2.xiaomiqiu.cn",
+                target: "http://124.223.66.248:9600",
                 ws: false,
                 changeOrigin: true,
                 pathRewrite: {