guhongwei 4 år sedan
förälder
incheckning
88e54e3809
1 ändrade filer med 274 tillägg och 69 borttagningar
  1. 274 69
      src/views/order/transport/index.vue

+ 274 - 69
src/views/order/transport/index.vue

@@ -25,7 +25,7 @@
                       <el-col class="card-header1" :span="24">线路:{{ getroute(item.route) }}</el-col>
                       <el-col class="card-header1" :span="24">线路:{{ getroute(item.route) }}</el-col>
                     </el-row>
                     </el-row>
                   </div>
                   </div>
-                  <data-table height="200px" :fields="fields" :data="item.goods" :usePage="false" :opera="opera" @handleSelect="toSelect" :select="true">
+                  <data-table height="200px" :fields="fields" :data="item.split" :usePage="false" :opera="opera" @handleSelect="toSelect" :select="true">
                   </data-table>
                   </data-table>
                 </el-card>
                 </el-card>
               </el-col>
               </el-col>
@@ -35,50 +35,104 @@
                 <el-button size="mini" type="primary" @click="back()">返回</el-button>
                 <el-button size="mini" type="primary" @click="back()">返回</el-button>
                 <span>填写装车单</span>
                 <span>填写装车单</span>
               </el-col>
               </el-col>
-              <el-col :span="12" class="form">
+              <el-col :span="24" class="form">
                 <el-form ref="form" :model="form" label-width="90px">
                 <el-form ref="form" :model="form" label-width="90px">
-                  <el-form-item label="订单号">
-                    {{ form.number }}
-                  </el-form-item>
-                  <el-form-item label="操作人">
-                    {{ form.user }}
-                  </el-form-item>
-                  <el-form-item label="发货日期">
-                    <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 100%;"></el-date-picker>
-                  </el-form-item>
-                  <el-form-item label="供应商方式">
-                    <el-radio-group v-model="form.resource">
-                      <el-radio label="自运"></el-radio>
-                      <el-radio label="他运"></el-radio>
-                    </el-radio-group>
-                  </el-form-item>
-                  <el-form-item label="支出项">
-                    <el-select v-model="form.region" placeholder="请选择支出项">
-                      <el-option v-for="(item, index) in costList" :key="index" :label="item.name" :value="item.name"></el-option>
-                    </el-select>
-                  </el-form-item>
-                  <el-form-item label="备注">
-                    <el-input type="textarea" v-model="form.desc" placeholder="备注"></el-input>
-                  </el-form-item>
+                  <el-col :span="12">
+                    <el-form-item label="订单号">
+                      {{ form.no }}
+                    </el-form-item>
+                    <el-form-item label="操作人">
+                      {{ getUser(form.owner) }}
+                    </el-form-item>
+                    <el-form-item label="发货日期">
+                      <el-date-picker
+                        type="datetime"
+                        placeholder="选择发货日期"
+                        v-model="form.send_time"
+                        value-format="yyyy-MM-dd HH:mm"
+                        format="yyyy-MM-dd HH:mm"
+                        style="width: 100%;"
+                      ></el-date-picker>
+                    </el-form-item>
+                    <el-form-item label="供应商方式">
+                      <el-radio-group v-model="form.supply_type" @change="changeSupply">
+                        <el-radio label="0">自运</el-radio>
+                        <el-radio label="1">供应商</el-radio>
+                        <el-radio label="2">第三方单位</el-radio>
+                      </el-radio-group>
+                    </el-form-item>
+                    <el-form-item label="备注">
+                      <el-input type="textarea" v-model="form.remark" placeholder="备注"></el-input>
+                    </el-form-item>
+                  </el-col>
+                  <el-col :span="12">
+                    <!-- 自选-车号(选择),税率 -->
+                    <!-- 供应商-供应商,合同,项目,线路,计费方式,税率 -->
+                    <!-- 第三方-车号(手输),税率 -->
+                    <span v-if="form.supply_type == '0'">
+                      <el-form-item label="车牌号">
+                        <el-select v-model="form.supplier.car_no" placeholder="车牌号">
+                          <el-option v-for="item in carnoList" :key="item.label" :label="item.car_no" :value="item.id"> </el-option>
+                        </el-select>
+                      </el-form-item>
+                    </span>
+                    <span v-else-if="form.supply_type == '1'">
+                      <el-form-item label="供应商">
+                        <el-select v-model="form.supplier.client" placeholder="供应商" @change="changeClient">
+                          <el-option v-for="item in clientList" :key="item.label" :label="item.name" :value="item.id"> </el-option>
+                        </el-select>
+                      </el-form-item>
+                      <el-form-item label="合同">
+                        <el-select v-model="form.supplier.treaty" placeholder="合同" @change="changeTreaty">
+                          <el-option v-for="item in treatyList" :key="item.label" :label="item.number" :value="item.id"> </el-option>
+                        </el-select>
+                      </el-form-item>
+                      <el-form-item label="项目">
+                        <el-select v-model="form.supplier.item" placeholder="项目" @change="changeItem">
+                          <el-option v-for="item in itemList" :key="item.label" :label="item.name" :value="item.id"> </el-option>
+                        </el-select>
+                      </el-form-item>
+                      <el-form-item label="线路">
+                        <el-select v-model="form.supplier.route" placeholder="线路" @change="changeRoute">
+                          <el-option v-for="item in supRouteList" :key="item.label" :label="item.name" :value="item.id"> </el-option>
+                        </el-select>
+                      </el-form-item>
+                      <el-form-item label="计费方式">
+                        <el-select v-model="form.supplier.mode" placeholder="计费方式">
+                          <el-option v-for="item in modeList" :key="item.label" :label="item.name" :value="item.id"> </el-option>
+                        </el-select>
+                      </el-form-item>
+                    </span>
+                    <span v-else-if="form.supply_type == '2'">
+                      <el-form-item label="车牌号">
+                        <el-input v-model="form.supplier.car_no" placeholder="车牌号"></el-input>
+                      </el-form-item>
+                    </span>
+                    <el-form-item label="税率">
+                      <el-select v-model="form.supplier.taxes" placeholder="请选择税率" @change="changeTaxes">
+                        <el-option v-for="item in taxesList" :key="item.label" :label="item.label" :value="item.label"> </el-option>
+                      </el-select>
+                    </el-form-item>
+                  </el-col>
                 </el-form>
                 </el-form>
               </el-col>
               </el-col>
               <el-col :span="24" class="list">
               <el-col :span="24" class="list">
                 <el-col :span="24" class="rate">
                 <el-col :span="24" class="rate">
