Browse Source

Merge branch 'master' of http://git.cc-lotus.info/Consumables/admin-cms-two

YY 3 năm trước cách đây
mục cha
commit
492780a461

+ 21 - 26
src/views/menu/apply/index.vue

@@ -3,7 +3,7 @@
     <el-row>
       <el-col :span="24" class="main animate__animated animate__backInRight">
         <el-col :span="24" class="one">
-          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView" @receive="torEceive" @edit="toEdit">
+          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView" @receive="torEceive">
             <template #selfbtn>
               <el-button type="primary" size="mini" @click="toAdd()">添加信息</el-button>
             </template>
@@ -22,7 +22,6 @@
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
-const moment = require('moment');
 export default {
   name: 'index',
   props: {},
@@ -34,15 +33,15 @@ export default {
     return {
       // 数据项
       fields: [
+        { label: '联系人', prop: 'user_name', filter: true },
         { label: '联系电话', prop: 'user_phone', filter: true },
-        { label: '审核时间', prop: 'examine_date', filter: true },
-        { label: '审核状态', prop: 'status_name', filter: true },
+        { label: '审核时间', prop: 'examine_date' },
+        { label: '审核状态', prop: 'status_name' },
       ],
       //操作项
       opera: [
-        { label: '详细信息', method: 'view' },
-        { label: '领取确定', method: 'receive', type: 'success', confirm: true },
-        { label: '修改信息', method: 'edit' },
+        { label: '详情', method: 'view' },
+        { label: '领取确定', method: 'receive', type: 'success', confirm: true, display: (i) => i.status == '2' },
       ],
       //表格数据
       list: [
@@ -55,6 +54,18 @@ export default {
           status_name: '待审',
           examine_desc: '我想不同意,但我还是同意了',
           order: [{ name: '小洋人', num: '121', desc: '别卖太便宜了,赔钱' }],
+          status: '1',
+        },
+        {
+          id: '123',
+          user_name: '法外狂徒张三',
+          user_phone: '12345678901',
+          examine_name: '李四',
+          examine_date: '2022-5-18',
+          status_name: '待审',
+          examine_desc: '我想不同意,但我还是同意了',
+          order: [{ name: '小洋人', num: '121', desc: '别卖太便宜了,赔钱' }],
+          status: '2',
         },
       ],
       // 列表数据总数
@@ -69,7 +80,7 @@ export default {
   },
   methods: {
     //查询数据
-    async search() {},
+    async search({ skip = 0, limit = 10, ...info } = {}) {},
     //详细信息
     async toView({ data }) {
       this.$set(this, `form`, data);
@@ -77,23 +88,7 @@ export default {
     },
     //领取确定
     async torEceive({ data }) {
-      this.$confirm('您是否确认领取?', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-      })
-        .then(() => {
-          this.$message({
-            type: 'success',
-            message: '删除成功!',
-          });
-        })
-        .catch(() => {
-          this.$message({
-            type: 'info',
-            message: '已取消删除',
-          });
-        });
+      console.log(data);
     },
     // 添加
     toAdd() {
@@ -104,7 +99,7 @@ export default {
       this.$set(this, `form`, data);
       this.dialog = { title: '修改信息', show: true, type: '1', widths: '40%' };
     },
-    // 提交保存,建/修改
+    // 提交保存,建/修改
     async toSave({ data }) {
       console.log(data);
     },

+ 5 - 5
src/views/menu/apply/parts/form-1.vue

@@ -9,7 +9,7 @@
                 <el-button type="primary" size="mini" @click="toAddOrder()">添加</el-button>
               </el-col>
               <el-col :span="24" class="table">
-                <el-table :data="form.order" style="width: 100%" border>
+                <el-table :data="form.order" style="width: 100%" border stripe size="mini">
                   <el-table-column prop="name" label="商品名称" align="center" show-overflow-tooltip> </el-table-column>
                   <el-table-column prop="num" label="商品数量" align="center" show-overflow-tooltip> </el-table-column>
                   <el-table-column prop="desc" label="特殊说明" align="center" show-overflow-tooltip> </el-table-column>
@@ -48,9 +48,9 @@ export default {
         { label: '商品列表', model: 'order', custom: true },
       ],
       rules: {
-        user_name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
-        user_phone: [{ required: true, message: '请输入电话', trigger: 'blur' }],
-        order: [{ required: true, message: '请添加商品信息', trigger: 'change' }],
+        user_name: [{ required: true, message: '请输入姓名' }],
+        user_phone: [{ required: true, message: '请输入电话' }],
+        order: [{ required: true, message: '请添加商品信息' }],
       },
       // 弹框
       dialog: { title: '信息管理', show: false, type: '1' },
@@ -77,7 +77,7 @@ export default {
       this.toClose();
     },
     // 删除商品信息
-    orderDelete(index, data) {
+    orderDelete(index) {
       this.$emit('orderDelete', { index: index });
     },
     toClose() {

+ 6 - 7
src/views/menu/apply/parts/info-1.vue

@@ -5,7 +5,7 @@
         <data-form :fields="fields" :data="form" :needSave="false">
           <template #custom="{ item }">
             <template v-if="item.model === 'order'">
-              <data-table :fields="orderField" :opera="opera" :data="form.order" :usePage="false"> </data-table>
+              <data-table :fields="orderField" :opera="[]" :data="form.order" :usePage="false"> </data-table>
             </template>
           </template>
         </data-form>
@@ -24,11 +24,11 @@ export default {
     return {
       //表单配置项
       fields: [
-        { label: '姓名', model: 'user_name' },
-        { label: '电话', model: 'user_phone' },
-        { label: '审核人', model: 'examine_name' },
-        { label: '审核时间', model: 'examine_date' },
-        { label: '审核意见', model: 'examine_desc' },
+        { label: '姓名', model: 'user_name', readonly: true },
+        { label: '电话', model: 'user_phone', readonly: true },
+        { label: '审核人', model: 'examine_name', readonly: true },
+        { label: '审核时间', model: 'examine_date', readonly: true },
+        { label: '审核意见', model: 'examine_desc', type: 'textarea', readonly: true },
         { label: '商品列表', model: 'order', custom: true },
       ],
       // 商品列表
@@ -37,7 +37,6 @@ export default {
         { label: '商品数量', prop: 'num' },
         { label: '特殊说明', prop: 'desc' },
       ],
-      opera: [],
     };
   },
   created() {},

+ 87 - 6
src/views/menu/apply_examine/index.vue

@@ -1,22 +1,99 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24" class="main animate__animated animate__backInRight"> test </el-col>
+      <el-col :span="24" class="main animate__animated animate__backInRight">
+        <el-col :span="24" class="one">
+          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView" @export="toExport"> </data-table>
+        </el-col>
+      </el-col>
     </el-row>
+    <e-dialog :dialog="dialog" @toClose="toClose">
+      <template slot="info">
+        <form-1 :form="form" v-if="dialog.type == '1'" @toSave="toSave" :statusList="statusList"></form-1>
+        <info-1 :form="form" v-else-if="dialog.type == '2'"></info-1>
+      </template>
+    </e-dialog>
   </div>
 </template>
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
+const moment = require('moment');
 export default {
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    form1: () => import('./parts/form-1.vue'),
+    info1: () => import('./parts/info-1.vue'),
+  },
   data: function () {
-    return {};
+    return {
+      // 数据项
+      fields: [
+        { label: '联系电话', prop: 'user_phone', filter: true },
+        { label: '审核时间', prop: 'examine_date', filter: true },
+        { label: '审核状态', prop: 'status_name', filter: true },
+      ],
+      //操作项
+      opera: [
+        { label: '详细信息', method: 'view' },
+        { label: '导出数据', method: 'export', type: 'success' },
+      ],
+      //表格数据
+      list: [
+        {
+          id: '111',
+          user_name: '法外狂徒张三',
+          user_phone: '12345678901',
+          examine_name: '李四',
+          examine_date: '2022-5-18',
+          status_name: '待审',
+          examine_desc: '我想不同意,但我还是同意了',
+          order: [{ name: '小洋人', num: '121', desc: '别卖太便宜了,赔钱' }],
+        },
+      ],
+      // 列表数据总数
+      total: 0,
+      //弹框
+      dialog: { title: '详细信息', show: false, type: '1' },
+      form: { order: [] },
+      // 状态
+      statusList: [
+        { value: '0', label: '待审中' },
+        { value: '1', label: '通过' },
+        { value: '-1', label: '拒绝' },
+        { value: '2', label: '有货,可领取' },
+        { value: '3', label: '无货,需采买' },
+        { value: '4', label: '领取确认完成' },
+      ],
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    //查询数据
+    async search() {},
+    //详细信息
+    async toView({ data }) {
+      this.$set(this, `form`, data);
+      this.dialog = { title: '详细信息', show: true, type: '2', widths: '40%' };
+    },
+    //导出数据
+    async toExport({ data }) {
+      this.dialog = { title: '导出条件', show: true, type: '1', widths: '40%' };
+    },
+    // 提交保存,创建/修改
+    async toSave({ data }) {
+      console.log(data);
+    },
+    //关闭
+    toClose() {
+      this.form = { order: [] };
+      this.dialog = { title: '详细信息', show: false, type: '1' };
+      this.search();
+    },
   },
-  created() {},
-  methods: {},
   computed: {
     ...mapState(['user']),
   },
@@ -33,4 +110,8 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+/deep/.el-dialog__body {
+  min-height: 400px;
+}
+</style>

+ 72 - 0
src/views/menu/apply_examine/parts/form-1.vue

@@ -0,0 +1,72 @@
+<template>
+  <div id="form-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :rules="rules" @save="toSave">
+          <template #options="{ item }">
+            <template v-if="item.model === 'status'">
+              <el-option v-for="(i, index) in statusList" :key="index" :label="`${i.label}`" :value="i.value"></el-option>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'form-1',
+  props: { form: { type: Object }, statusList: { type: Array } },
+  components: {},
+  data: function () {
+    return {
+      //表单配置项
+      fields: [
+        { label: '申请人姓名', model: 'examine_name' },
+        { label: '商品状态', model: 'status', type: 'select' },
+        { label: '开始时间', model: 'start_time', type: 'date' },
+        { label: '结束时间', model: 'end_time', type: 'date' },
+      ],
+      rules: {
+        examine_name: [{ required: true, message: '请输入申请人姓名' }],
+        start_time: [{ required: true, message: '请选择开始时间' }],
+        end_time: [{ required: true, message: '请选择结束时间' }],
+        status: [{ required: true, message: '请选择商品状态' }],
+      },
+    };
+  },
+  created() {},
+  methods: {
+    toSave({ data }) {
+      this.$emit('toSave', { data: data });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .table {
+    margin-top: 15px;
+  }
+}
+/deep/ .el-form-item {
+  float: left;
+  width: 100%;
+}
+</style>

+ 66 - 0
src/views/menu/apply_examine/parts/info-1.vue

@@ -0,0 +1,66 @@
+<template>
+  <div id="info-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :needSave="false">
+          <template #custom="{ item }">
+            <template v-if="item.model === 'order'">
+              <data-table :fields="orderField" :opera="opera" :data="form.order" :usePage="false"> </data-table>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'info-1',
+  props: { form: { type: Object } },
+  components: {},
+  data: function () {
+    return {
+      //表单配置项
+      fields: [
+        { label: '姓名', model: 'user_name' },
+        { label: '电话', model: 'user_phone' },
+        { label: '审核人', model: 'examine_name' },
+        { label: '审核时间', model: 'examine_date' },
+        { label: '审核意见', model: 'examine_desc' },
+        { label: '商品列表', model: 'order', custom: true },
+      ],
+      // 商品列表
+      orderField: [
+        { label: '商品名称', prop: 'name' },
+        { label: '商品数量', prop: 'num' },
+        { label: '特殊说明', prop: 'desc' },
+      ],
+      opera: [],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/ .el-form-item {
+  float: left;
+  width: 100%;
+}
+</style>

+ 73 - 6
src/views/menu/apply_review/index.vue

@@ -1,22 +1,85 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24" class="main animate__animated animate__backInRight"> test </el-col>
+      <el-col :span="24" class="main animate__animated animate__backInRight">
+        <el-col :span="24" class="one">
+          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView"></data-table>
+        </el-col>
+      </el-col>
     </el-row>
+    <e-dialog :dialog="dialog" @toClose="toClose">
+      <template slot="info">
+        <info-1 :form="form"></info-1>
+      </template>
+    </e-dialog>
   </div>
 </template>
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
+const moment = require('moment');
 export default {
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    info1: () => import('./parts/info-1.vue'),
+  },
   data: function () {
-    return {};
+    return {
+      // 数据项
+      fields: [
+        { label: '联系电话', prop: 'user_phone', filter: true },
+        { label: '审核时间', prop: 'examine_date', filter: true },
+        { label: '审核状态', prop: 'status_name', filter: true },
+      ],
+      //操作项
+      opera: [{ label: '详细信息', method: 'view' }],
+      //表格数据
+      list: [
+        {
+          id: '111',
+          user_name: '法外狂徒张三',
+          user_phone: '12345678901',
+          examine_name: '李四',
+          examine_date: '2022-5-18',
+          status_name: '待审',
+          examine_desc: '我想不同意,但我还是同意了',
+          order: [{ name: '小洋人', num: '121', desc: '别卖太便宜了,赔钱' }],
+        },
+      ],
+      // 列表数据总数
+      total: 0,
+      //弹框
+      dialog: { title: '详细信息', show: false, type: '1' },
+      form: { order: [] },
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    //查询数据
+    async search() {},
+    //详细信息
+    async toView({ data }) {
+      this.$set(this, `form`, data);
+      this.dialog = { title: '详细信息', show: true, type: '1', widths: '40%' };
+    },
+    //关闭
+    toClose() {
+      this.form = { order: [] };
+      this.dialog = { title: '详细信息', show: false, type: '1' };
+      this.search();
+    },
+    // 商品信息保存
+    orderSave({ data }) {
+      this.form.order.push(data);
+    },
+    // 删除商品信息
+    orderDelete({ index }) {
+      this.form.order.splice(index, 1);
+    },
   },
-  created() {},
-  methods: {},
   computed: {
     ...mapState(['user']),
   },
@@ -33,4 +96,8 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+/deep/.el-dialog__body {
+  min-height: 400px;
+}
+</style>

+ 66 - 0
src/views/menu/apply_review/parts/info-1.vue

@@ -0,0 +1,66 @@
+<template>
+  <div id="info-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :needSave="false">
+          <template #custom="{ item }">
+            <template v-if="item.model === 'order'">
+              <data-table :fields="orderField" :opera="opera" :data="form.order" :usePage="false"> </data-table>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'info-1',
+  props: { form: { type: Object } },
+  components: {},
+  data: function () {
+    return {
+      //表单配置项
+      fields: [
+        { label: '姓名', model: 'user_name' },
+        { label: '电话', model: 'user_phone' },
+        { label: '审核人', model: 'examine_name' },
+        { label: '审核时间', model: 'examine_date' },
+        { label: '审核意见', model: 'examine_desc' },
+        { label: '商品列表', model: 'order', custom: true },
+      ],
+      // 商品列表
+      orderField: [
+        { label: '商品名称', prop: 'name' },
+        { label: '商品数量', prop: 'num' },
+        { label: '特殊说明', prop: 'desc' },
+      ],
+      opera: [],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/ .el-form-item {
+  float: left;
+  width: 100%;
+}
+</style>

+ 104 - 6
src/views/menu/market_buy/index.vue

@@ -1,22 +1,116 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24" class="main animate__animated animate__backInRight"> test </el-col>
+      <el-col :span="24" class="main animate__animated animate__backInRight">
+        <el-col :span="24" class="one">
+          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView" @export="toExport">
+            <template #selfbtn>
+              <el-button type="primary" size="mini" @click="toAdd()">添加采购申请</el-button>
+            </template>
+          </data-table>
+        </el-col>
+      </el-col>
     </el-row>
+    <e-dialog :dialog="dialog" @toClose="toClose">
+      <template slot="info">
+        <file-1 :form="form" v-if="dialog.type == '1'" @toSave="toSave" :statusList="statusList"></file-1>
+        <info-1 :form="form" v-else-if="dialog.type == '2'"></info-1>
+        <form-1 :form="form" v-else-if="dialog.type == '3'"></form-1>
+      </template>
+    </e-dialog>
   </div>
 </template>
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
+const moment = require('moment');
 export default {
   name: 'index',
   props: {},
-  components: {},
+  components: {
+    file1: () => import('./parts/file-1.vue'),
+    info1: () => import('./parts/info-1.vue'),
+    form1: () => import('./parts/form-1.vue'),
+  },
   data: function () {
-    return {};
+    return {
+      // 数据项
+      fields: [
+        { label: '订单编号', prop: 'order_num', filter: true },
+        { label: '收货人', prop: 'receive_user_name', filter: true },
+        { label: '供货单位', prop: 'mech_name', filter: true },
+        { label: '货物状态', prop: 'status_name', filter: true },
+      ],
+      //操作项
+      opera: [
+        { label: '详细信息', method: 'view' },
+        { label: '导出数据', method: 'export', type: 'success' },
+      ],
+      //表格数据
+      list: [
+        {
+          order_num: 'Hgj4757945hdFueu',
+          receive_user_name: '胡图图',
+          mech_name: '翻斗幼儿园-小豆班',
+          status_name: '待供货单位确认',
+          status: '1',
+          user_name: '采购人员',
+          user_phone: '12345678901',
+          money: '3344',
+          receive_user_phone: '98765432109',
+          receive_address: '翻斗大街翻斗花园2号楼1001室',
+          order: [
+            { name: '小洋人', num: '123', money: '3000' },
+            { name: '娃哈哈', num: '123', money: '344' },
+          ],
+        },
+      ],
+      // 列表数据总数
+      total: 0,
+      //弹框
+      dialog: { title: '详细信息', show: false, type: '1' },
+      form: { order: [] },
+      // 状态
+      statusList: [
+        { value: '0', label: '待审中' },
+        { value: '1', label: '通过' },
+        { value: '-1', label: '拒绝' },
+        { value: '2', label: '有货,可领取' },
+        { value: '3', label: '无货,需采买' },
+        { value: '4', label: '领取确认完成' },
+      ],
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    //查询数据
+    async search() {},
+    //详细信息
+    async toView({ data }) {
+      this.$set(this, `form`, data);
+      this.dialog = { title: '详细信息', show: true, type: '2', widths: '40%' };
+    },
+    //导出数据
+    async toExport({ data }) {
+      this.dialog = { title: '导出条件', show: true, type: '1', widths: '40%' };
+    },
+    // 提交保存,创建/修改
+    async toSave({ data }) {
+      console.log(data);
+    },
+    // 添加
+    toAdd() {
+      this.dialog = { title: '添加信息', show: true, type: '3', widths: '40%' };
+    },
+    //关闭
+    toClose() {
+      this.form = { order: [] };
+      this.dialog = { title: '详细信息', show: false, type: '1' };
+      this.search();
+    },
   },
-  created() {},
-  methods: {},
   computed: {
     ...mapState(['user']),
   },
@@ -33,4 +127,8 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+/deep/.el-dialog__body {
+  min-height: 400px;
+}
+</style>

+ 76 - 0
src/views/menu/market_buy/parts/file-1.vue

@@ -0,0 +1,76 @@
+<template>
+  <div id="file-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :rules="rules" @save="toSave">
+          <template #options="{ item }">
+            <template v-if="item.model === 'status'">
+              <el-option v-for="(i, index) in statusList" :key="index" :label="`${i.label}`" :value="i.value"></el-option>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'file-1',
+  props: { form: { type: Object }, statusList: { type: Array } },
+  components: {},
+  data: function () {
+    return {
+      //表单配置项
+      fields: [
+        { label: '采买人姓名', model: 'user_name' },
+        { label: '供货单位', model: 'mech_name' },
+        { label: '收货人姓名', model: 'receive_user_name' },
+        { label: '商品状态', model: 'status', type: 'select' },
+        { label: '开始时间', model: 'start_time', type: 'date' },
+        { label: '结束时间', model: 'end_time', type: 'date' },
+      ],
+      rules: {
+        user_name: [{ required: true, message: '请输入采买人姓名' }],
+        mech_name: [{ required: true, message: '请输入供货单位' }],
+        receive_user_name: [{ required: true, message: '请输入收货人姓名' }],
+        start_time: [{ required: true, message: '请选择开始时间' }],
+        end_time: [{ required: true, message: '请选择结束时间' }],
+        status: [{ required: true, message: '请选择商品状态' }],
+      },
+    };
+  },
+  created() {},
+  methods: {
+    toSave({ data }) {
+      this.$emit('toSave', { data: data });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .table {
+    margin-top: 15px;
+  }
+}
+/deep/ .el-form-item {
+  float: left;
+  width: 100%;
+}
+</style>

+ 114 - 0
src/views/menu/market_buy/parts/form-1.vue

@@ -0,0 +1,114 @@
+<template>
+  <div id="form-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :rules="rules" @save="toSave">
+          <template #custom="{ item }">
+            <template v-if="item.model === 'order'">
+              <el-col :span="24">
+                <el-button type="primary" size="mini" @click="toAddOrder()">添加</el-button>
+              </el-col>
+              <el-col :span="24" class="table">
+                <el-table :data="form.order" style="width: 100%" border>
+                  <el-table-column prop="name" label="商品名称" align="center" show-overflow-tooltip> </el-table-column>
+                  <el-table-column prop="num" label="商品数量" align="center" show-overflow-tooltip> </el-table-column>
+                  <el-table-column prop="desc" label="特殊说明" align="center" show-overflow-tooltip> </el-table-column>
+                  <el-table-column label="操作" align="center">
+                    <template slot-scope="scope">
+                      <el-button size="mini" type="danger" @click="orderDelete(scope.$index, scope.row)">删除</el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-col>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+    <e-dialog :dialog="dialog" @toClose="toClose">
+      <template slot="info">
+        <data-form :fields="orderfields" :data="orderForm" @save="orderSave"> </data-form>
+      </template>
+    </e-dialog>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'form-1',
+  props: { form: { type: Object } },
+  components: {},
+  data: function () {
+    return {
+      //表单配置项
+      fields: [
+        { label: '姓名', model: 'user_name' },
+        { label: '电话', model: 'user_phone' },
+        { label: '商品列表', model: 'order', custom: true },
+      ],
+      rules: {
+        user_name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
+        user_phone: [{ required: true, message: '请输入电话', trigger: 'blur' }],
+        order: [{ required: true, message: '请添加商品信息', trigger: 'change' }],
+      },
+      // 弹框
+      dialog: { title: '信息管理', show: false, type: '1' },
+      orderForm: {},
+      orderfields: [
+        { label: '商品名称', model: 'name' },
+        { label: '商品数量', model: 'num' },
+        { label: '特殊说明', model: 'desc' },
+      ],
+    };
+  },
+  created() {},
+  methods: {
+    toSave({ data }) {
+      this.$emit('toSave', { data: data });
+    },
+    // 添加商品信息
+    toAddOrder() {
+      this.dialog = { title: '信息管理', show: true, type: '1', widths: '30%' };
+    },
+    // 保存商品信息
+    orderSave({ data }) {
+      this.$emit('orderSave', { data: data });
+      this.toClose();
+    },
+    // 删除商品信息
+    orderDelete(index, data) {
+      this.$emit('orderDelete', { index: index });
+    },
+    toClose() {
+      this.orderForm = {};
+      this.dialog = { title: '信息管理', show: false, type: '1' };
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .table {
+    margin-top: 15px;
+  }
+}
+/deep/ .el-form-item {
+  float: left;
+  width: 100%;
+}
+</style>

+ 69 - 0
src/views/menu/market_buy/parts/info-1.vue

@@ -0,0 +1,69 @@
+<template>
+  <div id="info-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <data-form :fields="fields" :data="form" :needSave="false">
+          <template #custom="{ item }">
+            <template v-if="item.model === 'order'">
+              <data-table :fields="orderField" :opera="opera" :data="form.order" :usePage="false"> </data-table>
+            </template>
+          </template>
+        </data-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'info-1',
+  props: { form: { type: Object } },
+  components: {},
+  data: function () {
+    return {
+      //表单配置项
+      fields: [
+        { label: '订单号', model: 'order_num' },
+        { label: '采买人', model: 'user_name' },
+        { label: '采买人电话', model: 'user_phone' },
+        { label: '供货单位', model: 'mech_name' },
+        { label: '供货总价(元)', model: 'money' },
+        { label: '收货人', model: 'receive_user_name' },
+        { label: '收货人电话', model: 'receive_user_phone' },
+        { label: '收货地址:', model: 'receive_address' },
+        { label: '商品列表:', model: 'order', custom: true },
+      ],
+      // 商品列表
+      orderField: [
+        { label: '商品名称', prop: 'name' },
+        { label: '商品数量', prop: 'num' },
+        { label: '商品单价', prop: 'money' },
+      ],
+      opera: [],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+/deep/ .el-form-item {
+  float: left;
+  width: 100%;
+}
+</style>