Browse Source

Merge branches 'dev' and 'master' of www.gitinn.com:proginn/boss

 Conflicts:
	dist/200.html
	dist/_nuxt/abd8d735e7d11c2df6be.js
	dist/_nuxt/e979de41beee4612b442.js
	dist/index.html
	dist/login/index.html
	dist/main/404/index.html
	dist/main/artificial_order/index.html
	dist/main/artificial_orders/index.html
	dist/main/balance_change/index.html
	dist/main/cats copy/index.html
	dist/main/cats/index.html
	dist/main/cert_check/index.html
	dist/main/cert_edit/index.html
	dist/main/cert_pro/index.html
	dist/main/cloud_balance/index.html
	dist/main/cloud_developer/index.html
	dist/main/cloud_job/index.html
	dist/main/cloud_order copy/index.html
	dist/main/dev_check/index.html
	dist/main/dev_check_detail/index.html
	dist/main/dev_show/index.html
	dist/main/gongmall/index.html
	dist/main/group_list/index.html
	dist/main/index.html
	dist/main/orders/index.html
	dist/main/orders_detail/index.html
	dist/main/orders_frozen/index.html
	dist/main/outsource_bill/index.html
	dist/main/user_bills/index.html
	dist/main/vip_manager/index.html
	dist/main/vip_order/index.html
	dist/main/vip_setting/index.html
	dist/main/wage_details/index.html
	dist/main/wage_settlement/index.html
	dist/main/withdraw/index.html
	dist/main/work_bill/index.html
xiaozhen 6 years ago
parent
commit
3d040366c7
89 changed files with 1109 additions and 323 deletions
  1. 11 3
      components/menu/data.js
  2. 2 2
      dist/200.html
  3. 1 1
      dist/_nuxt/d5db82448fd0e618b005.js
  4. 1 0
      dist/_nuxt/1b01d678e3674f983a96.js
  5. 1 1
      dist/_nuxt/676eba227ede9d7ee5e1.js
  6. 1 0
      dist/_nuxt/24e149b5e66cda555f83.js
  7. 1 0
      dist/_nuxt/266d4a71ccd185c6acb4.js
  8. 1 1
      dist/_nuxt/3f37ff88cc7c1758aa70.js
  9. 1 1
      dist/_nuxt/6cf2545838bd08907efc.js
  10. 1 1
      dist/_nuxt/d5883e178523a26c2271.js
  11. 0 1
      dist/_nuxt/332db7ec311491405f2d.js
  12. 1 1
      dist/_nuxt/8fe889c3eb008cbf3de0.js
  13. 1 1
      dist/_nuxt/7db7e12e9586106cb91a.js
  14. 1 1
      dist/_nuxt/8257fd26220914bfd72c.js
  15. 0 1
      dist/_nuxt/6315eaaaf535b5e25726.js
  16. 1 1
      dist/_nuxt/470c68028fe155bdd598.js
  17. 1 1
      dist/_nuxt/85380a010f99a97b3ed9.js
  18. 1 1
      dist/_nuxt/f036d0aab18876a934d8.js
  19. 1 1
      dist/_nuxt/c7d48e2a99bc34c6fedc.js
  20. 1 0
      dist/_nuxt/7941a1e8be97df004832.js
  21. 1 0
      dist/_nuxt/7b727617988ab4cfc119.js
  22. 1 1
      dist/_nuxt/929b81c39e5c4a177cb5.js
  23. 1 1
      dist/_nuxt/bcfc4b66412a38786484.js
  24. 0 1
      dist/_nuxt/a3d081c5833da655c19f.js
  25. 1 1
      dist/_nuxt/849cb7a7b59ec3b562b1.js
  26. 1 1
      dist/_nuxt/227243e556e88a05c387.js
  27. 1 1
      dist/_nuxt/7c0636bd0c3a1a1bdaf2.js
  28. 1 1
      dist/_nuxt/573ef76514b12380e6d1.js
  29. 1 0
      dist/_nuxt/abd8d735e7d11c2df6be.js
  30. 1 1
      dist/_nuxt/57b0c1da3c527c283d7c.js
  31. 0 1
      dist/_nuxt/aec6883af3e511eb7b7f.js
  32. 1 1
      dist/_nuxt/9c5415143a7ffdd30acc.js
  33. 1 1
      dist/_nuxt/70fdaac44e1ab61a79cf.js
  34. 1 1
      dist/_nuxt/5878e90e7b9a8520c4e7.js
  35. 1 1
      dist/_nuxt/2e19056dc375ad8515a7.js
  36. 1 1
      dist/_nuxt/4ba673e45e35b8346f47.js
  37. 1 1
      dist/_nuxt/3964a6f38555d75181ae.js
  38. 1 0
      dist/_nuxt/d10fba1737a3a2d003c2.js
  39. 1 1
      dist/_nuxt/af5b8d50d2595fb232d7.js
  40. 1 1
      dist/_nuxt/6ca06461299fca4716b9.js
  41. 1 1
      dist/_nuxt/3158a14ed92cc4d73dd1.js
  42. 1 1
      dist/_nuxt/a32feaa0d823b74f5020.js
  43. 1 1
      dist/_nuxt/09eee95aabc2217e487f.js
  44. 1 0
      dist/_nuxt/e8954985964789294956.js
  45. 0 1
      dist/_nuxt/e979de41beee4612b442.js
  46. 1 1
      dist/_nuxt/d64db91af6f4aefb1eea.js
  47. 1 1
      dist/_nuxt/bb1cd517ee651b5db08b.js
  48. 2 2
      dist/index.html
  49. 2 2
      dist/login/index.html
  50. 2 2
      dist/main/404/index.html
  51. 2 2
      dist/main/artificial_order/index.html
  52. 2 2
      dist/main/artificial_orders/index.html
  53. 2 2
      dist/main/balance_change/index.html
  54. 2 2
      dist/main/cats copy/index.html
  55. 2 2
      dist/main/cats/index.html
  56. 2 2
      dist/main/cert_check/index.html
  57. 2 2
      dist/main/cert_edit/index.html
  58. 2 2
      dist/main/cert_pro/index.html
  59. 2 2
      dist/main/cloud_balance/index.html
  60. 2 2
      dist/main/cloud_developer/index.html
  61. 2 2
      dist/main/cloud_job/index.html
  62. 2 2
      dist/main/cloud_order copy/index.html
  63. 2 2
      dist/main/dev_check/index.html
  64. 2 2
      dist/main/dev_check_detail/index.html
  65. 2 2
      dist/main/dev_show/index.html
  66. 2 2
      dist/main/gongmall/index.html
  67. 2 2
      dist/main/group_list/index.html
  68. 2 2
      dist/main/index.html
  69. 2 2
      dist/main/orders/index.html
  70. 2 2
      dist/main/orders_detail/index.html
  71. 2 2
      dist/main/orders_frozen/index.html
  72. 2 2
      dist/main/outsource_bill/index.html
  73. 9 0
      dist/main/publish_present/index.html
  74. 2 2
      dist/main/user_bills/index.html
  75. 2 2
      dist/main/vip_manager/index.html
  76. 2 2
      dist/main/vip_order/index.html
  77. 2 2
      dist/main/vip_setting/index.html
  78. 2 2
      dist/main/wage_details/index.html
  79. 2 2
      dist/main/wage_settlement/index.html
  80. 9 0
      dist/main/wait_expend/index.html
  81. 2 2
      dist/main/withdraw/index.html
  82. 2 2
      dist/main/work_bill/index.html
  83. 48 2
      pages/main/index/balance_change.vue
  84. 6 1
      pages/main/index/cloud_job.vue
  85. 61 0
      pages/main/index/orders.vue
  86. 366 0
      pages/main/index/publish_present.vue
  87. 103 103
      pages/main/index/vip_manager.vue
  88. 109 109
      pages/main/index/vip_order.vue
  89. 279 0
      pages/main/index/wait_expend.vue