-                  <el-col :span="6" class="rateMoney">税前应收:{{ detailList.cost }}</el-col>
-                  <el-col :span="6" class="rateMoney">税后应收:{{ detailList.cost }}</el-col>
-                  <el-col :span="6" class="rateMoney">税前实收:{{ detailList.cost }}</el-col>
-                  <el-col :span="6" class="rateMoney">税后应收:{{ detailList.cost }}</el-col>
+                  <el-col :span="6" class="rateMoney">税前应收:{{ statNum.sq_ys || 0 }}</el-col>
+                  <el-col :span="6" class="rateMoney">税前实收:{{ statNum.sq_ss || 0 }}</el-col>
+                  <el-col :span="6" class="rateMoney">税后应收:{{ statNum.sh_ys || 0 }}</el-col>
+                  <el-col :span="6" class="rateMoney">税后实收:{{ statNum.sh_ss || 0 }}</el-col>
                 </el-col>
                 </el-col>
-                <data-table :fields="detailFields" :data="detailList" :usePage="false">
-                  <template #custom="{item}">
+                <data-table :fields="detailFields" :data="goodsList" :usePage="false">
+                  <template #custom="{item,row}">
                     <template v-if="item.model == 'cost'">
                     <template v-if="item.model == 'cost'">
-                      <el-input-number v-model="detailList.cost" controls-position="right" @change="handleChange" :min="1" size="mini"></el-input-number>
+                      <el-input-number v-model="row.cost" controls-position="right" @change="changeCost(row)" :min="1" size="mini"></el-input-number>
                     </template>
                     </template>
                   </template>
                   </template>
                 </data-table>
                 </data-table>
               </el-col>
               </el-col>
               <el-col :span="24" class="btn">
               <el-col :span="24" class="btn">
-                <el-button size="mini" type="primary" @click="create(form, detailList)">生成装车单</el-button>
+                <el-button size="mini" type="primary" @click="onSubmit()">生成装车单</el-button>
               </el-col>
               </el-col>
             </el-col>
             </el-col>
           </el-col>
           </el-col>
@@ -90,10 +144,24 @@
 
 
 <script>
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
 import { mapState, createNamespacedHelpers } from 'vuex';
+// 订单表
 const { mapActions: order } = createNamespacedHelpers('order');
 const { mapActions: order } = createNamespacedHelpers('order');
+// 客户表
 const { mapActions: client } = createNamespacedHelpers('client');
 const { mapActions: client } = createNamespacedHelpers('client');
+// 线路表
 const { mapActions: route } = createNamespacedHelpers('route');
 const { mapActions: route } = createNamespacedHelpers('route');
