wxy 4 gadi atpakaļ
vecāks
revīzija
18c1bf16e0

+ 29 - 3
src/views/order/goods.vue

@@ -20,6 +20,7 @@
                   <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> -->
@@ -39,6 +40,11 @@
               </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>
@@ -132,8 +138,11 @@ 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() {
@@ -141,7 +150,7 @@ export default {
   },
   name: 'goods',
   props: {},
-  components: { searchBar },
+  components: { searchBar, page },
   data: function() {
     return {
       fields: [
@@ -168,6 +177,8 @@ export default {
       clientList: [],
       //用户列表
       userList: [],
+      // 线路列表
+      routeList: [],
       sform: {},
       // name: [],
       num: 0,
@@ -177,6 +188,7 @@ export default {
       volume: 0,
       tableNumber: 0,
       spiteIndex: 0,
+      limit: 4,
     };
   },
   async created() {
@@ -187,7 +199,9 @@ export default {
     ...order(['query']),
     ...split({ getSplit: 'split', getQuery: 'query' }),
     ...user({ getUserList: 'query' }),
-    async search({ skip = 0, limit = 8 } = {}) {
+    ...route({ routeQuery: 'query' }),
+
+    async search({ skip = 0, limit = this.limit } = {}) {
       //查订单
       let duplicate = _.cloneDeep(this.sform);
       let { date, ...info } = duplicate;
@@ -215,6 +229,12 @@ export default {
         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);
+      }
     },
     //关闭
     toClose() {
@@ -343,10 +363,16 @@ export default {
         this.dialog = false;
       }
     },
+    //过滤客户
     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: {
     ...mapState(['user']),

+ 95 - 64
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">
@@ -120,7 +157,11 @@ 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() {
@@ -128,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' },
@@ -175,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,
@@ -211,12 +220,19 @@ export default {
     ...client({ clientQuery: 'query' }),
     ...dictionary(['tree']),
     ...outBill(['outBill']),
+    ...user({ getUserList: 'query' }),
 
-    async search({ skip = 0, limit = 8, ...info } = {}) {
+    async search({ skip = 0, limit = this.limit } = {}) {
       //查订单
-      let obj = { skip, limit, ...info };
-      if (this.user.role !== '0') obj.principal = this.user.id;
-      const res = await this.query(obj);
+      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);
@@ -226,7 +242,8 @@ 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');
@@ -238,10 +255,17 @@ export default {
       if (res3) {
         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();
@@ -332,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: {
@@ -386,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>