Bläddra i källkod

部门等修改

Rorschach 5 år sedan
förälder
incheckning
ecbe1b0c7c

+ 9 - 55
src/api/manageApi.js

@@ -3,84 +3,38 @@ import {fetch,post,put} from 'utils/http';
 import { baseApi } from 'utils/config' 
 
 //获取部门下拉
-export function getTeamSelect () {
-  return fetch('manageBase/dept/select',{deptId: 0})
-  // return request({
-  //   url: baseApi + 'manageBase/dept/select',
-  //   method: 'get',
-  //   params: {
-  //     deptId: 0
-  //   }
-  // })
+export function getTeamSelect (type) {
+  return fetch('manageBase/dept/select',{type:type})
 }
 //获取项目下拉
 export function getProjectSelect () {
   return fetch('manageBase/project/select',{deptId: 0})
-  // return request({
-  //   url: baseApi + 'manageBase/project/select',
-  //   method: 'get',
-  //   params: {
-  //     deptId: 0
-  //   }
-  // })
 }
 //获取产品下拉
 export function getProductSelect () {
   return fetch('manageBase/product/select',{deptId: 0})
-  // return request({
-  //   url: baseApi + 'manageBase/product/select',
-  //   method: 'get',
-  //   params: {
-  //     deptId: 0
-  //   }
-  // })
 }
 //获取成本单位下拉
-export function getCostTeamSelect () {
-  return fetch('manageBase/company/select',{deptId: 0})
-  // return request({
-  //   url: baseApi + 'manageBase/company/select',
-  //   method: 'get',
-  //   params: {
-  //     deptId: 0
-  //   }
-  // })
-}
+// export function getCostTeamSelect (type) {
+//   return fetch('manageBase/company/select',{deptId: 0,type:type})
+// }
 //获取成本类型下拉
 export function getCostTypeSelect () {
   return fetch('manageBase/costType/select',{deptId: 0})
-  // return request({
-  //   url: baseApi + 'manageBase/costType/select',
-  //   method: 'get',
-  //   params: {
-  //     deptId: 0
-  //   }
-  // })
 }
 //查询经营列表
 export function getManageList (params) {
   return post('manageBase/manage/search', params)
-  // return request({
-  //   url: baseApi + 'manageBase/manage',
-  //   method: 'get',
-  //   params,
-  // })
 }
 //增加经营数据
 export function addManage (data) {
   return post('manageBase/manage',data)
-  // return request({
-  //   url: baseApi + 'manageBase/manage',
-  //   method: 'post',
-  //   data
-  // })
 }
 // 更新经营数据
 export function setManage (data) {
   return put('manageBase/manage',data)
-  // return request({
-  //   url: baseApi + 'manageBase/manage',
-  //   method: 'put',
-  //   data
-  // })
+}
+// 下载表格
+export function downloadData (form) {
+  return fetch('manageBase/manage/export',form)
 }

+ 4 - 4
src/api/teamApi.js

@@ -3,8 +3,8 @@ import { baseApi } from 'utils/config'
 import {fetch,post,put} from 'utils/http';
 
 //获取部门信息
-export function getTeamList (deptId) {
-  return fetch('manageBase/dept/tree',{deptId: 12345})
+export function getTeamList (type) {
+  return fetch('manageBase/dept/tree',{deptId: 12345,type: type})
   // return request({
   //   url: baseApi + 'manageBase/dept/tree',
   //   method: 'get',
@@ -14,8 +14,8 @@ export function getTeamList (deptId) {
   // })
 }
 //获取子部门信息
-export function getTeamChildList (deptId) {
-  return fetch('manageBase/dept/child',{deptId: deptId})
+export function getTeamChildList (deptId,type) {
+  return fetch('manageBase/dept/child',{deptId: deptId,type:type})
   // return request({
   //   url: baseApi + 'manageBase/dept/child',
   //   method: 'get',

+ 257 - 0
src/pages/customer/index.vue

@@ -0,0 +1,257 @@
+<template>
+  <div class="team">
+    <el-card class="left-card-team">
+      <el-tree
+        ref="tree"
+        :data="teamData"
+        node-key="id"
+        highlight-current
+        :expand-on-click-node="true"
+        @node-click="currentKey">
+        <span class="custom-tree-node" slot-scope="{ node, data }">
+          <span>{{ node.label }}</span>
+          <span>
+            <el-button
+              type="text"
+              size="mini"
+              @click.stop="() => append(node, data)">
+              添加
+            </el-button>
+            <!--
+            <el-button
+              type="text"
+              size="mini"
+              @click.stop="() => remove(node, data)">
+              Delete
+            </el-button>
+            -->
+          </span>
+        </span>        
+      </el-tree>
+    </el-card> 
+    <el-card class="right-card-team">
+      <el-table
+      :data="teamChildData"
+      border
+      style="width: 100%">
+      <!--
+        <el-table-column type="expand">
+          <template slot-scope="props">
+            <el-form label-position="left" inline class="demo-table-expand">
+            <el-form-item label="部门名称">
+                <span>{{ props.row.name }}</span>
+              </el-form-item>
+              <el-form-item label="部门 ID">
+                <span>{{ props.row.id }}</span>
+              </el-form-item>
+              <el-form-item label="部门分类">
+                <span>{{ props.row.category }}</span>
+              </el-form-item>
+              <el-form-item label="上级部门">
+                <span>{{ props.row.father.name }}</span>
+              </el-form-item>
+            </el-form>
+          </template>
+        </el-table-column>
+        -->
+        <!--
+        <el-table-column
+          label="部门 ID"
+          prop="id">
+        </el-table-column>
+        -->
+        <el-table-column
+          label="部门编码"
+          align="right"
+          width="200px"
+          prop="code">
+        </el-table-column>
+        <el-table-column
+          label="部门名称"
+          align="right"
+          prop="name">
+        </el-table-column>
+        <el-table-column
+          label="上级部门"
+          align="right"
+          width="200px"
+          prop="father.name">
+        </el-table-column>
+        <el-table-column label="操作" width="80">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
+            <!--  
+            <el-button
+              size="mini"
+              type="danger"
+              @click="handleDelete(scope.$index, scope.row)">删除</el-button>
+            -->
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+    <el-dialog title="新增部门" :visible.sync="dialogFormVisible">     
+      <el-form :model="form" ref="form">
+        <el-form-item label="部门编码" prop="code" :label-width="formLabelWidth" :rules="[{ required: true, message: '编码不能为空'}]">
+          <el-input v-model="form.code" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="部门名称" prop="name" :label-width="formLabelWidth" :rules="[{ required: true, message: '名称不能为空'}]">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+        <!--
+          <el-form-item label="部门状态" prop="status" :label-width="formLabelWidth" :rules="[{ required: true, message: '状态不能为空'}]">
+          <el-select v-model="form.status" placeholder="请选择状态值">
+            <el-option label="正常" value="NORMAL"></el-option>
+            <el-option label="已删除" value="DEL"></el-option>
+          </el-select>
+        </el-form-item>
+        -->
+        <!-- <el-form-item label="部门排序" prop="sort" :label-width="formLabelWidth" >
+          <el-input v-model.number="form.sort" autocomplete="off"></el-input>
+        </el-form-item>              -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="resetForm('form')">取 消</el-button>
+        <el-button type="primary" @click="submitForm('form')">确 定</el-button>
+      </div>
+    </el-dialog>    
+  </div>
+</template>
+<script scoped>
+import { getTeamList, getTeamChildList, addTeam, setTeam } from '@/api/teamApi'
+export default {
+  data () {
+    return {
+      teamData: [],
+      teamChildData: [],
+      dialogFormVisible: false,
+      addFlag: false,
+      id: '',
+      form: {
+        path: '',
+        code: '',
+        name: '',
+        status: 'NORMAL',
+        sort: ''
+      },
+      formLabelWidth: '120px',
+      index: ''      
+    }
+  },
+  created () {
+    getTeamList('PARTNER').then(res => {
+      console.log(res.data)
+      console.log(res.data.children[0].children)
+      this.teamData.push(res.data)
+    });
+  },
+  methods: {
+    // 新增部门
+    append(node, data) {
+      this.addFlag = true;
+      this.dialogFormVisible = true;
+      this.form.path = data.id;
+    },
+    //选择节点
+    currentKey(val) {
+      getTeamChildList(val.id,'PARTNER').then( res => {
+        console.log(res.data)
+        this.teamChildData = res.data
+      })
+    },
+    // 编辑部门
+    handleEdit(index, row) {
+      console.log(index, row);
+      this.form.code = row.code;
+      this.form.name = row.name;
+      // this.form.status = row.status;
+      this.form.sort = row.sort;
+      this.form.path = row.path;
+      this.id = row.id;
+      this.index = index;
+      this.dialogFormVisible = true;
+      this.addFlag = false;
+    },
+    handleDelete(index, row) {
+      console.log(index, row);
+    },
+    // 提交新增
+    submitForm(formName) {
+      //验证表单
+      this.$refs[formName].validate((valid, value) => {
+        if (valid) {
+          console.log(this.form);
+          if(this.addFlag) {
+            addTeam(this.form).then(res => {
+              console.log(res.data.name)
+              //追加元素
+              this.$refs.tree.append({
+                id: res.data.id,
+                label: res.data.name
+              }, this.form.path)
+              this.$refs[formName].resetFields();
+              this.$message({
+                message: "添加成功",
+                type: "success"
+              });
+            })
+          } else {
+            this.form.id = this.id;
+            setTeam(this.form).then(res => {
+              console.log(res);
+              console.log(this.index)
+              this.teamChildData.splice(this.index, 1, res.data)
+              this.$refs[formName].resetFields();
+              this.$message({
+                message: "修改成功",
+                type: "success"
+              });
+            })
+          }
+          this.dialogFormVisible = false;
+        } else {
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+        this.dialogFormVisible = false;
+        this.$refs[formName].resetFields();
+    }  
+  }, 
+}
+</script>
+<style scope>
+  .team {
+    display: flex;
+    justify-content: space-between; 
+    padding: 20px;
+    box-sizing: border-box;
+  }
+  .left-card-team {
+    width: 28%;
+  }
+  .custom-tree-node {
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+  }
+  .right-card-team {
+    width: 70%;
+  }
+  .demo-table-expand {
+    font-size: 0;
+  }
+  .demo-table-expand label {
+    width: 90px;
+    color: #99a9bf;
+  }
+  .demo-table-expand .el-form-item {
+    margin-right: 0;
+    margin-bottom: 0;
+    width: 50%;
+  }
+</style>
+

+ 7 - 1
src/pages/layout/nav/Nav.vue

@@ -15,7 +15,7 @@
       active-text-color="#ffd04b"
       :router="true"
     >
-      <el-menu-item index="/manage/query">
+      <el-menu-item index="/manage/query" v-if="isSuper===true">
         <!-- <i class="el-icon-search"></i> -->
         <span slot="title">数据查询</span>
       </el-menu-item>
@@ -32,6 +32,12 @@
         <!-- <i style="font-style:normal">部门</i> -->
         <span slot="title">部门管理</span>
       </el-menu-item>
+       <el-menu-item index="/customer/index" v-if="isSuper===true">
+        <span slot="title">客户管理</span>
+      </el-menu-item>
+      <el-menu-item index="/provider/index" v-if="isSuper===true">
+        <span slot="title">供应商管理</span>
+      </el-menu-item>
       <el-menu-item index="/project/index" v-if="isSuper===true">
         <!-- <i style="font-style:normal">项目</i> -->
         <span slot="title">项目管理</span>

+ 103 - 20
src/pages/manage/cost.vue

@@ -1,31 +1,56 @@
 <template>
   <div class="manage">
     <!-- <TitleBar propTitle="成本管理" /> -->
+    <div class="searchBtn">
+      <el-form :model="form" ref="searchForm" class="marginTop">
+        <el-form-item label="发生日期范围" :label-width="formLabelWidth">
+          <el-row :gutter="10">
+            <el-col :span="4">
+              <el-date-picker placeholder="起始时间" style="width:100%" v-model="searchForm.startTime"></el-date-picker>
+            </el-col>
+            <el-col :span="4">
+              <el-date-picker placeholder="结束时间" style="width:100%" v-model="searchForm.endTime"></el-date-picker>
+            </el-col>
+          </el-row>
+        </el-form-item>
+        <el-form-item style="position: absolute; width:23%; left:300px;">
+          <el-button type="primary" @click="onSearch">检索</el-button>
+          <el-button type="info" @click="onReset">清空条件</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
     <div class="add-container">
       <el-button type="primary" @click="append('COST')">增加成本</el-button>
     </div>
     <el-card class="right-card">
-      <el-table :data="manageData" :row-class-name="isDel" align="right" border empty-text="无" max-height="750">
+      <el-table
+        :data="manageData"
+        :row-class-name="isDel"
+        align="right"
+        border
+        empty-text="无"
+        max-height="750"
+      >
         <el-table-column
-          width="120px"
+          width="105px"
           label="发生日期"
           :formatter="dateFormat"
           prop="happenTime"
           align="right"
         ></el-table-column>
         <el-table-column
-          width="130px"
+          width="105px"
           align="right"
           label="金额"
           :formatter="moneyFormat"
           prop="amount"
         ></el-table-column>
-        <el-table-column width="180px" align="right" label="成本类别" prop="costType.name"></el-table-column>
-        <el-table-column width="200px" align="right" label="发生项目/人" prop="project.name"></el-table-column>
-        <el-table-column width="270px" align="right" label="发生部门" prop="department.name"></el-table-column>
+        <el-table-column width="160px" align="right" label="成本类别" prop="costType.name"></el-table-column>
+        <el-table-column width="180px" align="right" label="发生项目/人" prop="project.name"></el-table-column>
+        <el-table-column width="250px" align="right" label="发生部门" prop="department.name"></el-table-column>
 
-        <el-table-column label="接收项目" width="220px" align="right" prop="toProject.name"></el-table-column>
-        <el-table-column label="接收部门" width="290px" align="right" prop="toDepartment.name"></el-table-column>
+        <!-- <el-table-column label="接收项目" width="220px" align="right" prop="toProject.name"></el-table-column> -->
+        <el-table-column label="供应商" width="290px" align="right" prop="toDepartment.name"></el-table-column>
 
         <el-table-column label="备注" min-width="300px" align="right" prop="remark"></el-table-column>
         <el-table-column label="操作" align="center" width="160">
@@ -79,7 +104,7 @@
         // { type: 'number', message: '排序必须为数字值'}
         ]"
         >
-          <el-input style="width: 230px; display: block"  v-model="form.amount" autocomplete="off"></el-input>
+          <el-input style="width: 230px; display: block" v-model="form.amount" autocomplete="off"></el-input>
         </el-form-item>
 
         <el-form-item
@@ -127,18 +152,18 @@
           </el-select>
         </el-form-item>
 
-        <el-form-item label="接收部门" prop="toDeptId" :label-width="formLabelWidth">
+        <el-form-item label="供应商" prop="toDeptId" :label-width="formLabelWidth">
           <el-select v-model="form.toDeptId" placeholder="请选择部门">
             <el-option key label="无" value></el-option>
             <el-option
-              v-for="item in teamSelectData"
+              v-for="item in costTeamSelectData"
               :key="item.id"
               :label="item.code +'--'+ item.name"
               :value="item.id"
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="接收项目" prop="toProjectId" :label-width="formLabelWidth">
+        <!-- <el-form-item label="接收项目" prop="toProjectId" :label-width="formLabelWidth">
           <el-select v-model="form.toProjectId" placeholder="请选择项目">
             <el-option key label="无" value></el-option>
             <el-option
@@ -148,11 +173,16 @@
               :value="item.id"
             ></el-option>
           </el-select>
-        </el-form-item>
-
+        </el-form-item> -->
 
         <el-form-item label="添加备注" prop="remark" :label-width="formLabelWidth">
-          <el-input type="textarea" style="width: 250px; display: block" :rows="2" v-model="form.remark" autocomplete="off"></el-input>
+          <el-input
+            type="textarea"
+            style="width: 250px; display: block"
+            :rows="2"
+            v-model="form.remark"
+            autocomplete="off"
+          ></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -186,6 +216,7 @@ export default {
       dialogFormVisible: false,
       addFlag: false,
       id: "",
+      searchFlag: false,
       form: {
         deptId: "",
         projectId: "",
@@ -204,6 +235,24 @@ export default {
         status: "NORMAL",
         sort: ""
       },
+      searchForm: {
+        type: "COST",
+        productId: [],
+        projectId: [],
+        toDeptId: "",
+        toProjectId: "",
+        deptId: [],
+        incomeStatus: [],
+        status: "NORMAL",
+        costTypeId: [],
+        startTime: null,
+        endTime: null,
+        minAmount: "",
+        maxAmount: "",
+        isEntry: true,
+        pageNo: 1,
+        pageSize: 50
+      },
       pageNo: 1,
       pageSize: 50,
       formLabelWidth: "120px",
@@ -228,7 +277,7 @@ export default {
     //   return;
     // }
     // 获取部门下拉框
-    getTeamSelect().then(res => {
+    getTeamSelect('COMPANY').then(res => {
       this.teamSelectData = res.data;
       this.form.deptId = res.data[0].id;
     });
@@ -250,8 +299,8 @@ export default {
       this.manageData = res.data.content;
       this.totalNumber = parseInt(res.data.totalElements);
     });
-    //获取单位下拉
-    getCostTeamSelect().then(res => {
+    //获取供应商下拉
+    getTeamSelect('OTHERS').then(res => {
       this.costTeamSelectData = res.data;
     });
     //获取成本类型下拉
@@ -388,9 +437,15 @@ export default {
             setManage(this.form).then(res => {
               //获取经营列表
               getManageList({
-                type: "COST"
+                type: "COST",
+                pageNo: 1,
+                pageSize: 50,
+                startTime: this.searchFlag ? this.searchForm.startTime : null,
+                endTime: this.searchFlag ? this.searchForm.endTime : null,
+                isEntry: true
               }).then(res => {
-                this.manageData = res.data;
+                this.manageData = res.data.content;
+                this.totalSize = res.data.totalPages;
               });
               this.$refs[formName].resetFields();
               this.$message({
@@ -416,6 +471,34 @@ export default {
     },
     recordTimeFormat(row) {
       return formatTime(row.gmtModified);
+    },
+    // 按时间检索
+    onSearch() {
+      this.$post("manageBase/manage/search", this.searchForm).then(response => {
+        if (response.data && response.data.length == 0 || !response.data) {
+          this.totalSum = 0;
+          this.$message("未找到相应数据");
+          return;
+        }
+        this.searchFlag = true;
+        this.manageData = response.data.content;
+        this.totalNumber = parseInt(response.data.totalElements);
+      });
+    },
+    // 清空检索条件
+    onReset() {
+      this.searchFlag = false;
+      this.searchForm.startTime = null;
+      this.searchForm.endTime = null;
+      getManageList({
+        type: "COST",
+        pageNo: 1,
+        pageSize: 50,
+        isEntry: true
+      }).then(res => {
+        this.manageData = res.data.content;
+        this.totalNumber = parseInt(res.data.totalElements);
+      });
     }
   }
 };

+ 100 - 23
src/pages/manage/index.vue

@@ -1,6 +1,24 @@
 <template>
   <div class="manage">
     <!-- <TitleBar propTitle="收入管理" /> -->
+    <div class="searchBtn">
+      <el-form :model="form" ref="searchForm" class="marginTop">
+        <el-form-item label="发生日期范围" :label-width="formLabelWidth">
+          <el-row :gutter="10">
+            <el-col :span="4">
+              <el-date-picker placeholder="起始时间" style="width:100%" v-model="searchForm.startTime"></el-date-picker>
+            </el-col>
+            <el-col :span="4">
+              <el-date-picker placeholder="结束时间" style="width:100%" v-model="searchForm.endTime"></el-date-picker>
+            </el-col>
+          </el-row>
+        </el-form-item>
+        <el-form-item style="position: absolute; width:23%; left:300px;">
+          <el-button type="primary" @click="onSearch">检索</el-button>
+          <el-button type="info" @click="onReset">清空条件</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
     <div class="add-container">
       <el-button type="primary" @click="append('INCOME')">增加收入</el-button>
     </div>
@@ -13,31 +31,31 @@
         max-height="750"
       >
         <el-table-column
-          width="120px"
+          width="105px"
           align="right"
           label="发生日期"
           :formatter="dateFormat"
           prop="happenTime"
         ></el-table-column>
         <el-table-column
-          width="130px"
+          width="105px"
           align="right"
           label="金额"
           :formatter="moneyFormat"
           prop="amount"
         ></el-table-column>
-        <el-table-column width="120px" align="right" label="收入状态">
+        <el-table-column width="95px" align="right" label="收入状态">
           <template slot-scope="props">
             <span>{{ props.row.incomeStatus == 'INVOICE' ? '开票/应收' : props.row.incomeStatus == 'ARRIVAL' ? '到账' : '内部核算' }}</span>
           </template>
         </el-table-column>
-        <el-table-column width="160px" align="right" label="产品" prop="product.name"></el-table-column>
-        <el-table-column width="235px" align="right" label="归属项目" prop="project.name"></el-table-column>
+        <el-table-column width="130px" align="right" label="产品" prop="product.name"></el-table-column>
+        <el-table-column width="165px" align="right" label="归属项目" prop="project.name"></el-table-column>
         <el-table-column width="230px" align="right" label="归属部门" prop="department.name"></el-table-column>
-        <el-table-column label="接收项目" width="235px" align="right" prop="toProject.name"></el-table-column>
+        <!-- <el-table-column label="接收项目" width="235px" align="right" prop="toProject.name"></el-table-column> -->
 
         <!-- <el-table-column label="接收部门" prop="toDepartment.name"></el-table-column> -->
-        <el-table-column label="来源部门" width="300px" align="right" prop="toDepartment.name"></el-table-column>
+        <el-table-column label="客户" width="300px" align="right" prop="toDepartment.name"></el-table-column>
 
         <el-table-column align="right" label="备注" min-width="300px" prop="remark">
           <!-- <template slot="header" slot-scope="scope">
@@ -77,7 +95,7 @@
       layout="prev, pager, next"
       :total="totalNumber"
     ></el-pagination>
-    
+
     <el-dialog :title="type == 'INCOME' ? '收入' : '成本'" :visible.sync="dialogFormVisible">
       <el-form :model="form" ref="form">
         <el-form-item
@@ -142,18 +160,18 @@
           </el-select>
         </el-form-item>
 
-        <el-form-item label="来源部门" prop="toDeptId" :label-width="formLabelWidth">
+        <el-form-item label="客户" prop="toDeptId" :label-width="formLabelWidth">
           <el-select v-model="form.toDeptId" placeholder="请选择部门">
             <el-option key label="无" value></el-option>
             <el-option
-              v-for="item in teamSelectData"
+              v-for="item in costTeamSelectData"
               :key="item.id"
               :label="item.code +'--'+ item.name"
               :value="item.id"
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="来源项目" prop="toProjectId" :label-width="formLabelWidth">
+        <!-- <el-form-item label="来源项目" prop="toProjectId" :label-width="formLabelWidth">
           <el-select v-model="form.toProjectId" placeholder="请选择项目">
             <el-option key label="无" value></el-option>
             <el-option
@@ -163,7 +181,7 @@
               :value="item.id"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
 
         <el-form-item label="归属部门" prop="deptId" :label-width="formLabelWidth">
           <el-select v-model="form.deptId" placeholder="请选择部门" ref="select" @change="getName">
@@ -176,8 +194,14 @@
             ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="添加备注" prop="remark"  :label-width="formLabelWidth">
-          <el-input type="textarea" style="width: 250px; display: block" :rows="2" v-model="form.remark" autocomplete="off"></el-input>
+        <el-form-item label="添加备注" prop="remark" :label-width="formLabelWidth">
+          <el-input
+            type="textarea"
+            style="width: 250px; display: block"
+            :rows="2"
+            v-model="form.remark"
+            autocomplete="off"
+          ></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -212,6 +236,7 @@ export default {
       addFlag: false,
       id: "",
       search: "",
+      searchFlag: false,
       form: {
         deptId: "",
         projectId: "",
@@ -231,6 +256,24 @@ export default {
         status: "NORMAL",
         sort: ""
       },
+      searchForm: {
+        type: "INCOME",
+        productId: [],
+        projectId: [],
+        toDeptId: "",
+        toProjectId: "",
+        deptId: [],
+        incomeStatus: [],
+        status: "NORMAL",
+        costTypeId: [],
+        startTime: null,
+        endTime: null,
+        minAmount: "",
+        maxAmount: "",
+        isEntry: true,
+        pageNo: 1,
+        pageSize: 50
+      },
       pageNo: 1,
       pageSize: 50,
       totalNumber: 0,
@@ -246,7 +289,7 @@ export default {
   },
   created() {
     // 获取部门下拉框
-    getTeamSelect().then(res => {
+    getTeamSelect('COMPANY').then(res => {
       this.teamSelectData = res.data;
       this.form.deptId = res.data[0].id;
     });
@@ -269,14 +312,14 @@ export default {
       this.manageData = res.data.content;
       this.totalNumber = parseInt(res.data.totalElements);
     });
-    //获取单位下拉
-    getCostTeamSelect().then(res => {
+    //获取客户下拉
+    getTeamSelect('PARTNER').then(res => {
       this.costTeamSelectData = res.data;
     });
     //获取成本类型下拉
-    getCostTypeSelect().then(res => {
-      this.costTypeSelectData = res.data;
-    });
+    // getCostTypeSelect().then(res => {
+    //   this.costTypeSelectData = res.data;
+    // });
   },
   methods: {
     // 金额格式化
@@ -308,7 +351,6 @@ export default {
       return "";
     },
     isDel({ row, rowIndex }) {
-      console.log("进入class判断");
       if (row.status === "DEL") {
         return "isDel";
       }
@@ -382,9 +424,16 @@ export default {
             setManage(this.form).then(res => {
               //获取经营列表
               getManageList({
-                type: "INCOME"
+                type: "INCOME",
+                pageNo: 1,
+                pageSize: 50,
+                startTime: this.searchFlag ? this.searchForm.startTime : null,
+                endTime: this.searchFlag ? this.searchForm.endTime : null,
+                isEntry: true
               }).then(res => {
-                this.manageData = res.data;
+                console.log(res)
+                this.manageData = res.data.content;
+                this.totalSize = res.data.totalPages;
               });
               this.$refs[formName].resetFields();
               this.$message({
@@ -433,6 +482,34 @@ export default {
     },
     recordTimeFormat(row) {
       return formatTime(row.gmtModified);
+    },
+    // 按时间检索
+    onSearch() {
+      this.$post("manageBase/manage/search", this.searchForm).then(response => {
+        if (response.data && response.data.length == 0) {
+          this.totalSum = 0;
+          this.$message("未找到相应数据");
+          return;
+        }
+        this.searchFlag = true;
+        this.manageData = response.data.content;
+        this.totalNumber = parseInt(response.data.totalElements);
+      });
+    },
+    // 清空检索条件
+    onReset() {
+      this.searchFlag = false;
+      this.searchForm.startTime = null;
+      this.searchForm.endTime = null;
+      getManageList({
+        type: "INCOME",
+        pageNo: 1,
+        pageSize: 50,
+        isEntry: true
+      }).then(res => {
+        this.manageData = res.data.content;
+        this.totalNumber = parseInt(res.data.totalElements);
+      });
     }
   }
 };

+ 63 - 32
src/pages/manage/query.vue

@@ -9,6 +9,7 @@
           size="medium"
           :rules="[{ required: true, message: '必选'}]"
           style="width:100%"
+          @change="radioChange"
         >
           <el-row :gutter="10">
             <el-col :span="4">
@@ -111,7 +112,7 @@
           ></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item
+      <!-- <el-form-item
         label="来源项目"
         prop="toProjectId"
         v-if="form.type==='INCOME'"
@@ -125,16 +126,16 @@
             :value="item.id"
           ></el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item>-->
       <el-form-item
-        label="来源部门"
+        label="客户"
         prop="toDeptId"
         v-if="form.type==='INCOME'"
         :label-width="formLabelWidth"
       >
         <el-select v-model="form.toDeptId" multiple placeholder="全选" ref="select">
           <el-option
-            v-for="item in teamSelectData"
+            v-for="item in customerSelectData"
             :key="item.id"
             :label="item.code +'--'+ item.name"
             :value="item.id"
@@ -142,7 +143,7 @@
         </el-select>
       </el-form-item>
 
-      <el-form-item
+      <!-- <el-form-item
         label="接收项目"
         prop="toProjectId"
         v-if="form.type==='COST'"
@@ -156,16 +157,16 @@
             :value="item.id"
           ></el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item>-->
       <el-form-item
-        label="接收部门"
+        label="供应商"
         prop="toDeptId"
         v-if="form.type==='COST'"
         :label-width="formLabelWidth"
       >
         <el-select v-model="form.toDeptId" multiple placeholder="全选" ref="select">
           <el-option
-            v-for="item in teamSelectData"
+            v-for="item in providerSelectData"
             :key="item.id"
             :label="item.code +'--'+ item.name"
             :value="item.id"
@@ -181,7 +182,13 @@
       </el-form-item>-->
     </el-form>
     <!-- 查询结果收入表 -->
-    <div class="totalSumDiv">全部金额合计:{{totalSum}}</div>
+    <div class="inline-btn">
+      <div class="totalSumDiv">全部金额合计:{{totalSum}}</div>
+      <div class="downloadBtn">
+        <el-button type="primary" @click="onDownload">下载本表</el-button>
+      </div>
+    </div>
+
     <el-table
       :data="searchResult"
       style="margin-top:30px;"
@@ -214,8 +221,8 @@
       <el-table-column label="产品" width="200px" align="right" prop="product.name"></el-table-column>
       <el-table-column label="归属项目" width="235px" align="right" prop="project.name"></el-table-column>
       <el-table-column label="归属部门" width="250px" align="right" prop="department.name"></el-table-column>
-      <el-table-column label="来源项目" width="235px" align="right" prop="toProject.name"></el-table-column>
-      <el-table-column label="来源部门" width="300px" align="right" prop="toDepartment.name"></el-table-column>
+      <!-- <el-table-column label="来源项目" width="235px" align="right" prop="toProject.name"></el-table-column> -->
+      <el-table-column label="客户" width="300px" align="right" prop="toDepartment.name"></el-table-column>
       <el-table-column prop="remark" min-width="300px" align="right" label="备注"></el-table-column>
       <el-table-column
         width="120px"
@@ -252,8 +259,8 @@
       <el-table-column label="成本类别" width="270px" align="right" prop="costType.name"></el-table-column>
       <el-table-column label="发生部门" width="240px" align="right" prop="department.name"></el-table-column>
       <el-table-column label="发生项目/人" width="245px" align="right" prop="project.name"></el-table-column>
-      <el-table-column label="接收项目" width="235px" align="right" prop="toProject.name"></el-table-column>
-      <el-table-column label="接收部门" width="310px" align="right" prop="toDepartment.name"></el-table-column>
+      <!-- <el-table-column label="接收项目" width="235px" align="right" prop="toProject.name"></el-table-column> -->
+      <el-table-column label="供应商" width="310px" align="right" prop="toDepartment.name"></el-table-column>
       <el-table-column label="备注" min-width="300px" align="right" prop="remark"></el-table-column>
       <el-table-column
         width="120px"
@@ -284,7 +291,8 @@ import {
   getCostTypeSelect,
   addManage,
   getManageList,
-  setManage
+  setManage,
+  downloadData
 } from "@/api/manageApi";
 import TitleBar from "../layout/titleBar/TitleBar.vue";
 import { formatTime } from "../../utils/common";
@@ -310,8 +318,8 @@ export default {
         incomeStatus: [],
         status: "NORMAL",
         costTypeId: [],
-        startTime: null,
-        endTime: null,
+        startTime: "",
+        endTime: "",
         minAmount: "",
         maxAmount: "",
         isEntry: false,
@@ -327,6 +335,8 @@ export default {
       productSelectData: [],
       costTeamSelectData: [],
       costTypeSelectData: [],
+      providerSelectData: [],
+      customerSelectData: [],
       manageData: [],
       companyData: [],
       tableType: "",
@@ -342,7 +352,7 @@ export default {
   },
   created() {
     // 获取部门下拉框
-    getTeamSelect().then(res => {
+    getTeamSelect("COMPANY").then(res => {
       this.teamSelectData = res.data;
     });
     // 获取项目下拉框
@@ -353,18 +363,14 @@ export default {
     getProductSelect().then(res => {
       this.productSelectData = res.data;
     });
-    //获取经营列表
-    // getManageList({
-    //   type: "INCOME"
-    // }).then(res => {
-    //   this.manageData = res.data;
-    //   console.log(res.data);
-    // });
-    //获取单位下拉
-    getCostTeamSelect().then(res => {
-      this.costTeamSelectData = res.data;
+    //获取供应商下拉
+    getTeamSelect("OTHERS").then(res => {
+      this.providerSelectData = res.data;
+    });
+    //获取客户下拉
+    getTeamSelect("PARTNER").then(res => {
+      this.customerSelectData = res.data;
     });
-    
     //获取成本类型下拉
     getCostTypeSelect().then(res => {
       this.costTypeSelectData = res.data;
@@ -372,6 +378,25 @@ export default {
   },
 
   methods: {
+    // 收入或成本变化时 清空一些条件
+    radioChange() {
+      this.form.toDeptId = "";
+      this.form.incomeStatus = [];
+      this.form.productId = [];
+      this.form.costTypeId = [];
+    },
+    // 下载表格
+    onDownload() {
+      this.form.startTime = this.form.startTime.toJSON();
+      console.log(this.form.startTime);
+      let url = "http://whiteboardtest.ai160.com/manageBase/manage/export?";
+      for (let key in this.form) {
+        console.log(key);
+        let str = key + "=" + this.form[key] + "&";
+        url += str;
+      }
+      window.open(url.slice(0, -1));
+    },
     // 自定义合计
     tableSummary(param) {
       const { columns, data } = param;
@@ -440,22 +465,21 @@ export default {
     },
     onSubmit() {
       // this.totalNumber = 0;
+      console.log(this.form.startTime);
       this.searchResult = [];
       if (this.form.type === "INCOME") {
-        this.form.costTypeId = [];
         this.tableType = "INCOME";
       }
       if (this.form.type === "COST") {
-        this.form.incomeStatus = [];
-        this.form.productId = [];
         this.tableType = "COST";
       }
       this.form.pageNo = 1;
+
       this.$post("manageBase/manage/search", this.form).then(response => {
         if (response.data && response.data.length == 0) {
           this.totalSum = 0;
           this.$message("未找到相应数据");
-          return
+          return;
         }
         this.searchResult = response.data.content;
         this.totalNumber = parseInt(response.data.totalElements);
@@ -537,6 +561,13 @@ export default {
   /* text-align: right; */
   padding-left: 120px;
   display: block;
+  /* margin-top: 80px; */
+}
+.inline-btn {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
   margin-top: 80px;
+  width: 500px;
 }
 </style>

+ 257 - 0
src/pages/provider/index.vue

@@ -0,0 +1,257 @@
+<template>
+  <div class="team">
+    <el-card class="left-card-team">
+      <el-tree
+        ref="tree"
+        :data="teamData"
+        node-key="id"
+        highlight-current
+        :expand-on-click-node="true"
+        @node-click="currentKey">
+        <span class="custom-tree-node" slot-scope="{ node, data }">
+          <span>{{ node.label }}</span>
+          <span>
+            <el-button
+              type="text"
+              size="mini"
+              @click.stop="() => append(node, data)">
+              添加
+            </el-button>
+            <!--
+            <el-button
+              type="text"
+              size="mini"
+              @click.stop="() => remove(node, data)">
+              Delete
+            </el-button>
+            -->
+          </span>
+        </span>        
+      </el-tree>
+    </el-card> 
+    <el-card class="right-card-team">
+      <el-table
+      :data="teamChildData"
+      border
+      style="width: 100%">
+      <!--
+        <el-table-column type="expand">
+          <template slot-scope="props">
+            <el-form label-position="left" inline class="demo-table-expand">
+            <el-form-item label="部门名称">
+                <span>{{ props.row.name }}</span>
+              </el-form-item>
+              <el-form-item label="部门 ID">
+                <span>{{ props.row.id }}</span>
+              </el-form-item>
+              <el-form-item label="部门分类">
+                <span>{{ props.row.category }}</span>
+              </el-form-item>
+              <el-form-item label="上级部门">
+                <span>{{ props.row.father.name }}</span>
+              </el-form-item>
+            </el-form>
+          </template>
+        </el-table-column>
+        -->
+        <!--
+        <el-table-column
+          label="部门 ID"
+          prop="id">
+        </el-table-column>
+        -->
+        <el-table-column
+          label="部门编码"
+          align="right"
+          width="200px"
+          prop="code">
+        </el-table-column>
+        <el-table-column
+          label="部门名称"
+          align="right"
+          prop="name">
+        </el-table-column>
+        <el-table-column
+          label="上级部门"
+          align="right"
+          width="200px"
+          prop="father.name">
+        </el-table-column>
+        <el-table-column label="操作" width="80">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
+            <!--  
+            <el-button
+              size="mini"
+              type="danger"
+              @click="handleDelete(scope.$index, scope.row)">删除</el-button>
+            -->
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-card>
+    <el-dialog title="新增部门" :visible.sync="dialogFormVisible">     
+      <el-form :model="form" ref="form">
+        <el-form-item label="部门编码" prop="code" :label-width="formLabelWidth" :rules="[{ required: true, message: '编码不能为空'}]">
+          <el-input v-model="form.code" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="部门名称" prop="name" :label-width="formLabelWidth" :rules="[{ required: true, message: '名称不能为空'}]">
+          <el-input v-model="form.name" autocomplete="off"></el-input>
+        </el-form-item>
+        <!--
+          <el-form-item label="部门状态" prop="status" :label-width="formLabelWidth" :rules="[{ required: true, message: '状态不能为空'}]">
+          <el-select v-model="form.status" placeholder="请选择状态值">
+            <el-option label="正常" value="NORMAL"></el-option>
+            <el-option label="已删除" value="DEL"></el-option>
+          </el-select>
+        </el-form-item>
+        -->
+        <!-- <el-form-item label="部门排序" prop="sort" :label-width="formLabelWidth" >
+          <el-input v-model.number="form.sort" autocomplete="off"></el-input>
+        </el-form-item>              -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="resetForm('form')">取 消</el-button>
+        <el-button type="primary" @click="submitForm('form')">确 定</el-button>
+      </div>
+    </el-dialog>    
+  </div>
+</template>
+<script scoped>
+import { getTeamList, getTeamChildList, addTeam, setTeam } from '@/api/teamApi'
+export default {
+  data () {
+    return {
+      teamData: [],
+      teamChildData: [],
+      dialogFormVisible: false,
+      addFlag: false,
+      id: '',
+      form: {
+        path: '',
+        code: '',
+        name: '',
+        status: 'NORMAL',
+        sort: ''
+      },
+      formLabelWidth: '120px',
+      index: ''      
+    }
+  },
+  created () {
+    getTeamList('OTHERS').then(res => {
+      console.log(res.data)
+      console.log(res.data.children[0].children)
+      this.teamData.push(res.data)
+    });
+  },
+  methods: {
+    // 新增部门
+    append(node, data) {
+      this.addFlag = true;
+      this.dialogFormVisible = true;
+      this.form.path = data.id;
+    },
+    //选择节点
+    currentKey(val) {
+      getTeamChildList(val.id,'OTHERS').then( res => {
+        console.log(res.data)
+        this.teamChildData = res.data
+      })
+    },
+    // 编辑部门
+    handleEdit(index, row) {
+      console.log(index, row);
+      this.form.code = row.code;
+      this.form.name = row.name;
+      // this.form.status = row.status;
+      this.form.sort = row.sort;
+      this.form.path = row.path;
+      this.id = row.id;
+      this.index = index;
+      this.dialogFormVisible = true;
+      this.addFlag = false;
+    },
+    handleDelete(index, row) {
+      console.log(index, row);
+    },
+    // 提交新增
+    submitForm(formName) {
+      //验证表单
+      this.$refs[formName].validate((valid, value) => {
+        if (valid) {
+          console.log(this.form);
+          if(this.addFlag) {
+            addTeam(this.form).then(res => {
+              console.log(res.data.name)
+              //追加元素
+              this.$refs.tree.append({
+                id: res.data.id,
+                label: res.data.name
+              }, this.form.path)
+              this.$refs[formName].resetFields();
+              this.$message({
+                message: "添加成功",
+                type: "success"
+              });
+            })
+          } else {
+            this.form.id = this.id;
+            setTeam(this.form).then(res => {
+              console.log(res);
+              console.log(this.index)
+              this.teamChildData.splice(this.index, 1, res.data)
+              this.$refs[formName].resetFields();
+              this.$message({
+                message: "修改成功",
+                type: "success"
+              });
+            })
+          }
+          this.dialogFormVisible = false;
+        } else {
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+        this.dialogFormVisible = false;
+        this.$refs[formName].resetFields();
+    }  
+  }, 
+}
+</script>
+<style scope>
+  .team {
+    display: flex;
+    justify-content: space-between; 
+    padding: 20px;
+    box-sizing: border-box;
+  }
+  .left-card-team {
+    width: 28%;
+  }
+  .custom-tree-node {
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+  }
+  .right-card-team {
+    width: 70%;
+  }
+  .demo-table-expand {
+    font-size: 0;
+  }
+  .demo-table-expand label {
+    width: 90px;
+    color: #99a9bf;
+  }
+  .demo-table-expand .el-form-item {
+    margin-right: 0;
+    margin-bottom: 0;
+    width: 50%;
+  }
+</style>
+

+ 5 - 4
src/pages/team/index.vue

@@ -108,9 +108,9 @@
           </el-select>
         </el-form-item>
         -->
-        <el-form-item label="部门排序" prop="sort" :label-width="formLabelWidth" >
+        <!-- <el-form-item label="部门排序" prop="sort" :label-width="formLabelWidth" >
           <el-input v-model.number="form.sort" autocomplete="off"></el-input>
-        </el-form-item>             
+        </el-form-item>              -->
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="resetForm('form')">取 消</el-button>
@@ -141,8 +141,9 @@ export default {
     }
   },
   created () {
-    getTeamList().then(res => {
+    getTeamList('COMPANY').then(res => {
       console.log(res.data)
+      console.log(res.data.children[0].children)
       this.teamData.push(res.data)
     });
   },
@@ -169,7 +170,7 @@ export default {
     // },
     //选择节点
     currentKey(val) {
-      getTeamChildList(val.id).then( res => {
+      getTeamChildList(val.id,'COMPANY').then( res => {
         console.log(res.data)
         this.teamChildData = res.data
       })

+ 18 - 0
src/router/index.js

@@ -36,6 +36,24 @@ export const pageRoter = [{
     }]
   },
   {
+    path: '/customer',
+    component: Layout,
+    children: [{
+      path: 'index',
+      name: 'Customer',
+      component: () => import('@/pages/customer/index'),
+    }]
+  },
+  {
+    path: '/provider',
+    component: Layout,
+    children: [{
+      path: 'index',
+      name: 'Provider',
+      component: () => import('@/pages/provider/index'),
+    }]
+  },
+  {
     path: '/user',
     component: Layout,
     children: [{

+ 17 - 4
src/utils/http.js

@@ -1,17 +1,21 @@
 import axios from 'axios';
 // import Cookies from "js-cookie";
 import {
-    Message
+    Message,
+    Loading
 } from 'element-ui';
 // http://whiteboardtest.ai160.com/
+// 'http://manage.ai160.com/'
 axios.defaults.timeout = 5000;
-axios.defaults.baseURL = 'http://manage.ai160.com/';
+axios.defaults.baseURL = 'http://whiteboardtest.ai160.com/';
 
 /*** 
  * 
  * 复制于 https://www.cnblogs.com/ldlx-mars/p/7908950.html
  * 
-*/
+ */
+// 注册http请求时loading
+let loadingInstance = null;
 
 //http request 拦截器
 axios.interceptors.request.use(
@@ -23,6 +27,9 @@ axios.interceptors.request.use(
             'Content-Type': 'application/json',
             'uid': uid,
         }
+        loadingInstance = Loading.service({
+            fullscreen: true
+        });
         // if(token){
         //   config.params = {'X-Token':token}
         // }
@@ -46,9 +53,10 @@ axios.interceptors.response.use(
             Message.warning({
                 message: '请登录',
                 type: 'warning'
-              });
+            });
             window.location.href = '/manageWeb/'
         }
+        loadingInstance.close();
         return response;
     },
     error => {
@@ -65,13 +73,18 @@ axios.interceptors.response.use(
 
 export function fetch(url, params = {}) {
     return new Promise((resolve, reject) => {
+        // let loadingInstance = Loading.service({
+        //     fullscreen: true
+        // });
         axios.get(url, {
                 params: params
             })
             .then(response => {
+                // loadingInstance.close();
                 resolve(response.data);
             })
             .catch(err => {
+                // loadingInstance.close();
                 reject(err)
             })
     })