-
+// 装车表
+const { mapActions: transport } = createNamespacedHelpers('transport');
+// 字典表
+const { mapActions: dictionary } = createNamespacedHelpers('dictionary');
+// 车牌表
+const { mapActions: car } = createNamespacedHelpers('car');
+// 合同
+const { mapActions: treaty } = createNamespacedHelpers('treaty');
+// 项目表
+const { mapActions: project } = createNamespacedHelpers('project');
+// 计算方式
+const { mapActions: mode } = createNamespacedHelpers('mode');
 export default {
 export default {
   metaInfo() {
   metaInfo() {
     return { title: this.$route.meta.title };
     return { title: this.$route.meta.title };
@@ -120,48 +188,55 @@ export default {
       list: [],
       list: [],
       total: 0,
       total: 0,
       opera: [],
       opera: [],
+      // 装车单数据
+      form: {},
+      // 选择货物列表
       selected: [],
       selected: [],
-      form: {
-        number: 123566,
-        user: '张三',
-        date1: '',
-        resource: '',
-        desc: '',
-      },
-      //支出项列表
-      costList: [{ name: '支出项一' }, { name: '支出项二' }],
+      // 货物列表
       detailFields: [
       detailFields: [
-        { label: '订单号', model: 'ordernum' },
-        { label: '拆分单号', model: 'spilt' },
-        { label: '货物', model: 'goods' },
+        { label: '货物', model: 'name' },
         { label: '运输费用', model: 'cost', custom: 'true' },
         { label: '运输费用', model: 'cost', custom: 'true' },
         { label: '数量', model: 'number' },
         { label: '数量', model: 'number' },
         { label: '重量(t)', model: 'weight' },
         { label: '重量(t)', model: 'weight' },
         { label: '体积(m²)', model: 'volume' },
         { label: '体积(m²)', model: 'volume' },
-        { label: '要求发货日期', model: 'time' },
-      ],
-      detailList: [
-        {
-          id: '1',
-          ordernum: '123',
-          spilt: 'AW-YS-ZF-2018-005',
-          goods: '真皮',
-          cost: '',
-          number: '3',
-          weight: '40',
-          volume: '50',
-          time: '2020-01-09',
-        },
+        { label: '税前应收', model: 'sq_ys' },
+        { label: '税前实收', model: 'sq_ss' },
+        { label: '税后应收', model: 'sh_ys' },
+        { label: '税后实收', model: 'sh_ss' },
       ],
       ],
+      goodsList: [],
+      // 税收统计
+      statNum: {},
+      // 车牌号
+      carnoList: [],
+      // 供应商
+      supClientList: [],
+      // 合同
+      treatyList: [],
+      // 项目
+      itemList: [],
+      // 线路
+      supRouteList: [],
+      // 计费方式
+      modeList: [],
+      // 税率列表
+      taxesList: [],
     };
     };
   },
   },
   async created() {
   async created() {
+    await this.searchOther();
     await this.search();
     await this.search();
   },
   },
   methods: {
   methods: {
-    ...order(['query', 'create', 'update', 'delete', 'fetch']),
+    ...order(['query']),
     ...client({ clientQuery: 'query' }),
     ...client({ clientQuery: 'query' }),
     ...route({ routeQuery: 'query' }),
     ...route({ routeQuery: 'query' }),
+    ...transport({ transportNo: 'transportNo', transportCreate: 'create' }),
+    ...dictionary(['tree']),
+    ...car({ carQuery: 'query' }),
+    ...treaty({ treatyQuery: 'query' }),
+    ...project({ projectQuery: 'query' }),
+    ...mode({ modeQuery: 'query' }),
     async search({ skip = 0, limit = 8, ...info } = {}) {
     async search({ skip = 0, limit = 8, ...info } = {}) {
       //查订单
       //查订单
       let res = await this.query({ skip, limit, ...info });
       let res = await this.query({ skip, limit, ...info });
@@ -182,39 +257,169 @@ export default {
         const { data, total } = res;
         const { data, total } = res;
         this.$set(this, `routeList`, data);
         this.$set(this, `routeList`, data);
       }
       }
+      // 查询税率
+      res = await this.tree('sl');
+      if (this.$checkRes(res)) {
+        this.$set(this, `taxesList`, res[0].children);
+      }
     },
     },
+    // 选择货物
     toSelect(data) {
     toSelect(data) {
-      // console.log(data);
-      this.selected = data;
+      let newData = data.concat(this.selected);
+      this.$set(this, `selected`, newData);
     },
     },
-    toExport() {
+    // 发车
+    async toExport() {
+      let res = await this.transportNo();
+      if (this.$checkRes(res)) {
+        let data = {
+          no: res,
+          owner: this.user.id,
+          // 运输信息
+          supplier: {},
+        };
+        let goods = this.selected;
+        for (const val of goods) {
+          val.split_id = _.clone(val._id);
+          delete val._id;
+        }
+        this.$set(this, `goodsList`, goods);
+        this.$set(this, `form`, data);
+      }
       this.dialog = true;
       this.dialog = true;
     },
     },
-    handleChange(value) {
+    // 选择运输类型
+    changeSupply(value) {
       console.log(value);
       console.log(value);
     },
     },
-    create(data, detailList) {
-      console.log(data, detailList);
+    // 生成装车单
+    async onSubmit() {
+      let data = this.form;
+      data.goods = this.goodsList;
+      let res = await this.transportCreate(data);
+      if (this.$checkRes(res)) {
+        console.log(res);
+      }
     },
     },
-    // 查询客户
+    // 过滤客户
     getclient(value) {
     getclient(value) {
       const res = this.clientList.find(i => i.id === value);
       const res = this.clientList.find(i => i.id === value);
       if (res) return res.name;
       if (res) return res.name;
     },
     },
-    // 查询线路
+    // 过滤路线
     getroute(value) {
     getroute(value) {
       const res = this.routeList.find(i => i.id === value);
       const res = this.routeList.find(i => i.id === value);
       if (res) return res.name;
       if (res) return res.name;
     },
     },
+    // 过滤用户
+    getUser(value) {
+      let user = this.user;
+      if (value == user.id) return user.name;
+      else return value;
+    },
+    // 选择供应商,查询合同
+    async changeClient() {
+      let res = await this.treatyQuery({ type: '供应商' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `treatyList`, res.data);
+      }
+    },
+    // 选择合同,查询项目
+    async changeTreaty(value) {
+      let res = await this.projectQuery({ client: value });
+      if (this.$checkRes(res)) {
+        this.$set(this, `itemList`, res.data);
+      }
+    },
+    // 选择项目,查询线路
+    async changeItem(value) {
+      let res = await this.routeQuery({ treaty: value });
+      if (this.$checkRes(res)) {
+        this.$set(this, `supRouteList`, res.data);
+      }
+      let item = this.itemList.find(i => i.id == value);
+      if (item) {
+        this.$set(this.form.supplier, `taxes`, item.taxes);
+        this.changeTaxes(item.taxes);
+      }
+    },
+    // 选择线路,查询计算方式
+    async changeRoute(value) {
+      let res = await this.modeQuery({ item: value });
+      if (this.$checkRes(res)) {
+        this.$set(this, `modeList`, res.data);
+      }
+    },
+    // 选择税率
+    changeTaxes(value) {
+      let newData = this.goodsList;
+      for (const val of newData) {
+        val.taxes = value;
+      }
+      this.goodsList = [];
+      this.$set(this, `goodsList`, newData);
+    },
+    // 计算税收
+    changeCost(data) {
+      data.sq_ys = data.cost;
+      data.sq_ss = data.cost;
+      data.sh_ys = _.round(data.cost * data.taxes, 2);
+      data.sh_ss = _.round(data.cost * data.taxes, 2);
+      return data;
+    },
+    // 计算税收总数
+    searchSh() {
+      let data = {
+        sq_ys: _.round(
+          this.goodsList.reduce((p, n) => p + (n['sq_ys'] * 1 || 0), 0),
+          2
+        ),
+        sq_ss: _.round(
+          this.goodsList.reduce((p, n) => p + (n['sq_ss'] * 1 || 0), 0),
+          2
+        ),
+        sh_ys: _.round(
+          this.goodsList.reduce((p, n) => p + (n['sh_ys'] * 1 || 0), 0),
+          2
+        ),
+        sh_ss: _.round(
+          this.goodsList.reduce((p, n) => p + (n['sh_ss'] * 1 || 0), 0),
+          2
+        ),
+      };
+      let sq_ys = _.round(
+        this.goodsList.reduce((p, n) => p + (n['sq_ys'] * 1 || 0), 0),
+        2
+      );
+      if (data) this.$set(this, `statNum`, data);
+    },
     // 返回列表
     // 返回列表
     back() {
     back() {
       this.selected = [];
       this.selected = [];
       this.dialog = false;
       this.dialog = false;
     },
     },
+    // 查询其他信息
+    async searchOther() {
+      let res = await this.carQuery();
+      if (this.$checkRes(res)) {
+        this.$set(this, `carnoList`, res.data);
+      }
+    },
   },
   },
   computed: {
   computed: {
     ...mapState(['user']),
     ...mapState(['user']),
   },
   },
+  watch: {
+    goodsList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val) {
+          this.searchSh();
+        }
+      },
+    },
+  },
 };
 };
 </script>
 </script>