zs 3 gadi atpakaļ
vecāks
revīzija
2e997393ee

+ 5 - 0
src/router/index.js

@@ -70,6 +70,11 @@ const web = [
         meta: { title: '采买需求信息' },
         component: () => import('../views/menu/market_buy/index.vue'),
       },
+      {
+        path: '/menu/market_buy/detail',
+        meta: { title: '采买需求信息管理' },
+        component: () => import('../views/menu/market_buy/detail.vue'),
+      },
       {
         path: '/menu/stock',
         meta: { title: '库存管理' },

+ 10 - 10
src/views/menu/apply_examine/index.vue

@@ -3,7 +3,13 @@
     <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" @export="toExport"> </data-table>
+          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView" @export="toExport">
+            <template #options="{ item }">
+              <template v-if="item.prop == 'status_name'">
+                <el-option v-for="item in statusList" :key="item.label" :label="item.label" :value="item.label"></el-option>
+              </template>
+            </template>
+          </data-table>
         </el-col>
       </el-col>
     </el-row>
@@ -17,6 +23,7 @@
 </template>
 
 <script>
+const { apply_status } = require('@common/src/layout/deploy/dict');
 import { mapState, createNamespacedHelpers } from 'vuex';
 const moment = require('moment');
 export default {
@@ -32,7 +39,7 @@ export default {
       fields: [
         { label: '联系电话', prop: 'user_phone', filter: true },
         { label: '审核时间', prop: 'examine_date', filter: true },
-        { label: '审核状态', prop: 'status_name', filter: true },
+        { label: '审核状态', prop: 'status_name', filter: 'select' },
       ],
       //操作项
       opera: [
@@ -58,14 +65,7 @@ export default {
       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: '领取确认完成' },
-      ],
+      statusList: apply_status,
     };
   },
   async created() {

+ 10 - 2
src/views/menu/apply_review/index.vue

@@ -3,7 +3,13 @@
     <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"></data-table>
+          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView">
+            <template #options="{ item }">
+              <template v-if="item.prop == 'status_name'">
+                <el-option v-for="item in statusList" :key="item.label" :label="item.label" :value="item.label"></el-option>
+              </template>
+            </template>
+          </data-table>
         </el-col>
       </el-col>
     </el-row>
@@ -16,6 +22,7 @@
 </template>
 
 <script>
+const { apply_status } = require('@common/src/layout/deploy/dict');
 import { mapState, createNamespacedHelpers } from 'vuex';
 const moment = require('moment');
 export default {
@@ -30,7 +37,7 @@ export default {
       fields: [
         { label: '联系电话', prop: 'user_phone', filter: true },
         { label: '审核时间', prop: 'examine_date', filter: true },
-        { label: '审核状态', prop: 'status_name', filter: true },
+        { label: '审核状态', prop: 'status_name', filter: 'select' },
       ],
       //操作项
       opera: [{ label: '详细信息', method: 'view' }],
@@ -52,6 +59,7 @@ export default {
       //弹框
       dialog: { title: '详细信息', show: false, type: '1' },
       form: { order: [] },
+      statusList: apply_status,
     };
   },
   async created() {

+ 219 - 0
src/views/menu/market_buy/detail.vue

@@ -0,0 +1,219 @@
+<template>
+  <div id="detail">
+    <el-row>
+      <el-col :span="24" class="main animate__animated animate__backInRight">
+        <el-col :span="24" class="one">
+          <el-button type="primary" size="mini" @click="toBack()">返回</el-button>
+        </el-col>
+        <el-col :span="24" class="two">
+          <el-col :span="24" class="two_1">
+            <el-col class="list" :span="6" v-for="(item, index) in marketList" :key="index">
+              <el-image :src="item.img_url ? item.img_url[0].url : ''"></el-image>
+              <el-col :span="24" class="name">{{ item.name }}</el-col>
+              <el-col :span="24" class="money">¥{{ item.money }}</el-col>
+              <el-col :span="24" class="num">
+                <el-input-number v-model="item.num" @change="numberChange(item)" :min="0" :max="10" label="描述文字"></el-input-number>
+              </el-col>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="two_2">
+            <el-button type="primary" size="mini" @click="toBuy">查看选购</el-button>
+            <el-button type="primary" size="mini" @click="toConfirm">确认选购</el-button>
+          </el-col>
+          <el-col :span="24">
+            <el-col :span="24" v-for="(item, index) in orderForm" :key="index">
+              <p>{{ item.mech_name }}</p>
+              <p>{{ item.totalMoney }}</p>
+              <p>{{ item.order }}</p>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'detail',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      marketList: [],
+      // 选购的商品
+      orderForm: [],
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    async search() {
+      let data = [
+        {
+          id: '001',
+          name: '喜羊羊',
+          money: 20,
+          type_name: '羊肉',
+          type_id: '111',
+          brief: '一份',
+          mech_id: '000000001',
+          mech_name: '羊村',
+          img_one: '',
+          img_url: [{ url: require('@a/login-1.jpg') }],
+          status: '1',
+        },
+        {
+          id: '002',
+          name: '喜羊羊',
+          money: 40,
+          type_name: '羊肉',
+          type_id: '111',
+          brief: '一份',
+          mech_id: '000000001',
+          mech_name: '羊村',
+          img_one: '',
+          img_url: [{ url: require('@a/login-1.jpg') }],
+          status: '1',
+        },
+        {
+          id: '003',
+          name: '喜羊羊',
+          money: 60,
+          type_name: '羊肉',
+          type_id: '111',
+          brief: '一份',
+          mech_id: '000000003',
+          mech_name: '羊村3',
+          img_one: '',
+          img_url: [{ url: require('@a/login-1.jpg') }],
+          status: '1',
+        },
+      ];
+      for (const val of data) val.num = 0;
+      this.$set(this, `marketList`, data);
+    },
+    //计数器变化
+    numberChange(item) {
+      let p1 = this.orderForm;
+      if (p1.length > 0) {
+        // 供货单位
+        let p2 = p1.find((i) => i.mech_id == item.mech_id);
+        let p2index = p1.findIndex((i) => i.mech_id == item.mech_id);
+        if (p2) {
+          // 供货单位,订购商品相同
+          let p3 = p2.order.find((i) => i.id == item.id);
+          if (p3) {
+            console.log('3');
+          } else {
+            p2.totalMoney = p2.totalMoney + parseInt(item.money) * parseInt(item.num);
+            p2.order.push(item);
+            this.orderForm.splice(p2index, 1, p2);
+          }
+        }
+      } else {
+        let data1 = { mech_id: item.mech_id, mech_name: item.mech_name, totalMoney: parseInt(item.money) * parseInt(item.num), order: [item] };
+        this.orderForm.push(data1);
+        // console.log('11');
+        // // 供货单位
+        // let p2 = p1.find((i) => i.mech_id == item.mech_id);
+        // if (p2) {
+        //   console.log('2');
+        //   // 供货单位,订购商品
+        //   let p3 = p2.order.find((i) => i.id == item.id);
+        //   if (p3) {
+        //     console.log('3');
+        //   } else {
+        //     console.log('33');
+        //   }
+        // } else {
+        //   let data1 = { mech_id: item.mech_id, mech_name: item.mech_name, totalMoney: parseInt(item.money) * parseInt(item.num), order: item };
+        //   this.orderForm.push(data1);
+        // }
+      }
+      // 查询当前商品是否选购过
+      // let data = this.orderList.find((i) => i.id == item.id);
+      // let index = this.orderList.findIndex((i) => i.id == item.id);
+      // if (data) {
+      //   data.num = item.num;
+      //   if (data.num === 0) {
+      //     this.orderList.splice(index, 1);
+      //   } else {
+      //     this.orderList.splice(index, 1, data);
+      //   }
+      // } else {
+      //   let p1 = { id: item.id, money: item.money, num: item.num };
+      //   this.orderList.push(p1);
+      // }
+      // // 计算总额
+      // for (const val of this.orderList) {
+      //   totalMoney += parseInt(val.money) * parseInt(val.num);
+      // }
+      // this.$set(this, `totalMoney`, totalMoney);
+    },
+    // 查看选购
+    async toBuy() {},
+    // 确认选购
+    async toConfirm() {},
+    // 返回
+    toBack() {
+      window.history.go('-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 {
+  .one {
+    text-align: right;
+    margin: 0 0 10px 0;
+  }
+  .two {
+    .two_1 {
+      .list {
+        padding: 10px;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        margin: 0 0 10px 0;
+        .name {
+          margin: 0 0 5px 0;
+          font-size: 16px;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          -webkit-line-clamp: 2;
+          word-break: break-all;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+        }
+        .money {
+          color: red;
+          font-size: 14px;
+          font-weight: bold;
+        }
+        .num {
+          text-align: center;
+        }
+      }
+    }
+    .two_2 {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 31 - 7
src/views/menu/market_buy/index.vue

@@ -3,10 +3,15 @@
     <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" @export="toExport">
+          <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView" @export="toExport" @sign="toSign">
             <template #selfbtn>
               <el-button type="primary" size="mini" @click="toAdd()">添加采购申请</el-button>
             </template>
+            <template #options="{ item }">
+              <template v-if="item.prop == 'status_name'">
+                <el-option v-for="item in statusList" :key="item.label" :label="item.label" :value="item.label"></el-option>
+              </template>
+            </template>
           </data-table>
         </el-col>
       </el-col>
@@ -15,14 +20,13 @@
       <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>
-const { apply_status } = require('@common/src/layout/deploy/dict');
+const { buy_status } = require('@common/src/layout/deploy/dict');
 import { mapState, createNamespacedHelpers } from 'vuex';
 const moment = require('moment');
 export default {
@@ -31,7 +35,6 @@ export default {
   components: {
     file1: () => import('./parts/file-1.vue'),
     info1: () => import('./parts/info-1.vue'),
-    form1: () => import('./parts/form-1.vue'),
   },
   data: function () {
     return {
@@ -40,11 +43,12 @@ export default {
         { 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 },
+        { label: '货物状态', prop: 'status_name', filter: 'select' },
       ],
       //操作项
       opera: [
         { label: '详细信息', method: 'view' },
+        { label: '订单签收', method: 'sign', type: 'success', confirm: true, display: (i) => i.status == '1' },
         { label: '导出数据', method: 'export', type: 'success' },
       ],
       //表格数据
@@ -65,6 +69,22 @@ export default {
             { name: '娃哈哈', num: '123', money: '344' },
           ],
         },
+        {
+          order_num: 'Hgj4757945hdFueu',
+          receive_user_name: '胡图图2',
+          mech_name: '翻斗幼儿园-小豆班2',
+          status_name: '待供货单位确认',
+          status: '2',
+          user_name: '采购人员',
+          user_phone: '12345678901',
+          money: '3344',
+          receive_user_phone: '98765432109',
+          receive_address: '翻斗大街翻斗花园2号楼1001室2',
+          order: [
+            { name: '小洋人', num: '123', money: '3000' },
+            { name: '娃哈哈', num: '123', money: '344' },
+          ],
+        },
       ],
       // 列表数据总数
       total: 0,
@@ -72,7 +92,7 @@ export default {
       dialog: { title: '详细信息', show: false, type: '1' },
       form: { order: [] },
       // 状态
-      statusList: apply_status,
+      statusList: buy_status,
     };
   },
   async created() {
@@ -90,13 +110,17 @@ export default {
     async toExport({ data }) {
       this.dialog = { title: '导出条件', show: true, type: '1', widths: '40%' };
     },
+    // 订单签收
+    async toSign({ data }) {
+      console.log(data);
+    },
     // 提交保存,创建/修改
     async toSave({ data }) {
       console.log(data);
     },
     // 添加
     toAdd() {
-      this.dialog = { title: '添加信息', show: true, type: '3', widths: '40%' };
+      this.$router.push({ path: '/menu/market_buy/detail' });
     },
     //关闭
     toClose() {

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

@@ -1,114 +0,0 @@
-<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>