zs 3 år sedan
förälder
incheckning
b739eb3b6f

+ 116 - 6
src/views/menu/apply/index.vue

@@ -1,22 +1,128 @@
 <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" @receive="torEceive" @edit="toEdit">
+            <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">
+        <form-1 :form="form" v-if="dialog.type == '1'" @toSave="toSave" @orderSave="orderSave" @orderDelete="orderDelete"></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: 'receive', type: 'success', confirm: true },
+        { label: '修改信息', method: 'edit' },
+      ],
+      //表格数据
+      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: '2', widths: '40%' };
+    },
+    //领取确定
+    async torEceive({ data }) {
+      this.$confirm('您是否确认领取?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(() => {
+          this.$message({
+            type: 'success',
+            message: '删除成功!',
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消删除',
+          });
+        });
+    },
+    // 添加
+    toAdd() {
+      this.dialog = { title: '添加信息', show: true, type: '1', widths: '40%' };
+    },
+    // 修改
+    toEdit({ data }) {
+      this.$set(this, `form`, 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();
+    },
+    // 商品信息保存
+    orderSave({ data }) {
+      this.form.order.push(data);
+    },
+    // 删除商品信息
+    orderDelete({ index }) {
+      this.form.order.splice(index, 1);
+    },
   },
-  created() {},
-  methods: {},
   computed: {
     ...mapState(['user']),
   },
@@ -33,4 +139,8 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+/deep/.el-dialog__body {
+  min-height: 400px;
+}
+</style>

+ 114 - 0
src/views/menu/apply/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>

+ 66 - 0
src/views/menu/apply/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>