Jelajahi Sumber

项目更新

guhongwei 3 tahun lalu
induk
melakukan
5219c053f5

+ 35 - 0
src/router/index.js

@@ -51,6 +51,41 @@ const web = [
         meta: { title: '采购管理-采购单' },
         component: () => import('../views/adminCenter/purchase/detail.vue'),
       },
+      {
+        path: '/adminCenter/collect/index',
+        meta: { title: '收货管理' },
+        component: () => import('../views/adminCenter/collect/index.vue'),
+      },
+      {
+        path: '/adminCenter/stock/index',
+        meta: { title: '库存管理' },
+        component: () => import('../views/adminCenter/stock/index.vue'),
+      },
+      {
+        path: '/adminCenter/stock/assetsenter',
+        meta: { title: '固定资产入库管理' },
+        component: () => import('../views/adminCenter/stock/assetsenter.vue'),
+      },
+      {
+        path: '/adminCenter/stock/assetsout',
+        meta: { title: '固定资产出库管理' },
+        component: () => import('../views/adminCenter/stock/assetsout.vue'),
+      },
+      {
+        path: '/adminCenter/stock/marketenter',
+        meta: { title: '商品入库管理' },
+        component: () => import('../views/adminCenter/stock/marketenter.vue'),
+      },
+      {
+        path: '/adminCenter/stock/marketout',
+        meta: { title: '商品出库管理' },
+        component: () => import('../views/adminCenter/stock/marketout.vue'),
+      },
+      {
+        path: '/adminCenter/finance/index',
+        meta: { title: '财务管理' },
+        component: () => import('../views/adminCenter/finance/index.vue'),
+      },
       {
         path: '/adminCenter/type/index',
         meta: { title: '商品类型管理' },

+ 25 - 1
src/store/index.js

@@ -7,10 +7,22 @@ import login from '@common/src/store/login';
 import user from '@common/src/store/user';
 // 商品类型
 import type from '@common/src/store/type';
+import market from '@common/src/store/market';
+
 // 商品申报
 import apply from '@common/src/store/apply';
 // 采购单
 import buy from '@common/src/store/buy';
+// 库存管理
+import stock from '@common/src/store/stock';
+// 固定资产入库
+import assets_enter from '@common/src/store/assets_enter';
+// 固定资产出库
+import assets_out from '@common/src/store/assets_out';
+// 商品入库
+import market_enter from '@common/src/store/market_enter';
+// 商品出库
+import market_out from '@common/src/store/market_out';
 
 Vue.use(Vuex);
 
@@ -18,5 +30,17 @@ export default new Vuex.Store({
   state: { ...ustate },
   mutations: { ...umutations },
   actions: {},
-  modules: { login, user, type, apply, buy },
+  modules: {
+    login,
+    user,
+    type,
+    market,
+    apply,
+    buy,
+    stock,
+    assets_enter,
+    assets_out,
+    market_enter,
+    market_out,
+  },
 });

+ 135 - 0
src/views/adminCenter/collect/index.vue

@@ -0,0 +1,135 @@
+<template>
+  <div id="index">
+    <data-table :fields="fields" :opera="opera" @query="search" :data="list" :total="total" @view="toView" @sign="toSign"> </data-table>
+    <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
+      <info-1 v-if="dialog.type == '1'" :info="info"></info-1>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import info1 from '../purchase/parts/info-1.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapBuy } = createNamespacedHelpers('buy');
+const { mapActions: market_enter } = createNamespacedHelpers('market_enter');
+const moment = require('moment');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    info1,
+  },
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      fields: [
+        { label: '采购人', prop: 'buy_personal', filter: 'input' },
+        { label: '采购电话', prop: 'buy_phone', filter: 'input' },
+        {
+          label: '收货类型',
+          prop: 'type',
+          format: (i) => {
+            return i === '0' ? '统一收' : '申请人';
+          },
+        },
+        { label: '收货人', prop: 'receive_personal' },
+        { label: '收货电话', prop: 'receive_phone' },
+        { label: '收货地址', prop: 'receive_address' },
+        {
+          label: '审核状态',
+          prop: 'status',
+          format: (i) => {
+            return i === '0' ? '待收货' : i === '1' ? '已收货,待付款' : i === '2' ? '付款中,待财务确认' : '财务确认,已付款';
+          },
+        },
+      ],
+      opera: [
+        { label: '查看信息', method: 'view' },
+        { label: '收货', method: 'sign', display: (i) => i.status == '0' },
+      ],
+      // 弹框
+      dialog: { title: '详细信息', show: false, type: '1', width: '50%' },
+      // 详细信息
+      info: {},
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...mapBuy(['query', 'update']),
+    ...market_enter(['create']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, limit, type: '0', ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    toAdd() {
+      this.$router.push({ path: '/adminCenter/purchase/detail' });
+    },
+    // 查看信息
+    toView({ data }) {
+      data.type = data.type == '0' ? '统一收' : '申请人';
+      this.$set(this, `info`, data);
+      this.dialog = { title: '详细信息', show: true, type: '1', width: '50%' };
+    },
+    // 关闭
+    toClose() {
+      this.dialog = { title: '详细信息', show: false, type: '1', width: '50%' };
+    },
+    // 收货
+    async toSign({ data }) {
+      this.$confirm(`您确认提交签收吗?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(async () => {
+          data.status = '1';
+          let res = await this.update(data);
+          if (this.$checkRes(res)) {
+            this.createEnter(data);
+          }
+        })
+        .catch(() => {});
+    },
+    // 入库
+    async createEnter(data) {
+      let order = data.order.map((i) => ({
+        brief: i.brief,
+        img_url: i.img_url,
+        market_id: i.id,
+        market_type: '2',
+        money: i.money,
+        name: i.name,
+        num: i.buy_num,
+        type: i.type,
+        type_id: i.type_id,
+      }));
+      let arr = { register_personal: this.user.name, register_date: moment(new Date()).format('YYYY-MM-DD'), register_reason: '统一收货', order: order };
+      let res = await this.create(arr);
+      if (this.$checkRes(res)) {
+        this.$message({ type: `success`, message: `操作成功` });
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 112 - 0
src/views/adminCenter/finance/index.vue

@@ -0,0 +1,112 @@
+<template>
+  <div id="index">
+    <data-table :fields="fields" :opera="opera" @query="search" :data="list" :total="total" @view="toView" @check="toCheck"> </data-table>
+    <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
+      <info-1 v-if="dialog.type == '1'" :info="info"></info-1>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import info1 from '../purchase/parts/info-1.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapBuy } = createNamespacedHelpers('buy');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    info1,
+  },
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      fields: [
+        { label: '采购人', prop: 'buy_personal', filter: 'input' },
+        { label: '采购电话', prop: 'buy_phone', filter: 'input' },
+        {
+          label: '收货类型',
+          prop: 'type',
+          format: (i) => {
+            return i === '0' ? '统一收' : '申请人';
+          },
+        },
+        { label: '收货人', prop: 'receive_personal' },
+        { label: '收货电话', prop: 'receive_phone' },
+        { label: '收货地址', prop: 'receive_address' },
+        {
+          label: '审核状态',
+          prop: 'status',
+          format: (i) => {
+            return i === '0' ? '待收货' : i === '1' ? '已收货,待付款' : i === '2' ? '付款中,待财务确认' : '财务确认,已付款';
+          },
+        },
+      ],
+      opera: [
+        { label: '查看信息', method: 'view' },
+        { label: '财务确认', method: 'check', display: (i) => i.status == '2' },
+      ],
+      // 弹框
+      dialog: { title: '详细信息', show: false, type: '1', width: '50%' },
+      // 详细信息
+      info: {},
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...mapBuy(['query', 'update']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, limit, type: '0', status: '2', ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    toAdd() {
+      this.$router.push({ path: '/adminCenter/purchase/detail' });
+    },
+    // 查看信息
+    toView({ data }) {
+      data.type = data.type == '0' ? '统一收' : '申请人';
+      this.$set(this, `info`, data);
+      this.dialog = { title: '详细信息', show: true, type: '1', width: '50%' };
+    },
+    // 关闭
+    toClose() {
+      this.dialog = { title: '详细信息', show: false, type: '1', width: '50%' };
+    },
+    // 确认
+    async toCheck({ data }) {
+      this.$confirm(`您确认提交吗?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
+      })
+        .then(async () => {
+          data.status = '3';
+          let res = await this.update(data);
+          if (this.$checkRes(res, '提交成功', '提交失败'));
+          this.search();
+        })
+        .catch(() => {});
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 72 - 44
src/views/adminCenter/purchase/detail.vue

@@ -18,24 +18,31 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="收货人" prop="receive_personal">
-                <el-input v-model="form.receive_personal" placeholder="请输入收货人"></el-input>
+              <el-form-item label="收货类型" prop="type">
+                <el-select v-model="form.type" placeholder="请选择收货类型" style="width: 100%" @change="changeType">
+                  <el-option label="统一收" value="0"></el-option>
+                  <el-option label="申请人" value="1"></el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="收货电话" prop="receive_phone">
-                <el-input v-model="form.receive_phone" placeholder="请输入收货电话"></el-input>
+              <el-form-item label="收货人" prop="receive_personal_id">
+                <el-select v-model="form.receive_personal_id" placeholder="请选择收货人" style="width: 100%" @change="changeUser">
+                  <el-option v-for="(item, index) in receiveList" :key="index" :label="item.name" :value="item.id"></el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="收货类型" prop="type">
-                <el-select v-model="form.type" placeholder="请选择收货类型" style="width: 100%">
-                  <el-option label="统一收" value="0"></el-option>
-                  <el-option label="申请人" value="1"></el-option>
-                </el-select>
+              <el-form-item label="收货人姓名" prop="receive_personal">
+                <el-input v-model="form.receive_personal" placeholder="请输入收货人姓名"></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
+              <el-form-item label="收货电话" prop="receive_phone">
+                <el-input v-model="form.receive_phone" placeholder="请输入收货电话"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
               <el-form-item label="收货地址" prop="receive_address">
                 <el-input v-model="form.receive_address" placeholder="请输入收货地址"></el-input>
               </el-form-item>
@@ -45,8 +52,8 @@
               <el-col :span="24" class="list">
                 <el-table :data="form.order" border style="width: 100%">
                   <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 prop="money" label="商品单价" align="center" show-overflow-tooltip> </el-table-column>
+                  <el-table-column prop="buy_num" label="采购数量" align="center" show-overflow-tooltip> </el-table-column>
                   <el-table-column fixed="right" label="操作" align="center">
                     <template slot-scope="scope"><el-button @click="orderDel(scope.$index, scope.row)" type="danger" size="small">删除</el-button></template>
                   </el-table-column>
@@ -62,31 +69,23 @@
       </el-col>
     </el-row>
     <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
-      <el-form :model="orderForm" :rules="orderRules" ref="orderForm" label-width="100px">
-        <el-form-item label="商品名称" prop="name">
-          <el-input v-model="orderForm.name" placeholder="请输入商品名称"></el-input>
-        </el-form-item>
-        <el-form-item label="商品数量" prop="num">
-          <el-input v-model="orderForm.num" placeholder="请输入商品数量"></el-input>
-        </el-form-item>
-        <el-form-item label="特殊说明" prop="desc">
-          <el-input v-model="orderForm.desc" placeholder="请输入特殊说明"></el-input>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" size="small" @click="onOrderSubmit('orderForm')">保存信息</el-button>
-        </el-form-item>
-      </el-form>
+      <market-1 v-if="dialog.type == '1'" :list="marketList" :total="marketTotal" @buyBtn="buyBtn"></market-1>
     </el-dialog>
   </div>
 </template>
 
 <script>
+import market1 from './parts/market-1.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: mapBuy } = createNamespacedHelpers('buy');
+const { mapActions: mapUser } = createNamespacedHelpers('user');
+const { mapActions: mapMarket } = createNamespacedHelpers('market');
 export default {
   name: 'detail',
   props: {},
-  components: {},
+  components: {
+    market1,
+  },
   data: function () {
     return {
       form: { order: [] },
@@ -94,14 +93,19 @@ export default {
         buy_personal: [{ required: true, message: '请输入采购人', trigger: 'blur' }],
         buy_phone: [{ required: true, message: '请输入采购电话', trigger: 'blur' }],
         type: [{ required: true, message: '请选择收货类型', trigger: 'blur' }],
-        receive_personal: [{ required: true, message: '请输入收货人', trigger: 'blur' }],
+        receive_personal: [{ required: true, message: '请输入收货人姓名', trigger: 'blur' }],
         receive_phone: [{ required: true, message: '请输入收货电话', trigger: 'blur' }],
         receive_address: [{ required: true, message: '请输入收货地址', trigger: 'blur' }],
       },
       data: [],
+      // 商品列表
+      marketList: [],
+      marketTotal: 0,
+      // 收货人列表
+      receiveList: [],
       // 弹框
-      dialog: { title: '申报审核', show: false, type: '1', width: '50%' },
-      // 审核
+      dialog: { title: '选购商品', show: false, type: '1', width: '50%' },
+      // 商品
       orderForm: {},
       orderRules: {
         name: [{ required: true, message: '请输入商品名称', trigger: 'blur' }],
@@ -115,6 +119,8 @@ export default {
   },
   methods: {
     ...mapBuy(['fetch', 'create', 'update']),
+    ...mapUser({ userQuery: 'query' }),
+    ...mapMarket({ marketQuery: 'query' }),
     // 提交采购
     onSubmit(formName) {
       this.$refs[formName].validate(async (valid) => {
@@ -138,27 +144,49 @@ export default {
       this.$refs[formName].resetFields();
       this.searchOther();
     },
+    // 选择收货类型
+    async changeType(type) {
+      if (type == '0') {
+        let res = await this.userQuery({ type: '3' });
+        if (this.$checkRes(res)) this.$set(this, `receiveList`, res.data);
+      } else {
+        let res = await this.userQuery({ type: '6' });
+        if (this.$checkRes(res)) this.$set(this, `receiveList`, res.data);
+      }
+    },
+    // 选择用户
+    changeUser(value) {
+      let data = this.receiveList.find((i) => i.id == value);
+      if (data) {
+        this.$set(this.form, `receive_personal`, data.name);
+        this.$set(this.form, `receive_phone`, data.phone);
+      }
+    },
     // 商品添加
-    toAddmarket() {
-      this.dialog = { title: '采购商品', show: true, type: '1', width: '30%' };
+    async toAddmarket() {
+      let res = await this.marketQuery({ status: '1' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `marketList`, res.data);
+        this.$set(this, `marketTotal`, res.total);
+      }
+      this.dialog = { title: '选购商品', show: true, type: '1', width: '25%' };
     },
     // 提交保存
-    onOrderSubmit(formName) {
-      this.$refs[formName].validate((valid) => {
-        if (valid) {
-          let data = this.orderForm;
-          this.form.order.push(data);
-          this.orderForm = {};
-          this.dialog = { title: '采购商品', show: false, type: '1', width: '30%' };
-        } else {
-          console.log('error submit!!');
-          return false;
-        }
-      });
+    buyBtn(data) {
+      let p1 = this.form.order.find((i) => i.id == data.id);
+      let p1Index = this.form.order.findIndex((i) => i.id == data.id);
+      if (p1) {
+        data.buy_num = data.buy_num + p1.buy_num;
+        this.form.order.splice(p1Index, 1);
+        this.form.order.push(data);
+      } else {
+        this.form.order.push(data);
+      }
+      this.dialog = { title: '采购商品', show: false, type: '1', width: '30%' };
     },
     // 取消添加
     toClose() {
-      this.dialog = { title: '采购商品', show: false, type: '1', width: '30%' };
+      this.dialog = { title: '选购商品', show: false, type: '1', width: '50%' };
     },
     // 删除商品
     orderDel(dataindex) {

+ 3 - 3
src/views/adminCenter/purchase/index.vue

@@ -42,13 +42,13 @@ export default {
           label: '审核状态',
           prop: 'status',
           format: (i) => {
-            return i === '0' ? '待收货' : '';
+            return i === '0' ? '待收货' : i === '1' ? '已收货,待付款' : i === '2' ? '付款中,待财务确认' : '财务确认,已付款';
           },
         },
       ],
       opera: [
         { label: '查看信息', method: 'view' },
-        { label: '收货', method: 'sign' },
+        // { label: '收货', method: 'sign' },
       ],
       // 弹框
       dialog: { title: '详细信息', show: false, type: '1', width: '50%' },
@@ -90,7 +90,7 @@ export default {
       })
         .then(async () => {
           data.status = '1';
-          let res = await this.updae(data);
+          let res = await this.update(data);
           if (this.$checkRes(res)) {
             this.$message({ type: `success`, message: `操作成功` });
             this.search();

+ 2 - 2
src/views/adminCenter/purchase/parts/info-1.vue

@@ -37,8 +37,8 @@
             <el-col :span="24">
               <el-table :data="info.order" border style="width: 100%">
                 <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 prop="money" label="商品单价" align="center" show-overflow-tooltip> </el-table-column>
+                <el-table-column prop="buy_num" label="采购数量" align="center" show-overflow-tooltip> </el-table-column>
               </el-table>
             </el-col>
           </el-form>

+ 123 - 0
src/views/adminCenter/purchase/parts/market-1.vue

@@ -0,0 +1,123 @@
+<template>
+  <div id="market-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-col :span="24" class="list" v-for="(item, index) in dataList" :key="index">
+            <el-col :span="24" class="title">
+              {{ item.name }}
+            </el-col>
+            <el-col :span="24" class="other">
+              <el-col :span="24" class="otherInfo">
+                商品类型:<span>{{ item.type }}</span>
+              </el-col>
+              <el-col :span="24" class="otherInfo">
+                商品价格:<span>{{ item.money }}¥</span>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="btn">
+              <el-input-number v-model="item.buy_num" :min="1" :max="1000" label="采购数量" size="mini"></el-input-number>
+              <el-button type="primary" size="small" @click="buyBtn(item)">采购</el-button>
+            </el-col>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="two">
+          <el-pagination
+            background
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            layout="total, prev, pager, next"
+            :total="total"
+            :page-size="pageSize"
+          >
+          </el-pagination>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'market-1',
+  props: {
+    list: { type: Array },
+    total: { type: Number },
+  },
+  components: {},
+  data: function () {
+    return {
+      currentPage: 1, //默认数据1
+      pageSize: 4, //每页显示数据数量
+      origin: [], //分割数据
+      dataList: [], //显示数据列表
+    };
+  },
+  created() {},
+  methods: {
+    // 采购
+    buyBtn(data) {
+      this.$emit('buyBtn', data);
+    },
+    // 分页
+    searchPage(page = 1) {
+      this.$set(this, `dataList`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.searchPage(currentPage);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    list: {
+      deep: true,
+      immediate: true,
+      handler(val) {
+        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
+        this.searchPage();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    .list {
+      margin: 0 0 8px 0;
+      padding: 8px;
+      border-radius: 5px;
+      border: 1px solid #ccc;
+      .title {
+        font-size: 16px;
+        font-weight: bold;
+        margin: 0 0 5px 0;
+      }
+      .other {
+        margin: 0 0 5px 0;
+        .otherInfo {
+          font-size: 14px;
+          color: #666;
+          margin: 0 0 5px 0;
+          span {
+            color: #000;
+          }
+        }
+      }
+      .btn {
+        text-align: center;
+        .el-button {
+          margin: 0 5px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 163 - 0
src/views/adminCenter/stock/assetsenter.vue

@@ -0,0 +1,163 @@
+<template>
+  <div id="assetsenter">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-button type="primary" size="small" @click="back()">返回</el-button>
+        </el-col>
+        <el-col :span="24" class="two">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="登记人" prop="register_personal">
+              <el-input v-model="form.register_personal" placeholder="请输入登记人"></el-input>
+            </el-form-item>
+            <el-form-item label="登记时间" prop="register_date">
+              <el-date-picker v-model="form.register_date" placeholder="请选择" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" style="width: 100%">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="入库原因" prop="register_reason">
+              <el-input v-model="form.register_reason" placeholder="请输入入库原因" type="textarea"></el-input>
+            </el-form-item>
+            <el-col :span="24" class="order">
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="small" @click="toAddmarket()">添加商品</el-button>
+              </el-col>
+              <el-col :span="24" class="list">
+                <data-table :fields="fields" :opera="opera" :data="form.order" @del="toDel"></data-table>
+              </el-col>
+            </el-col>
+            <el-col :span="24" style="text-align: center">
+              <el-button type="danger" size="small" @click="back()">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-col>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
+      <orderForm-1 v-if="dialog.type == '1'" :form="orderForm" @resetForm="toClose" @onSubmit="orderSubmit"></orderForm-1>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import orderForm1 from './enter-out/orderForm-1.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: assets_enter } = createNamespacedHelpers('assets_enter');
+export default {
+  name: 'assetsenter',
+  props: {},
+  components: {
+    orderForm1,
+  },
+  data: function () {
+    return {
+      form: { order: [] },
+      rules: {
+        register_personal: [{ required: true, message: '请输入登记人', trigger: 'blur' }],
+        register_date: [{ required: true, message: '请选择登记时间', trigger: 'change' }],
+        register_reason: [{ required: true, message: '请输入入库原因', trigger: 'blur' }],
+      },
+      // 商品
+      fields: [
+        { label: '商品名称', prop: 'name' },
+        { label: '商品单价(¥)', prop: 'money' },
+        { label: '商品数量', prop: 'num' },
+        {
+          label: '商品类型',
+          prop: 'market_type',
+          format: (i) => {
+            return i === '1' ? '固定资产' : '商品';
+          },
+        },
+        { label: '固定资产商品编码', prop: 'code' },
+        { label: '分类', prop: 'type' },
+        { label: '简介', prop: 'brief' },
+        { label: '商品id', prop: 'market_id' },
+      ],
+      opera: [{ label: '删除', method: 'del', type: 'danger' }],
+      // 弹框
+      dialog: { title: '商品管理', show: false, type: '1', width: '50%' },
+      // 商品
+      orderForm: { img_url: [] },
+    };
+  },
+  created() {},
+  methods: {
+    ...assets_enter(['create']),
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          let res = await this.create(data);
+          if (this.$checkRes(res)) {
+            this.$message({ type: `success`, message: `操作成功` });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+
+    // 商品添加
+    toAddmarket() {
+      this.dialog = { title: '商品管理', show: true, type: '1', width: '50%' };
+    },
+    // 商品提交保存
+    orderSubmit({ data }) {
+      this.form.order.push(data);
+      this.$set(this, `orderForm`, { img_url: [] });
+      this.toClose();
+    },
+    // 删除
+    toDel({ data }) {
+      let index = this.form.order.findIndex((i) => i.code == data.code);
+      this.form.order.splice(index, 1);
+    },
+    // 关闭
+    toClose() {
+      this.dialog = { title: '商品管理', show: false, type: '1', width: '50%' };
+    },
+    // 返回
+    back() {
+      this.$router.push({ path: '/adminCenter/stock/index' });
+    },
+  },
+  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 {
+    .order {
+      margin: 0 0 10px 0;
+      .btn {
+        text-align: right;
+        margin: 0 0 10px 0;
+      }
+    }
+  }
+}
+/deep/.el-dialog__body {
+  padding: 10px;
+}
+</style>

+ 167 - 0
src/views/adminCenter/stock/assetsout.vue

@@ -0,0 +1,167 @@
+<template>
+  <div id="assetsenter">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-button type="primary" size="small" @click="back()">返回</el-button>
+        </el-col>
+        <el-col :span="24" class="two">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="领取人" prop="personal">
+              <el-input v-model="form.personal" placeholder="请输入领取人"></el-input>
+            </el-form-item>
+            <el-form-item label="领取人电话" prop="phone">
+              <el-input v-model="form.phone" placeholder="请输入领取人电话"></el-input>
+            </el-form-item>
+            <el-form-item label="领取时间" prop="out_date">
+              <el-date-picker v-model="form.out_date" placeholder="请选择" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" style="width: 100%">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="领取原因" prop="reason">
+              <el-input v-model="form.reason" placeholder="请输入领取原因" type="textarea"></el-input>
+            </el-form-item>
+            <el-col :span="24" class="order">
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="small" @click="toAddmarket()">添加商品</el-button>
+              </el-col>
+              <el-col :span="24" class="list">
+                <data-table :fields="fields" :opera="opera" :data="form.order" @del="toDel"></data-table>
+              </el-col>
+            </el-col>
+            <el-col :span="24" style="text-align: center">
+              <el-button type="danger" size="small" @click="back()">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-col>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
+      <stock-1 v-if="dialog.type == '1'" type="1" :form="orderForm" @resetForm="toClose" @onSubmit="orderSubmit"></stock-1>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import stock1 from './enter-out/stock-1.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: assets_out } = createNamespacedHelpers('assets_out');
+export default {
+  name: 'assetsenter',
+  props: {},
+  components: {
+    stock1,
+  },
+  data: function () {
+    return {
+      form: { order: [] },
+      rules: {
+        personal: [{ required: true, message: '请输入领取人', trigger: 'blur' }],
+        phone: [{ required: true, message: '请输入联系电话', trigger: 'change' }],
+        out_date: [{ required: true, message: '请选择领取时间', trigger: 'change' }],
+        reason: [{ required: true, message: '请输入领取原因', trigger: 'blur' }],
+      },
+      // 商品
+      fields: [
+        { label: '商品名称', prop: 'name' },
+        { label: '商品单价(¥)', prop: 'money' },
+        { label: '商品数量', prop: 'num' },
+        {
+          label: '商品类型',
+          prop: 'market_type',
+          format: (i) => {
+            return i === '1' ? '固定资产' : '商品';
+          },
+        },
+        { label: '固定资产商品编码', prop: 'code' },
+        { label: '分类', prop: 'type' },
+        { label: '简介', prop: 'brief' },
+        { label: '商品id', prop: 'market_id' },
+      ],
+      opera: [{ label: '删除', method: 'del', type: 'danger' }],
+      // 弹框
+      dialog: { title: '商品管理', show: false, type: '1', width: '50%' },
+      // 商品
+      orderForm: { img_url: [] },
+    };
+  },
+  created() {},
+  methods: {
+    ...assets_out(['create']),
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          let res = await this.create(data);
+          if (this.$checkRes(res)) {
+            this.$message({ type: `success`, message: `操作成功` });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+
+    // 商品添加
+    toAddmarket() {
+      this.dialog = { title: '商品管理', show: true, type: '1', width: '50%' };
+    },
+    // 商品提交保存
+    orderSubmit({ data }) {
+      this.form.order.push(data);
+      this.$set(this, `orderForm`, { img_url: [] });
+      this.toClose();
+    },
+    // 删除
+    toDel({ data }) {
+      let index = this.form.order.findIndex((i) => i.code == data.code);
+      this.form.order.splice(index, 1);
+    },
+    // 关闭
+    toClose() {
+      this.dialog = { title: '商品管理', show: false, type: '1', width: '50%' };
+    },
+    // 返回
+    back() {
+      this.$router.push({ path: '/adminCenter/stock/index' });
+    },
+  },
+  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 {
+    .order {
+      margin: 0 0 10px 0;
+      .btn {
+        text-align: right;
+        margin: 0 0 10px 0;
+      }
+    }
+  }
+}
+/deep/.el-dialog__body {
+  padding: 10px;
+}
+</style>

+ 118 - 0
src/views/adminCenter/stock/enter-out/orderForm-1.vue

@@ -0,0 +1,118 @@
+<template>
+  <div id="orderForm-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="form.name" placeholder="请输入商品名称"></el-input>
+            </el-form-item>
+            <el-form-item label="商品单价(¥)" prop="money">
+              <el-input v-model="form.money" type="number" placeholder="请输入商品单价"></el-input>
+            </el-form-item>
+            <el-form-item label="商品类型" prop="market_type">
+              <el-select v-model="form.market_type" placeholder="请选择商品类型" style="width: 100%">
+                <el-option label="固定资产" value="1"></el-option>
+                <el-option label="商品" value="2"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="固定资产商品编码" prop="code" v-if="form.market_type == '1'">
+              <el-input v-model="form.code" placeholder="请输入固定资产商品编码"></el-input>
+            </el-form-item>
+            <el-form-item label="分类" prop="type_id">
+              <el-select v-model="form.type_id" placeholder="请选择分类" style="width: 100%" @change="changeType">
+                <el-option v-for="(item, index) in typeList" :key="index" :label="item.name" :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="数量" prop="num">
+              <el-input v-model="form.num" type="number" placeholder="请输入数量"></el-input>
+            </el-form-item>
+            <el-form-item label="简介" prop="brief">
+              <el-input v-model="form.brief" placeholder="请输入简介" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
+            </el-form-item>
+            <el-form-item label="图片" prop="img_url">
+              <e-upload url="/files/hc/stock/upload" :limit="4" v-model="form.img_url"></e-upload>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="danger" size="small" @click="resetForm('form')">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapType } = createNamespacedHelpers('type');
+export default {
+  name: 'form-1',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      rules: {
+        market_type: [{ required: true, message: '请选择', trigger: 'change' }],
+        type_id: [{ required: true, message: '请选择', trigger: 'change' }],
+        name: [{ required: true, message: '请输入商品名称', trigger: 'blur' }],
+        money: [{ required: true, message: '请输入商品单价', trigger: 'blur' }],
+        num: [{ required: true, message: '请输入数量', trigger: 'blur' }],
+        brief: [{ required: false, message: '请输入简介', trigger: 'blur' }],
+      },
+      typeList: [],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...mapType(['query']),
+    async search() {
+      let res = await this.query();
+      if (this.$checkRes(res)) {
+        this.$set(this, `typeList`, res.data);
+      }
+    },
+    // 选择类型
+    changeType(value) {
+      let data = this.typeList.find((i) => i.id == value);
+      if (data) this.$set(this.form, `type`, data.name);
+    },
+    // 取消保存
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+      this.$emit('resetForm');
+    },
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.$emit('onSubmit', { data: this.form });
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 145 - 0
src/views/adminCenter/stock/enter-out/orderForm-2.vue

@@ -0,0 +1,145 @@
+<template>
+  <div id="orderForm-2">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="商品" prop="market_id">
+              <el-select v-model="form.market_id" placeholder="请选择商品" style="width: 100%" @change="changeMarket">
+                <el-option v-for="(item, index) in marketList" :key="index" :label="item.name" :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="form.name" placeholder="请输入商品名称"></el-input>
+            </el-form-item>
+            <el-form-item label="商品单价(¥)" prop="money">
+              <el-input v-model="form.money" type="number" placeholder="请输入商品单价"></el-input>
+            </el-form-item>
+            <el-form-item label="商品类型" prop="market_type">
+              <el-select v-model="form.market_type" placeholder="请选择商品类型" style="width: 100%">
+                <el-option label="固定资产" value="1"></el-option>
+                <el-option label="商品" value="2"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="固定资产商品编码" prop="code" v-if="form.market_type == '1'">
+              <el-input v-model="form.code" placeholder="请输入固定资产商品编码"></el-input>
+            </el-form-item>
+            <el-form-item label="分类" prop="type_id">
+              <el-select v-model="form.type_id" placeholder="请选择分类" style="width: 100%" @change="changeType">
+                <el-option v-for="(item, index) in typeList" :key="index" :label="item.name" :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="数量" prop="num">
+              <el-input v-model="form.num" type="number" placeholder="请输入数量"></el-input>
+            </el-form-item>
+            <el-form-item label="简介" prop="brief">
+              <el-input v-model="form.brief" placeholder="请输入简介" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
+            </el-form-item>
+            <el-form-item label="图片" prop="img_url">
+              <e-upload url="/files/hc/stock/upload" :limit="4" v-model="form.img_url"></e-upload>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="danger" size="small" @click="resetForm('form')">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapType } = createNamespacedHelpers('type');
+const { mapActions: mapMarket } = createNamespacedHelpers('market');
+
+export default {
+  name: 'form-2',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      rules: {
+        market_type: [{ required: true, message: '请选择', trigger: 'change' }],
+        type_id: [{ required: true, message: '请选择', trigger: 'change' }],
+        name: [{ required: true, message: '请输入商品名称', trigger: 'blur' }],
+        money: [{ required: true, message: '请输入商品单价', trigger: 'blur' }],
+        num: [{ required: true, message: '请输入数量', trigger: 'blur' }],
+        brief: [{ required: false, message: '请输入简介', trigger: 'blur' }],
+      },
+      // 商品类型
+      typeList: [],
+      // 商品列表
+      marketList: [],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...mapType(['query']),
+    ...mapMarket({ marketQuery: 'query' }),
+    async search() {
+      let res = await this.query();
+      if (this.$checkRes(res)) {
+        this.$set(this, `typeList`, res.data);
+      }
+      res = await this.marketQuery({ status: '1' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `marketList`, res.data);
+      }
+    },
+    // 选择类型
+    changeType(value) {
+      let data = this.typeList.find((i) => i.id == value);
+      if (data) this.$set(this.form, `type`, data.name);
+    },
+    // 选择商品
+    changeMarket(value) {
+      let p1 = this.marketList.find((i) => i.id == value);
+      if (p1) {
+        this.$set(this.form, `name`, p1.name);
+        this.$set(this.form, `money`, p1.money);
+        this.$set(this.form, `type_id`, p1.type_id);
+        this.$set(this.form, `type`, p1.type);
+        this.$set(this.form, `brief`, p1.brief);
+        this.$set(this.form, `img_url`, p1.img_url);
+      }
+    },
+    // 取消保存
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+      this.$emit('resetForm');
+    },
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.$emit('onSubmit', { data: this.form });
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 147 - 0
src/views/adminCenter/stock/enter-out/stock-1.vue

@@ -0,0 +1,147 @@
+<template>
+  <div id="stock-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="商品" prop="market_id">
+              <el-select v-model="form.market_id" placeholder="请选择商品" style="width: 100%" @change="changeMarket">
+                <el-option v-for="(item, index) in marketList" :key="index" :label="item.name" :value="type == '1' ? item.id : item.market_id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="form.name" placeholder="请输入商品名称"></el-input>
+            </el-form-item>
+            <el-form-item label="商品单价(¥)" prop="money">
+              <el-input v-model="form.money" type="number" placeholder="请输入商品单价"></el-input>
+            </el-form-item>
+            <el-form-item label="商品类型" prop="market_type">
+              <el-select v-model="form.market_type" placeholder="请选择商品类型" style="width: 100%">
+                <el-option label="固定资产" value="1"></el-option>
+                <el-option label="商品" value="2"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="固定资产商品编码" prop="code" v-if="form.market_type == '1'">
+              <el-input v-model="form.code" placeholder="请输入固定资产商品编码"></el-input>
+            </el-form-item>
+            <el-form-item label="分类" prop="type_id">
+              <el-select v-model="form.type_id" placeholder="请选择分类" style="width: 100%" @change="changeType">
+                <el-option v-for="(item, index) in typeList" :key="index" :label="item.name" :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="数量" prop="num">
+              <el-input-number v-model="form.num" :min="1" :max="Number(form.num)" label="请输入数量"></el-input-number>
+            </el-form-item>
+            <el-form-item label="简介" prop="brief">
+              <el-input v-model="form.brief" placeholder="请输入简介" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
+            </el-form-item>
+            <el-form-item label="图片" prop="img_url">
+              <e-upload url="/files/hc/stock/upload" :limit="4" v-model="form.img_url"></e-upload>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="danger" size="small" @click="resetForm('form')">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapType } = createNamespacedHelpers('type');
+const { mapActions: mapStock } = createNamespacedHelpers('stock');
+export default {
+  name: 'stock-1',
+  props: {
+    type: { type: String },
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      rules: {
+        market_type: [{ required: true, message: '请选择', trigger: 'change' }],
+        type_id: [{ required: true, message: '请选择', trigger: 'change' }],
+        name: [{ required: true, message: '请输入商品名称', trigger: 'blur' }],
+        money: [{ required: true, message: '请输入商品单价', trigger: 'blur' }],
+        num: [{ required: true, message: '请输入数量', trigger: 'blur' }],
+        brief: [{ required: false, message: '请输入简介', trigger: 'blur' }],
+      },
+      // 商品类型
+      typeList: [],
+      // 商品列表
+      marketList: [],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...mapType(['query']),
+    ...mapStock({ stockQuery: 'query' }),
+    async search() {
+      let res = await this.query();
+      if (this.$checkRes(res)) {
+        this.$set(this, `typeList`, res.data);
+      }
+      res = await this.stockQuery({ market_type: this.type });
+      if (this.$checkRes(res)) {
+        this.$set(this, `marketList`, res.data);
+      }
+    },
+    // 选择类型
+    changeType(value) {
+      let data = this.typeList.find((i) => i.id == value);
+      if (data) this.$set(this.form, `type`, data.name);
+    },
+    // 选择商品
+    changeMarket(value) {
+      let p1 = this.marketList.find((i) => i.market_id == value || i.id == value);
+      if (p1) {
+        this.$set(this.form, `name`, p1.name);
+        this.$set(this.form, `money`, p1.money);
+        this.$set(this.form, `code`, p1.code);
+        this.$set(this.form, `type_id`, p1.type_id);
+        this.$set(this.form, `type`, p1.type);
+        this.$set(this.form, `num`, p1.num);
+        this.$set(this.form, `brief`, p1.brief);
+        this.$set(this.form, `img_url`, p1.img_url);
+      }
+    },
+    // 取消保存
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+      this.$emit('resetForm');
+    },
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.$emit('onSubmit', { data: this.form });
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 104 - 0
src/views/adminCenter/stock/index.vue

@@ -0,0 +1,104 @@
+<template>
+  <div id="index">
+    <data-table :fields="fields" :opera="opera" @query="search" :data="list" :total="total" @view="toView">
+      <template slot="selfbtn">
+        <el-button type="primary" size="small" @click="toAdmin('2')">固定资产入库</el-button>
+        <el-button type="warning" size="small" @click="toAdmin('3')">固定资产出库</el-button>
+        <el-button type="primary" size="small" @click="toAdmin('4')">商品入库</el-button>
+        <el-button type="warning" size="small" @click="toAdmin('5')">商品出库</el-button>
+      </template>
+    </data-table>
+    <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
+      <info-1 v-if="dialog.type == '1'" :info="info"></info-1>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import info1 from './parts/info-1.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapStock } = createNamespacedHelpers('stock');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    info1,
+  },
+  data: function () {
+    return {
+      list: [],
+      total: 0,
+      fields: [
+        { label: '商品名称', prop: 'name', filter: 'input' },
+        { label: '商品单价(¥)', prop: 'money' },
+        { label: '商品数量', prop: 'num' },
+        {
+          label: '商品类型',
+          prop: 'market_type',
+          format: (i) => {
+            return i === '1' ? '固定资产' : '商品';
+          },
+        },
+        { label: '固定资产商品编码', prop: 'code' },
+        { label: '分类', prop: 'type' },
+        { label: '简介', prop: 'brief' },
+        { label: '商品id', prop: 'market_id' },
+      ],
+      opera: [{ label: '查看信息', method: 'view' }],
+      // 弹框
+      dialog: { title: '详细信息', show: false, type: '1', width: '50%' },
+      info: {},
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...mapStock(['query', 'fetch', 'create', 'update']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    // 查看信息
+    toView({ data }) {
+      data.market_type = data.market_type == '1' ? '固定资产' : '商品';
+      this.$set(this, `info`, data);
+      this.dialog = { title: '详细信息', show: true, type: '1', width: '50%' };
+    },
+    // 关闭
+    toClose() {
+      this.dialog = { title: '详细信息', show: false, type: '1', width: '50%' };
+      this.search();
+    },
+    // 库存管理
+    toAdmin(type) {
+      if (type == '2') this.$router.push({ path: '/adminCenter/stock/assetsenter' });
+      else if (type == '3') this.$router.push({ path: '/adminCenter/stock/assetsout' });
+      else if (type == '4') this.$router.push({ path: '/adminCenter/stock/marketenter' });
+      else if (type == '5') this.$router.push({ path: '/adminCenter/stock/marketout' });
+    },
+  },
+  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-dialog__body {
+  padding: 10px;
+}
+</style>

+ 163 - 0
src/views/adminCenter/stock/marketenter.vue

@@ -0,0 +1,163 @@
+<template>
+  <div id="assetsenter">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-button type="primary" size="small" @click="back()">返回</el-button>
+        </el-col>
+        <el-col :span="24" class="two">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="登记人" prop="register_personal">
+              <el-input v-model="form.register_personal" placeholder="请输入登记人"></el-input>
+            </el-form-item>
+            <el-form-item label="登记时间" prop="register_date">
+              <el-date-picker v-model="form.register_date" placeholder="请选择" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" style="width: 100%">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="入库原因" prop="register_reason">
+              <el-input v-model="form.register_reason" placeholder="请输入入库原因" type="textarea"></el-input>
+            </el-form-item>
+            <el-col :span="24" class="order">
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="small" @click="toAddmarket()">添加商品</el-button>
+              </el-col>
+              <el-col :span="24" class="list">
+                <data-table :fields="fields" :opera="opera" :data="form.order" @del="toDel"></data-table>
+              </el-col>
+            </el-col>
+            <el-col :span="24" style="text-align: center">
+              <el-button type="danger" size="small" @click="back()">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-col>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
+      <orderForm-2 v-if="dialog.type == '1'" :form="orderForm" @resetForm="toClose" @onSubmit="orderSubmit"></orderForm-2>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import orderForm2 from './enter-out/orderForm-2.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: market_enter } = createNamespacedHelpers('market_enter');
+export default {
+  name: 'assetsenter',
+  props: {},
+  components: {
+    orderForm2,
+  },
+  data: function () {
+    return {
+      form: { order: [] },
+      rules: {
+        register_personal: [{ required: true, message: '请输入登记人', trigger: 'blur' }],
+        register_date: [{ required: true, message: '请选择登记时间', trigger: 'change' }],
+        register_reason: [{ required: true, message: '请输入入库原因', trigger: 'blur' }],
+      },
+      // 商品
+      fields: [
+        { label: '商品名称', prop: 'name' },
+        { label: '商品单价(¥)', prop: 'money' },
+        { label: '商品数量', prop: 'num' },
+        {
+          label: '商品类型',
+          prop: 'market_type',
+          format: (i) => {
+            return i === '1' ? '固定资产' : '商品';
+          },
+        },
+        { label: '固定资产商品编码', prop: 'code' },
+        { label: '分类', prop: 'type' },
+        { label: '简介', prop: 'brief' },
+        { label: '商品id', prop: 'market_id' },
+      ],
+      opera: [{ label: '删除', method: 'del', type: 'danger' }],
+      // 弹框
+      dialog: { title: '商品管理', show: false, type: '1', width: '50%' },
+      // 商品
+      orderForm: { img_url: [] },
+    };
+  },
+  created() {},
+  methods: {
+    ...market_enter(['create']),
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          let res = await this.create(data);
+          if (this.$checkRes(res)) {
+            this.$message({ type: `success`, message: `操作成功` });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+
+    // 商品添加
+    toAddmarket() {
+      this.dialog = { title: '商品管理', show: true, type: '1', width: '50%' };
+    },
+    // 商品提交保存
+    orderSubmit({ data }) {
+      this.form.order.push(data);
+      this.$set(this, `orderForm`, { img_url: [] });
+      this.toClose();
+    },
+    // 删除
+    toDel({ data }) {
+      let index = this.form.order.findIndex((i) => i.code == data.code);
+      this.form.order.splice(index, 1);
+    },
+    // 关闭
+    toClose() {
+      this.dialog = { title: '商品管理', show: false, type: '1', width: '50%' };
+    },
+    // 返回
+    back() {
+      this.$router.push({ path: '/adminCenter/stock/index' });
+    },
+  },
+  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 {
+    .order {
+      margin: 0 0 10px 0;
+      .btn {
+        text-align: right;
+        margin: 0 0 10px 0;
+      }
+    }
+  }
+}
+/deep/.el-dialog__body {
+  padding: 10px;
+}
+</style>

+ 167 - 0
src/views/adminCenter/stock/marketout.vue

@@ -0,0 +1,167 @@
+<template>
+  <div id="assetsenter">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-button type="primary" size="small" @click="back()">返回</el-button>
+        </el-col>
+        <el-col :span="24" class="two">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="领取人" prop="personal">
+              <el-input v-model="form.personal" placeholder="请输入领取人"></el-input>
+            </el-form-item>
+            <el-form-item label="领取人电话" prop="phone">
+              <el-input v-model="form.phone" placeholder="请输入领取人电话"></el-input>
+            </el-form-item>
+            <el-form-item label="领取时间" prop="out_date">
+              <el-date-picker v-model="form.out_date" placeholder="请选择" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" style="width: 100%">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="领取原因" prop="reason">
+              <el-input v-model="form.reason" placeholder="请输入领取原因" type="textarea"></el-input>
+            </el-form-item>
+            <el-col :span="24" class="order">
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="small" @click="toAddmarket()">添加商品</el-button>
+              </el-col>
+              <el-col :span="24" class="list">
+                <data-table :fields="fields" :opera="opera" :data="form.order" @del="toDel"></data-table>
+              </el-col>
+            </el-col>
+            <el-col :span="24" style="text-align: center">
+              <el-button type="danger" size="small" @click="back()">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-col>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog :title="dialog.title" :visible.sync="dialog.show" :width="dialog.width" :before-close="toClose" :close-on-click-modal="false">
+      <stock-1 v-if="dialog.type == '1'" type="2" :form="orderForm" @resetForm="toClose" @onSubmit="orderSubmit"></stock-1>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import stock1 from './enter-out/stock-1.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: market_out } = createNamespacedHelpers('market_out');
+export default {
+  name: 'assetsenter',
+  props: {},
+  components: {
+    stock1,
+  },
+  data: function () {
+    return {
+      form: { order: [] },
+      rules: {
+        personal: [{ required: true, message: '请输入领取人', trigger: 'blur' }],
+        phone: [{ required: true, message: '请输入联系电话', trigger: 'change' }],
+        out_date: [{ required: true, message: '请选择领取时间', trigger: 'change' }],
+        reason: [{ required: true, message: '请输入领取原因', trigger: 'blur' }],
+      },
+      // 商品
+      fields: [
+        { label: '商品名称', prop: 'name' },
+        { label: '商品单价(¥)', prop: 'money' },
+        { label: '商品数量', prop: 'num' },
+        {
+          label: '商品类型',
+          prop: 'market_type',
+          format: (i) => {
+            return i === '1' ? '固定资产' : '商品';
+          },
+        },
+        { label: '固定资产商品编码', prop: 'code' },
+        { label: '分类', prop: 'type' },
+        { label: '简介', prop: 'brief' },
+        { label: '商品id', prop: 'market_id' },
+      ],
+      opera: [{ label: '删除', method: 'del', type: 'danger' }],
+      // 弹框
+      dialog: { title: '商品管理', show: false, type: '1', width: '50%' },
+      // 商品
+      orderForm: { img_url: [] },
+    };
+  },
+  created() {},
+  methods: {
+    ...market_out(['create']),
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if (valid) {
+          let data = this.form;
+          let res = await this.create(data);
+          if (this.$checkRes(res)) {
+            this.$message({ type: `success`, message: `操作成功` });
+            this.back();
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+
+    // 商品添加
+    toAddmarket() {
+      this.dialog = { title: '商品管理', show: true, type: '1', width: '50%' };
+    },
+    // 商品提交保存
+    orderSubmit({ data }) {
+      this.form.order.push(data);
+      this.$set(this, `orderForm`, { img_url: [] });
+      this.toClose();
+    },
+    // 删除
+    toDel({ data }) {
+      let index = this.form.order.findIndex((i) => i.code == data.code);
+      this.form.order.splice(index, 1);
+    },
+    // 关闭
+    toClose() {
+      this.dialog = { title: '商品管理', show: false, type: '1', width: '50%' };
+    },
+    // 返回
+    back() {
+      this.$router.push({ path: '/adminCenter/stock/index' });
+    },
+  },
+  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 {
+    .order {
+      margin: 0 0 10px 0;
+      .btn {
+        text-align: right;
+        margin: 0 0 10px 0;
+      }
+    }
+  }
+}
+/deep/.el-dialog__body {
+  padding: 10px;
+}
+</style>

+ 57 - 0
src/views/adminCenter/stock/parts/assetsenter-1.vue

@@ -0,0 +1,57 @@
+<template>
+  <div id="assetsenter-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="登记人" prop="register_personal">
+              <el-input v-model="form.register_personal" placeholder="请输入登记人"></el-input>
+            </el-form-item>
+            <el-form-item label="登记时间" prop="register_date">
+              <el-date-picker v-model="form.register_date" placeholder="请选择" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" style="width: 100%">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item label="入库原因" prop="register_reason">
+              <el-input v-model="form.register_reason" placeholder="请输入入库原因" type="textarea"></el-input>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: assets_enter } = createNamespacedHelpers('assets_enter');
+export default {
+  name: 'assetsenter-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      form: {},
+      rules: {},
+    };
+  },
+  created() {},
+  methods: {
+    ...assets_enter(['create']),
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 36 - 0
src/views/adminCenter/stock/parts/assetsout-1.vue

@@ -0,0 +1,36 @@
+<template>
+  <div id="assetsout-1">
+    <el-row>
+      <el-col :span="24" class="main"> test </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'assetsout-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {};
+  },
+  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></style>

+ 118 - 0
src/views/adminCenter/stock/parts/form-1.vue

@@ -0,0 +1,118 @@
+<template>
+  <div id="form-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="form.name" placeholder="请输入商品名称"></el-input>
+            </el-form-item>
+            <el-form-item label="商品单价(¥)" prop="money">
+              <el-input v-model="form.money" type="number" placeholder="请输入商品单价"></el-input>
+            </el-form-item>
+            <el-form-item label="商品类型" prop="market_type">
+              <el-select v-model="form.market_type" placeholder="请选择商品类型" style="width: 100%">
+                <el-option label="固定资产" value="1"></el-option>
+                <el-option label="商品" value="2"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="固定资产商品编码" prop="code" v-if="form.market_type == '1'">
+              <el-input v-model="form.code" placeholder="请输入固定资产商品编码"></el-input>
+            </el-form-item>
+            <el-form-item label="分类" prop="type_id">
+              <el-select v-model="form.type_id" placeholder="请选择分类" style="width: 100%" @change="changeType">
+                <el-option v-for="(item, index) in typeList" :key="index" :label="item.name" :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="数量" prop="num">
+              <el-input v-model="form.num" type="number" placeholder="请输入数量"></el-input>
+            </el-form-item>
+            <el-form-item label="简介" prop="brief">
+              <el-input v-model="form.brief" placeholder="请输入简介" type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
+            </el-form-item>
+            <el-form-item label="图片" prop="img_url">
+              <e-upload url="/files/hc/stock/upload" :limit="4" v-model="form.img_url"></e-upload>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="danger" size="small" @click="resetForm('form')">取消保存</el-button>
+              <el-button type="primary" size="small" @click="onSubmit('form')">提交保存</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: mapType } = createNamespacedHelpers('type');
+export default {
+  name: 'form-1',
+  props: {
+    form: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {
+      rules: {
+        market_type: [{ required: true, message: '请选择', trigger: 'change' }],
+        type_id: [{ required: true, message: '请选择', trigger: 'change' }],
+        name: [{ required: true, message: '请输入商品名称', trigger: 'blur' }],
+        money: [{ required: true, message: '请输入商品单价', trigger: 'blur' }],
+        num: [{ required: true, message: '请输入数量', trigger: 'blur' }],
+        brief: [{ required: false, message: '请输入简介', trigger: 'blur' }],
+      },
+      typeList: [],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...mapType(['query']),
+    async search() {
+      let res = await this.query();
+      if (this.$checkRes(res)) {
+        this.$set(this, `typeList`, res.data);
+      }
+    },
+    // 选择类型
+    changeType(value) {
+      let data = this.typeList.find((i) => i.id == value);
+      if (data) this.$set(this.form, `type`, data.name);
+    },
+    // 取消保存
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+      this.$emit('resetForm');
+    },
+    // 提交保存
+    onSubmit(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.$emit('onSubmit', { data: this.form });
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 77 - 0
src/views/adminCenter/stock/parts/info-1.vue

@@ -0,0 +1,77 @@
+<template>
+  <div id="info-1">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-form :model="info" ref="info" label-width="130px">
+            <el-form-item label="商品名称" prop="name">
+              <el-input v-model="info.name" readonly></el-input>
+            </el-form-item>
+            <el-form-item label="商品单价(¥)" prop="money">
+              <el-input v-model="info.money" readonly></el-input>
+            </el-form-item>
+            <el-form-item label="商品类型" prop="market_type">
+              <el-input v-model="info.market_type" readonly></el-input>
+            </el-form-item>
+            <el-form-item label="固定资产商品编码" prop="code">
+              <el-input v-model="info.code" readonly></el-input>
+            </el-form-item>
+            <el-form-item label="分类" prop="type">
+              <el-input v-model="info.type" readonly></el-input>
+            </el-form-item>
+            <el-form-item label="数量" prop="num">
+              <el-input v-model="info.num" readonly></el-input>
+            </el-form-item>
+            <el-form-item label="简介" prop="brief">
+              <el-input v-model="info.brief" readonly type="textarea" :autosize="{ minRows: 2, maxRows: 4 }"></el-input>
+            </el-form-item>
+            <el-form-item label="图片">
+              <el-col :span="12" class="imgUrl" v-for="(item, index) in info.img_url" :key="index">
+                <el-image :src="item.url"></el-image>
+              </el-col>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'info-1',
+  props: {
+    info: { type: Object },
+  },
+  components: {},
+  data: function () {
+    return {};
+  },
+  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>
+.imgUrl {
+  padding: 10px;
+  .el-image {
+    width: 100%;
+    height: 230px;
+  }
+}
+</style>

+ 36 - 0
src/views/adminCenter/stock/parts/marketenter-1.vue

@@ -0,0 +1,36 @@
+<template>
+  <div id="marketenter-1">
+    <el-row>
+      <el-col :span="24" class="main"> test </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'marketenter-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {};
+  },
+  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></style>

+ 36 - 0
src/views/adminCenter/stock/parts/marketout-1.vue

@@ -0,0 +1,36 @@
+<template>
+  <div id="marketout-1">
+    <el-row>
+      <el-col :span="24" class="main"> test </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'marketout-1',
+  props: {},
+  components: {},
+  data: function () {
+    return {};
+  },
+  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></style>