+ 11 - 3
components/menu/data.js

@@ -46,14 +46,17 @@ export default [
 				path: baseUrl + 'wage_settlement',
 				hidden: true
 			},
-
 			{
 				title: '冻结订单',
-
 				path: baseUrl + 'orders_frozen',
 				hidden: false
 			},
 			{
+				title: '待支出订单',
+				path: baseUrl + 'wait_expend',
+				hidden: false
+			},
+			{
 				title: '账单详情',
 				path: baseUrl + 'bills',
 				hidden: true
@@ -107,7 +110,12 @@ export default [
 			{
 				title: '工猫结算订单',
 				path: baseUrl + 'gongmall'
-			}
+			},
+      {
+        title: '驻场招聘信息',
+        path: baseUrl + 'publish_present',
+        hidden: true
+      }
 		]
 	},
 	{

File diff suppressed because it is too large
+ 2 - 2
dist/200.html


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/d5db82448fd0e618b005.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/1b01d678e3674f983a96.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/676eba227ede9d7ee5e1.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/24e149b5e66cda555f83.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/266d4a71ccd185c6acb4.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/3f37ff88cc7c1758aa70.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/6cf2545838bd08907efc.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/d5883e178523a26c2271.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/332db7ec311491405f2d.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/8fe889c3eb008cbf3de0.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/7db7e12e9586106cb91a.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/8257fd26220914bfd72c.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/6315eaaaf535b5e25726.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/470c68028fe155bdd598.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/85380a010f99a97b3ed9.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/f036d0aab18876a934d8.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/c7d48e2a99bc34c6fedc.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7941a1e8be97df004832.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7b727617988ab4cfc119.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/929b81c39e5c4a177cb5.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/bcfc4b66412a38786484.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/a3d081c5833da655c19f.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/849cb7a7b59ec3b562b1.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/227243e556e88a05c387.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/7c0636bd0c3a1a1bdaf2.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/573ef76514b12380e6d1.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/abd8d735e7d11c2df6be.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/57b0c1da3c527c283d7c.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/aec6883af3e511eb7b7f.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/9c5415143a7ffdd30acc.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/70fdaac44e1ab61a79cf.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/5878e90e7b9a8520c4e7.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/2e19056dc375ad8515a7.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/4ba673e45e35b8346f47.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/3964a6f38555d75181ae.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/d10fba1737a3a2d003c2.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/af5b8d50d2595fb232d7.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/6ca06461299fca4716b9.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/3158a14ed92cc4d73dd1.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/a32feaa0d823b74f5020.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/09eee95aabc2217e487f.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/e8954985964789294956.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/e979de41beee4612b442.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/d64db91af6f4aefb1eea.js


File diff suppressed because it is too large
+ 1 - 1
dist/_nuxt/bb1cd517ee651b5db08b.js


File diff suppressed because it is too large
+ 2 - 2
dist/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/login/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/404/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/artificial_order/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/artificial_orders/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/balance_change/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cats copy/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cats/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cert_check/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cert_edit/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cert_pro/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cloud_balance/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cloud_developer/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cloud_job/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/cloud_order copy/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/dev_check/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/dev_check_detail/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/dev_show/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/gongmall/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/group_list/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/orders/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/orders_detail/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/orders_frozen/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/outsource_bill/index.html


File diff suppressed because it is too large
+ 9 - 0
dist/main/publish_present/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/user_bills/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/vip_manager/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/vip_order/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/vip_setting/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/wage_details/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/wage_settlement/index.html


File diff suppressed because it is too large
+ 9 - 0
dist/main/wait_expend/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/withdraw/index.html


File diff suppressed because it is too large
+ 2 - 2
dist/main/work_bill/index.html


+ 48 - 2
pages/main/index/balance_change.vue

@@ -1,5 +1,18 @@
 <template >
   <div id="mainBody" v-if="coins">
+    <el-row>
+      <el-col :span="24">
+        <h3>用户余额订单</h3>
+        <div  class="type-boxs top">
+          <span class="vsub">订单类型:</span>
+          <div class="inlineb">
+            <el-checkbox-group v-model="orderType" @change="orderStatus" size="mini">
+              <el-checkbox-button  v-for="allorder in orders" :label="allorder" :key="allorder">{{allorder}}</el-checkbox-button>
+            </el-checkbox-group>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
     <el-form ref="form" label-width="40px" :model="form">
       <el-row :gutter="20">
         <el-col :span="3">
@@ -55,7 +68,7 @@
       </el-table-column>
       <el-table-column
         prop="address"
-        label="变动后总金额">
+        :label="changedCoins">
         <template slot-scope="scope">
           {{scope.row.total}}
         </template>
@@ -126,6 +139,7 @@
 </template>
 
 <script>
+    const allorderOptions = ['全部', '可用余额'];
 export default {
   data(){
     return {
@@ -136,9 +150,13 @@ export default {
       user:'',
       order_no:'',
       timeRange:[],
+        orderType: [(this.$route.query && this.$route.query.orderType ? this.$route.query.orderType : '全部')],
+        orders: allorderOptions,
+        changedCoins: '变动后总金额'
     }
   },
   mounted() {
+    console.log(this.$route.query)
     this.getFinanceList();
   },
   methods: {
@@ -147,11 +165,12 @@ export default {
     },
 
     async getFinanceList() {
-      this.user=this.$route.query.user;
+          this.user = this.$route.query.user;
       let body = {
         page: this.currentPage,
         size: this.currentPageSize,
         user:this.user,
+          orderType: this.orderType
       };
       if (this.order_no){
         body.order_no=this.order_no;
@@ -174,6 +193,30 @@ export default {
       var url = window.location.host + "/api/admin/order/export?" + "artificial_mark=1";
       window.location.href = "http://" + url;
     },
+      async orderStatus(val){
+
+          // this.orderType = ['全部'];
+          if (this.orderType[0]=='全部'){
+              this.orderType = ['可用余额'];
+              this.changedCoins = '当前余额';
+          }else if (this.orderType[0]=='可用余额'){
+              this.orderType = ['全部'];
+              this.changedCoins = '变动后总金额';
+          }else {
+              this.orderType = ['全部'];
+              this.changedCoins = '变动后总金额';
+          }
+          let body = {
+              page: this.currentPage,
+              size: this.currentPageSize,
+          };
+          if (this.orderType){
+              body.orderType=this.orderType;
+          }
+          const res = await this.$post("/api/admin/order/get_coins", body);
+          this.coins = res.data.list;
+          this.count=Number(res.data.count);
+      },
   }
 }
 </script>
@@ -190,4 +233,7 @@ export default {
     overflow-x: scroll;
     height: calc(100% - 40px);
   }
+  .top{
+    padding: 10px;
+  }
 </style>

+ 6 - 1
pages/main/index/cloud_job.vue

@@ -57,7 +57,8 @@
         <el-input placeholder="企业方ID" v-model="comID"></el-input>
         <el-input placeholder="开发者ID" v-model="devID"></el-input>
         <el-input placeholder="客户经理" v-model="checkID"></el-input>
-        <el-checkbox v-model="unDeposit" @change="changeDeposit"></el-checkbox>本期未托管
+        <el-checkbox v-model="presentHire" >驻场招聘</el-checkbox>
+        <el-checkbox v-model="unDeposit" @change="changeDeposit">本期未托管</el-checkbox>
         <el-button @click="getCloudJob">筛选</el-button>
       </div>
       <div class="right">
@@ -118,6 +119,7 @@ const tableHeaders = [
   "企业方",
   "开发者",
   "状态",
+    "驻场",
   "基本薪资",
   "每周工时",
   "用户来源",
@@ -145,6 +147,7 @@ const tableProps = [
   "nickname",
   "devNickname",
   "status",
+    "publish_present_hire",
   "salary",
   "workHours",
   "remark_user_from",
@@ -184,6 +187,7 @@ export default {
       // 审核人员id
       checkID: '',
       unDeposit: false,
+        presentHire:false,
       totalFee: 11,
       // 工作状态
       statuses: [],
@@ -284,6 +288,7 @@ export default {
         direction_id: this.selectedDirection,
         status: this.selectedStatus,
         not_deposit: this.unDeposit ? '1' : '0',
+        present_hire:this.presentHire? '1' : '0',
         page: this.currentPage,
       })
       if (res) {

+ 61 - 0
pages/main/index/orders.vue

@@ -237,6 +237,8 @@ export default {
       tradeType: [0],
       payType: [0],
       timeType: 2,
+        payListPop:[],
+        productTypePop:[],
       timeOptions: [
         {
           value: 1,
@@ -521,6 +523,29 @@ export default {
         }
       }
 
+        if(this.productType.indexOf('扩展') > -1){
+            this.productType.pop();
+            this.TypeList.pop()
+            for (var i=9;i>=0;i--){
+                this.TypeList.push(this.productTypePop.pop());
+            }
+            this.TypeList.push({
+                id: '缩进',
+                name: "<<",
+            });
+        }
+        if(this.productType.indexOf('缩进') > -1){
+            this.productType.pop();
+            this.TypeList.pop();
+            for (var i=0;i<10;i++){
+                this.productTypePop[i]=this.TypeList.pop();
+            }
+            this.TypeList.push({
+                id: '扩展',
+                name: ">>",
+            });
+        }
+
       // 选择其他的时候,去掉全部,全部在第一位
       if (
         this.productType[0] == 0 &&
@@ -555,6 +580,28 @@ export default {
           haveAll = true;
         }
       }
+        if(this.payType.indexOf('扩展') > -1){
+            this.payType.pop();
+            this.payList.pop();
+            this.payList.push(this.payListPop[0]);
+            this.payList.push(this.payListPop[1]);
+            this.payList.push(this.payListPop[2]);
+            this.payList.push({
+                id: '缩进',
+                name: "<<",
+            });
+        }
+        if(this.payType.indexOf('缩进') > -1){
+            this.payType.pop();
+            this.payList.pop();
+            this.payList.pop();
+            this.payList.pop();
+            this.payList.pop();
+            this.payList.push({
+                id: '扩展',
+                name: ">>",
+            });
+        }
 
       // 选择其他的时候,去掉全部,全部在第一位
       if (
@@ -850,11 +897,25 @@ export default {
         id: 0,
         name: "全部"
       });
+      this.payListPop[0] = this.payList.pop();
+        this.payListPop[1] = this.payList.pop();
+        this.payListPop[2] = this.payList.pop();
+        this.payList.push({
+            id: '扩展',
+            name: ">>",
+        });
       this.TypeList = data.product_types;
       this.TypeList.unshift({
         id: 0,
         name: "全部"
       });
+      for (var i=0;i<10;i++){
+          this.productTypePop[i]=this.TypeList.pop();
+      }
+        this.TypeList.push({
+            id: '扩展',
+            name: ">>",
+        });
     }
   },
   created() {

+ 366 - 0
pages/main/index/publish_present.vue

@@ -0,0 +1,366 @@
+<template>
+  <div id="publish-present">
+    <el-row>
+      <el-col :span="24" align="center"><h2>驻场招聘信息表</h2></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="19"><h3>基本信息</h3></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="12">项目ID:<span>{{related_id}}</span></el-col>
+      <el-col :span="12" >需求方:<span>{{uid}}</span></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24" >项目名称:<span>{{title}}</span></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">项目类型:<span>{{related_type}}</span><span style="display: none">{{job_type}}</span></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="12">客户经理:<span>{{manager}}</span></el-col>
+      <el-col :span="12" >
+        <div class="inlineb">
+          <span class>开放状态:</span>
+          <div class="inlineb">
+            <el-select v-model="statusValue" >
+              <el-option
+                v-for="item of openStatus"
+                :key="item.id"
+                :label="item.label"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </div>
+        </div>
+    </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24"><h3>驻场信息</h3></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24" >
+        <div class="inlineb">
+          <span class>薪酬范围:</span>
+          <div class="inlineb">
+            ¥<el-input style="width: 230px;"  v-model="salary_from" ></el-input>至
+          </div>
+          <div class="inlineb">
+            ¥<el-input style="width: 230px;" v-model="salary_to" ></el-input>
+          </div>
+          <el-alert
+            title=""
+            class="top"
+            id="salaryAlert"
+            type="error"
+            style="display: none"
+            show-icon>
+          </el-alert>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">
+        <div class="inlineb">
+          <span class>驻场地点:</span>
+          <div class="inlineb">
+            <el-select v-model="city" >
+              <el-option
+                v-for="item of citys"
+                :key="item.city"
+                :label="item.label"
+                :value="item.city"
+              ></el-option>
+            </el-select>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24" >
+        <div class="inlineb">
+          <span class>驻场周期:</span>
+          <div class="inlineb">
+            <el-input style="width: 230px;" v-model="month" ></el-input>个月
+          </div>
+          <el-alert
+            title=""
+            class="top"
+            id="monthAlert"
+            type="error"
+            style="display: none"
+            show-icon>
+          </el-alert>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">
+        <div class="inlineb">
+          <span class>工作年限:</span>
+          <div class="inlineb">
+            <el-input style="width: 230px;" v-model="work_year" ></el-input>年
+          </div>
+          <el-alert
+            title=""
+            class="top"
+            id="workYear"
+            type="error"
+            style="display: none"
+            show-icon>
+          </el-alert>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">
+        <div class="inlineb">
+          <span class>是否有文件:</span>
+          <div class="inlineb">
+            <el-select v-model="file" >
+              <el-option
+                v-for="item of files"
+                :key="item.id"
+                :label="item.label"
+                :value="item.id"
+              ></el-option>
+            </el-select>
+          </div>
+        </div>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">职位方向:<span>{{directions}}</span><span style="display: none">{{match_directions}}</span></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">技能要求:<span>{{skill}}</span><span style="display: none">{{match_skills}}</span></el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="20">工作内容:
+        <el-alert
+          title=""
+          class="top"
+          id="jobInfoAlert"
+          type="error"
+          style="display: none"
+          show-icon>
+        </el-alert>
+        <el-input
+          type="textarea"
+          :autosize="{ minRows: 5, maxRows: 4}"
+          placeholder="请输入内容"
+          v-model="job_description">
+        </el-input>
+      </el-col>
+    </el-row>
+    <el-row>
+      <el-col :span="24">
+        <el-button type="primary" @click="savePresent">保存</el-button>
+        <el-button type="info" @click="cancelPresent">取消</el-button>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+    export default {
+        data () {
+            return {
+                related_id:'',
+                uid:'',
+                title:'',
+                related_type:'',
+                job_type:'',
+                manager:'',
+                salary_from:'',
+                salary_to:'',
+                month:'',
+                work_year:'',
+                directions:'',
+                match_skills:'',
+                skill:'',
+                job_description:'',
+                match_directions:'',
+                jump_url:'',
+                citys: [{
+                    city: '0',
+                    label: '不限'
+                }, {
+                    city: '1',
+                    label: '北京'
+                }, {
+                    city: '2',
+                    label: '上海'
+                }, {
+                    city: '3',
+                    label: '广州'
+                }, {
+                    city: '4',
+                    label: '深圳'
+                }, {
+                    city: '5',
+                    label: '成都'
+                }, {
+                    city: '6',
+                    label: '杭州'
+                }],
+                city: '0',
+
+                openStatus: [{
+                    id: 0,
+                    label: '下架隐藏'
+                }, {
+                    id: 1,
+                    label: '开放中'
+                }, {
+                    id: 2,
+                    label: '停止申请'
+                }, {
+                    id: 3,
+                    label: '开发中'
+                }, {
+                    id: 4,
+                    label: '已结束'
+                }],
+                statusValue: 0,
+
+                files: [{
+                    id: '1',
+                    label: '是'
+                }, {
+                    id: '0',
+                    label: '否'
+                }],
+                file: '0',
+            }
+        },
+        mounted() {
+            this.getPresentInfo();
+        },
+        methods: {
+            async getPresentInfo() {
+
+                let query = window.location.search.substring(1);
+                let vars = query.split("&");
+                let body = {
+                    'job_id' : vars[0].split("=")[1],
+                    'job_type' : vars[1].split("=")[1],
+                };
+                let url = window.location.href;
+                if(url.indexOf('dev')!=-1){
+                    this.jump_url = 'https://dev.test.proginn.com/rooter/cloudjobitem/';
+                } else if(url.indexOf('local')!=-1){
+                    this.jump_url = 'http://local.proginn.com/rooter/cloudjobitem/';
+                } else {
+                    this.jump_url = 'https://proginn.com/rooter/cloudjobitem/';
+                }
+
+
+
+                const res = await this.$post("/api/admin/present_job/present_info",body);
+                this.related_id = res.data.job.id;
+                this.uid = res.data.job.uid;
+                this.title = res.data.job.title2;
+                this.related_type = res.data.job_type;
+                this.manager = res.data.manager;
+                this.salary_from = res.data.job.match_salary_min;
+                this.salary_to = res.data.job.match_salary_max;
+                this.month = res.data.job.month?res.data.job.month:'';
+                this.work_year = res.data.job.work_year?res.data.job.work_year:'';
+                this.directions = res.data.job.directions;
+                this.match_skills = res.data.job.match_skills;
+                this.skill = res.data.job.skill;
+                this.statusValue = res.data.job.status?res.data.job.status:0;
+                this.city = res.data.job.city?res.data.job.city:'0';
+                this.file = res.data.job.show_file?res.data.job.show_file:'0';
+                this.job_type = vars[1].split("=")[1];
+                this.job_description = res.data.job.description;
+                this.match_directions = res.data.job.match_directions;
+
+            },
+            async cancelPresent() {
+                window.history.back();
+            },
+            async savePresent() {
+                let flag = false;
+                let salaryAlert = document.getElementById('salaryAlert');
+                let monthAlert = document.getElementById('monthAlert');
+                let jobInfoAlert = document.getElementById('jobInfoAlert');
+                let workYearAlert = document.getElementById('workYear');
+                if (this.work_year.length==0){
+                    workYearAlert.innerText = '请输入工作年限';
+                    workYearAlert.style.display = 'block';
+                    flag = true;
+                }
+                if (this.salary_from.length==0||this.salary_to.length==0){
+                    salaryAlert.innerText = '请正确输入薪酬范围';
+                    salaryAlert.style.display = 'block';
+                    flag = true;
+                }
+                if (this.month.length==0){
+                    monthAlert.innerText = '请输入驻场周期';
+                    monthAlert.style.display = 'block';
+                    flag = true;
+                }
+                if (this.job_description.length==0){
+                    jobInfoAlert.innerText = '请输入工作内容';
+                    jobInfoAlert.style.display = 'block';
+                    flag = true;
+                }
+                if ((this.work_year<0||this.work_year>99)&&this.work_year.length!=0){
+                    workYearAlert.innerText = '工作年限正确填写范围0-99';
+                    workYearAlert.style.display = 'block';
+                    flag = true;
+                }
+                if (this.salary_from<1||this.salary_from>1000000||this.salary_to<1||this.salary_to>1000000||this.salary_from>=this.salary_to){
+                    salaryAlert.innerText = '薪酬填写范围1-1000000且前一个值要小于后一个值';
+                    salaryAlert.style.display = 'block';
+                    flag = true;
+                }
+                if ((this.month<1||this.month>99)&&this.month.length!=0){
+                    monthAlert.innerText = '驻场周期正确填写范围1-99';
+                    monthAlert.style.display = 'block';
+                    flag = true;
+                }
+                if (this.job_description.length>10000){
+                    jobInfoAlert.innerText = '工作内容填写最多10000个字符且不能为空';
+                    jobInfoAlert.style.display = 'block';
+                    flag = true;
+                }
+                if (flag){
+                    return false;
+                }
+                let body = {
+                    'related_id' : this.related_id,
+                    'title' : this.title,
+                    'related_type' : this.job_type,
+                    'status' : this.statusValue,
+                    'salary_from' : this.salary_from,
+                    'salary_to' : this.salary_to,
+                    'city' : this.city,
+                    'show_file' : this.file,
+                    'month' : this.month,
+                    'work_year' : this.work_year,
+                    'job_direction' : this.match_directions,
+                    'job_skills' : this.match_skills,
+                    'job_description' :this.job_description
+                }
+                const res = await this.$post("/api/admin/present_job/present_edit",body);
+                if (res.status==1) {
+                    alert(res.info);
+                    location.href=this.jump_url+this.related_id;
+
+                }
+            }
+        }
+    }
+</script>
+
+<style lang="scss" scoped>
+  .el-row {
+    margin-bottom: 20px;
+  }
+  .top{
+    margin-top: 10px;
+  }
+
+</style>

+ 103 - 103
pages/main/index/vip_manager.vue

@@ -2,7 +2,7 @@
   <div id="vip-manager">
     <div
       class="title"
-    >会员数:正常{{whole.total_normal}}, 过期{{whole.total_overdue}}; 企业会员: 正常{{whole.company_normal}}, 过期{{whole.company_overdue}};开发者会员: 正常{{whole.person_normal}}, 过期{{whole.person_overdue}}</div>
+    >会员数:正常{{whole.total_normal}}, 过期{{whole.total_overdue}}; 初创版会员: 正常{{whole.company_normal}}, 过期{{whole.company_overdue}};企业版会员: 正常{{whole.premius_overdue}}, 过期{{whole.premius_overdue}};开发者会员: 正常{{whole.person_normal}}, 过期{{whole.person_overdue}}</div>
     <div class="table">
       <el-table v-if="tableData.length" height="100%" border style="width: 100%" :data="tableData">
         <el-table-column
@@ -34,112 +34,112 @@
 </template>
 
 <script>
-const tableHeaders = [
-  "用户ID",
-  "昵称",
-  "会员类型",
-  "开始时间",
-  "到期时间",
-  "最新购买",
-  "累计月数",
-  "累计金额",
-  "当前状态",
-]
-const tableProps = [
-  "uid",
-  "nickname",
-  "type_name",
-  "start_date",
-  "end_date",
-  "pay_date",
-  "total_month",
-  "total_price",
-  "status_name",
-]
+    const tableHeaders = [
+        "用户ID",
+        "昵称",
+        "会员类型",
+        "开始时间",
+        "到期时间",
+        "最新购买",
+        "累计月数",
+        "累计金额",
+        "当前状态",
+    ]
+    const tableProps = [
+        "uid",
+        "nickname",
+        "type_name",
+        "start_date",
+        "end_date",
+        "pay_date",
+        "total_month",
+        "total_price",
+        "status_name",
+    ]
 
-// 现在环境是线上还是测试, 默认线上
-let env = ''
+    // 现在环境是线上还是测试, 默认线上
+    let env = ''
 
-export default {
-  data() {
-    return {
-      // 原始数据
-      listData: {},
-      // 头部信息
-      titleInfo: {},
-      // 数据总条目
-      totalCount: 0,
-      // 当前页面
-      currentPage: 1,
-      // 列表头显示内容
-      tableHeaders,
-      // 列表头字段
-      tableProps,
-      // 列表数据
-      tableData: [],
-    }
-  },
-  computed: {
-    whole() {
-      return this.listData.whole || {}
-    }
-  },
-  mounted() {
-    this.getTableData()
-  },
-  filters: {
-    toDate(val) {
-      return new Date(val * 1000).toLocaleDateString()
-    },
-    projectLink(i) {
-      const type = i.entity_type
-      let link = 'javascript:void(0)'
-      if(type === '1') link = `/rooter/outsourceitem/${i.entity_id}>`
-      else if(type === '3') link = `/rooter/wagedetails?job_id=${i.entity_id}`
-      return link
-    }
-  },
-  methods: {
-    /**
-     * 点击 uid
-     */
-    clickUID({uid}) {
-      if(env === 'test') window.open(`https://dev.test.proginn.com/rooter/user/${uid}`)
-      else window.open(`https://www.proginn.com/rooter/user/${uid}`)
-    },
-    // 页码变动
-    changePagination() {
-      this.getTableData()
-    },
-    // 格式化列表数据
-    formatTableData(data) {
-      return data.map(i => {
-        let projectName = '--'
-        let prePay = ''
-        let servicePay = ''
-        let getPay = ''
-        let realGet = ''
-        return {
-          ...i,
+    export default {
+        data() {
+            return {
+                // 原始数据
+                listData: {},
+                // 头部信息
+                titleInfo: {},
+                // 数据总条目
+                totalCount: 0,
+                // 当前页面
+                currentPage: 1,
+                // 列表头显示内容
+                tableHeaders,
+                // 列表头字段
+                tableProps,
+                // 列表数据
+                tableData: [],
+            }
+        },
+        computed: {
+            whole() {
+                return this.listData.whole || {}
+            }
+        },
+        mounted() {
+            this.getTableData()
+        },
+        filters: {
+            toDate(val) {
+                return new Date(val * 1000).toLocaleDateString()
+            },
+            projectLink(i) {
+                const type = i.entity_type
+                let link = 'javascript:void(0)'
+                if(type === '1') link = `/rooter/outsourceitem/${i.entity_id}>`
+                else if(type === '3') link = `/rooter/wagedetails?job_id=${i.entity_id}`
+                return link
+            }
+        },
+        methods: {
+            /**
+             * 点击 uid
+             */
+            clickUID({uid}) {
+                if(env === 'test') window.open(`https://dev.test.proginn.com/rooter/user/${uid}`)
+                else window.open(`https://www.proginn.com/rooter/user/${uid}`)
+            },
+            // 页码变动
+            changePagination() {
+                this.getTableData()
+            },
+            // 格式化列表数据
+            formatTableData(data) {
+                return data.map(i => {
+                    let projectName = '--'
+                    let prePay = ''
+                    let servicePay = ''
+                    let getPay = ''
+                    let realGet = ''
+                    return {
+                        ...i,
+                    }
+                })
+            },
+            // 获取列表数据
+            async getTableData() {
+                this.tableData = []
+                const p = this.currentPage
+                const res = await this.$post("/api/admin/vip/getVips", { page: this.currentPage, page_size: 10 })
+                // console.log(res)
+                const data = res.data
+                env = data.current_env
+                const list = data.list
+                this.listData = data
+                this.tableData = list // this.formatTableData(list, data)
+                this.totalCount = Number(data.total)
+                this.totalPage = data.pages
+            }
         }
-      })
-    },
-    // 获取列表数据
-    async getTableData() {
-      this.tableData = []
-      const p = this.currentPage
-      const res = await this.$post("/api/admin/vip/getVips", { page: this.currentPage, page_size: 10 })
-      // console.log(res)
-      const data = res.data
-      env = data.current_env
-      const list = data.list
-      this.listData = data
-      this.tableData = list // this.formatTableData(list, data)
-      this.totalCount = Number(data.total)
-      this.totalPage = data.pages
     }
-  }
-}
 </script>
 
 <style scoped>

+ 109 - 109
pages/main/index/vip_order.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="vip-order">
-    <div class="title">订单总量:企业{{whole.company_order_num}}, 开发者{{whole.person_order_num}} 累计收入: 企业 ¥{{whole.company_paid_money}}, 开发者 ¥{{whole.person_paid_money}}</div>
+    <div class="title">订单总量:初创版{{whole.company_order_num}},企业版{{whole.premius_order_num}}, 开发者{{whole.person_order_num}} 累计收入: 初创版 ¥{{whole.company_paid_money}},企业版¥{{whole.premius_paid_money}}, 开发者 ¥{{whole.person_paid_money}}</div>
     <div class="table">
       <el-table
         v-if="tableData.length"
@@ -33,117 +33,117 @@
 </template>
 
 <script>
-const tableHeaders = [
-  "用户ID",
-  "昵称",
-  "会员类型",
-  "购买类型",
-  "购买月数",
-  "应付金额",
-  "实付金额",
-  "订单号",
-  "开始时间",
-  "生效时间",
-  "购前到期",
-  "购后到期",
-]
-const tableProps = [
-  "uid",
-  "nickname",
-  "type_name",
-  "is_first_name",
-  "num",
-  "need_pay_money",
-  "paid_money",
-  "order_no",
-  "start_date",
-  "pay_date",
-  "origin_end_date",
-  "end_date",
-]
-// 现在环境是线上还是测试, 默认线上
-let env = ''
+    const tableHeaders = [
+        "用户ID",
+        "昵称",
+        "会员类型",
+        "购买类型",
+        "购买月数",
+        "应付金额",
+        "实付金额",
+        "订单号",
+        "开始时间",
+        "生效时间",
+        "购前到期",
+        "购后到期",
+    ]
+    const tableProps = [
+        "uid",
+        "nickname",
+        "type_name",
+        "is_first_name",
+        "num",
+        "need_pay_money",
+        "paid_money",
+        "order_no",
+        "start_date",
+        "pay_date",
+        "origin_end_date",
+        "end_date",
+    ]
+    // 现在环境是线上还是测试, 默认线上
+    let env = ''
 
-export default {
-  data() {
-    return {
-      // 原始数据
-      listData: {},
-      // 头部信息
-      titleInfo: {},
-      // 数据总条目
-      totalCount: 0,
-      // 当前页面
-      currentPage: 1,
-      // 列表头显示内容
-      tableHeaders,
-      // 列表头字段
-      tableProps,
-      // 列表数据
-      tableData: [],
-    }
-  },
-  computed: {
-    whole() {
-      return this.listData.whole || {}
-    }
-  },
-  mounted() {
-    this.getTableData()
-  },
-  filters: {
-    toDate(val) {
-      return new Date(val * 1000).toLocaleDateString()
-    },
-    projectLink(i) {
-      const type = i.entity_type
-      let link = 'javascript:void(0)'
-      if(type === '1') link = `/rooter/outsourceitem/${i.entity_id}>`
-      else if(type === '3') link = `/rooter/wagedetails?job_id=${i.entity_id}`
-      return link
-    }
-  },
-  methods: {
-    /**
-     * 点击 uid
-     */
-    clickUID({uid}) {
-      if(env === 'test') window.open(`https://dev.test.proginn.com/rooter/user/${uid}`)
-      else window.open(`https://www.proginn.com/rooter/user/${uid}`)
-    },
-    // 页码变动
-    changePagination() {
-      this.getTableData()
-    },
-    // 格式化列表数据
-    formatTableData(data) {
-      return data.map(i => {
-        let projectName = '--'
-        let prePay = ''
-        let servicePay = ''
-        let getPay = ''
-        let realGet = ''
-        return {
-          ...i,
+    export default {
+        data() {
+            return {
+                // 原始数据
+                listData: {},
+                // 头部信息
+                titleInfo: {},
+                // 数据总条目
+                totalCount: 0,
+                // 当前页面
+                currentPage: 1,
+                // 列表头显示内容
+                tableHeaders,
+                // 列表头字段
+                tableProps,
+                // 列表数据
+                tableData: [],
+            }
+        },
+        computed: {
+            whole() {
+                return this.listData.whole || {}
+            }
+        },
+        mounted() {
+            this.getTableData()
+        },
+        filters: {
+            toDate(val) {
+                return new Date(val * 1000).toLocaleDateString()
+            },
+            projectLink(i) {
+                const type = i.entity_type
+                let link = 'javascript:void(0)'
+                if(type === '1') link = `/rooter/outsourceitem/${i.entity_id}>`
+                else if(type === '3') link = `/rooter/wagedetails?job_id=${i.entity_id}`
+                return link
+            }
+        },
+        methods: {
+            /**
+             * 点击 uid
+             */
+            clickUID({uid}) {
+                if(env === 'test') window.open(`https://dev.test.proginn.com/rooter/user/${uid}`)
+                else window.open(`https://www.proginn.com/rooter/user/${uid}`)
+            },
+            // 页码变动
+            changePagination() {
+                this.getTableData()
+            },
+            // 格式化列表数据
+            formatTableData(data) {
+                return data.map(i => {
+                    let projectName = '--'
+                    let prePay = ''
+                    let servicePay = ''
+                    let getPay = ''
+                    let realGet = ''
+                    return {
+                        ...i,
+                    }
+                })
+            },
+            // 获取列表数据
+            async getTableData() {
+                this.tableData = []
+                const p = this.currentPage
+                const res = await this.$post("/api/admin/vip/getVipOrders", { page: this.currentPage, page_size: 10 })
+                // console.log(res)
+                const data = res.data
+                env = data.current_env
+                const list = data.list
+                this.listData = data
+                this.tableData = list // this.formatTableData(list, data)
+                this.totalCount = Number(data.total)
+                this.totalPage = data.pages
+            }
         }
-      })
-    },
-    // 获取列表数据
-    async getTableData() {
-      this.tableData = []
-      const p = this.currentPage
-      const res = await this.$post("/api/admin/vip/getVipOrders", { page: this.currentPage, page_size: 10 })
-      // console.log(res)
-      const data = res.data
-      env = data.current_env
-      const list = data.list
-      this.listData = data
-      this.tableData = list // this.formatTableData(list, data)
-      this.totalCount = Number(data.total)
-      this.totalPage = data.pages
     }
-  }
-}
 </script>
 
 <style scoped>

+ 279 - 0
pages/main/index/wait_expend.vue

@@ -0,0 +1,279 @@
+<template>
+  <div v-if="jobData && packageData && hireData">
+    <div class="header">云端托管:{{jobData.sumJob.totalAmount}}元,整包托管:{{packageData.sumPackage.totalAmount}}元,雇佣托管:{{hireData.sumHire.totalAmount || 0}}元</div>
+    <el-tabs v-model="activeName" type="card">
+      <el-tab-pane label="云端" name="job">
+        <div class="tab-header">云端项目待支出总额{{jobData.sumJob.totalAmount}}元,共{{jobData.sumJob.totalNum}}笔</div>
+        <div class="tab-content">
+          <el-table :data="jobData.orders" border style="width:100%;" height="100%">
+            <el-table-column prop="product_title" label="订单名称" width="300"/>
+            <el-table-column prop="user_info.nickname" label="用户" width="150"/>
+            <el-table-column prop="real_amount" label="实际金额" width="100"/>
+            <el-table-column prop="real_amount" label="收支类型" width="100">
+              <template slot-scope="scope">
+                <span>{{parseInt(scope.row.real_amount)>=0?"收入":"支出"}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="channel_name" label="支付方式" width="100"/>
+            <el-table-column prop="order_state_name" label="订单状态" width="100"/>
+            <el-table-column label="创建时间" width="100">
+              <template slot-scope="scope">
+                <span>{{formatDate(scope.row.created_at)}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="到账时间" width="100">
+              <template slot-scope="scope">
+                <span>{{formatDate(scope.row.pay_time)}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="订单编号" width="100">
+              <template slot-scope="scope">
+                <nuxt-link target="_blank" :to="{path:'/main/orders_detail?id='+scope.row.order_no}">{{scope.row.order_no}}</nuxt-link>
+              </template>
+            </el-table-column>
+            <el-table-column prop="out_order_id" label="支付编号" width="100"/>
+            <el-table-column prop="product_type_name" label="订单类型" width="100"/>
+            <el-table-column prop="order_type_name" label="交易类型" width="100"/>
+            <el-table-column label="关联项目" width="100">
+              <template slot-scope="scope">
+                <a :href="scope.row.related_project.url?scope.row.related_project.url:'#'" target="_blank">
+                  <span class="lblue" >{{scope.row.related_project.name?scope.row.related_project.name:"--"}}</span>
+                </a>
+              </template>
+            </el-table-column>
+            <el-table-column label="人工" width="100">
+              <template slot-scope="scope">
+                <span v-if="scope.row.operator_info.nickname">{{scope.row.operator_info.nickname}}</span>
+                <span>({{scope.row.operator_uid}})</span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <el-pagination class="order-footer" background layout="prev, pager, next" :page-size="10" :total="Number(jobData.sumJob.totalNum)" @current-change="handleJobCurrentChange"/>
+      </el-tab-pane>
+      <el-tab-pane label="整包" name="package">
+        <div class="tab-header">整包项目待支出总额{{packageData.sumPackage.totalAmount}}元,共{{packageData.sumPackage.totalNum}}笔</div>
+        <div class="tab-content">
+          <el-table :data="packageData.orders" border style="width:100%;" height="100%">
+            <el-table-column prop="product_title" label="订单名称" width="300"/>
+            <el-table-column prop="user_info.nickname" label="用户" width="150"/>
+            <el-table-column prop="real_amount" label="实际金额" width="100"/>
+            <el-table-column prop="real_amount" label="收支类型" width="100">
+              <template slot-scope="scope">
+                <span>{{parseInt(scope.row.real_amount)>=0?"收入":"支出"}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="channel_name" label="支付方式" width="100"/>
+            <el-table-column prop="order_state_name" label="订单状态" width="100"/>
+            <el-table-column label="创建时间" width="100">
+              <template slot-scope="scope">
+                <span>{{formatDate(scope.row.created_at)}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="到账时间" width="100">
+              <template slot-scope="scope">
+                <span>{{formatDate(scope.row.pay_time)}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="订单编号" width="100">
+              <template slot-scope="scope">
+                <nuxt-link target="_blank" :to="{path:'/main/orders_detail?id='+scope.row.order_no}">{{scope.row.order_no}}</nuxt-link>
+              </template>
+            </el-table-column>
+            <el-table-column prop="out_order_id" label="支付编号" width="100"/>
+            <el-table-column prop="product_type_name" label="订单类型" width="100"/>
+            <el-table-column prop="order_type_name" label="交易类型" width="100"/>
+            <el-table-column label="关联项目" width="100">
+              <template slot-scope="scope">
+                <a :href="scope.row.related_project.url?scope.row.related_project.url:'#'" target="_blank">
+                  <span class="lblue" >{{scope.row.related_project.name?scope.row.related_project.name:"--"}}</span>
+                </a>
+              </template>
+            </el-table-column>
+            <el-table-column label="人工" width="100">
+              <template slot-scope="scope">
+                <span v-if="scope.row.operator_info.nickname">{{scope.row.operator_info.nickname}}</span>
+                <span>({{scope.row.operator_uid}})</span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <el-pagination class="order-footer" background layout="prev, pager, next" :page-size="10" :total="Number(packageData.sumPackage.totalNum)" @current-change="handlePackageCurrentChange"/>
+      </el-tab-pane>
+      <el-tab-pane label="雇佣" name="hire">
+        <div class="tab-header">整包项目待支出总额{{hireData.sumHire.totalAmount}}元,共{{hireData.sumHire.totalNum}}笔</div>
+        <div class="tab-content">
+          <el-table :data="hireData.orders" border style="width:100%;" height="100%">
+            <el-table-column prop="product_title" label="订单名称" width="300"/>
+            <el-table-column prop="user_info.nickname" label="用户" width="150"/>
+            <el-table-column prop="real_amount" label="实际金额" width="100"/>
+            <el-table-column prop="real_amount" label="收支类型" width="100">
+              <template slot-scope="scope">
+                <span>{{parseInt(scope.row.real_amount)>=0?"收入":"支出"}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="channel_name" label="支付方式" width="100"/>
+            <el-table-column prop="order_state_name" label="订单状态" width="100"/>
+            <el-table-column label="创建时间" width="100">
+              <template slot-scope="scope">
+                <span>{{formatDate(scope.row.created_at)}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="到账时间" width="100">
+              <template slot-scope="scope">
+                <span>{{formatDate(scope.row.pay_time)}}</span>
+              </template>
+            </el-table-column>
+            <el-table-column label="订单编号" width="100">
+              <template slot-scope="scope">
+                <nuxt-link target="_blank" :to="{path:'/main/orders_detail?id='+scope.row.order_no}">{{scope.row.order_no}}</nuxt-link>
+              </template>
+            </el-table-column>
+            <el-table-column prop="out_order_id" label="支付编号" width="100"/>
+            <el-table-column prop="product_type_name" label="订单类型" width="100"/>
+            <el-table-column prop="order_type_name" label="交易类型" width="100"/>
+            <el-table-column label="关联项目" width="100">
+              <template slot-scope="scope">
+                <a :href="scope.row.related_project.url?scope.row.related_project.url:'#'" target="_blank">
+                  <span class="lblue" >{{scope.row.related_project.name?scope.row.related_project.name:"--"}}</span>
+                </a>
+              </template>
+            </el-table-column>
+            <el-table-column label="人工" width="100">
+              <template slot-scope="scope">
+                <span v-if="scope.row.operator_info.nickname">{{scope.row.operator_info.nickname}}</span>
+                <span>({{scope.row.operator_uid}})</span>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <el-pagination class="order-footer" background layout="prev, pager, next" :page-size="10" :total="Number(hireData.sumHire.totalNum)" @current-change="handleHireCurrentChange"/>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      activeName: 'job',
+      jobPage: 1,
+      jobData: '',
+      packagePage: 1,
+      packageData: '',
+      hirePage: 1,
+      hireData: '',
+    }
+  },
+  mounted() {
+    this.activeName = this.$route.query.activeName || 'job'
+    this.getJobOrders()
+    this.getPackageOrders()
+    this.getHireOrders()
+  },
+  methods: {
+    async getJobOrders() {
+      const data = {
+        page: this.jobPage,
+        pageSize: 10,
+        productType: 9
+      }
+      let res = await this.$post("/api/admin/order/getWaitExpenseOrders", data)
+      if (res) {
+        this.jobData = res.data
+        // console.log(this.jobData)
+      }
+    },
+    async getPackageOrders() {
+      const data = {
+        page: this.packagePage,
+        pageSize: 10,
+        productType: 2
+      }
+      let res = await this.$post("/api/admin/order/getWaitExpenseOrders", data)
+      if (res) {
+        this.packageData = res.data
+        // console.log(this.packageData)
+      }
+    },
+    async getHireOrders() {
+      const data = {
+        page: this.hirePage,
+        pageSize: 10,
+        productType: 4
+      }
+      let res = await this.$post("/api/admin/order/getWaitExpenseOrders", data)
+      if (res) {
+        this.hireData = res.data
+        // console.log(this.hireData)
+      }
+    },
+    handleJobCurrentChange(val) {
+      this.jobPage = val
+      this.getJobOrders()
+    },
+    handlePackageCurrentChange(val) {
+      this.packagePage = val
+      this.getPackageOrders()
+    },
+    handleHireCurrentChange(val) {
+      this.hirePage = val
+      this.getHireOrders()
+    },
+    formatDate(time) {
+      var now = new Date(time * 1000);
+      var year = now.getFullYear();
+      var month = now.getMonth() + 1;
+      var date = now.getDate();
+      var hour = now.getHours();
+      var minute = now.getMinutes();
+      var second = now.getSeconds();
+      if (hour < 10) {
+        hour = "0" + hour;
+      }
+      if (minute < 10) {
+        minute = "0" + minute;
+      }
+      if (second < 10) {
+        second = "0" + second;
+      }
+      return (
+        year +
+        "-" +
+        month +
+        "-" +
+        date +
+        " " +
+        hour +
+        ":" +
+        minute +
+        ":" +
+        second
+      );
+    },
+    
+  }
+}
+</script>
+
+<style scoped>
+  .header {
+    margin-top: 20px;
+    margin-bottom: 30px;
+  }
+
+  .tab-header {
+    margin-bottom: 10px;
+  }
+
+  .tab-content {
+    white-space: nowrap;
+    overflow-x: scroll;
+    height: calc(100vh - 300px);
+  }
+
+  .order-footer {
+    margin-top: 10px;
+  }
+</style>