Переглянути джерело

Merge branch 'master' of http://git.cc-lotus.info/news-zhwl/cms-zhwl

lrf402788946 4 роки тому
батько
коміт
8dbeb3237d

+ 3 - 0
src/store/index.js

@@ -23,6 +23,8 @@ import split from '@f/store/order/split';
 import inBill from '@f/store/order/inBill';
 //支出
 import outBill from '@f/store/order/outBill';
+//订单负责人
+import orderPri from '@f/store/order/orderPri';
 
 import car from '@f/store/car/car';
 import daily from '@f/store/car/daily';
@@ -61,5 +63,6 @@ export default new Vuex.Store({
     split,
     inBill,
     outBill,
+    orderPri,
   },
 });

+ 94 - 33
src/views/order/goods.vue

@@ -3,7 +3,14 @@
     <el-row>
       <el-col :span="24" class="container">
         <el-col :span="24" class="search">
-          <search-bar :nameList="nameList"></search-bar>
+          <el-row type="flex">
+            <el-col :span="20">
+              <search-bar v-model="sform" :clientList="clientList" :userList="userList"></search-bar>
+            </el-col>
+            <el-col :span="2">
+              <el-button type="primary" @click="search">查询</el-button>
+            </el-col>
+          </el-row>
         </el-col>
         <el-col :span="24" class="info">
           <el-row :gutter="20">
@@ -13,10 +20,12 @@
                   <el-row :gutter="10">
                     <el-col class="card-header1" :span="24">订单号:{{ item.order_no }}</el-col>
                     <el-col class="card-header1" :span="24">客户:{{ choose(item.client) }}</el-col>
+                    <el-col class="card-header1" :span="24">线路:{{ getroute(item.route) }}</el-col>
                   </el-row>
                 </div>
                 <!-- <data-table height="200px" :fields="fields" :data="item.split" :usePage="false" :opera="opera" @splice="splice"> </data-table> -->
-                <el-table :data="item.split" style="width: 100%" @row-click="clickTable(index)">
+                <!-- <el-table :data="item.split" style="width: 100%" @row-click="clickTable(index)"> -->
+                <el-table :data="item.split" style="width: 100%" height="200px">
                   <el-table-column prop="name" label="货物名"></el-table-column>
                   <el-table-column prop="number" label="数量"></el-table-column>
                   <el-table-column prop="weight" label="重量"></el-table-column>
@@ -24,13 +33,18 @@
                   <el-table-column prop="remark" label="备注"></el-table-column>
                   <el-table-column label="操作">
                     <template slot-scope="scope">
-                      <el-button size="mini" @click="splice(index, scope.row)">拆分</el-button>
+                      <el-button size="mini" @click="splice(index, scope.row, scope.$index)">拆分</el-button>
                     </template>
                   </el-table-column>
                 </el-table>
               </el-card>
             </el-col>
           </el-row>
+          <el-row>
+            <el-col :span="24" class="page">
+              <page @query="search" :limit="limit" :total="total"></page>
+            </el-col>
+          </el-row>
         </el-col>
       </el-col>
     </el-row>
@@ -113,7 +127,7 @@
         </el-table-column>
       </el-table>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="add(splitList)">拆分订单</el-button>
+        <el-button type="primary" @click="add(splitList, orderForm)">拆分订单</el-button>
       </span>
     </el-dialog>
   </div>
@@ -122,7 +136,13 @@
 <script>
 const { mapActions: client } = createNamespacedHelpers('client');
 const { mapActions: order } = createNamespacedHelpers('order');
