wxy 4 lat temu
rodzic
commit
f48a5714ed

+ 11 - 1
src/router/order.js

@@ -14,6 +14,16 @@ export default [
     component: () => import('../views/order/in.vue'),
     meta: { title: '收入管理' },
   },
+  {
+    path: '/order/inDetail',
+    component: () => import('../views/order/inDetail.vue'),
+    meta: { title: '收入详情' },
+  },
+  {
+    path: '/order/out',
+    component: () => import('../views/order/out.vue'),
+    meta: { title: '支出管理' },
+  },
   {
     path: '/order/goods',
     component: () => import('../views/order/goods.vue'),
@@ -22,7 +32,7 @@ export default [
   {
     path: '/order/transport',
     component: () => import('../views/order/transport/index.vue'),
-    meta: { title: '装车' },
+    meta: { title: '货物装车' },
   },
   {
     path: '/order/transport/sign',

+ 17 - 0
src/views/client/contract.vue

@@ -6,6 +6,7 @@
           <el-button type="primary" size="mini" @click="dialog = true">添加</el-button>
         </el-col>
         <el-col :span="24" class="info">
+          <!-- :select="true"在前面加上复选框  @handleSelect="toSelect"给复选框添加点击事件,如果想要点击事件好用的话列表必须给一个id要不然点击区分不了是不是同一个数据-->
           <data-table
             :fields="fields"
             :data="list"
@@ -13,16 +14,22 @@
             :total="total"
             :size="50"
             :step="10"
+            :select="true"
             @editor="editor"
             @delete="toDelete"
             @see="see"
             @query="search"
+            @handleSelect="toSelect"
           >
             <template #options="{item}">
               <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>
+            <template #filterEnd>
+              <el-button v-if="selected.length <= 0" type="primary" :disabled="true">未选择任何合同</el-button>
+              <el-button v-else type="primary" @click="toExport">导出选中合同</el-button>
+            </template>
           </data-table>
         </el-col>
       </el-col>
@@ -56,6 +63,7 @@ export default {
       ],
       list: [
         {
+          id: '1',
           name: 'xxx有限公司',
           num: 'AW-YS-ZF-2018-005',
           partA: '佛山市吉航物流有限公司',
@@ -65,6 +73,7 @@ export default {
           cycle: '月结',
         },
         {
+          id: '2',
           name: '吉林省鸿泽物流有限公司-梅克郎',
           num: '长春梅克郎长途项目',
           partA: '吉林省鸿泽物流有限公司',
@@ -93,6 +102,7 @@ export default {
       },
       //客户列表
       nameList: [{ name: '公司1' }, { name: '公司2' }, { name: '公司3' }, { name: '公司4' }, { name: '公司5' }],
+      selected: [],
     };
   },
   created() {},
@@ -122,6 +132,13 @@ export default {
     see() {
       this.$router.push({ path: '/client/project' });
     },
+    toSelect(data) {
+      // console.log(data);
+      this.selected = data;
+    },
+    toExport() {
+      console.log('导出');
+    },
   },
   computed: {
     ...mapState(['user']),

+ 9 - 0
src/views/order/goods.vue

@@ -98,6 +98,11 @@
               ></el-input-number>
             </template>
           </el-table-column>
+          <el-table-column label="操作">
+            <template slot-scope="scope">
+              <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
+            </template>
+          </el-table-column>
         </el-table-column>
       </el-table>
       <span slot="footer" class="dialog-footer">
@@ -202,6 +207,10 @@ export default {
     handleChange(value) {
       console.log(value);
     },
+    //删除
+    handleDelete(index, row) {
+      console.log(index, row);
+    },
   },
   computed: {
     ...mapState(['user']),

+ 7 - 2
src/views/order/in.vue

@@ -3,7 +3,7 @@
     <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" @assign="assign">
+          <data-table :fields="fields" :data="list" :opera="opera" :total="total" :size="50" :step="10" @query="search" @assign="assign" @modify="modify">
             <template #options="{item}">
               <template v-if="item.model == 'name'">
                 <el-option v-for="(item, index) in nameList" :key="index" :value="item.name" :label="item.name"></el-option>
@@ -37,10 +37,11 @@ export default {
   components: {},
   data: function() {
     return {
+      // todialog: true,
       fields: [
         { label: '订单号', model: 'num', filter: 'input' },
         { label: '客户', model: 'name', filter: 'select' },
-        { label: '要求发货日期', model: 'time', filter: 'input' },
+        { label: '要求发货日期', model: 'time', filter: 'date' },
         { label: '状态', model: 'sate' },
       ],
       list: [
@@ -91,6 +92,10 @@ export default {
     turnSave(data) {
       console.log(data);
     },
+    //修改收入
+    modify() {
+      this.$router.push({ path: '/order/inDetail' });
+    },
   },
   computed: {
     ...mapState(['user']),

+ 231 - 0
src/views/order/inDetail.vue

@@ -0,0 +1,231 @@
+<template>
+  <div id="inDetail">
+    <el-row>
+      <el-col :span="24" class="detail">
+        <el-col :span="24" class="top">
+          <el-button size="mini" type="primary" @click="$router.go(-1)">返回</el-button>
+          <span>收入详情</span>
+        </el-col>
+        <el-col :span="24" class="rate">
+          <el-col :span="24" class="tip"><span>关于长途运费:若是改成 他运且想根据设置的不同方式进行计算 需要重新生成订单,目前还无法处理这种情况</span></el-col>
+          <el-col :span="6" class="rateMoney">税前应收:{{ detailList1.cost1 }}</el-col>
+          <el-col :span="6" class="rateMoney">税后应收:{{ detailList1.cost2 }}</el-col>
+          <el-col :span="6" class="rateMoney">税前实收:{{ detailList1.cost3 }}</el-col>
+          <el-col :span="6" class="rateMoney">税后应收:{{ detailList1.cost4 }}</el-col>
+        </el-col>
+        <el-col :span="12" class="form">
+          <el-form ref="form" :model="detailForm" label-width="90px">
+            <el-form-item label="订单">
+              {{ detailForm.number }}
+            </el-form-item>
+            <el-form-item label="客户">
+              {{ detailForm.name }}
+            </el-form-item>
+            <el-form-item label="合同">
+              <el-select v-model="detailForm.contract" placeholder="请选择合同">
+                <el-option v-for="(item, index) in contractList" :key="index" :label="item.name" :value="item.name"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="项目">
+              <el-select v-model="detailForm.project" placeholder="请选择合同">
+                <el-option v-for="(item, index) in projectList" :key="index" :label="item.name" :value="item.name"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="项目线路">
+              <el-select v-model="detailForm.route" placeholder="请选择合同">
+                <el-option v-for="(item, index) in routeList" :key="index" :label="item.name" :value="item.name"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-form>
+        </el-col>
+        <el-col :span="17" class="list">
+          <el-tabs v-model="activeName">
+            <el-tab-pane label="货物列表" name="first">
+              <data-table :fields="detailFields" :data="detailList" :usePage="false">
+                <template #custom="{item}">
+                  <template v-if="item.model == 'rate'">
+                    <el-input-number v-model="item.rate" controls-position="right" @change="handleChange" :min="1" :max="10" size="mini"></el-input-number>
+                  </template>
+                  <template v-if="item.model == 'desc'">
+                    <el-input type="textarea" placeholder="请输入备注" v-model="item.desc"> </el-input>
+                  </template>
+                </template> </data-table
+            ></el-tab-pane>
+            <el-tab-pane label="其他收费项" name="second">
+              <el-col :span="24" style="text-align:right;margin-bottom: 10px">
+                <el-button type="primary" @click="addGoods">添加收费项</el-button>
+              </el-col>
+              <el-col :span="24">
+                <el-table :data="listData" stripe border>
+                  <el-table-column align="center" label="收入项">
+                    <template slot-scope="scope">
+                      <el-select v-model="scope.row.income" placeholder="请选择">
+                        <el-option v-for="item in options" :key="item.name" :label="item.name" :value="item.name"> </el-option>
+                      </el-select>
+                    </template>
+                  </el-table-column>
+                  <el-table-column align="center" label="税率">
+                    <template slot-scope="scope">
+                      <el-select v-model="scope.row.rate" placeholder="请选择">
+                        <el-option v-for="item in rateList" :key="item.name" :label="item.name" :value="item.name"> </el-option>
+                      </el-select>
+                    </template>
+                  </el-table-column>
+                  <el-table-column align="center" label="税前应收">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.before" placeholder="请输入税前应收"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column align="center" label="税后应收">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.after" placeholder="请输入税前应收" disabled></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column align="center" label="税前实收">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.paidBefor" placeholder="请输入税前应收" disabled></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column align="center" label="税后实收">
+                    <template slot-scope="scope">
+                      <el-input v-model="scope.row.paidAfter" placeholder="请输入税前应收" disabled></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column align="center" label="备注">
+                    <template slot-scope="scope">
+                      <el-input type="textarea" v-model="scope.row.desc" placeholder="请输入备注"></el-input>
+                    </template>
+                  </el-table-column>
+                  <el-table-column align="center" label="操作" width="70px">
+                    <template slot-scope="scope">
+                      <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-col>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'inDetail',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      detailList1: {
+        cost1: '200',
+        cost2: '300',
+        cost3: '400',
+        cost4: '500',
+      },
+      detailForm: { name: '1111', number: '1234', contract: '合同一', route: '线路一', project: '项目一' },
+      //合同列表
+      contractList: [],
+      //项目列表
+      projectList: [],
+      //线路列表
+      routeList: [{ name: '线路二' }],
+      detailFields: [
+        { label: '货物名称', model: 'name' },
+        { label: '计费方式', model: 'way' },
+        { label: '单价', model: 'price' },
+        { label: '税率', model: 'rate', custom: 'true' },
+        { label: '税前应收', model: 'before' },
+        { label: '税后应收', model: 'after' },
+        { label: '税前实收', model: 'paidBefor' },
+        { label: '税后应收', model: 'paidAfter' },
+        { label: '备注', model: 'desc', custom: 'true' },
+      ],
+      detailList: [
+        {
+          name: '1',
+          way: '123',
+          price: '111',
+          before: '33',
+          after: '3',
+          paidBefor: '40',
+          paidAfter: '50',
+        },
+      ],
+      activeName: 'first',
+      //收入项列表
+      options: [{ name: '保费' }, { name: '提送货费' }, { name: '运费' }],
+      //税率列表
+      rateList: [{ name: '1' }, { name: '2' }],
+      listData: [],
+    };
+  },
+  created() {},
+  methods: {
+    handleChange(value) {
+      console.log(value);
+    },
+    addGoods() {
+      this.listData.push({});
+    },
+    handleDelete(index, row) {
+      if (index > -1) {
+        this.listData.splice(index, 1);
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.detail {
+  .top {
+    position: relative;
+    text-align: right;
+    span {
+      position: absolute;
+      top: 0px;
+      left: 0px;
+    }
+  }
+  .form {
+    width: 30%;
+  }
+  .list {
+    width: 70%;
+  }
+}
+.rate {
+  margin-top: 10px;
+  margin-bottom: 10px;
+  .rateMoney {
+    border: 1px solid #ebeef5;
+    padding: 6px 0px;
+    height: 34px;
+    text-align: center;
+    font-size: 14px;
+    color: #606266;
+  }
+  .tip {
+    font-size: 13px;
+    background-color: #fdf6ec;
+    padding: 8px 0px;
+    text-align: center;
+    color: #e6a23c;
+  }
+}
+/deep/.el-input-number--mini {
+  width: 82px;
+}
+/deep/.el-input--mini {
+  width: 81px;
+}
+</style>

+ 268 - 0
src/views/order/out.vue

@@ -0,0 +1,268 @@
+<template>
+  <div id="out">
+    <el-row>
+      <animates>
+        <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" v-if="!dialog" @see="see">
+              <template #options="{item}">
+                <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 v-if="item.model == 'contract'">
+                  <el-option v-for="(item, index) in contractList" :key="index" :value="item.name" :label="item.name"></el-option>
+                </template>
+                <template v-if="item.model == 'project'">
+                  <el-option v-for="(item, index) in projectList" :key="index" :value="item.name" :label="item.name"></el-option>
+                </template>
+                <template v-if="item.model == 'route'">
+                  <el-option v-for="(item, index) in routeList" :key="index" :value="item.name" :label="item.name"></el-option>
+                </template>
+                <template v-if="item.model == 'way'">
+                  <el-option v-for="(item, index) in wayList" :key="index" :value="item.name" :label="item.name"></el-option>
+                </template>
+              </template>
+            </data-table>
+            <el-col :span="24" class="detail" v-else>
+              <el-col :span="24" class="top">
+                <el-button size="mini" type="primary" @click="$router.go(-1)">返回</el-button>
+                <span>支出详情</span>
+              </el-col>
+              <el-col :span="24" class="head">
+                <el-col :span="12" style="text-align:center">流水账号:xxxx</el-col>
+                <el-col :span="12" style="text-align:left">订单号:xxxx</el-col>
+              </el-col>
+              <el-card class="box-card">
+                <div slot="header" class="clearfix">
+                  <span>货物列表</span>
+                </div>
+                <div class="text item">
+                  <data-table :fields="detailFields" :data="detailList" :usePage="false"> </data-table>
+                </div>
+                <el-divider></el-divider>
+              </el-card>
+              <el-col :span="24" class="rate">
+                <el-col :span="6" class="rateMoney">税前应收:{{ detailList1.cost1 }}</el-col>
+                <el-col :span="6" class="rateMoney">税后应收:{{ detailList1.cost2 }}</el-col>
+                <el-col :span="6" class="rateMoney">税前实收:{{ detailList1.cost3 }}</el-col>
+                <el-col :span="6" class="rateMoney">税后应收:{{ detailList1.cost4 }}</el-col>
+                <el-col :span="24" class="tip"
+                  ><span>关于长途运费:若是改成 他运且想根据设置的不同方式进行计算 需要重新生成订单,目前还无法处理这种情况</span></el-col
+                >
+              </el-col>
+              <!-- <div style="margin-bottom: 20px; text-align:right">
+                <el-button size="small" @click="addTab(editableTabsValue)">
+                  + 添加支出
+                </el-button>
+              </div> -->
+              <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab">
+                <!-- <div style="margin-bottom: 20px; text-align:right">
+                  <el-button size="small" @click="addTab(editableTabsValue)">
+                    + 添加支出
+                  </el-button>
+                </div> -->
+                <el-tab-pane v-for="(item, index) in editableTabs" :key="index" :label="`支出${index + 1}`" :name="`${index}`">
+                  <el-col :span="24">
+                    <el-form ref="form" label-width="90px" :inline="true">
+                      <el-col :span="6">
+                        <el-form-item label="支出项">
+                          <el-select v-model="item.cost" 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-col>
+                      <el-form-item label="供应商方式">
+                        <el-radio-group v-model="item.supplierway">
+                          <el-radio label="自运"></el-radio>
+                          <el-radio label="他运"></el-radio>
+                        </el-radio-group>
+                      </el-form-item>
+                      <el-form-item label="供应商">
+                        <el-select v-model="item.supplier" placeholder="请选择供应商">
+                          <el-option v-for="(item, index) in supplierList" :key="index" :label="item.name" :value="item.name"></el-option>
+                        </el-select>
+                      </el-form-item>
+                      <el-form-item label="合同">
+                        <el-select v-model="item.supplier" placeholder="请选择合同">
+                          <el-option v-for="(item, index) in contractList" :key="index" :label="item.name" :value="item.name"></el-option>
+                        </el-select>
+                      </el-form-item>
+                      <el-form-item label="税率">
+                        <el-select v-model="item.rate" placeholder="请选择合同">
+                          <el-option v-for="(item, index) in rateList" :key="index" :label="item.name" :value="item.name"></el-option>
+                        </el-select>
+                      </el-form-item>
+                      <el-form-item label="税前应付">
+                        <el-input v-model="detailList1.cost1"></el-input>
+                      </el-form-item>
+                      <el-form-item label="税后应付">
+                        <el-input v-model="detailList1.cost2"></el-input>
+                      </el-form-item>
+                      <el-form-item label="税前实付">
+                        <el-input v-model="detailList1.cost3"></el-input>
+                      </el-form-item>
+                      <el-form-item label="税前实付">
+                        <el-input v-model="detailList1.cost4"></el-input>
+                      </el-form-item>
+                      <el-form-item label="备注">
+                        <el-input type="textarea" v-model="item.desc"></el-input>
+                      </el-form-item>
+                    </el-form>
+                  </el-col>
+                </el-tab-pane>
+              </el-tabs>
+            </el-col>
+          </el-col>
+        </el-col>
+      </animates>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'out',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      dialog: true,
+      fields: [
+        { label: '订单号', model: 'num', filter: 'input' },
+        { label: '客户', model: 'name', filter: 'select' },
+        { label: '长途运费金额', model: 'money' },
+        { 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: '银行转账',
+        },
+      ],
+      total: 0,
+      opera: [{ label: '查看', method: 'see' }],
+      //客户列表
+      nameList: [{ name: '客户一' }, { name: '客户二' }],
+      //合同列表
+      contractList: [{ name: '合同一' }, { name: '合同二' }],
+      //项目列表
+      projectList: [{ name: '项目一' }, { name: '项目二' }],
+      //线路列表
+      routeList: [{ name: '线路一' }, { name: '线路二' }],
+      //付费方式列表
+      wayList: [{ name: '方式一' }, { name: '方式二' }],
+      detailFields: [
+        { label: '货物', model: 'goods' },
+        { label: '数量', model: 'number' },
+        { label: '重量(t)', model: 'weight' },
+        { label: '体积(m²)', model: 'volume' },
+      ],
+      detailList: [
+        {
+          goods: '真皮',
+          number: '3',
+          weight: '40',
+          volume: '50',
+        },
+      ],
+      detailList1: {
+        cost1: '200',
+        cost2: '300',
+        cost3: '400',
+        cost4: '500',
+      },
+      editableTabsValue: '1',
+      editableTabs: [],
+      tabIndex: 0,
+      //支出项列表
+      costList: [{ name: '罚款' }, { name: '过桥费' }, { name: '油费' }, { name: '长途运费' }],
+      //供应商列表
+      supplierList: [{ name: '供应商一' }, { name: '供应商二' }],
+      //合同列表
+      // contractList: [{ name: '合同一' }, { name: '合同二' }],
+      //税率列表
+      rateList: [{ name: '1' }, { name: '2' }],
+    };
+  },
+  created() {},
+  methods: {
+    async search() {
+      console.log('查询');
+    },
+    see() {
+      console.log('查看');
+      this.dialog = true;
+    },
+    addTab(targetName) {
+      this.editableTabs.push({});
+      console.log(targetName);
+      // this.editableTabsValue = targetName;
+    },
+    removeTab(targetName) {
+      const name1 = Number(targetName);
+      if (name1 > -1) {
+        this.editableTabs.splice(name1, 1);
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.detail {
+  .top {
+    position: relative;
+    text-align: right;
+    span {
+      position: absolute;
+      top: 0px;
+      left: 0px;
+    }
+  }
+  .head {
+    margin: 20px 0px;
+    font-size: 16px;
+  }
+}
+/deep/.rate {
+  margin-top: 10px;
+  margin-bottom: 10px;
+  .rateMoney {
+    border: 1px solid #ebeef5;
+    padding: 6px 0px;
+    height: 34px;
+    text-align: center;
+    font-size: 14px;
+    color: #606266;
+  }
+  .tip {
+    font-size: 13px;
+    background-color: #fdf6ec;
+    padding: 8px 0px;
+    text-align: center;
+    color: #e6a23c;
+  }
+}
+/deep/.el-button--small,
+.el-button--small.is-round {
+  color: #409eff;
+  background: #ecf5ff;
+  border-color: #b3d8ff;
+}
+/deep/.el-form--inline .el-form-item__content {
+  width: 185px;
+}
+</style>

+ 182 - 6
src/views/order/transport/index.vue

@@ -1,9 +1,77 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24">
-        <p>index</p>
-      </el-col>
+      <animates>
+        <el-col :span="24" class="container">
+          <el-col :span="24" class="info">
+            <!-- :select="true"在前面加上复选框  @handleSelect="toSelect"给复选框添加点击事件,如果想要点击事件好用的话列表必须给一个id要不然点击区分不了是不是同一个数据-->
+            <data-table :fields="fields" :data="list" :total="total" :size="50" :step="10" :select="true" @handleSelect="toSelect" v-if="!dialog">
+              <template #filterEnd>
+                <el-button v-if="selected.length <= 0" type="primary" :disabled="true">未选择</el-button>
+                <el-button v-else type="primary" @click="toExport">发车</el-button>
+              </template>
+            </data-table>
+            <el-col :span="24" class="detail" v-else>
+              <el-col :span="24" class="top">
+                <el-button size="mini" type="primary" @click="$router.go(-1)">返回</el-button>
+                <span>填写装车单</span>
+              </el-col>
+              <el-col :span="12" class="form">
+                <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-form>
+              </el-col>
+              <el-col :span="24" class="list">
+                <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>
+                <data-table :fields="detailFields" :data="detailList" :usePage="false">
+                  <template #custom="{item}">
+                    <template v-if="item.model == 'cost'">
+                      <el-input-number
+                        v-model="detailList.cost"
+                        controls-position="right"
+                        @change="handleChange"
+                        :min="1"
+                        :max="10"
+                        size="mini"
+                      ></el-input-number>
+                    </template>
+                  </template>
+                </data-table>
+              </el-col>
+              <el-col :span="24" class="btn">
+                <el-button size="mini" type="primary" @click="create(form, detailList)">生成装车单</el-button>
+              </el-col>
+            </el-col>
+          </el-col>
+        </el-col>
+      </animates>
     </el-row>
   </div>
 </template>
@@ -18,14 +86,122 @@ export default {
   props: {},
   components: {},
   data: function() {
-    return {};
+    return {
+      dialog: true,
+      fields: [
+        { label: '订单号', model: 'ordernum' },
+        { label: '拆分单号', model: 'spilt' },
+        { label: '货物', model: 'goods' },
+        { label: '运输费用', model: 'cost' },
+        { label: '数量', model: 'number' },
+        { label: '重量(t)', model: 'weight' },
+        { label: '体积(m²)', model: 'volume' },
+        { label: '要求发货日期', model: 'time' },
+      ],
+      list: [
+        {
+          id: '1',
+          ordernum: '123',
+          spilt: 'AW-YS-ZF-2018-005',
+          goods: '真皮',
+          cost: '40',
+          number: '3',
+          weight: '40',
+          volume: '50',
+          time: '2020-01-09',
+        },
+        {
+          id: '2',
+          ordernum: '123',
+          spilt: 'AW-YS-ZF-2018-005',
+          goods: '真皮',
+          cost: '40',
+          number: '3',
+          weight: '40',
+          volume: '50',
+          time: '2020-01-09',
+        },
+      ],
+      total: 0,
+      selected: [],
+      form: {
+        number: 123566,
+        user: '张三',
+        date1: '',
+        resource: '',
+        desc: '',
+      },
+      //支出项列表
+      costList: [{ name: '支出项一' }, { name: '支出项二' }],
+      detailFields: [
+        { label: '订单号', model: 'ordernum' },
+        { label: '拆分单号', model: 'spilt' },
+        { label: '货物', model: 'goods' },
+        { label: '运输费用', model: 'cost', custom: 'true' },
+        { label: '数量', model: 'number' },
+        { label: '重量(t)', model: 'weight' },
+        { 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',
+        },
+      ],
+    };
   },
   created() {},
-  methods: {},
+  methods: {
+    toSelect(data) {
+      // console.log(data);
+      this.selected = data;
+    },
+    toExport() {
+      this.dialog = true;
+    },
+    handleChange(value) {
+      console.log(value);
+    },
+    create(data, detailList) {
+      console.log(data, detailList);
+    },
+  },
   computed: {
     ...mapState(['user']),
   },
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.detail {
+  .top {
+    position: relative;
+    text-align: right;
+    span {
+      position: absolute;
+      top: 0px;
+      left: 0px;
+    }
+  }
+}
+/deep/.rateMoney {
+  border: 1px solid #ebeef5;
+  padding: 6px 0px;
+  height: 34px;
+  text-align: center;
+  font-size: 14px;
+  color: #606266;
+}
+/deep/.btn {
+  margin: 30px 0px;
+  text-align: center;
+}
+</style>

+ 22 - 5
src/views/supplier/contract.vue

@@ -18,12 +18,18 @@
             @delete="toDelete"
             @query="search"
             @see="see"
+            :select="true"
+            @handleSelect="toSelect"
           >
             <template #options="{item}">
               <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>
+            <template #filterEnd>
+              <el-button v-if="selected.length <= 0" type="primary" :disabled="true">未选择任何合同</el-button>
+              <el-button v-else type="primary" @click="toExport">导出选中合同</el-button>
+            </template>
           </data-table>
         </el-col>
       </el-col>
@@ -37,6 +43,7 @@
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
+const _ = require('lodash');
 export default {
   metaInfo() {
     return { title: this.$route.meta.title };
@@ -57,6 +64,7 @@ export default {
       ],
       list: [
         {
+          id: '1',
           name: '长春市美吉物流有限公司',
           num: '123455',
           partA: '甲方1',
@@ -66,11 +74,12 @@ export default {
           cycle: '月',
         },
         {
-          name: '长春市美吉物流有限公司',
-          num: '123455',
-          partA: '甲方1',
-          partB: '乙方1',
-          period: '一年',
+          id: '2',
+          name: '2',
+          num: '2',
+          partA: '甲方2',
+          partB: '乙方2',
+          period: '兩年',
           way: '月结',
           cycle: '月',
         },
@@ -94,6 +103,7 @@ export default {
       },
       //供應商列表
       nameList: [{ name: '供应商1' }, { name: '供应商2' }, { name: '供应商3' }, { name: '供应商4' }, { name: '供应商5' }],
+      selected: [],
     };
   },
   created() {},
@@ -123,6 +133,13 @@ export default {
     see() {
       this.$router.push({ path: '/supplier/project' });
     },
+    toSelect(data) {
+      // console.log(data);
+      this.selected = data;
+    },
+    toExport() {
+      console.log('导出');
+    },
   },
   computed: {
     ...mapState(['user']),