Explorar o código

Merge branch 'dev-income-excel' into 'master'

Dev income excel

See merge request spfm/spfm-market-front!234
徐兴安 %!s(int64=2) %!d(string=hai) anos
pai
achega
9b502f6e96

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 480 - 0
public/static/views/incomeTemplateExcel.html


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 477 - 0
public/static/views/incomeViewExcel.html


+ 80 - 0
src/pages/main/incomeExcel/home.vue

@@ -0,0 +1,80 @@
+<template>
+    <div class="inner-container">
+        <div class="tabBox">
+            <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>
+        </div>
+        <div class="infoBox">
+            <router-view />
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            activeName: "",
+            showList: [],
+            routerList: [
+                {label: "收入模板管理", path: "/incomeExcelTemplate", name: "incomeExcelTemplate"},
+                {label: "收入信息收集", path: "/incomeExcelIssued", name: "incomeExcelIssued"},
+                {label: "收入信息发布", path: "/incomeExcelView", name: "incomeExcelView"},
+                {label: "收入附件收集", path: "/incomeExcelAppendix", name: "incomeExcelAppendix"}
+            ],
+        };
+    },
+    computed: {
+        menuList: function() {
+            let arr = [];
+            this.routerList.map((item) => {
+                this.showList.map((row) => {
+                    if (item.path == row) {
+                        arr.push(item);
+                    }
+                });
+            });
+            return arr;
+        },
+    },
+    methods: {
+        handleClick(val) {
+            if (this.$route.path != this.activeName) {
+                console.log(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;
+}
+.inner-container{
+    display: flex;
+    justify-content: space-between;
+}
+.tabBox{
+    width: 135px;
+}
+.infoBox{
+    background: #f4f4f4!important;
+    height: 100%;
+    width: calc(100% - 135px)
+}
+</style>

+ 751 - 0
src/pages/main/incomeExcel/incomeExcelAppendix.vue

@@ -0,0 +1,751 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box">
+            <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+            <div style="overflow: hidden;">
+                <div class="search" style="float: left;">
+                    <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                </div>
+                <div style="margin-top: 20px;float: right;" class="bigbtns">
+                    <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
+                               @click="addNew()">新建
+                    </el-button>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="appendixName" label="名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="发起时间" align="center" width="90">
+                    </el-table-column>
+                    <el-table-column prop="deptName" label="发起部门" align="center">
+                    </el-table-column>
+                    <el-table-column prop="userName" label="发起人" align="center">
+                    </el-table-column>
+                    <el-table-column prop="endTime" label="截止时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="state" label="状态" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.state == 0">待办</span>
+                            <span v-if="scope.row.state == 1">已办</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="220px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" @click="openAppendixInfo(scope.row)" v-if="scope.row.type == '1'">
+                                回复详情
+                            </el-button>
+                            <el-button size="mini" @click="processAppendixInfo(scope.row,1)"
+                                       v-if="scope.row.type == '1'">
+                                查看
+                            </el-button>
+                            <el-button size="mini" @click="processAppendixInfo(scope.row,1)"
+                                       v-if="scope.row.type == '2'">
+                                查看
+                            </el-button>
+                            <el-button size="mini" @click="processAppendixInfo(scope.row,2)"
+                                       v-if="scope.row.type == '2' && scope.row.state =='0'">处理
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+            <el-dialog title="添加" :visible.sync="addDialogStatus" width="40%" :destroy-on-close="true"
+                       :modal-append-to-body="false" :close-on-click-modal="false" :fullscreen="false">
+                <el-form :model="addDialogParam" ref="addInfoList">
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span>名称</span>
+                            <el-input v-model="addDialogParam.name" placeholder="名称" v-if="!addDisabled"></el-input>
+                            <label v-else>{{addDialogParam.name}}</label>
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span>截止日期</span>
+                            <el-date-picker type="date" placeholder="截止日期" v-model="addDialogParam.endTime"
+                                            :picker-options="pickerOptions" value-format="yyyy-MM-dd"
+                                            v-if="!addDisabled"></el-date-picker>
+                            <label v-else>{{addDialogParam.endTime}}</label>
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span>材料说明</span>
+                            <el-input v-model="addDialogParam.remark" placeholder="材料说明"
+                                      v-if="!addDisabled"></el-input>
+                            <label v-else>{{addDialogParam.remark}}</label>
+                        </el-form-item>
+                    </div>
+                    <div class="info-line" v-if="addDialogParam.type == '1'">
+                        <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo"
+                                  :fileList="fileInfo.fileList"></myUpload>
+                    </div>
+                    <div class="info-line" v-if="addDialogParam.type == '2'">
+                        <span>附件材料</span><br/>
+                        <uploadDown :datalist="uploadUserFileList" :dialogStatus="uploadstatus"></uploadDown>
+                    </div>
+                    <div class="info-line" v-if="addDialogParam.type == '2'">
+                        <br/>
+                        <myUpload @uploadBack="uploadBack" :fileInfo="fileInfo"
+                                  :fileList="fileInfo.fileList"></myUpload>
+                    </div>
+                </el-form>
+                <div slot="footer" class="dialog-footer myfooter">
+                    <el-button @click="addDialogStatus = false">取消</el-button>
+                    <el-button @click="checkAddForm()" type="primary" v-if="addDialogParam.type == '1'">确定</el-button>
+                    <el-button @click="processUserAdd()" type="primary" v-if="addDialogParam.type == '2'">确定
+                    </el-button>
+                </div>
+            </el-dialog>
+
+            <el-dialog title="查看" :visible.sync="viewDialogStatus" width="40%" :destroy-on-close="true"
+                       :modal-append-to-body="false" :close-on-click-modal="false" :fullscreen="false">
+                <el-form :model="addDialogParam" ref="addInfoList">
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span>名称</span>
+                            {{addDialogParam.name}}
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span>截止日期</span>
+                            {{addDialogParam.endTime}}
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span>材料说明</span>
+                            {{addDialogParam.remark}}
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <span>附件材料</span><br/>
+                        <uploadDown :datalist="uploadUserFileList" :dialogStatus="uploadstatus"></uploadDown>
+                    </div>
+                    <div class="info-line" v-if="this.userFileList.attList.length > 0">
+                        <br/>
+                        <span>回复附件</span><br/>
+                        <uploadDown :datalist="userFileList" :dialogStatus="uploadstatus"></uploadDown>
+                    </div>
+                </el-form>
+                <div slot="footer" class="dialog-footer myfooter">
+                    <el-button @click="viewDialogStatus = false">关闭</el-button>
+                </div>
+            </el-dialog>
+
+            <el-dialog title="选择接收人" :visible.sync="appendixUserDialog" width="50%" :destroy-on-close="true"
+                       :modal-append-to-body="false" :close-on-click-modal="false">
+                <div>
+                    <el-form :model="exaList" ref="addInfoList">
+                        <el-form-item prop="processUserId" class="info-line online">
+                            <span style="width: 80px;">接收人</span>
+                            <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                             :type="depttype" :closeList="closeList"></deptTreeUserNew>
+                            <div class="tree treeUser">
+                                <p v-for="(item,index) in treeList" :key="index">{{ item.receiveName }}
+                                    <i @click="deletes(item,index)" class="el-icon-error"></i>
+                                </p>
+                            </div>
+                            <el-form-item style="margin-bottom:0;display:none;">
+                                <el-input></el-input>
+                            </el-form-item>
+                        </el-form-item>
+                    </el-form>
+
+                    <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                        <el-button @click="appendixUserDialog = false">取 消</el-button>
+                        <el-button type="primary" @click="checkUserList()">确 定</el-button>
+                    </div>
+                </div>
+            </el-dialog>
+
+            <el-dialog title="回复详情" :visible.sync="appendixInfoStatus" width="70%" :close-on-press-escape="false"
+                       :show-close="true" :before-close="closeAppendixInfo" :destroy-on-close="true"
+                       :modal-append-to-body="false"
+                       :close-on-click-modal="false" :fullscreen="true">
+                <div class="tabbox" style="height: 500px">
+                    <el-table height="calc(100% - 50px)" class="com-table" ref="multipleTable"
+                              :data="appindixInfoData"
+                              tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                        <el-table-column
+                            type="index"
+                            width="50">
+                        </el-table-column>
+                        <el-table-column prop="deptName" label="回复部门">
+                        </el-table-column>
+                        <el-table-column prop="userName" label="回复人">
+                        </el-table-column>
+                        <el-table-column prop="state" label="回复情况">
+                            <template slot-scope="scope">
+                                <span v-if="scope.row.state == 0">未回复</span>
+                                <span v-if="scope.row.state == 1">已回复</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="isOverTime" label="是否超时">
+                            <template slot-scope="scope">
+                                <span v-if="scope.row.isOverTime == 0">否</span>
+                                <span v-if="scope.row.isOverTime == 1">是</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column label="回复内容">
+                            <template slot-scope="scope">
+                                <div v-for="item in scope.row.filesList">
+                                    <span style="color: #0b82ff;cursor: pointer"
+                                          @click="downAppendixFile(item.id,item.fileName)">{{
+                                            item.fileName
+                                        }}&nbsp;</span>
+                                </div>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <el-pagination class="pageBox" @current-change="appendixInfoChange"
+                                   layout="prev, pager, next" background
+                                   :total="appendixInfoTotal">
+                    </el-pagination>
+                </div>
+                <div class="dialog-footer myfooter">
+                    <el-button @click="exportZip()" type="primary">导出</el-button>
+                    <el-button @click="appendixInfoStatus = false">关闭</el-button>
+                </div>
+            </el-dialog>
+        </div>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessageNew from "../../../components/myMessageNew.vue"
+import uploadDown from '../../../components/uploadDown'
+import deptTreeUserNew from "../../../components/deptTreeUserNew";
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessageNew,
+        uploadDown,
+        deptTreeUserNew
+    },
+    data() {
+        return {
+            tableData: [{}],
+            total: 0,
+            appendixInfoTotal: 0,
+            params: {},
+            deleteTag: '',
+            centerDialogVisible: false,
+            loading: false,
+            issuedAddStatus: false,
+            addDialogParam: {},
+            tooltit: '收入附件收集',
+            searchList: [{
+                type: 'input',
+                tit: '名称',
+                value: '',
+                width: '100%',
+            },],
+            pickerOptions: {
+                disabledDate(time) {
+                    return time.getTime() < Date.now();
+                }
+            },
+            fullscreen: false,
+            addDialogStatus: false,
+            fileInfo: {
+                limit: 350,
+                url: '/market/cIncomeExcelAppendix/upload',
+                fileList: []
+            },
+            attList: [],
+            //选择审批人
+            checkexa: false,
+            //审批人用到的
+            treeListonly: {},
+            exaList: {},
+            defaultList: [],
+            treeList: [],
+            closeList: false,
+            depttype: 0,
+            appendixUserDialog: false,
+            viewDialogStatus: false,
+            //提交人下载文件库
+            uploadUserFileList: {
+                url: '/market/cIncomeExcelAppendix/downFile',
+                type: 1,
+                attList: []
+            },
+            //发起人下载文件框
+            userFileList: {
+                url: '/market/cIncomeExcelAppendix/downFile',
+                type: 1,
+                attList: []
+            },
+            uploadStatus: false,
+            addDisabled: false,
+            nowUserId: '',
+            //回复详情
+            appendixInfoStatus: false,
+            appindixInfoData: [{}],
+            appendixInfoPageSize: 1,
+            pageSize: 1,
+            appendixInfoParams: {},
+        }
+    },
+    methods: {
+        closeAppendixInfo() {
+            this.appendixInfoStatus = false;
+        },
+        openAppendixInfo(row) {
+            console.log(row);
+            this.appendixInfoParams = {
+                excelId: row.appendixId,
+                name: row.appendixName
+            }
+            this.appendixInfoPageSize = 1;
+            this.getAppendixInfoPage(this.appendixInfoParams, this.appendixInfoPageSize);
+            this.appendixInfoStatus = true;
+        },
+        processUserAdd() {
+            var _this = this;
+            if (this.attList.length == 0) {
+                this.$message({
+                    message: '请上传附件',
+                    type: 'error'
+                });
+                return;
+            }
+            //执行下发
+            this.$http({
+                url: '/market/cIncomeExcelAppendix/uploadUserAppendix',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    appendixUserId: this.nowUserId,
+                    fileList: _this.attList
+                },
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    _this.$message({
+                        message: '添加成功',
+                        type: 'success'
+                    });
+                    this.addDialogStatus = false;
+                    this.getList({}, 1);
+                }
+            });
+        },
+        processAppendixInfo(row, type) {
+            this.addDialogParam = {
+                type: '2'
+            };
+            this.attList = [];
+            this.uploadUserFileList.attList = [];
+            this.userFileList.attList = [];
+            var _this = this;
+            //执行下发
+            this.$http({
+                url: '/market/cIncomeExcelAppendix/queryAppendixInfo',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    excelId: row.id
+                },
+            }).then((res) => {
+                this.loading = false;
+                var d = res.data.body;
+                console.log(d);
+                this.addDialogParam = {
+                    type: '2',
+                    name: d.appendix.name,
+                    remark: d.appendix.remark,
+                    endTime: d.appendix.endTime
+                }
+                this.uploadUserFileList.attList = d.fileList[0];
+                this.userFileList.attList = d.fileList[1];
+                if (type == 1) {
+                    this.viewDialogStatus = true;
+                } else if (type == 2) {
+                    this.addDialogStatus = true;
+                    this.addDisabled = true;
+                    this.nowUserId = row.id;
+                }
+            });
+        },
+        checkAddForm() {
+            if (!this.addDialogParam.name) {
+                this.$message({
+                    message: '名称不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (!this.addDialogParam.remark) {
+                this.$message({
+                    message: '材料说明不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (!this.addDialogParam.endTime) {
+                this.$message({
+                    message: '截止日期不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.addDialogParam.name.length > 240) {
+                this.$message({
+                    message: '名称长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.addDialogParam.remark.length > 300) {
+                this.$message({
+                    message: '材料说明长度不能大于300字',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.attList.length == 0) {
+                this.$message({
+                    message: '请上传附件',
+                    type: 'error'
+                });
+                return;
+            }
+            this.appendixUserDialog = true;
+        },
+        checkUserList() {
+            if (this.treeList.length == 0) {
+                this.$message({
+                    message: '请选择接收人',
+                    type: 'error'
+                });
+            } else {
+                this.processAddNew();
+            }
+        },
+        addNew() {
+            this.addDialogParam = {
+                type: '1'
+            };
+            this.addDisabled = false;
+            this.addDialogStatus = true;
+        },
+        processAddNew() {
+            var _this = this;
+            var userList = [];
+            this.treeList.map((o) => {
+                userList.push({
+                    userId: o.receiveNo
+                });
+            });
+            //执行下发
+            this.$http({
+                url: '/market/cIncomeExcelAppendix/addNewAppendix',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    appendix: this.addDialogParam,
+                    userList: userList,
+                    fileList: _this.attList
+                },
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    _this.$message({
+                        message: '添加成功',
+                        type: 'success'
+                    });
+                    this.addDialogStatus = false;
+                    this.appendixUserDialog = false;
+                    this.getList({}, 1);
+                }
+            });
+        },
+        //文件返回值
+        uploadBack(v) {
+            this.attList = v;
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.name = v[0] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        appendixInfoChange(v) {
+            this.appendixInfoPageSize = v;
+            this.getAppendixInfoPage(this.appendixInfoParams, this.appendixInfoPageSize);
+        },
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/cIncomeExcelAppendix/queryAppendixList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        getAppendixInfoPage(v, n) {
+            this.appendixInfoPageSize = n;
+            this.loading = true;
+            this.appindixInfoData = [];
+            this.$http({
+                url: "/market/cIncomeExcelAppendix/queryAppendixUserList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.appindixInfoData = res.data.data;
+                this.appendixInfoTotal = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        //填报人相关
+        deletes(val, index) {
+            this.treeList.splice(index, 1);
+            this.closeList = this.treeList;
+        },
+        treeCheckonly(v) {
+            this.treeList = v;
+            this.treeListonly = v;
+        },
+        treeDelete() {
+            this.treeListonly = {};
+            this.closeList = !this.closeList;
+        },
+        downAppendixFile(fileId, fileName) {
+            this.$http({
+                url: "/market/cIncomeExcelAppendix/downFile",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                responseType: "blob",
+                data: {"id": fileId, "fileName": fileName},
+            }).then((response) => {
+                if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                    let blob = new Blob([response.data], {
+                        type: 'application/vnd.ms-excel'
+                    });
+                    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);
+                }
+            });
+        },
+        exportZip() {
+            let _this = this;
+            _this.$http({
+                url: '/market/cIncomeExcelAppendix/downloadAppendixZip',
+                method: "post",
+                responseType: 'blob',
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    excelId: this.appendixInfoParams.excelId
+                },
+            }).then(res => {
+                if (window.navigator && window.navigator.msSaveOrOpenBlob) {
+                    let blob = new Blob([res.data], {
+                        type: "application/x-msdownload"
+                    });
+                    window.navigator.msSaveOrOpenBlob(
+                        blob,
+                        // this.wo.bizName + ".xlsx"
+                        this.appendixInfoParams.name + ".zip"
+                    );
+                } else {
+                    /* 火狐谷歌的文件下载方式 */
+                    var blob = new Blob([res.data]);
+                    var downloadElement = document.createElement("a");
+                    var href = window.URL.createObjectURL(blob);
+                    downloadElement.href = href;
+                    downloadElement.download = this.appendixInfoParams.name + ".zip";
+                    document.body.appendChild(downloadElement);
+                    downloadElement.click();
+                    document.body.removeChild(downloadElement);
+                    window.URL.revokeObjectURL(href);
+                }
+            });
+        }
+    },
+    mounted() {
+        this.getList({}, 1);
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 90%;
+        display: inline-block;
+    }
+
+    span {
+        width: 100px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 150px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+
+    .tree {
+        width: calc(50% - 60px);
+        display: inline-block;
+        margin-right: 20px;
+        height: 300px;
+        overflow-y: scroll;
+
+        .el-icon-error {
+            float: right;
+            font-size: 20px;
+            margin-top: 9px;
+            cursor: pointer;
+        }
+    }
+
+    .treeUser {
+        margin: 0;
+        border: 1px solid #ddd;
+
+        p {
+            background: #f4f4f4;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+
+    .treeUserb {
+        width: calc(100% - 100px);
+        border: 1px solid #ddd;
+        background: #f4f4f4;
+        border-radius: 3px;
+        height: auto;
+        overflow: hidden;
+
+        p {
+            display: inline-block;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+}
+</style>
+

+ 628 - 0
src/pages/main/incomeExcel/incomeExcelInfo.vue

@@ -0,0 +1,628 @@
+<template>
+    <div class="container" id="container" v-loading="loading">
+        <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+            <iframe height="100%" width="100%" src="/marketfront/static/views/incomeTemplateExcel.html" frameborder="0"
+                    ref="iframe" name="excelIframe" id="excelIframe"></iframe>
+        </fullscreen>
+        <el-dialog :title="'权限设置'" :visible.sync="authSettingStatus" width="70%" :destroy-on-close="true"
+                   :modal-append-to-body="false" :close-on-click-modal="false">
+            <el-form :model="testModel" ref="addInfoList">
+                <div>
+                    <div class="info-line">
+                        <el-radio v-model="authType" label="1" style="margin: 10px">无特殊权限</el-radio>
+                        <div id="noLimit" class="info-line">
+                            <span style="margin-right: 20px;margin-left: 40px">负责人:</span>
+                            <el-button type="primary" @click="noLimitUserAdd()">组织机构</el-button>
+                            <span style="width: 80px;margin-right: 20px;margin-left: 20px">{{ noLimitUserName }}</span>
+                        </div>
+                    </div>
+                    <div class="info-line">
+                        <el-radio v-model="authType" label="2" style="margin: 10px">特殊权限</el-radio>
+                        <div id="limit">
+                            <div v-for="(item,index) in limitList">
+                                <span style="margin-right: 20px;margin-left: 40px">负责人:</span>
+                                <el-button type="primary" @click="limitUserAdd(index)">组织机构</el-button>
+                                <span style="margin-right: 20px;margin-left: 20px">{{ item.userName }}</span>
+                                <span style="margin-right: 10px;margin-left: 10px">可编辑行:从</span>
+                                <el-input v-model="item.editStart" style="width: 80px;" type="number" min="1"
+                                          oninput="value=value.replace('-','')"></el-input>
+                                <span style="margin-right: 10px;margin-left: 10px">到</span>
+                                <el-input v-model="item.editEnd" style="width: 80px;" type="number" min="1"
+                                          oninput="value=value.replace('-','')"></el-input>
+                                <br/><br/>
+                            </div>
+                            <el-button style="width: 80px;margin-right: 20px;margin-left: 40px"
+                                       @click="addNewLimitAuth()">添加
+                            </el-button>
+                        </div>
+                    </div>
+                    <div slot="footer" style="text-align: right;padding-bottom: 20px;padding-top: 20px">
+                        <el-button @click="authSettingStatus = false">取 消</el-button>
+                        <el-button type="primary" @click="processAuth()">确 定</el-button>
+                    </div>
+                </div>
+            </el-form>
+        </el-dialog>
+        <el-dialog title="选择填报人" :visible.sync="noLimitDialog" width="50%" :destroy-on-close="true"
+                   :modal-append-to-body="false" :close-on-click-modal="false">
+            <div>
+                <el-form :model="exaList" ref="addInfoList">
+                    <el-form-item prop="processUserId" class="info-line online">
+                        <span style="width: 80px;margin-right: 20px">审批人员</span>
+                        <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                         :type="depttype" :closeList="closeList"></deptTreeUserNew>
+                        <div class="tree treeUser">
+                            <p v-for="(item,index) in treeList" :key="index">{{ item.receiveName }}
+                                <i @click="deletes(item,index)" class="el-icon-error"></i>
+                            </p>
+                        </div>
+                        <el-form-item style="margin-bottom:0;display:none;">
+                            <el-input></el-input>
+                        </el-form-item>
+                    </el-form-item>
+                </el-form>
+
+                <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                    <el-button @click="noLimitDialog = false">取 消</el-button>
+                    <el-button type="primary" @click="processNoLimitUsers()">确 定</el-button>
+                </div>
+            </div>
+        </el-dialog>
+        <el-dialog :title="'收入信息处理'" :visible.sync="authDialog" width="50%" :destroy-on-close="true"
+                   :modal-append-to-body="false" :close-on-click-modal="false">
+            <el-form :model="testModel" ref="addInfoList">
+                <div>
+                    <div class="info-line">
+                        <span style="margin-right: 20px;margin-left: 40px">选择路径:</span>
+                        <el-select v-model="auditForm.authType" placeholder="选择路径">
+                            <el-option v-for="(item,index) in auditBoxList" :key="index" :label="item.name"
+                                       :value="item.value"></el-option>
+                        </el-select>
+                    </div>
+                    <br/>
+                    <div class="info-line" v-if="auditForm.authType == 1">
+                        <span style="margin-right: 20px;margin-left: 40px">下一步处理人:</span>
+                        <el-button type="primary" @click="auditUserAdd()">选择处理人</el-button>
+                        <span style="width: 80px;margin-right: 20px;margin-left: 20px">{{ auditUserName }}</span>
+                    </div>
+                    <br/>
+                    <div class="info-line">
+                        <span style="margin-right: 20px;margin-left: 40px;">意见内容:</span>
+                        <el-input type="textarea" v-model="auditForm.auditRemark" style="width: 400px"></el-input>
+                    </div>
+                    <br/>
+                    <div slot="footer" style="text-align: right;padding-bottom: 20px;padding-top: 20px">
+                        <el-button @click="authDialog = false">取 消</el-button>
+                        <el-button type="primary" @click="processAudit()">确 定</el-button>
+                    </div>
+                </div>
+            </el-form>
+        </el-dialog>
+        <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+                   :modal-append-to-body="false" :close-on-click-modal="false">
+            <div>
+                <el-form :model="addInfoList" ref="addInfoList">
+                    <el-form-item prop="processUserId" class="info-line online">
+                        <span style="width: 80px">审批人员&nbsp;</span>
+                        <deptTreeOnly class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                      :type="depttype" :closeList="closeList"></deptTreeOnly>
+                        <div class="tree treeUser">
+                            <p>{{ treeListonly.leaderAuditName }}
+                                <i v-if="treeListonly.leaderAuditName" @click="treeDelete()"
+                                   class="el-icon-error"></i>
+                            </p>
+                        </div>
+                        <el-form-item style="margin-bottom:0;display:none;">
+                            <el-input></el-input>
+                        </el-form-item>
+                    </el-form-item>
+                </el-form>
+
+                <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                    <el-button type="primary" @click="processAuditUser()">确 定</el-button>
+                    <el-button @click="checkexa = false">取 消</el-button>
+                </div>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import myMessage from "../../../components/myMessage.vue"
+import deptTreeUserNew from "../../../components/deptTreeUserNew";
+import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+
+export default {
+    components: {
+        myMessage,
+        deptTreeUserNew,
+        deptTreeOnly,
+    },
+    data() {
+        return {
+            testModel: {},
+            authSettingStatus: false,
+            authType: '1',
+            noLimitUserName: '',
+            noLimitUsers: [],
+            noLimitDialog: false,
+            exaList: {},
+            defaultList: [],
+            treeList: [],
+            closeList: false,
+            depttype: 0,
+            limitUserIndex: -1,
+            limitList: [{}],
+            type: '',
+            loading: false,
+            auditBoxList: [{}],
+            authDialog: false,
+            auditForm: {},
+            auditUserName: '',
+            auditUserId: '',
+            //选择审批人
+            checkexa: false,
+            //审批人用到的
+            treeListonly: {},
+            excelData: {},
+            fullscreen: false,
+            addInfoList: []
+        }
+    },
+    methods: {
+        auditUserAdd() {
+            this.checkexa = true;
+        },
+        processAuditUser() {
+            console.log(this.treeListonly);
+            this.auditUserId = this.treeListonly.leaderAuditNo;
+            this.auditUserName = this.treeListonly.leaderAuditName;
+            this.checkexa = false;
+        },
+        openAuditWindow(sheetName, excelData) {
+            this.auditBoxList = [{
+                name: '提交审核',
+                value: '1'
+            }, {
+                name: '结束',
+                value: '2'
+            }];
+            this.authDialog = true;
+            this.excelData = excelData;
+        },
+        processAudit() {
+            //检查选项
+            if (this.auditForm.authType == null) {
+                this.$message({
+                    message: '请选择路径',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.auditForm.authType == '1') {
+                if (this.auditUserId == '') {
+                    this.$message({
+                        message: '请选择下一步处理人',
+                        type: 'error'
+                    });
+                    return;
+                }
+            }
+            if (this.auditForm.auditRemark
+                && this.auditForm.auditRemark.length > 240) {
+                this.$message({
+                    message: '意见内容长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            //提交
+            var _this = this;
+            var url = '/market/cIncomeExcelIssued/excelDataProcessAuth';
+            this.loading = true;
+            this.$http({
+                url: url,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    type: this.auditForm.authType,
+                    excelData: this.excelData,
+                    issuedUserId: this.getUrlKey("id"),
+                    nextUserId: this.auditUserId,
+                    auditRemark: this.auditForm.auditRemark
+                },
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    this.authDialog = false;
+                    _this.$message({
+                        message: '处理成功',
+                        type: 'success'
+                    });
+                    //没找到关闭标签页之前的临时处理措施
+                    const newUrl = '#' + this.$route.path + '?type=4&id=' + this.getUrlKey("id");
+                    console.log(newUrl);
+                    window.history.replaceState('', '', newUrl);
+                    document.getElementById('excelIframe').contentWindow.location.reload();
+                    //关闭这个窗口,得找找怎么关闭
+                    //this.$router.go(-1);
+                }
+            });
+
+        },
+        addNewTemplate(sheetName, excelData, templateType) {
+            //console.log(sheetName);
+            //console.log(excelData);
+            //console.log(templateType);
+            //处理一下数据,提交给后端
+            var authUser = [];
+            if (this.authType == '1') {
+                this.noLimitUsers.map((o) => {
+                    authUser.push({
+                        userId: o,
+                        type: 0
+                    })
+                });
+            } else {
+                //外层是权限组
+                this.limitList.map((o) => {
+                    //内层是权限用户
+                    o.userIds.map((o1) => {
+                        authUser.push({
+                            userId: o1,
+                            type: 1,
+                            editStart: o.editStart,
+                            editEnd: o.editEnd
+                        })
+                    })
+                });
+            }
+            //console.log(authUser);
+            //提交
+            var _this = this;
+            var url = '/market/cIncomeExcelTemplate/addNewTemplate';
+            if (this.type == '2') {
+                url = '/market/cIncomeExcelTemplate/updateTemplate';
+            }
+            this.loading = true;
+            this.$http({
+                url: url,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    excelData: excelData,
+                    excelName: sheetName,
+                    userList: authUser,
+                    templateType: templateType,
+                    excelId: this.getUrlKey('id'),
+                },
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    var msgText = '新增成功';
+                    if (this.type == '2') {
+                        msgText = '修改成功';
+                    }
+                    _this.$message({
+                        message: msgText,
+                        type: 'success'
+                    });
+                    const newUrl = '#' + this.$route.path + '?type=2&id=' + res.data.desc;
+                    console.log(newUrl);
+                    window.history.replaceState('', '', newUrl);
+                    if (this.type == '1') {
+                        this.type = '2';
+                        document.getElementById('excelIframe').contentWindow.location.reload();
+                    }
+                    //this.$store.dispatch('tagsView/delView',this.$route)
+                    //this.$router.go(-1);
+                }
+            });
+        },
+        showAuthDialog() {
+            this.authSettingStatus = true;
+        },
+        processAuth() {
+            console.log(this.limitList);
+            //判断一下
+            var success = true;
+            if (this.authType == '1') {
+                if (this.noLimitUsers.length == 0) {
+                    this.$message({
+                        message: '请选择无特殊权限的负责人',
+                        type: 'error'
+                    });
+                    success = false;
+                    return;
+                }
+            } else if (this.authType == '2') {
+                this.limitList.map((o) => {
+                    if (o.userIds == null) {
+                        this.$message({
+                            message: '请选择特殊权限的负责人',
+                            type: 'error'
+                        });
+                        success = false;
+                        return;
+                    }
+                    if (o.editStart == null || o.editEnd == null) {
+                        this.$message({
+                            message: '请填写可编辑行',
+                            type: 'error'
+                        });
+                        success = false;
+                        return;
+                    }
+                })
+            }
+            if (success) {
+                if (this.type == '1') {
+                    this.$refs.iframe.contentWindow.enableUpload('abc');
+                } else if (this.type == '2') {
+                    this.$refs.iframe.contentWindow.enableSave('def');
+                }
+                this.authSettingStatus = false;
+            }
+        },
+        addNewLimitAuth() {
+            var _this = this;
+            if (this.authType == '2') {
+                if (_this.limitList.length == 0) {
+                    _this.limitList.push({
+                        index: 1
+                    });
+                } else {
+                    var lastLimitUserList = _this.limitList[_this.limitList.length - 1].userIds;
+                    if (lastLimitUserList == null) {
+                        _this.$message({
+                            message: '请先选择上一条记录的负责人',
+                            type: 'error'
+                        });
+                    } else {
+                        _this.limitList.push({
+                            index: 1
+                        });
+                    }
+                }
+            } else {
+                _this.$message({
+                    message: '请先选择特殊权限再添加',
+                    type: 'error'
+                });
+            }
+
+        },
+        processNoLimitUsers() {
+            var userNameString = '';
+            if (this.authType == '1') {
+                this.noLimitUsers = [];
+                this.treeList.map((o) => {
+                    this.noLimitUsers.push(o.receiveNo);
+                    userNameString += o.receiveName += ' ';
+                });
+                this.noLimitUserName = userNameString;
+            } else {
+                this.limitList[this.limitUserIndex].userIds = [];
+                this.treeList.map((o) => {
+                    this.limitList[this.limitUserIndex].userIds.push(o.receiveNo);
+                    userNameString += o.receiveName += ' ';
+                });
+                this.limitList[this.limitUserIndex].userName = userNameString;
+            }
+            this.exaList = {};
+            this.defaultList = [];
+            this.treeList = [];
+            this.noLimitDialog = false;
+        },
+        noLimitUserAdd() {
+            if (this.authType == '1') {
+                this.noLimitDialog = true;
+            } else {
+                this.$message({
+                    message: '请先选择无特殊权限,再添加负责人',
+                    type: 'error'
+                });
+            }
+        },
+        limitUserAdd(index) {
+            if (this.authType == '2') {
+                this.limitUserIndex = index;
+                this.noLimitDialog = true;
+            } else {
+                this.$message({
+                    message: '请先选择特殊权限,再添加负责人',
+                    type: 'error'
+                });
+            }
+        },
+        setAuth(id) {
+            var _this = this;
+            this.$http({
+                url: '/market/cIncomeExcelTemplate/getAuthInfo',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    excelId: id
+                },
+            }).then((res) => {
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: '获取负责人信息失败',
+                        type: 'error'
+                    });
+                } else {
+                    console.log(res.data);
+                    var authUsers = res.data.body;
+                    var i = -1;
+                    var nowStart = '';
+                    var nowEnd = '';
+                    this.limitList = [];
+                    this.noLimitUsers = [];
+                    this.noLimitUserName = '';
+                    authUsers.map((o) => {
+                        console.log(o);
+                        //无特殊权限的简单一点,有特殊权限的,需要把相同可编辑行的放在一起
+                        if (o.type == '0') {
+                            this.authType = '1';
+                            this.noLimitUsers.push(o.userId);
+                            this.noLimitUserName += o.userName += ' ';
+                        } else {
+                            this.authType = '2';
+                            if (o.editStart == nowStart && o.editEnd == nowEnd) {
+                                var processLimitUser = this.limitList[i];
+                                processLimitUser.userIds.push(o.userId);
+                                processLimitUser.userName += o.userName += ' ';
+                            } else {
+                                var userIds = [o.userId];
+                                var userName = o.userName += ' ';
+                                this.limitList.push({
+                                    userIds: userIds,
+                                    userName: userName,
+                                    editStart: o.editStart,
+                                    editEnd: o.editEnd
+                                })
+                                nowStart = o.editStart;
+                                nowEnd = o.editEnd;
+                                i++;
+                            }
+                        }
+                    });
+                }
+            });
+        },
+        //填报人相关
+        deletes(val, index) {
+            this.treeList.splice(index, 1);
+            this.closeList = this.treeList;
+        },
+        treeCheckonly(v) {
+            this.treeList = v;
+            this.treeListonly = v;
+        },
+        treeDelete() {
+            this.treeListonly = {};
+            this.closeList = !this.closeList;
+        },
+        getUrlKey(name) {
+            return (
+                decodeURIComponent(
+                    (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+                        location.href
+                    ) || [, ""])[1].replace(/\+/g, "%20")
+                ) || null
+            );
+        },
+        processFullScreen() {
+            this.fullscreen = !this.fullscreen;
+        },
+    },
+    mounted() {
+        this.type = this.getUrlKey("type")
+    },
+    created() {
+        window['fullScreen'] = (rp) => {
+            this.processFullScreen(rp);
+        }
+        window['showAuthDialog'] = (rp) => {
+            this.showAuthDialog(rp);
+        }
+        window['addNewTemplate'] = (sheetName, excelData, templateType) => {
+            this.addNewTemplate(sheetName, excelData, templateType);
+        };
+        window['setAuth'] = (id) => {
+            this.setAuth(id);
+        };
+        window['openAuditWindow'] = (sheetName, excelData) => {
+            this.openAuditWindow(sheetName, excelData);
+        };
+    }
+}
+</script>
+<style lang="scss" scoped>
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+
+    .tree {
+        width: calc(50% - 60px);
+        display: inline-block;
+        margin-right: 20px;
+        height: 300px;
+        overflow-y: scroll;
+
+        .el-icon-error {
+            float: right;
+            font-size: 20px;
+            margin-top: 9px;
+            cursor: pointer;
+        }
+    }
+
+    .treeUser {
+        margin: 0;
+        border: 1px solid #ddd;
+
+        p {
+            background: #f4f4f4;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+
+    .treeUserb {
+        width: calc(100% - 100px);
+        border: 1px solid #ddd;
+        background: #f4f4f4;
+        border-radius: 3px;
+        height: auto;
+        overflow: hidden;
+
+        p {
+            display: inline-block;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+}
+</style>
+<style scoped>
+.containerr {
+    background: #fff;
+    height: calc(100vh);
+    width: calc(100vw);
+    position: fixed;
+    left: 0;
+    top: 0;
+    overflow: hidden;
+}
+
+span {
+    width: 80px;
+}
+</style>

+ 569 - 0
src/pages/main/incomeExcel/incomeExcelIssued.vue

@@ -0,0 +1,569 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box">
+            <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+            <div class="search">
+                <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+            </div>
+            <br/>
+            <div>
+                <span style="color: red">提示:查看回复信息请点击接收人名称查看</span>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="templateName" label="模板名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="editReason" label="填报事由" align="center">
+                    </el-table-column>
+                    <el-table-column prop="editRemark" label="填报注意事项" align="center">
+                    </el-table-column>
+                    <el-table-column prop="endTime" label="截止时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="addUserName" label="发起人" align="center">
+                    </el-table-column>
+                    <el-table-column label="接收人" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.userList == null"
+                                  style="color: #0b82ff;cursor: pointer"
+                                  @click="processIssuedLog(scope.row.id)">{{ scope.row.userName }}</span>
+                            <div v-else v-for="item in scope.row.userList">
+                                <span style="color: #0b82ff;cursor: pointer"
+                                      @click="processIssuedLog(item.id)">{{ item.userName }}&nbsp;</span>
+                            </div>
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="发起时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="state" label="状态" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.state == 0 && scope.row.type != '3'">待处理</span>
+                            <span v-if="scope.row.state == 0 && scope.row.type == '3'">待审批</span>
+                            <span v-if="scope.row.state == 1">已完成</span>
+                            <span v-if="scope.row.state == 2">待审批</span>
+                            <span v-if="scope.row.state == 3">驳回</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="220px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" @click="toView(scope.row)">查看</el-button>
+                            <el-button size="mini" v-if="scope.row.state == 0 && scope.row.type == '1'"
+                                       @click="checkDelete(scope.row)">删除
+                            </el-button>
+                            <el-button size="mini" @click="toEdit(scope.row)"
+                                       v-if="scope.row.type == 2 && (scope.row.state == 0 || scope.row.state == 3)">处理
+                            </el-button>
+                            <el-button size="mini" @click="toAudit(scope.row)"
+                                       v-if="scope.row.type == 3 && scope.row.state == 0">处理
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+
+            <el-dialog :title="'收入信息处理'" :visible.sync="authDialog" width="50%" :destroy-on-close="true"
+                       :modal-append-to-body="false" :close-on-click-modal="false">
+                <el-form :model="testModel">
+                    <div>
+                        <div class="info-line">
+                            <span style="margin-right: 20px;margin-left: 40px">选择路径:</span>
+                            <el-select v-model="auditForm.authType" placeholder="选择路径">
+                                <el-option v-for="(item,index) in auditBoxList" :key="index" :label="item.name"
+                                           :value="item.value"></el-option>
+                            </el-select>
+                        </div>
+                        <br/>
+                        <div class="info-line" v-if="auditForm.authType == 1">
+                            <span style="margin-right: 20px;margin-left: 40px">下一步处理人:</span>
+                            <el-button type="primary" @click="checkexa = true;">选择处理人</el-button>
+                            <span style="width: 80px;margin-right: 20px;margin-left: 20px">{{ auditUserName }}</span>
+                        </div>
+                        <br/>
+                        <div class="info-line">
+                            <span style="margin-right: 20px;margin-left: 40px;">意见内容:</span>
+                            <el-input type="textarea" v-model="auditForm.auditRemark" style="width: 400px"></el-input>
+                        </div>
+                        <br/>
+                        <div slot="footer" style="text-align: right;padding-bottom: 20px;padding-top: 20px">
+                            <el-button @click="authDialog = false">取 消</el-button>
+                            <el-button type="primary" @click="processAudit()">确 定</el-button>
+                        </div>
+                    </div>
+                </el-form>
+            </el-dialog>
+
+            <el-dialog title="选择审批人" :visible.sync="checkexa" width="50%" :destroy-on-close="true"
+                       :modal-append-to-body="false" :close-on-click-modal="false">
+                <div>
+                    <el-form :model="addInfoList" ref="addInfoList">
+                        <el-form-item prop="processUserId" class="info-line online">
+                            <span style="width: 80px">审批人员&nbsp;</span>
+                            <deptTreeOnly class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                          :type="depttype" :closeList="closeList"></deptTreeOnly>
+                            <div class="tree treeUser">
+                                <p>{{ treeListonly.leaderAuditName }}
+                                    <i v-if="treeListonly.leaderAuditName" @click="treeDelete()"
+                                       class="el-icon-error"></i>
+                                </p>
+                            </div>
+                            <el-form-item style="margin-bottom:0;display:none;">
+                                <el-input></el-input>
+                            </el-form-item>
+                        </el-form-item>
+                    </el-form>
+
+                    <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                        <el-button type="primary" @click="processAuditUser()">确 定</el-button>
+                        <el-button @click="checkexa = false">取 消</el-button>
+                    </div>
+                </div>
+            </el-dialog>
+
+            <el-dialog title="回复详情" :visible.sync="issuedLogStatus" width="70%" :close-on-press-escape="false"
+                       :show-close="true" :before-close="closeIssuedLog" :destroy-on-close="true"
+                       :modal-append-to-body="false"
+                       :close-on-click-modal="false" :fullscreen="true">
+                <div class="tabbox" style="height: 500px">
+                    <el-table height="calc(100% - 50px)" class="com-table" ref="multipleTable"
+                              :data="issuedLogData"
+                              tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                        <el-table-column prop="beforeUserName" label="接收人">
+                        </el-table-column>
+                        <el-table-column prop="beforeUserDept" label="部门">
+                        </el-table-column>
+                        <el-table-column prop="opTime" label="回复时间">
+                        </el-table-column>
+                        <el-table-column prop="remark" label="审批记录">
+                        </el-table-column>
+                        <el-table-column prop="status" label="审批意见">
+                        </el-table-column>
+                    </el-table>
+                    <el-pagination class="pageBox" @current-change="issuedLogChange"
+                                   layout="prev, pager, next" background
+                                   :total="issuedLogTotal">
+                    </el-pagination>
+                </div>
+            </el-dialog>
+        </div>
+        <myMessageNew :messTit='deleteTag' @closeMessage="processDelete" :centerDialogVisible="centerDialogVisible"
+                      v-if="centerDialogVisible" yes-btn-name="是" no-btn-name="否"></myMessageNew>
+    </fullscreen>
+</template>
+
+<script>
+import mySearch from "../../../components/search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessageNew from "../../../components/myMessageNew.vue"
+import deptTreeOnly from "../../../components/deptTreeOnly.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessageNew,
+        deptTreeOnly
+    },
+    data() {
+        return {
+            testModel: {},
+            tableData: [{}],
+            total: 0,
+            params: {},
+            deleteTag: '',
+            centerDialogVisible: false,
+            loading: false,
+            tooltit: '收入信息收集',
+            searchList: [{
+                type: 'input',
+                tit: '模板名称',
+                value: '',
+                width: '32%',
+            }, {
+                type: 'date',
+                tit: '截止时间',
+                width: '32%',
+            }, {
+                type: 'sel',
+                tit: '状态',
+                value: '',
+                width: '32%',
+                options: [
+                    {
+                        dataCode: "0",
+                        dataName: "待处理"
+                    },
+                    {
+                        dataCode: "1",
+                        dataName: "已完成"
+                    },
+                    {
+                        dataCode: "2",
+                        dataName: "待审批"
+                    },
+                    {
+                        dataCode: "3",
+                        dataName: "驳回"
+                    }
+                ]
+            },],
+            nowUserId: '',
+            auditBoxList: [{}],
+            authDialog: false,
+            auditForm: {},
+            auditUserName: '',
+            auditUserId: '',
+            //选择审批人
+            checkexa: false,
+            //审批人用到的
+            treeListonly: {},
+            excelData: {},
+            fullscreen: false,
+            defaultList: [],
+            addInfoList: [],
+            closeList: [],
+            depttype: '',
+            issuedLogStatus: false,
+            issuedLogData: [],
+            issuedLogPageSize: 1,
+            issuedLogParams: {},
+            issuedLogTotal: 0,
+            delIssuedUserId: ''
+        }
+    },
+    methods: {
+        processIssuedLog(row) {
+            this.issuedLogParams = {
+                issuedUserId: row
+            };
+            console.log(this.issuedLogParams);
+            this.getIssuedLog(this.issuedLogParams, this.issuedLogPageSize);
+            this.issuedLogStatus = true;
+        },
+        getIssuedLog(v, n) {
+            this.issuedLogPageSize = n;
+            this.loading = true;
+            this.issuedLogData = [];
+            this.$http({
+                url: "/market/cIncomeExcelIssued/getIssuedLog",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.issuedLogData = res.data.data;
+                this.issuedLogTotal = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        issuedLogChange(v) {
+            this.issuedLogPageSize = v;
+            this.getIssuedLog(this.issuedLogParams, this.issuedLogPageSize);
+        },
+        closeIssuedLog() {
+            this.issuedLogStatus = false;
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.templateName = v[0] : '';
+            v[1] ? this.params.endTime = this.$formatDate(v[1], "YYYY-MM-DD") : '';
+            v[2] ? this.params.state = v[2] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/cIncomeExcelIssued/getIssuedList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        toView(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelInfo', 4, '查看收入信息', row.id);
+        },
+        checkDelete(row) {
+            this.deleteTag = '确认删除吗?';
+            this.centerDialogVisible = true;
+            this.delIssuedUserId = row.id;
+        },
+        processDelete(v) {
+            this.centerDialogVisible = false;
+            var _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/cIncomeExcelIssued/deleteIssued",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {issuedUserId: this.delIssuedUserId},
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: '删除失败',
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList({}, _this.pageSize);
+                    }
+                });
+            }
+        },
+        toEdit(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelInfo', 5, '处理收入信息', row.id);
+        },
+        toAudit(row) {
+            this.auditForm = {};
+            this.auditUserId = '';
+            this.auditUserName = '';
+            this.auditBoxList = [{
+                name: '提交审核',
+                value: '1'
+            }, {
+                name: '退回修改',
+                value: '3'
+            }, {
+                name: '结束',
+                value: '2'
+            }];
+            this.nowUserId = row.id;
+            this.authDialog = true;
+        },
+        processAuditUser() {
+            console.log(this.treeListonly);
+            this.auditUserId = this.treeListonly.leaderAuditNo;
+            this.auditUserName = this.treeListonly.leaderAuditName;
+            this.checkexa = false;
+        },
+        processAudit() {
+            //检查选项
+            if (this.auditForm.authType == null) {
+                this.$message({
+                    message: '请选择路径',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.auditForm.authType == '1') {
+                if (this.auditUserId == '') {
+                    this.$message({
+                        message: '请选择下一步处理人',
+                        type: 'error'
+                    });
+                    return;
+                }
+            }
+            if (this.auditForm.auditRemark
+                && this.auditForm.auditRemark.length > 240) {
+                this.$message({
+                    message: '意见内容长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            //提交
+            var _this = this;
+            var url = '/market/cIncomeExcelIssued/issuedUserProcessAuth';
+            this.loading = true;
+            this.$http({
+                url: url,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    issuedUserId: this.nowUserId,
+                    type: this.auditForm.authType,
+                    nextUserId: this.auditUserId,
+                    auditRemark: this.auditForm.auditRemark
+                },
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    this.authDialog = false;
+                    _this.$message({
+                        message: '处理成功',
+                        type: 'success'
+                    });
+                    //刷新列表
+                    this.getList({}, 1);
+                }
+            });
+
+        },
+        //跳转页面
+        jumpinfop(p, v, n, id) {
+            this.$router.push({
+                path: p,
+                query: {
+                    type: v,
+                    id: id
+                }
+            });
+            this.setabList(n, p + '?type=' + v + '&id=' + id);
+        },
+        //新建一个页面
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self",
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+        //填报人相关
+        deletes(val, index) {
+            this.treeList.splice(index, 1);
+            this.closeList = this.treeList;
+        },
+        treeCheckonly(v) {
+            this.treeList = v;
+            this.treeListonly = v;
+        },
+        treeDelete() {
+            this.treeListonly = {};
+            this.closeList = !this.closeList;
+        },
+    },
+    mounted() {
+        this.getList({}, 1);
+    },
+    created() {
+
+    }
+}
+</script>
+
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+
+    .tree {
+        width: calc(50% - 60px);
+        display: inline-block;
+        margin-right: 20px;
+        height: 300px;
+        overflow-y: scroll;
+
+        .el-icon-error {
+            float: right;
+            font-size: 20px;
+            margin-top: 9px;
+            cursor: pointer;
+        }
+    }
+
+    .treeUser {
+        margin: 0;
+        border: 1px solid #ddd;
+
+        p {
+            background: #f4f4f4;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+
+    .treeUserb {
+        width: calc(100% - 100px);
+        border: 1px solid #ddd;
+        background: #f4f4f4;
+        border-radius: 3px;
+        height: auto;
+        overflow: hidden;
+
+        p {
+            display: inline-block;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+}
+</style>
+

+ 382 - 0
src/pages/main/incomeExcel/incomeExcelTemplate.vue

@@ -0,0 +1,382 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box">
+            <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+            <div style="overflow: hidden;">
+                <div class="search" style="float: left;">
+                    <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                </div>
+                <div style="margin-top: 20px;float: right;" class="bigbtns">
+                    <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
+                               @click="addNew()">新增模板
+                    </el-button>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="name" label="模板名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="配置时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="deptName" label="发起部门" align="center">
+                    </el-table-column>
+                    <el-table-column prop="addUserName" label="发起人" align="center">
+                    </el-table-column>
+                    <el-table-column prop="typeName" label="模板类型" align="center">
+                    </el-table-column>
+                    <el-table-column prop="status" label="状态" align="center">
+                        <template slot-scope="scope">
+                            <span v-if="scope.row.status == 0">已创建</span>
+                            <span v-if="scope.row.status == 1">已下发</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="220px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" type="primary" @click="addNewIssued(scope.row)">下发</el-button>
+                            <el-button size="mini" @click="toEdit(scope.row)">编辑</el-button>
+                            <el-button size="mini" @click="toView(scope.row)">查看</el-button>
+                            <el-button size="mini" @click="checkDelete(scope.row)">删除</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+            <el-dialog title="下发" :visible.sync="issuedAddStatus" width="40%" :destroy-on-close="true"
+                       :modal-append-to-body="false" :close-on-click-modal="false" :fullscreen="false">
+                <el-form :model="issuedParam" ref="addInfoList">
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span style="width: 6px;color: red">*</span><span>填报事由</span>
+                            <el-input v-model="issuedParam.editReason" placeholder="填报事由"></el-input>
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span style="width: 6px;color: red">*</span><span>填报注意事项</span>
+                            <el-input v-model="issuedParam.editRemark" placeholder="填报注意事项"></el-input>
+                        </el-form-item>
+                    </div>
+                    <div class="info-line">
+                        <el-form-item prop="testInfo">
+                            <span style="width: 6px;color: red">*</span><span>截止时间</span>
+                            <el-date-picker type="date" placeholder="截止时间" v-model="issuedParam.endTime"
+                                            :picker-options="pickerOptions" value-format="yyyy-MM-dd"></el-date-picker>
+                        </el-form-item>
+                    </div>
+                </el-form>
+                <div slot="footer" class="dialog-footer myfooter">
+
+                    <el-button @click="issuedAddStatus = false">取消</el-button>
+                    <el-button @click="processNewIssued()" type="primary">确定</el-button>
+                </div>
+            </el-dialog>
+        </div>
+        <myMessageNew :messTit='deleteTag' @closeMessage="processDelete" :centerDialogVisible="centerDialogVisible"
+                      v-if="centerDialogVisible" yes-btn-name="是" no-btn-name="否"></myMessageNew>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessageNew from "../../../components/myMessageNew.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessageNew
+    },
+    data() {
+        return {
+            tableData: [{}],
+            total: 0,
+            params: {},
+            deleteTag: '',
+            centerDialogVisible: false,
+            loading: false,
+            issuedAddStatus: false,
+            issuedParam: {},
+            pickerOptions: {
+                disabledDate(time) {
+                    return time.getTime() < Date.now();
+                }
+            },
+            tooltit: '收入模板管理',
+            searchList: [{
+                type: 'input',
+                tit: '模板名称',
+                value: '',
+                width: '48%',
+            }, {
+                type: 'input',
+                tit: '模板类型',
+                value: '',
+                width: '48%',
+            },],
+            delTemplateId: '',
+            fullscreen: false
+        }
+    },
+    methods: {
+        checkDelete(row) {
+            this.deleteTag = '确认删除吗?';
+            this.centerDialogVisible = true;
+            this.delTemplateId = row.id;
+        },
+        processDelete(v) {
+            this.centerDialogVisible = false;
+            var _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/cIncomeExcelTemplate/deleteTemplate",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {excelId: this.delTemplateId},
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: '删除失败',
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList({}, _this.pageSize);
+                    }
+                });
+            }
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.name = v[0] : '';
+            v[1] ? this.params.templateType = v[1] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/cIncomeExcelTemplate/getExcelTemplateList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        addNew() {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelInfo', 1, '新增模板', "")
+        },
+        toEdit(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelInfo', 2, '修改模板', row.id);
+        },
+        toView(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelInfo', 3, '查看模板', row.id);
+        },
+        addNewIssued(row) {
+            this.issuedParam = {
+                templateId: row.id,
+            };
+            this.issuedAddStatus = true;
+        },
+        processNewIssued() {
+            if (!this.issuedParam.editReason) {
+                this.$message({
+                    message: '填报事由不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (!this.issuedParam.editRemark) {
+                this.$message({
+                    message: '填报注意事项不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (!this.issuedParam.endTime) {
+                this.$message({
+                    message: '截止时间不能为空',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.issuedParam.editReason.length > 240) {
+                this.$message({
+                    message: '填报事由长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            if (this.issuedParam.editRemark.length > 240) {
+                this.$message({
+                    message: '填报注意事项长度不能大于240字',
+                    type: 'error'
+                });
+                return;
+            }
+            var _this = this;
+            //执行下发
+            this.$http({
+                url: '/market/cIncomeExcelIssued/addNewIssued',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: this.issuedParam,
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    _this.$message({
+                        message: '下发成功',
+                        type: 'success'
+                    });
+                    this.issuedAddStatus = false;
+                    this.getList({}, 1);
+                }
+            });
+        },
+        //跳转页面
+        jumpinfop(p, v, n, id) {
+            this.$router.push({
+                path: p,
+                query: {
+                    type: v,
+                    id: id
+                }
+            });
+            this.setabList(n, p + '?type=' + v + '&id=' + id);
+        },
+        //新建一个页面
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self",
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+    },
+    mounted() {
+        this.getList({}, 1);
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 90%;
+        display: inline-block;
+    }
+
+    span {
+        width: 100px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 150px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>
+

+ 288 - 0
src/pages/main/incomeExcel/incomeExcelView.vue

@@ -0,0 +1,288 @@
+<template>
+    <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+        <div class="container-box">
+            <toolList @iconCli='iconCli' :tooltit='tooltit'></toolList>
+            <div style="overflow: hidden;">
+                <div class="search" style="float: left;">
+                    <mySearch :searchList="searchList" @searchInfo="searchInfo"></mySearch>
+                </div>
+                <div style="margin-top: 20px;float: right;" class="bigbtns">
+                    <el-button style="margin-left: 20px;" class="btn-check" size="medium" type="primary"
+                               @click="addNew()">新建
+                    </el-button>
+                </div>
+            </div>
+            <div class="tabbox">
+                <el-table height="calc(100% - 40px)" class="com-table" ref="multipleTable" :data="tableData"
+                          tooltip-effect="dark" size="small" border style="width: 100%" v-loading="loading">
+                    <el-table-column prop="viewName" label="模板名称" align="center">
+                    </el-table-column>
+                    <el-table-column prop="opTime" label="发起时间" align="center">
+                    </el-table-column>
+                    <el-table-column prop="deptName" label="发起部门" align="center">
+                    </el-table-column>
+                    <el-table-column prop="userName" label="发起人" align="center">
+                    </el-table-column>
+                    <el-table-column prop="typeName" label="模板类型" align="center">
+                    </el-table-column>
+                    <el-table-column label="操作" width="220px" align="center" fixed="right">
+                        <template slot-scope="scope">
+                            <el-button size="mini" @click="toView(scope.row)" v-if="scope.row.type == '1'">查看
+                            </el-button>
+                            <el-button size="mini" @click="toViewer(scope.row)" v-if="scope.row.type == '2'">查看
+                            </el-button>
+                            <el-button size="mini" @click="toEdit(scope.row)" v-if="scope.row.type == '1'">修改
+                            </el-button>
+                            <el-button size="mini" @click="delDialog(scope.row)" v-if="scope.row.type == '1'">删除
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <el-pagination class="pageBox" @current-change="currchange" layout="prev, pager, next" background
+                               :total="total">
+                </el-pagination>
+            </div>
+        </div>
+        <myMessageNew :messTit='deleteTag' @closeMessage="processDel" :centerDialogVisible="centerDialogVisible"
+                      v-if="centerDialogVisible" yes-btn-name="是" no-btn-name="否"></myMessageNew>
+    </fullscreen>
+</template>
+<script>
+import mySearch from "../../../components/search.vue";
+import myUpload from "../../../components/upload";
+import toolList from "../../../components/toolList";
+import myMessageNew from "../../../components/myMessageNew.vue"
+
+export default {
+    components: {
+        myUpload,
+        mySearch,
+        toolList,
+        myMessageNew
+    },
+    data() {
+        return {
+            tableData: [{}],
+            total: 0,
+            params: {},
+            deleteTag: '',
+            centerDialogVisible: false,
+            loading: false,
+            issuedAddStatus: false,
+            issuedParam: {},
+            tooltit: '收入信息发布',
+            searchList: [{
+                type: 'input',
+                tit: '模板名称',
+                value: '',
+                width: '100%',
+            },],
+            fullscreen: false,
+            delViewId: ''
+        }
+    },
+    methods: {
+        delDialog(row) {
+            this.delViewId = row.viewId;
+            this.deleteTag = '确认删除吗?';
+            this.centerDialogVisible = true;
+        },
+        processDel(v) {
+            this.centerDialogVisible = false;
+            var _this = this;
+            if (v === 1) {
+                this.$http({
+                    url: "/market/cIncomeExcelView/delView",
+                    method: "post",
+                    headers: {
+                        "Content-Type": "application/json",
+                    },
+                    data: {excelId: this.delViewId},
+                }).then((res) => {
+                    if (res.data.result === 1) {
+                        _this.$message({
+                            message: '删除失败',
+                            type: 'error'
+                        });
+                    } else {
+                        _this.$message({
+                            message: '删除成功',
+                            type: 'success'
+                        });
+                        _this.getList({}, _this.pageSize);
+                    }
+                });
+            }
+        },
+        //搜索数据
+        searchInfo(v) {
+            this.params = {};
+            v[0] ? this.params.name = v[0] : '';
+            this.getList(this.params, this.pageSize);
+        },
+        //功能栏
+        iconCli(v) {
+            if (v === 1) {
+                this.getList(this.params, this.pageSize);
+            }
+            if (v === 2) {
+                this.fullscreen = !this.fullscreen
+            }
+        },
+        // 分页
+        currchange(v) {
+            this.pageSize = v;
+            this.getList(this.params, this.pageSize);
+        },
+        getList(v, n) {
+            this.pageSize = n;
+            this.loading = true;
+            this.tableData = [];
+            let _this = this;
+            this.$http({
+                url: "/market/cIncomeExcelView/getViewList",
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                    "page": '{"pageNo":"' + n + '","pageSize":"10"}'
+                },
+                data: v,
+            }).then((res) => {
+                this.tableData = res.data.data;
+                this.total = res.data.totalRecord;
+                this.loading = false;
+            });
+        },
+        processDelete(v) {
+            this.centerDialogVisible = false;
+            if (v === 1) {
+                console.log("删除")
+            }
+        },
+        addNew() {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelViewInfo', 1, '新增收入信息', "")
+        },
+        toEdit(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelViewInfo', 2, '修改收入信息', row.viewId);
+        },
+        toView(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelViewInfo', 3, '查看收入信息', row.viewId);
+        },
+        toViewer(row) {
+            var _this = this;
+            _this.jumpinfop('/incomeExcelViewInfo', 4, '查看收入信息', row.id);
+        },
+        addNewIssued(row) {
+            this.issuedParam = {
+                templateId: row.id,
+            };
+            this.issuedAddStatus = true;
+        },
+        //跳转页面
+        jumpinfop(p, v, n, id) {
+            this.$router.push({
+                path: p,
+                query: {
+                    type: v,
+                    id: id
+                }
+            });
+            this.setabList(n, p + '?type=' + v + '&id=' + id);
+        },
+        //新建一个页面
+        setabList(n, p) {
+            let params = {
+                children: "",
+                name: n,
+                rountPath: p,
+                target: "_self",
+            };
+            for (let i = 0; i < this.$store.state.tabList.length; i++) {
+                if (this.$store.state.tabList[i].name === params.name) {
+                    this.$store.state.tabList[i] = params;
+                }
+            }
+            let set = new Set([...this.$store.state.tabList, params]);
+            set.add(params);
+            this.$store.commit("setDefaultActive", params.rountPath);
+            this.$store.commit("setTabList", Array.from(set));
+        },
+    },
+    mounted() {
+        this.getList({}, 1);
+    },
+    created() {
+
+    }
+}
+</script>
+<style scoped lang="scss">
+.titbox {
+    div {
+        float: right;
+
+        i {
+            font-size: 22px;
+            margin-left: 20px;
+            cursor: pointer;
+        }
+    }
+}
+
+.tabbox {
+    margin-top: 16px;
+}
+
+.pageBox {
+    text-align: right;
+    margin-top: 10px;
+}
+
+.info-line {
+    width: 100%;
+    display: block;
+    padding-left: 20px;
+
+    div {
+        width: 90%;
+        display: inline-block;
+    }
+
+    span {
+        width: 100px;
+        display: inline-block;
+        text-align: left;
+
+        i {
+            color: red;
+            display: inline-block;
+            padding-right: 5px;
+        }
+    }
+
+    .el-select,
+    .el-input {
+        width: calc(100% - 150px);
+    }
+}
+
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+}
+</style>
+

+ 511 - 0
src/pages/main/incomeExcel/incomeExcelViewInfo.vue

@@ -0,0 +1,511 @@
+<template>
+    <div class="container" id="container" v-loading="loading">
+        <fullscreen :fullscreen.sync="fullscreen" class="container" style="margin: 0;width: 100%;">
+            <iframe height="100%" width="100%" src="/marketfront/static/views/incomeViewExcel.html" frameborder="0"
+                    ref="iframe" name="excelIframe" id="excelIframe"></iframe>
+        </fullscreen>
+        <el-dialog :title="'权限设置'" :visible.sync="authSettingStatus" width="70%" :destroy-on-close="true"
+                   :modal-append-to-body="false" :close-on-click-modal="false">
+            <el-form :model="testModel" ref="addInfoList">
+                <div>
+                    <div class="info-line">
+                        <div id="noLimit" class="info-line">
+                            <span style="margin-right: 10px;margin-left: 40px">请设置表头范围:从</span>
+                            <el-input v-model="topStart" style="width: 80px;" type="number" min="1"
+                                      oninput="value=value.replace('-','')"></el-input>
+                            <span style="margin-right: 10px;margin-left: 10px">到</span>
+                            <el-input v-model="topEnd" style="width: 80px;" type="number" min="1"
+                                      oninput="value=value.replace('-','')"></el-input>
+                            行
+                            <br/><br/>
+                            <span style="margin-right: 10px;margin-left: 40px;font-size: 12px;color: red">注意:表头跟随可查看行进行组合下发,可查看行不填写,默认可查看整个表</span>
+                            <br/><br/>
+                        </div>
+                    </div>
+                    <div class="info-line">
+                        <div id="limit">
+                            <div v-for="(item,index) in limitList">
+                                <span style="margin-right: 20px;margin-left: 40px">查看人:</span>
+                                <el-button type="primary" @click="limitUserAdd(index)">组织机构</el-button>
+                                <span style="margin-right: 20px;margin-left: 20px">{{ item.userName }}</span>
+                                <span style="margin-right: 10px;margin-left: 10px">可查看行:从</span>
+                                <el-input v-model="item.editStart" style="width: 80px;" type="number" min="1"
+                                          oninput="value=value.replace('-','')"></el-input>
+                                <span style="margin-right: 10px;margin-left: 10px">到</span>
+                                <el-input v-model="item.editEnd" style="width: 80px;" type="number" min="1"
+                                          oninput="value=value.replace('-','')"></el-input>
+                                <br/><br/>
+                            </div>
+                            <el-button style="width: 80px;margin-right: 20px;margin-left: 40px"
+                                       @click="addNewLimitAuth()">添加
+                            </el-button>
+                        </div>
+                    </div>
+                    <div slot="footer" style="text-align: right;padding-bottom: 20px;padding-top: 20px">
+                        <el-button @click="authSettingStatus = false">取 消</el-button>
+                        <el-button type="primary" @click="processAuth()">确 定</el-button>
+                    </div>
+                </div>
+            </el-form>
+        </el-dialog>
+        <el-dialog title="选择填报人" :visible.sync="noLimitDialog" width="50%" :destroy-on-close="true"
+                   :modal-append-to-body="false" :close-on-click-modal="false">
+            <div>
+                <el-form :model="exaList" ref="addInfoList">
+                    <el-form-item prop="processUserId" class="info-line online">
+                        <span style="width: 80px;margin-right: 20px">审批人员</span>
+                        <deptTreeUserNew class="tree" @treeCheck="treeCheckonly" :defaultList="defaultList"
+                                         :type="depttype" :closeList="closeList"></deptTreeUserNew>
+                        <div class="tree treeUser">
+                            <p v-for="(item,index) in treeList" :key="index">{{ item.receiveName }}
+                                <i @click="deletes(item,index)" class="el-icon-error"></i>
+                            </p>
+                        </div>
+                        <el-form-item style="margin-bottom:0;display:none;">
+                            <el-input></el-input>
+                        </el-form-item>
+                    </el-form-item>
+                </el-form>
+
+                <div slot="footer" style="text-align: right;padding-bottom: 20px">
+                    <el-button @click="noLimitDialog = false">取 消</el-button>
+                    <el-button type="primary" @click="processNoLimitUsers()">确 定</el-button>
+                </div>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import myMessage from "../../../components/myMessage.vue"
+import deptTreeUserNew from "../../../components/deptTreeUserNew";
+
+export default {
+    components: {
+        myMessage,
+        deptTreeUserNew,
+    },
+    data() {
+        return {
+            deleteTag: '',
+            centerDialogVisible: false,
+            testModel: {},
+            authSettingStatus: false,
+            authType: '1',
+            noLimitUserName: '',
+            noLimitUsers: [],
+            noLimitDialog: false,
+            exaList: {},
+            defaultList: [],
+            treeList: [],
+            closeList: false,
+            depttype: 0,
+            limitUserIndex: -1,
+            limitList: [{}],
+            type: '',
+            loading: false,
+            auditBoxList: [{}],
+            authDialog: false,
+            auditForm: {},
+            auditUserName: '',
+            auditUserId: '',
+            //选择审批人
+            checkexa: false,
+            //审批人用到的
+            treeListonly: {},
+            excelData: {},
+            topStart: '',
+            topEnd: '',
+            fullscreen: false,
+        }
+    },
+    methods: {
+        auditUserAdd() {
+            this.checkexa = true;
+        },
+        processAuditUser() {
+            console.log(this.treeListonly);
+            this.auditUserId = this.treeListonly.leaderAuditNo;
+            this.auditUserName = this.treeListonly.leaderAuditName;
+            this.checkexa = false;
+        },
+        openAuditWindow(sheetName, excelData) {
+            this.auditBoxList = [{
+                name: '提交审核',
+                value: '1'
+            }, {
+                name: '结束',
+                value: '2'
+            }];
+            this.authDialog = true;
+            this.excelData = excelData;
+        },
+        addNewTemplate(sheetName, excelData, templateType) {
+            //处理一下数据,提交给后端
+            var authUser = [];
+            if (this.authType == '1') {
+                this.noLimitUsers.map((o) => {
+                    authUser.push({
+                        userId: o,
+                        type: 0
+                    })
+                });
+            } else {
+                //外层是权限组
+                this.limitList.map((o) => {
+                    //内层是权限用户
+                    o.userIds.map((o1) => {
+                        authUser.push({
+                            userId: o1,
+                            viewStart: o.editStart,
+                            viewEnd: o.editEnd
+                        })
+                    })
+                });
+            }
+            //console.log(authUser);
+            //提交
+            var _this = this;
+            var url = '/market/cIncomeExcelView/addNewView';
+            if (this.type == '2') {
+                url = '/market/cIncomeExcelView/updateView';
+            }
+            this.loading = true;
+            this.$http({
+                url: url,
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    excelData: excelData,
+                    excelName: sheetName,
+                    userList: authUser,
+                    templateType: templateType,
+                    excelId: this.getUrlKey('id'),
+                    topStart: this.topStart,
+                    topEnd: this.topEnd
+                },
+            }).then((res) => {
+                this.loading = false;
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: res.data.desc,
+                        type: 'error'
+                    });
+                } else {
+                    var msgText = '新增成功';
+                    if (this.type == '2') {
+                        msgText = '修改成功';
+                    }
+                    _this.$message({
+                        message: msgText,
+                        type: 'success'
+                    });
+                    const newUrl = '#' + this.$route.path + '?type=2&id=' + res.data.desc;
+                    console.log(newUrl);
+                    window.history.replaceState('', '', newUrl);
+                    if (this.type == '1') {
+                        this.type = '2';
+                        document.getElementById('excelIframe').contentWindow.location.reload();
+                    }
+                }
+            });
+        },
+        showAuthDialog() {
+            this.authType = '2';
+            this.authSettingStatus = true;
+        },
+        processAuth() {
+            console.log(this.limitList);
+            //判断一下
+            var success = true;
+            if (this.authType == '1') {
+                if (this.noLimitUsers.length == 0) {
+                    this.$message({
+                        message: '请选择无特殊权限的负责人',
+                        type: 'error'
+                    });
+                    success = false;
+                    return;
+                }
+            } else if (this.authType == '2') {
+                if (this.topStart == '' || this.topEnd == '') {
+                    this.$message({
+                        message: '请填写表头行',
+                        type: 'error'
+                    });
+                    success = false;
+                    return;
+                }
+                if (parseInt(this.topStart) > parseInt(this.topEnd)) {
+                    this.$message({
+                        message: '表头行开始不能大于结束',
+                        type: 'error'
+                    });
+                    success = false;
+                    return;
+                }
+                this.limitList.map((o) => {
+                    if (o.userIds == null) {
+                        this.$message({
+                            message: '请选择查看人',
+                            type: 'error'
+                        });
+                        success = false;
+                        return;
+                    }
+                    if (parseInt(o.editStart) > parseInt(o.editEnd)) {
+                        this.$message({
+                            message: '可查看行开始不能大于结束',
+                            type: 'error'
+                        });
+                        success = false;
+                        return;
+                    }
+                    if (parseInt(o.editStart) <= parseInt(this.topEnd)) {
+                        this.$message({
+                            message: '可查看行不能包括表头行',
+                            type: 'error'
+                        });
+                        success = false;
+                        return;
+                    }
+                });
+            }
+            if (success) {
+                if (this.type == '1') {
+                    this.$refs.iframe.contentWindow.enableUpload('abc');
+                } else if (this.type == '2') {
+                    this.$refs.iframe.contentWindow.enableSave('def');
+                }
+                this.authSettingStatus = false;
+            }
+        },
+        addNewLimitAuth() {
+            var _this = this;
+            var lastLimitUserList = _this.limitList[_this.limitList.length - 1].userIds;
+            if (lastLimitUserList == null) {
+                _this.$message({
+                    message: '请先选择上一条记录的查看人',
+                    type: 'error'
+                });
+            } else {
+                _this.limitList.push({
+                    index: 1
+                });
+            }
+        },
+        processNoLimitUsers() {
+            var userNameString = '';
+            if (this.authType == '1') {
+                this.noLimitUsers = [];
+                this.treeList.map((o) => {
+                    this.noLimitUsers.push(o.receiveNo);
+                    userNameString += o.receiveName += ' ';
+                });
+                this.noLimitUserName = userNameString;
+            } else {
+                this.limitList[this.limitUserIndex].userIds = [];
+                this.treeList.map((o) => {
+                    this.limitList[this.limitUserIndex].userIds.push(o.receiveNo);
+                    userNameString += o.receiveName += ' ';
+                });
+                this.limitList[this.limitUserIndex].userName = userNameString;
+            }
+            this.exaList = {};
+            this.defaultList = [];
+            this.treeList = [];
+            this.noLimitDialog = false;
+        },
+
+        limitUserAdd(index) {
+            if (this.authType == '2') {
+                this.limitUserIndex = index;
+                this.noLimitDialog = true;
+            } else {
+                this.$message({
+                    message: '请先选择特殊权限,再添加负责人',
+                    type: 'error'
+                });
+            }
+        },
+        setAuth(id) {
+            var _this = this;
+            this.$http({
+                url: '/market/cIncomeExcelView/getAuthInfo',
+                method: "post",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+                data: {
+                    excelId: id
+                },
+            }).then((res) => {
+                if (res.data.result === 1) {
+                    _this.$message({
+                        message: '获取负责人信息失败',
+                        type: 'error'
+                    });
+                } else {
+                    console.log(res.data.body);
+                    var authUsers = res.data.body.viewUserList;
+                    var i = -1;
+                    var nowStart = '';
+                    var nowEnd = '';
+                    this.limitList = [];
+                    this.noLimitUsers = [];
+                    this.noLimitUserName = '';
+                    this.topStart = res.data.body.topStart;
+                    this.topEnd = res.data.body.topEnd;
+                    authUsers.map((o) => {
+                        console.log(o);
+                        //无特殊权限的简单一点,有特殊权限的,需要把相同可编辑行的放在一起
+                        if (o.type == '0') {
+                            this.authType = '1';
+                            this.noLimitUsers.push(o.userId);
+                            this.noLimitUserName += o.userName += ' ';
+                        } else {
+                            this.authType = '2';
+                            if (o.viewStart == nowStart && o.viewEnd == nowEnd) {
+                                var processLimitUser = this.limitList[i];
+                                processLimitUser.userIds.push(o.userId);
+                                processLimitUser.userName += o.userName += ' ';
+                            } else {
+                                var userIds = [o.userId];
+                                var userName = o.userName += ' ';
+                                this.limitList.push({
+                                    userIds: userIds,
+                                    userName: userName,
+                                    editStart: o.viewStart,
+                                    editEnd: o.viewEnd
+                                })
+                                nowStart = o.viewStart;
+                                nowEnd = o.viewEnd;
+                                i++;
+                            }
+                        }
+                    });
+                }
+            });
+        },
+        //填报人相关
+        deletes(val, index) {
+            this.treeList.splice(index, 1);
+            this.closeList = this.treeList;
+        },
+        treeCheckonly(v) {
+            this.treeList = v;
+            this.treeListonly = v;
+        },
+        treeDelete() {
+            this.treeListonly = {};
+            this.closeList = !this.closeList;
+        },
+        getUrlKey(name) {
+            return (
+                decodeURIComponent(
+                    (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+                        location.href
+                    ) || [, ""])[1].replace(/\+/g, "%20")
+                ) || null
+            );
+        },
+        processFullScreen() {
+            this.fullscreen = !this.fullscreen;
+        },
+    },
+    mounted() {
+        this.type = this.getUrlKey("type")
+    },
+    created() {
+        window['fullScreen'] = (rp) => {
+            this.processFullScreen(rp);
+        }
+        window['showAuthDialog'] = (rp) => {
+            this.showAuthDialog(rp);
+        }
+        window['addNewTemplate'] = (sheetName, excelData, templateType) => {
+            this.addNewTemplate(sheetName, excelData, templateType);
+        };
+        window['setAuth'] = (id) => {
+            this.setAuth(id);
+        };
+        window['openAuditWindow'] = (sheetName, excelData) => {
+            this.openAuditWindow(sheetName, excelData);
+        };
+    }
+}
+</script>
+<style lang="scss" scoped>
+.online {
+    width: 100%;
+
+    .el-select {
+        width: calc(100% - 100px);
+    }
+
+    span {
+        vertical-align: top;
+    }
+
+    .el-textarea {
+        width: calc(100% - 100px);
+    }
+
+    .tree {
+        width: calc(50% - 60px);
+        display: inline-block;
+        margin-right: 20px;
+        height: 300px;
+        overflow-y: scroll;
+
+        .el-icon-error {
+            float: right;
+            font-size: 20px;
+            margin-top: 9px;
+            cursor: pointer;
+        }
+    }
+
+    .treeUser {
+        margin: 0;
+        border: 1px solid #ddd;
+
+        p {
+            background: #f4f4f4;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+
+    .treeUserb {
+        width: calc(100% - 100px);
+        border: 1px solid #ddd;
+        background: #f4f4f4;
+        border-radius: 3px;
+        height: auto;
+        overflow: hidden;
+
+        p {
+            display: inline-block;
+            padding: 0 20px;
+            margin-bottom: 5px;
+        }
+    }
+}
+</style>
+<style scoped>
+.containerr {
+    background: #fff;
+    height: calc(100vh);
+    width: calc(100vw);
+    position: fixed;
+    left: 0;
+    top: 0;
+    overflow: hidden;
+}
+
+span {
+    width: 80px;
+}
+</style>

+ 46 - 4
src/router/index.js

@@ -2009,13 +2009,55 @@ const routes = [{
             component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/apkTestMain/index'], resolve)
         },
         {
+            meta: { name:  '收入模板', keepAlive: false },
+            path: '/incomeExcelHome',
+            name: 'incomeExcelHome',
+            redirect: 'incomeExcelTemplate',
+            component: (resolve) => require( /* webpackChunkName: "system" */
+                ['../pages/main/incomeExcel/home.vue'], resolve),
+            children: [
+                {
+                    meta: { name:  '收入模板管理', keepAlive: false },
+                    path: '/incomeExcelTemplate',
+                    name: 'incomeExcelTemplate',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/incomeExcel/incomeExcelTemplate'], resolve)
+                },
+                {
+                    meta: { name:  '收入信息收集', keepAlive: false },
+                    path: '/incomeExcelIssued',
+                    name: 'incomeExcelIssued',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/incomeExcel/incomeExcelIssued'], resolve)
+                },{
+                    meta: { name:  '收入信息发布', keepAlive: false },
+                    path: '/incomeExcelView',
+                    name: 'incomeExcelView',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/incomeExcel/incomeExcelView'], resolve)
+                },
+                {
+                    meta: { name:  '收入附件收集', keepAlive: false },
+                    path: '/incomeExcelAppendix',
+                    name: 'incomeExcelAppendix',
+                    component: (resolve) => require( /* webpackChunkName: "system" */['../pages/main/incomeExcel/incomeExcelAppendix'], resolve)
+                },
+            ]
+        },
+        {
+            meta: {
+                name: '模板详情',
+                keepAlive: false
+            },
+            path: '/incomeExcelInfo',
+            name: 'incomeExcelInfo',
+            component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/incomeExcel/incomeExcelInfo'], resolve)
+        },
+        {
             meta: {
-                name: '在线文档',
+                name: '下发模板详情',
                 keepAlive: false
             },
-            path: '/onlineShareExcel',
-            name: 'onlineShareExcel',
-            component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/onlineExcel/index'], resolve)
+            path: '/incomeExcelViewInfo',
+            name: 'incomeExcelViewInfo',
+            component: (resolve) => require( /* webpackChunkName: "system" */ ['../pages/main/incomeExcel/incomeExcelViewInfo'], resolve)
         },
         {
             meta: {