+const { mapActions: user } = createNamespacedHelpers('user');
+const { mapActions: split } = createNamespacedHelpers('split');
+const { mapActions: route } = createNamespacedHelpers('route');
+// 分页
+import page from '@f/components/pagination.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
+//查询search
 import searchBar from './index-parts/search-bar.vue';
 export default {
   metaInfo() {
@@ -130,7 +150,7 @@ export default {
   },
   name: 'goods',
   props: {},
-  components: { searchBar },
+  components: { searchBar, page },
   data: function() {
     return {
       fields: [
@@ -154,14 +174,21 @@ export default {
       //项目列表
       projectList: [{ name: '项目一' }, { name: '项目二' }],
       //客戶列表
-      nameList: [],
+      clientList: [],
+      //用户列表
+      userList: [],
+      // 线路列表
+      routeList: [],
+      sform: {},
       // name: [],
-      num: 1,
+      num: 0,
       number: 0,
       max: 0,
       weight: 0,
       volume: 0,
       tableNumber: 0,
+      spiteIndex: 0,
+      limit: 4,
     };
   },
   async created() {
@@ -169,10 +196,22 @@ export default {
   },
   methods: {
     ...client({ clientQuery: 'query' }),
-    ...order(['query', 'create', 'update', 'delete', 'fetch']),
-    async search({ skip = 0, limit = 8, ...info } = {}) {
+    ...order(['query']),
+    ...split({ getSplit: 'split', getQuery: 'query' }),
+    ...user({ getUserList: 'query' }),
+    ...route({ routeQuery: 'query' }),
+
+    async search({ skip = 0, limit = this.limit } = {}) {
       //查订单
-      const res = await this.query({ skip, limit, ...info });
+      let duplicate = _.cloneDeep(this.sform);
+      let { date, ...info } = duplicate;
+      let querys = { skip, limit, ...info };
+      if (date && date.length === 2) {
+        querys[`rq_send_time@start`] = date[0];
+        querys[`rq_send_time@end`] = date[1];
+      }
+      if (this.user.role !== '0') querys.principal = this.user.id;
+      const res = await this.query(querys);
       if (this.$checkRes(res)) {
         const { data, total } = res;
         this.$set(this, `list`, data);
@@ -182,7 +221,19 @@ export default {
       const res1 = await this.clientQuery({ type: '客户' });
       if (this.$checkRes(res1)) {
         const { data, total } = res1;
-        this.$set(this, `nameList`, data);
+        this.$set(this, `clientList`, data);
+      }
+      //查用户
+      const res2 = await this.getUserList();
+      if (this.$checkRes(res2)) {
+        const { data, total } = res2;
+        this.$set(this, `userList`, data);
+      }
+      // 查询线路列表
+      const res3 = await this.routeQuery();
+      if (this.$checkRes(res3)) {
+        const { data, total } = res3;
+        this.$set(this, `routeList`, data);
       }
     },
     //关闭
@@ -194,17 +245,25 @@ export default {
       console.log(data);
     },
     //卡片上面的拆分
-    splice(index, data) {
-      this.$set(this, `orderForm`, _.cloneDeep(data));
+    splice(tableIndex, data, index) {
+      let newList = this.list[tableIndex].split;
+      this.$set(this, `orderForm`, data);
+      let arr = newList.filter(function(i) {
+        return i.pid === newList[index]._id;
+      });
+      this.num = arr.length;
       this.dialog = true;
       this.number = this.orderForm.number;
       this.weight = this.orderForm.weight;
       this.volume = this.orderForm.volume;
+      this.tableNumber = tableIndex;
+      this.spiteIndex = index;
     },
     //真的拆分订单
     splite() {
       let origin = this.orderForm;
-      this.splitList.push({ type: 1, name: `${this.orderForm.name}-${this.num++}`, number: 0, weight: 0, volume: 0, pid: origin.pid });
+      let n = ++this.num;
+      this.splitList.push({ type: 1, name: `${this.orderForm.name}-${n}`, number: 0, weight: 0, volume: 0, pid: origin._id });
     },
     //数量改变
     changeNumber(index, currentValue, oldValue) {
@@ -285,32 +344,34 @@ export default {
       this.orderForm.volume += this.splitList[index].volume;
       this.splitList.splice(index, 1);
     },
-    choose(client) {
-      const obj = this.nameList.find(i => i.id === client);
-      if (obj) return obj.name;
-    },
-    //保存拆分订单  ???修改不上 search栏怎么弄
-    async add(data) {
-      let splitList = this.list[this.tableNumber].split;
-      // console.log(splitList);
-      let newList = [];
-      newList.push(splitList[0]);
-      for (let item of data) {
-        newList.push(item);
+    //保存拆分订单
+    async add(splitList, orderForm) {
+      // 复制一份数据在orderSplite;
+      let orderSplite = _.cloneDeep(this.list[this.tableNumber].split);
+      // 从orderSplite删除拆分的数据;
+      orderSplite.splice(this.spiteIndex, 1);
+      orderSplite.unshift(orderForm);
+      for (let item of splitList) {
+        orderSplite.push(item);
       }
-      this.$set(this.list[this.tableNumber], `split`, newList);
+      this.$set(this.list[this.tableNumber], `split`, orderSplite);
       let newData = this.list[this.tableNumber];
-      let owner = this.user.id;
-      const res = await this.update(this.list);
+      const res = await this.getSplit(newData);
       if (this.$checkRes(res, '拆分成功', res.errmsg || '拆分失败')) {
         this.search();
-        this.orderForm = {};
+        this.splitList = [];
         this.dialog = false;
       }
     },
-    clickTable(index) {
-      console.log(index);
-      this.tableNumber = index;
+    //过滤客户
+    choose(client) {
+      const obj = this.clientList.find(i => i.id === client);
+      if (obj) return obj.name;
+    },
+    // 过滤路线
+    getroute(value) {
+      const res = this.routeList.find(i => i.id === value);
+      if (res) return res.name;
     },
   },
   computed: {

+ 10 - 5
src/views/order/in.vue

@@ -49,6 +49,8 @@ const { mapActions: client } = createNamespacedHelpers('client');
 const { mapActions: order } = createNamespacedHelpers('order');
 const { mapActions: user } = createNamespacedHelpers('user');
 const { mapActions: inBill } = createNamespacedHelpers('inBill');
+const { mapActions: orderPri } = createNamespacedHelpers('orderPri');
+
 import { mapState, createNamespacedHelpers } from 'vuex';
 import inDetail from './inDetail.vue';
 export default {
@@ -111,9 +113,12 @@ export default {
     ...user({ userQuery: 'query' }),
     ...inBill(['inBill']),
     ...order(['query', 'create', 'update', 'delete', 'fetch']),
+    ...orderPri({ oderPri: 'principal' }),
     async search({ skip = 0, limit = 10, ...info } = {}) {
       //查订单
-      const res = await this.query({ skip, limit, ...info });
+      let obj = { skip, limit, ...info };
+      if (this.user.role !== '0') obj.principal = this.user.id;
+      const res = await this.query(obj);
       if (this.$checkRes(res)) {
         const { data, total } = res;
         this.$set(this, `list`, data);
@@ -145,14 +150,14 @@ export default {
     toClose() {
       this.dialog = false;
     },
-    //保存
+    //修改负责人保存
     async turnSave({ data }) {
       if (data) {
-        const res = await this.update(data);
+        const res = await this.oderPri(data);
         if (this.$checkRes(res, '修改成功', res.errmsg || '修改失败')) {
-          this.search();
           this.dialog = false;
         }
+        this.search();
       }
     },
     //修改收入
@@ -165,8 +170,8 @@ export default {
       this.flag = false;
       this.detailForm = {};
     },
+    //详情保存
     async toSave(data) {
-      console.log(data);
       if (data.id) {
         const res = await this.inBill(data);
         console.log(res);

+ 3 - 3
src/views/order/inDetail.vue

@@ -307,13 +307,13 @@ export default {
       //查询其他收费项
       const res = await this.tree('sr');
       if (res) {
-        this.$set(this, `options`, res[0].children);
+        this.$set(this, `options`, res);
         // console.log(this.options);
       }
       //查其他收费项的税率
       const res1 = await this.tree('sl');
       if (res1) {
-        this.$set(this, `rateList`, res1[0].children);
+        this.$set(this, `rateList`, res1);
       }
     },
     handleChange(value) {
@@ -321,7 +321,7 @@ export default {
     },
     //添加收費項目
     addGoods() {
-      this.detailForm.in_bill.push({ taxes: 1, item: '保費' });
+      this.detailForm.in_bill.push({ taxes: 1 });
     },
     //刪除
     handleDelete(index, row) {

+ 15 - 8
src/views/order/index-parts/search-bar.vue

@@ -11,7 +11,7 @@
       </el-form-item>
       <el-form-item>
         <el-select v-model="value.treaty" placeholder="请选择要查询的合同" style="width:200px;padding-right: 5px;" @change="getItem" clearable filterable>
-          <el-option v-for="(i, index) in treatyList" :key="`treaty${index}`" :label="i.name" :value="i.id"></el-option>
+          <el-option v-for="(i, index) in treatyList" :key="`treaty${index}`" :label="i.number" :value="i.id"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -24,11 +24,11 @@
           <el-option v-for="(i, index) in routeList" :key="`route${index}`" :label="i.name" :value="i.id"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item>
+      <!-- <el-form-item>
         <el-select v-model="value.mode" placeholder="请选择要查询的运输方式" style="width:200px;padding-right: 5px;" clearable filterable>
           <el-option v-for="(i, index) in modeList" :key="`mode${index}`" :label="i.name" :value="i.id"></el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item>
         <el-date-picker
           v-model="value.date"
@@ -94,15 +94,18 @@ export default {
       const res = await this.getTreatyList({ client });
       if (this.$checkRes(res)) {
         const { data } = res;
-        this.$set(this, `treatyList`, data);
+        let arr = data.map(item => {
+          return { number: item.number, id: item.id };
+        });
+        this.$set(this, `treatyList`, arr);
       }
     },
     async getItem(treaty) {
       const res = await this.getItemList({ treaty });
-      if (this.$checkRes(res)) {
-        const { data } = res;
-        this.$set(this, `itemList`, data);
-      }
+      // if (this.$checkRes(res)) {
+      //   const { data } = res;
+      //   this.$set(this, `itemList`, data);
+      // }
     },
     async getRoute(item) {
       const res = await this.getItemList({ item });
@@ -122,6 +125,10 @@ export default {
     checkNoUse(model) {
       return !this.nouse.includes(model);
     },
+    choose(client) {
+      const obj = this.clientList.find(i => i.id === client);
+      if (obj) return obj.name;
+    },
   },
   computed: {
     ...mapState(['user']),

+ 110 - 76
src/views/order/out.vue

@@ -4,7 +4,7 @@
       <animates>
         <el-col :span="24" class="container">
           <el-col :span="24" class="info">
-            <data-table
+            <!-- <data-table
               :fields="fields"
               :data="list"
               :opera="opera"
@@ -21,7 +21,44 @@
                   <el-option v-for="(item, index) in nameList" :key="index" :value="item.id" :label="item.name"></el-option>
                 </template>
               </template>
-            </data-table>
+            </data-table> -->
+            <el-row v-if="!dialog">
+              <el-row type="flex">
+                <el-col :span="22">
+                  <search-bar v-model="sform" :clientList="clientList" :userList="userList"></search-bar>
+                </el-col>
+                <el-col :span="2">
+                  <el-button type="primary" @click="search">查询</el-button>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="24">
+                  <el-table :data="list" style="width: 95%" border>
+                    <el-table-column prop="order_no" label="订单号" sortable width="300"></el-table-column>
+                    <el-table-column label="客户" width="300">
+                      <template slot-scope="scope">
+                        <span>{{ getClient(scope.row.client) }}</span>
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="当前订单负责人" width="300">
+                      <template slot-scope="scope">
+                        <span>{{ getUser(scope.row.principal) }}</span>
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="操作">
+                      <template slot-scope="scope">
+                        <el-button size="mini" type="text" @click="see(scope.row)">查看</el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="24" class="page">
+                  <page @query="search" :limit="limit" :total="total"></page>
+                </el-col>
+              </el-row>
+            </el-row>
             <el-col :span="24" class="detail" v-else>
               <el-row>
                 <el-col :span="24" class="top">
@@ -63,9 +100,9 @@
                 <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
                   <el-tab-pane v-for="(item, index) in detailForm.out_bill" :key="index" :label="`支出${index + 1}`" :name="`${index + 1}`">
                     <el-col :span="24">
-                      <el-form v-model="item.item" ref="form" label-width="90px" :inline="true">
+                      <el-form ref="form" label-width="90px" :inline="true">
                         <el-form-item label="支出项">
-                          <el-select v-model="item.cost" placeholder="请选择支出项">
+                          <el-select v-model="item.item" placeholder="请选择支出项">
                             <el-option v-for="(item, index) in costList" :key="index" :label="item.label" :value="item.value"></el-option>
                           </el-select>
                         </el-form-item>
@@ -100,7 +137,7 @@
                 </el-tabs>
                 <el-row>
                   <el-col :span="24" style="text-align:center">
-                    <el-button type="primary" size="mini" @click="save(detailForm.out_bill)" style="margin:10px 0px">
+                    <el-button type="primary" size="mini" @click="save(detailForm)" style="margin:10px 0px">
                       保存
                     </el-button>
                   </el-col>
@@ -119,7 +156,12 @@ import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: order } = createNamespacedHelpers('order');
 const { mapActions: client } = createNamespacedHelpers('client');
 const { mapActions: dictionary } = createNamespacedHelpers('dictionary');
-
+const { mapActions: outBill } = createNamespacedHelpers('outBill');
+const { mapActions: user } = createNamespacedHelpers('user');
+// 分页
+import page from '@f/components/pagination.vue';
+//查询search
+import searchBar from './index-parts/search-bar.vue';
 const _ = require('lodash');
 export default {
   metaInfo() {
@@ -127,46 +169,27 @@ export default {
   },
   name: 'out',
   props: {},
-  components: {},
+  components: { searchBar, page },
   data: function() {
     return {
       dialog: false,
-      fields: [
-        { label: '订单号', model: 'order_no', filter: 'input' },
-        { label: '客户', model: 'client', filter: 'select', format: true },
-        // { label: '合同', model: 'contract', notable: 'true', filter: 'select' },
-        // { label: '项目', model: 'project', notable: 'true', filter: 'select' },
-        // { label: '线路', model: 'route', notable: 'true', filter: 'select' },
-        // { label: '付费方式', model: 'way', notable: 'true', filter: 'select' },
-      ],
-      list: [
-        // {
-        //   id: '1',
-        //   name: 'xxx有限公司',
-        //   num: 'AW-YS-ZF-2018-005',
-        //   money: 100,
-        //   way: '银行转账',
-        // },
-        // {
-        //   id: '2',
-        //   name: 'xxx有限公司',
-        //   num: 'AW-YS-ZF-2018-005',
-        //   money: 200,
-        //   way: '银行转账',
-        // },
-      ],
+      // fields: [
+      //   { label: '订单号', model: 'order_no', filter: 'input' },
+      //   { label: '客户', model: 'client', filter: 'select', format: true },
+      //   { label: '合同', model: 'contract', notable: 'true', filter: 'select' },
+      //   { label: '项目', model: 'project', notable: 'true', filter: 'select' },
+      //   { label: '线路', model: 'route', notable: 'true', filter: 'select' },
+      // ],
+      list: [],
       total: 0,
+      limit: 10,
       opera: [{ label: '查看', method: 'see' }],
       //客户列表
-      nameList: [],
-      //合同列表
-      contractList: [{ name: '合同一' }, { name: '合同二' }],
-      //项目列表
-      projectList: [{ name: '项目一' }, { name: '项目二' }],
-      //线路列表
-      routeList: [{ name: '线路一' }, { name: '线路二' }],
-      //付费方式列表
-      wayList: [{ name: '方式一' }, { name: '方式二' }],
+      // nameList: [],
+      clientList: [],
+      //用户列表
+      userList: [],
+      sform: {},
       detailFields: [
         { label: '货物名', model: 'name' },
         { label: '数量', model: 'number' },
@@ -174,25 +197,12 @@ export default {
         { label: '体积(m²)', model: 'volume' },
         { label: '备注', model: 'remark' },
       ],
-      detailList: [
-        // {
-        //   goods: '真皮',
-        //   number: '3',
-        //   weight: '40',
-        //   volume: '50',
-        //   current: '0000',
-        //   ordernumber: '9999',
-        // },
-      ],
+      detailList: [],
       editableTabsValue: '1',
       editableTabs: [],
       tabIndex: 1,
       //支出项列表
       costList: [],
-      //供应商列表
-      supplierList: [{ name: '供应商一' }, { name: '供应商二' }],
-      //车辆列表
-      carList: [{ name: '车辆一' }, { name: '车辆二' }],
       //税率列表
       rateList: [],
       cost1: 0,
@@ -202,17 +212,27 @@ export default {
       detailForm: {},
     };
   },
-  created() {
-    this.search();
+  async created() {
+    await this.search();
   },
   methods: {
     ...order(['query', 'create', 'update', 'delete', 'fetch']),
     ...client({ clientQuery: 'query' }),
     ...dictionary(['tree']),
+    ...outBill(['outBill']),
+    ...user({ getUserList: 'query' }),
 
-    async search({ skip = 0, limit = 8, ...info } = {}) {
+    async search({ skip = 0, limit = this.limit } = {}) {
       //查订单
-      const res = await this.query({ skip, limit, ...info });
+      let duplicate = _.cloneDeep(this.sform);
+      let { date, ...info } = duplicate;
+      let querys = { skip, limit, ...info };
+      if (date && date.length === 2) {
+        querys[`rq_send_time@start`] = date[0];
+        querys[`rq_send_time@end`] = date[1];
+      }
+      if (this.user.role !== '0') querys.principal = this.user.id;
+      const res = await this.query(querys);
       if (this.$checkRes(res)) {
         const { data, total } = res;
         this.$set(this, `list`, data);
@@ -222,23 +242,34 @@ export default {
       const res1 = await this.clientQuery({ type: '客户' });
       if (this.$checkRes(res1)) {
         const { data, total } = res1;
-        this.$set(this, `nameList`, data);
+        // this.$set(this, `nameList`, data);
+        this.$set(this, `clientList`, data);
       }
       //查询其他收费项
       const res2 = await this.tree('zc');
       if (res2) {
-        this.$set(this, `costList`, res2[0].children);
+        this.$set(this, `costList`, res2);
       }
       //查其他收费项的税率
       const res3 = await this.tree('sl');
       if (res3) {
-        this.$set(this, `rateList`, res3[0].children);
+        this.$set(this, `rateList`, res3);
+      }
+      //查用户
+      const res4 = await this.getUserList();
+      if (this.$checkRes(res4)) {
+        const { data, total } = res4;
+        this.$set(this, `userList`, data);
       }
     },
     //查看
-    async see({ data }) {
+    async see(data) {
       const res = await this.fetch(data.id);
+      // console.log(res);
       if (res) this.$set(this, `detailForm`, res);
+      if (this.detailForm.out_bill.length > 0) {
+        this.computRate();
+      }
       this.dialog = true;
     },
     //添加选项卡
@@ -247,13 +278,10 @@ export default {
       if (this.editableTabsValue == '0') {
         this.editableTabsValue = '1';
       }
-      // this.detailForm.out_bill.push({ taxes: '1', item: '保费' });
-      //????总是显示最后一个
       this.detailForm.out_bill.push({ taxes: 1 });
     },
     //删除选项卡
     removeTab(targetName) {
-      console.log(targetName);
       const name1 = Number(targetName);
       const form1 = this.detailForm.out_bill[name1 - 1];
       if (name1 > -1) {
@@ -285,6 +313,7 @@ export default {
       this.$set(outForm, `sh_ss`, sh_ss);
       this.computRate();
     },
+    //计算
     async computRate() {
       let num1 = 0;
       let num2 = 0;
@@ -312,10 +341,8 @@ export default {
     },
     //保存
     async save(data) {
-      console.log(data);
-      //owner不能为空????
-      let owner = this.user.id;
-      const res = await this.update(data);
+      // console.log(data);
+      const res = await this.outBill(this.detailForm);
       if (this.$checkRes(res, '修改成功', res.errmsg || '修改失败')) {
         this.back();
       }
@@ -329,11 +356,15 @@ export default {
       this.cost3 = 0;
       this.cost4 = 0;
     },
-    roleSelect({ model, value }) {
-      if (model == 'client') {
-        let arr = this.nameList.find(i => i.id === value);
-        if (arr) return arr.name;
-      }
+    //过滤客户
+    getClient(client) {
+      const obj = this.clientList.find(i => i.id === client);
+      if (obj) return obj.name;
+    },
+    //过滤用户
+    getUser(data) {
+      const obj = this.userList.find(i => i.id === data);
+      if (obj) return obj.name;
     },
   },
   computed: {
@@ -383,7 +414,10 @@ export default {
   background: #ecf5ff;
   border-color: #b3d8ff;
 }
-/deep/.el-form--inline .el-form-item__content {
-  width: 166px;
+// /deep/.el-form--inline .el-form-item__content {
+//   width: 166px;
+// }
+/deep/.el-table .cell {
+  text-align: center;
 }
 </style>

+ 20 - 19
src/views/order/transport/detail.vue

@@ -1,14 +1,8 @@
 <template>
   <div id="detail">
     <el-row>
-      <el-col :span="24" class="container">
-        <el-col :span="24" class="top">
-          <el-button type="primary" size="mini" @click="$router.go(-1)">返回</el-button>
-        </el-col>
-        <!-- 从后台可能得到的是一个对象,可以拿到数据之后转换一下 -->
-        <el-col :span="24" class="info">
-          <data-table :fields="fields" :data="list" :usePage="false"> </data-table>
-        </el-col>
+      <el-col :span="24" class="info">
+        <data-table :fields="fields" :data="[detailForm]" :usePage="false"> </data-table>
       </el-col>
     </el-row>
   </div>
@@ -21,23 +15,27 @@ export default {
     return { title: this.$route.meta.title };
   },
   name: 'detail',
-  props: {},
+  props: {
+    detailForm: {
+      type: Object,
+    },
+  },
   components: {},
   data: function() {
     return {
       fields: [
-        { label: '订单号', model: 'ordernum' },
-        { label: '运输单号', model: 'transportnum' },
-        { label: '发货时间', model: 'time' },
-        { label: '花费', model: 'cost' },
+        { label: '订单号', model: 'order_no' },
+        // { label: '运输单号', model: 'transportnum' },
+        // { label: '发货时间', model: 'time' },
+        // { label: '花费', model: 'cost' },
       ],
       list: [
-        {
-          ordernum: '66464',
-          time: '2020-2-14',
-          transportnum: '11111',
-          cost: '400',
-        },
+        // {
+        //   ordernum: '66464',
+        //   time: '2020-2-14',
+        //   transportnum: '11111',
+        //   cost: '400',
+        // },
       ],
     };
   },
@@ -45,6 +43,9 @@ export default {
   methods: {},
   computed: {
     ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
   },
 };
 </script>

+ 123 - 73
src/views/order/transport/sign.vue

@@ -2,30 +2,59 @@
   <div id="sign">
     <el-row>
       <el-col :span="24" class="container">
-        <el-col :span="24" class="info">
-          <data-table :fields="fields" :data="list" :opera="opera" :total="total" :size="50" :step="10" @query="search" @sign="sign" @detail="detail">
-            <template #options="{item}">
-              <template v-if="item.model == 'state'">
-                <el-option v-for="(item, index) in stateList" :key="index" :value="item.name" :label="item.name"></el-option>
-              </template>
-              <template v-if="item.model == 'name'">
-                <el-option v-for="(item, index) in nameList" :key="index" :value="item.name" :label="item.name"></el-option>
-              </template>
-            </template>
-          </data-table>
-        </el-col>
+        <el-row>
+          <el-col :span="24">
+            <el-table :data="list" border>
+              <el-table-column prop="no" label="运输单号" sortable></el-table-column>
+              <el-table-column prop="send_time" label="发出时间" sortable></el-table-column>
+              <el-table-column prop="route" label="线路" sortable></el-table-column>
+              <el-table-column label="货物状态">
+                <template slot-scope="scope">
+                  <span>{{ scope.row.status === '0' ? '运输中' : '已签收' }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="货物名称">
+                <template slot-scope="scope">
+                  <span>{{ getGoodsName(scope.row.goods) }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="车牌号/供应商">
+                <template slot-scope="scope">
+                  <span>{{ getNumber(scope.row.supply_type, scope.row.supplier) }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="操作">
+                <template slot-scope="scope">
+                  <el-button v-if="scope.row.status == '0'" size="mini" type="text" @click="sign(scope.row)">签收</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-col>
+        </el-row>
       </el-col>
     </el-row>
-    <el-dialog :visible.sync="dialog" title="签收" @close="toClose" width="50%">
-      <!-- 物流里面的:data要换成v-model -->
-      <data-form v-model="form" :fields="formFields" :rules="rules" @save="turnSave"> </data-form>
+    <el-dialog title="签收详情" :visible.sync="dialog" @close="toClose">
+      <el-form :model="form" :rules="rules">
+        <el-form-item label="签收时间" prop="sign_time">
+          <el-date-picker v-model="form.sign_time" type="datetime" placeholder="选择日期时间"> </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer" style="text-align:center">
+        <el-button type="primary" @click="turnSave(form)">确 定</el-button>
+      </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
-// const { mapActions: order } = createNamespacedHelpers('order');
+const { mapActions: order } = createNamespacedHelpers('order');
+const { mapActions: client } = createNamespacedHelpers('client');
+const { mapActions: orderPri } = createNamespacedHelpers('orderPri');
+const { mapActions: car } = createNamespacedHelpers('car');
+
+// 装车表
+const { mapActions: transport } = createNamespacedHelpers('transport');
 export default {
   metaInfo() {
     return { title: this.$route.meta.title };
@@ -35,56 +64,18 @@ export default {
   components: {},
   data: function() {
     return {
-      fields: [
-        { label: '订单号', model: 'ordernum', filter: 'input' },
-        { label: '客户', model: 'name', filter: 'select' },
-        { label: '地点', model: 'palce' },
-        { label: '运输单号', model: 'transportnum' },
-        { label: '发货时间', model: 'time' },
-        { label: '运输内容', model: 'content' },
-        { label: '状态', model: 'state', filter: 'select' },
-      ],
-      list: [
-        {
-          ordernum: '66464',
-          name: '伟巴斯特(长春)车顶系统有限公司-北京天津线',
-          palce: '地点1',
-          time: '2020-2-14',
-          transportnum: '11111',
-          content: '一大堆好吃的',
-          state: '到达',
-          flag: '0',
-        },
-        {
-          ordernum: '66464',
-          name: '伟巴斯特(长春)车顶系统有限公司-北京天津线',
-          palce: '地点1',
-          time: '2020-2-14',
-          transportnum: '11111',
-          content: '快递',
-          state: '到达',
-          flag: '0',
-        },
-      ],
+      list: [],
       total: 0,
       opera: [
-        { label: '详情', method: 'detail' },
         {
           label: '签收',
           method: 'sign',
-          display: i => {
-            if (i.flag == '0') {
-              return true;
-            } else {
-              return false;
-            }
-          },
         },
       ],
       //客戶列表
-      nameList: [{ name: '客户1' }, { name: '客户2' }, { name: '客户3' }, { name: '客户4' }, { name: '客户5' }],
-      //状态列表
-      stateList: [{ name: '运输中' }, { name: '到达' }],
+      nameList: [],
+      //车辆列表
+      carList: [],
       dialog: false,
       form: {},
       formFields: [
@@ -92,38 +83,93 @@ export default {
         { label: '签收日期', model: 'receiptdate', type: 'date' },
       ],
       rules: {
-        signer: [{ required: true, message: '请输入签收人', trigger: 'blur' }],
-        receiptdate: [{ required: true, message: '请选择签收日期', trigger: 'blur' }],
+        sign_time: [{ required: true, message: '请选择签收日期', trigger: 'blur' }],
       },
       backup: '',
     };
   },
   async created() {
-    // await this.search();
+    await this.search();
   },
   methods: {
-    // ...order(['query', 'create', 'update', 'delete']),
+    ...order(['query', 'create', 'update', 'delete']),
+    ...client({ cQuery: 'query' }),
+    ...car({ carQuery: 'query' }),
+    ...transport({ transportNo: 'transportNo', transportCreate: 'create', transportQuery: 'query', transportSign: 'transportSign' }),
+
     async search({ skip = 0, limit = 10, ...info } = {}) {
-      // const res = await this.query({ skip, limit, ...info });
-      // console.log(res);
+      //查运输单
+      const res = await this.transportQuery();
+      if (this.$checkRes(res)) {
+        const { data, total } = res;
+        this.$set(this, `list`, data);
+        this.$set(this, `total`, total);
+      }
+      //查客户列表
+      const res1 = await this.cQuery({ type: '客户' });
+      if (this.$checkRes(res1)) {
+        const { data, total } = res1;
+        this.$set(this, `nameList`, data);
+      }
+      //查车辆
+      const res2 = await this.carQuery();
+      if (this.$checkRes(res2)) {
+        const { data } = res2;
+        this.$set(this, `carList`, data);
+      }
     },
     //关闭
     toClose() {
+      this.form = {};
       this.dialog = false;
     },
     //保存
-    turnSave(data) {
+    async turnSave(data) {
       console.log(data);
-      this.$set(this.backup, `flag`, '2');
-      this.dialog = false;
+      if (data.id) {
+        const res = await this.transportSign(data);
+        if (this.$checkRes(res, '修改成功', res.errmsg || '修改失败')) {
+          this.toClose();
+        }
+      }
     },
-    sign({ data }) {
-      this.backup = data;
+    sign(data) {
+      console.log(data);
+      this.$set(this, `form`, data);
       this.dialog = true;
     },
-    //详情
-    detail() {
-      this.$router.push({ path: '/order/transport/detail' });
+    roleSelect({ model, value }) {
+      // console.log(model, value);
+      if (model == 'client') {
+        let arr = this.nameList.find(i => i.id === value);
+        if (arr) return arr.name;
+      }
+    },
+    //拼接货物名称
+    getGoodsName(data) {
+      let longName;
+      let arr = [];
+      for (let item of data) {
+        arr.push(item.name);
+      }
+      longName = arr.join('-');
+      return longName;
+    },
+    //显示车牌或者供应商
+    getNumber(type, supplier) {
+      if (type === '0') {
+        let car = this.carList.find(i => i.id === supplier.car_no);
+        if (car) {
+          return car.car_no;
+        }
+      } else if (type === '1') {
+        return supplier.client;
+      } else {
+        return supplier.car_no;
+      }
+    },
+    back() {
+      this.flage1 = false;
     },
   },
   computed: {
@@ -132,4 +178,8 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+/deep/.el-table .cell {
+  text-align: center;
+}
+</style>