张延森 6 gadus atpakaļ
vecāks
revīzija
a9d744816a

+ 84
- 0
src/components/EditableTag.vue Parādīt failu

@@ -0,0 +1,84 @@
1
+<template>
2
+  <div>
3
+    <el-tag
4
+      :key="item[label]"
5
+      v-for="item in value"
6
+      closable
7
+      :disable-transitions="false"
8
+      @close="() => handleClose(item)">
9
+      {{item[label]}}
10
+    </el-tag>
11
+    <el-input
12
+      class="input-new-tag"
13
+      v-if="inputVisible"
14
+      v-model="inputValue"
15
+      ref="saveTagInput"
16
+      size="small"
17
+      @keyup.enter.native="handleInputConfirm"
18
+      @blur="handleInputConfirm"
19
+    >
20
+    </el-input>
21
+    <el-button v-else class="button-new-tag" size="small" @click="showInput">+ 新建</el-button>
22
+  </div>
23
+</template>
24
+
25
+<script>
26
+  export default {
27
+    name: 'EditableTag',
28
+    props: [
29
+      'value',
30
+      'label',
31
+    ],
32
+    data() {
33
+      return {
34
+        inputVisible: false,
35
+        inputValue: ''
36
+      };
37
+    },
38
+    methods: {
39
+      handleClose(item) {
40
+        this.$confirm(`确认删除 ${item[this.label]}?`, '提示', {
41
+          confirmButtonText: '确定',
42
+          cancelButtonText: '取消',
43
+          type: 'warning'
44
+        }).then(() => {
45
+          this.$emit('delete', item)
46
+        }).catch(() => {})
47
+      },
48
+
49
+      showInput() {
50
+        this.inputVisible = true;
51
+        this.$nextTick(() => {
52
+          this.$refs.saveTagInput.$refs.input.focus()
53
+        })
54
+      },
55
+
56
+      handleInputConfirm() {
57
+        let inputValue = this.inputValue
58
+        if (inputValue) {
59
+          this.$emit('insert', inputValue)
60
+        }
61
+        this.inputVisible = false
62
+        this.inputValue = ''
63
+      }
64
+    }
65
+  }
66
+</script>
67
+
68
+<style>
69
+  .el-tag + .el-tag {
70
+    margin-left: 10px;
71
+  }
72
+  .button-new-tag {
73
+    margin-left: 10px;
74
+    height: 32px;
75
+    line-height: 30px;
76
+    padding-top: 0;
77
+    padding-bottom: 0;
78
+  }
79
+  .input-new-tag {
80
+    width: 90px;
81
+    margin-left: 10px;
82
+    vertical-align: bottom;
83
+  }
84
+</style>

+ 62
- 1
src/config/api.js Parādīt failu

@@ -365,7 +365,68 @@ const apis = {
365 365
     },
366 366
     
367 367
   },
368
-  
368
+  goods: {
369
+    type: {
370
+      list: {
371
+        method: 'get',
372
+        url: `${commPrefix}/tdGoodsType`
373
+      },
374
+      save: {
375
+        method: 'post',
376
+        url: `${commPrefix}/tdGoodsType/add`
377
+      },
378
+      update: {
379
+        method: 'put',
380
+        url: `${commPrefix}/tdGoodsType/update`
381
+      },
382
+      delete: {
383
+        method: 'delete',
384
+        url: `${commPrefix}/tdGoodsType/delete/:id`
385
+      },
386
+    },
387
+
388
+    spec: {
389
+      list: {
390
+        method: 'get',
391
+        url: `${commPrefix}/tdSpec`
392
+      },
393
+      save: {
394
+        method: 'post',
395
+        url: `${commPrefix}/tdSpec/add`
396
+      },
397
+      update: {
398
+        method: 'put',
399
+        url: `${commPrefix}/tdSpec/update`
400
+      },
401
+      delete: {
402
+        method: 'delete',
403
+        url: `${commPrefix}/tdSpec/delete/:id`
404
+      },
405
+    },
406
+
407
+    profile: {
408
+      list: {
409
+        method: 'get',
410
+        url: `${commPrefix}/taGoods`
411
+      },
412
+      get: {
413
+        method: 'get',
414
+        url: `${commPrefix}/taGoods/get/:id`
415
+      },
416
+      save: {
417
+        method: 'post',
418
+        url: `${commPrefix}/taGoods/add`
419
+      },
420
+      update: {
421
+        method: 'put',
422
+        url: `${commPrefix}/taGoods/update`
423
+      },
424
+      delete: {
425
+        method: 'delete',
426
+        url: `${commPrefix}/taGoods/delete/:id`
427
+      },
428
+    }
429
+  }
369 430
 
370 431
 }
371 432
 export default apis

+ 9
- 2
src/layout/default/MenuItem.vue Parādīt failu

@@ -1,8 +1,10 @@
1 1
 <template>
2 2
   <el-submenu v-if="checkChildren(menu) && isShow(menu)" :index="menu.name">
3 3
     <template slot="title">
4
-      <xm-icon v-if="menu.meta.icon" :name="menu.meta.icon"></xm-icon>
5
-      <span slot="title">{{ menu.meta.title }}</span>
4
+      <div @click="() => handleClick(menu)">
5
+        <xm-icon v-if="menu.meta.icon" :name="menu.meta.icon"></xm-icon>
6
+        <span slot="title">{{ menu.meta.title }}</span>
7
+      </div>
6 8
     </template>
7 9
     <menu-item v-for="item in menu.children" :key="item.name" :menu="item" :validate="validate" />
8 10
   </el-submenu>
@@ -36,6 +38,11 @@ export default {
36 38
       if (!this.validate(item)) return false
37 39
 
38 40
       return true
41
+    },
42
+    handleClick (menu) {
43
+      if (menu.meta.hasChildren) {
44
+        this.$router.push({ name: menu.name })
45
+      }
39 46
     }
40 47
   }
41 48
 }

+ 58
- 35
src/store/modules/goods.js Parādīt failu

@@ -24,48 +24,71 @@ export default {
24 24
     }
25 25
   },
26 26
   actions: {
27
-    GetGoodsList ({ commit }, payload) {
28
-      return new Promise((resolve, reject) => {
29
-        interact(apis.goodsManager.getGoodsList, payload).then(res => {
30
-          commit('updateList', res)
31
-          resolve(res)
32
-        }).catch(reject)
33
-      })
27
+    getGoodsList (_, payload) {
28
+      return interact(apis.goods.profile.list, payload)
34 29
     },
35
-    GetGoodTypes ({ commit }, payload) {
36
-      return new Promise((resolve, reject) => {
37
-        interact(apis.goodsManager.getGoodsTypeList, payload).then(res => {
38
-          commit('updateTypes', res)
39
-          resolve(res)
40
-        }).catch(reject)
41
-      })
30
+    saveGoods (_, goods) {
31
+      return interact(apis.goods.profile.save, window.JSON.stringify(goods))
42 32
     },
43
-    GetGoodSpecs ({ commit }, payload) {
44
-      interact(apis.goodsManager.getGoodsSpecList, payload).then(res => {
45
-        commit('updateSpecs', res)
46
-      })
33
+    updateGoods (_, goods) {
34
+      return interact(apis.goods.profile.update, window.JSON.stringify(goods))
47 35
     },
48
-    GetGoodsByID ({ commit }, { id }) {
49
-      interact(replaceApiParams(apis.goodsManager.getGoodsByID, { id })).then(res => {
50
-        commit('updateInfo', res)
51
-      })
36
+    deleteGoods (_, goods) {
37
+      return interact(replaceApiParams(apis.goods.profile.delete, { id: goods.goodsId }))
52 38
     },
53
-    AddGoods ({ commit }, payload) {
54
-      interact(apis.goodsManager.addGoods, payload).then(res => {
55
-        commit('updateInfo', res)
56
-      })
39
+    getGoodsByID (_, payload) {
40
+      return interact(replaceApiParams(apis.goods.profile.get, { id: payload.id }))
57 41
     },
58
-    UpdateGoods (_, payload) {
59
-      interact(replaceApiParams(apis.goodsManager.updateGoods, { id: payload.GoodsId }), payload).then(x => x)
42
+
43
+    getGoodTypes (_, payload) {
44
+      return interact(apis.goods.type.list, payload)
60 45
     },
61
-    DelGoods (_, { id, callback }) {
62
-      interact(replaceApiParams(apis.goodsManager.deleteGoods.url, { id: id })).then(callback)
46
+    saveGoodType (_, goodsType) {
47
+      return interact(apis.goods.type.save, window.JSON.stringify(goodsType))
63 48
     },
64
-    SetNull ({ commit }) {
65
-      commit('updateInfo', {})
49
+    updateGoodType (_, goodsType) {
50
+      return interact(apis.goods.type.update, window.JSON.stringify(goodsType))
66 51
     },
67
-    UpdateInfo ({ commit }, payload) {
68
-      commit('updateInfo', payload)
69
-    }
52
+    deleteGoodType (_, goodsType) {
53
+      return interact(replaceApiParams(apis.goods.type.delete, { id: goodsType.typeId }))
54
+    },
55
+
56
+    getGoodsSpecList (_, payload) {
57
+      return interact(apis.goods.spec.list, payload)
58
+    },
59
+    saveGoodsSpec (_, goodsSpec) {
60
+      return interact(apis.goods.spec.save, window.JSON.stringify(goodsSpec))
61
+    },
62
+    deleteGoodsSpec (_, goodsSpec) {
63
+      return interact(replaceApiParams(apis.goods.spec.delete, { id: goodsSpec.specId }))
64
+    },
65
+
66
+    // getGoodSpecs ({ commit }, payload) {
67
+    //   interact(apis.goodsManager.getGoodsSpecList, payload).then(res => {
68
+    //     commit('updateSpecs', res)
69
+    //   })
70
+    // },
71
+    // getGoodsByID ({ commit }, { id }) {
72
+    //   interact(replaceApiParams(apis.goodsManager.getGoodsByID, { id })).then(res => {
73
+    //     commit('updateInfo', res)
74
+    //   })
75
+    // },
76
+    // addGoods ({ commit }, payload) {
77
+    //   interact(apis.goodsManager.addGoods, payload).then(res => {
78
+    //     commit('updateInfo', res)
79
+    //   })
80
+    // },
81
+    // updateGoods (_, payload) {
82
+    //   interact(replaceApiParams(apis.goodsManager.updateGoods, { id: payload.GoodsId }), payload).then(x => x)
83
+    // },
84
+    // delGoods (_, { id, callback }) {
85
+    //   interact(replaceApiParams(apis.goodsManager.deleteGoods.url, { id: id })).then(callback)
86
+    // },
87
+    // setNull ({ commit }) {
88
+    //   commit('updateInfo', {})
89
+    // },
90
+    // updateInfo ({ commit }, payload) {
91
+    //   commit('updateInfo', payload)
92
+    // }
70 93
   }
71 94
 }

+ 77
- 0
src/views/goodsManager/GoodsSpec.vue Parādīt failu

@@ -0,0 +1,77 @@
1
+<template>
2
+  <div>
3
+    <el-alert title="直接进行标签的新增、删除即可,不支持修改" type="warning"></el-alert>
4
+    <div style="margin-top: 24px">
5
+      <editable-tag
6
+        :value="specList"
7
+        label="specName"
8
+        @insert="handleSpecSave"
9
+        @delete="handleSpecDelete"
10
+      ></editable-tag>
11
+    </div>
12
+    <div></div>
13
+  </div>
14
+</template>
15
+
16
+<script>
17
+import { createNamespacedHelpers } from 'vuex'
18
+
19
+const { mapActions: mapGoodsActions } = createNamespacedHelpers('goods')
20
+
21
+export default {
22
+  name: 'GoodsSpec',
23
+  components: {
24
+    EditableTag: () => import('../../components/EditableTag')
25
+  },
26
+  data () {
27
+    return {
28
+      specList: [],
29
+      detailTPL: {
30
+        specId: undefined,
31
+        specName: undefined,
32
+        status: undefined,
33
+        orgId: undefined,
34
+        caseId: undefined,
35
+      },
36
+      detail: {},
37
+    }
38
+  },
39
+  created () {
40
+    this.pageInit()
41
+  },
42
+  methods: {
43
+    ...mapGoodsActions([
44
+      'getGoodsSpecList',
45
+      'saveGoodsSpec',
46
+      'deleteGoodsSpec',
47
+    ]),
48
+
49
+    pageInit() {
50
+      this.getGoodsSpecList({ pageSize: 999 }).then((dt) => {
51
+        this.specList = dt.records || []
52
+      })
53
+    },
54
+
55
+    handleSpecSave (specName) {
56
+      this.detail = { ...this.detailTPL, specName }
57
+      this.saveGoodsSpec(this.detail).then((dt) => {
58
+        this.specList = this.specList.concat(dt)
59
+
60
+        this.$message('操作成功')
61
+      }).catch((err) => {
62
+        this.$message.error(err.message || err)
63
+      })
64
+    },
65
+    handleSpecDelete (spec) {
66
+      this.deleteGoodsSpec(spec).then(() => {
67
+        this.specList = this.specList.filter(s => s.specId !== spec.specId)
68
+
69
+        this.$message('操作成功')
70
+      }).catch((err) => {
71
+        this.$message.error(err.message || err)
72
+      })
73
+    }
74
+  }
75
+}
76
+</script>
77
+

src/views/goodsManager/goodsTypeManager/index.vue → src/views/goodsManager/GoodsType.vue Parādīt failu

@@ -55,10 +55,12 @@
55 55
 </template>
56 56
 
57 57
 <script>
58
-import { mapState } from 'vuex'
58
+import { createNamespacedHelpers } from 'vuex'
59
+
60
+const { mapActions: mapGoodsActions } = createNamespacedHelpers('goods')
59 61
 
60 62
 export default {
61
-  name: '',
63
+  name: 'GoodsType',
62 64
   data () {
63 65
     return {
64 66
       total: 0,
@@ -88,11 +90,21 @@ export default {
88 90
     })
89 91
   },
90 92
   computed: {
91
-    ...mapState({
92
-    }),
93 93
   },
94 94
   methods: {
95
+    ...mapGoodsActions([
96
+      'getGoodTypes',
97
+      'saveGoodType',
98
+      'updateGoodType',
99
+      'deleteGoodType',
100
+    ]),
95 101
     getList () { // 获取列表
102
+      this.getGoodTypes(this.postData).then((data) => {
103
+        this.postData.page = data.current
104
+        this.postData.pagesize = data.size
105
+        this.currentList = data.records
106
+      })
107
+
96 108
       // this.$ajax(this.$api.goodsManager.getGoodsTypeList.url, {
97 109
       //   method: this.$api.goodsManager.getGoodsTypeList.method,
98 110
       //   queryData: { ...this.postData, caseid: this.CaseId === 'all' ? '' : this.CaseId }
@@ -119,16 +131,10 @@ export default {
119 131
         cancelButtonText: '取消',
120 132
         type: 'warning'
121 133
       }).then(() => {
122
-        // this.$ajax(this.$api.goodsManager.deleteGoodsType.url, {
123
-        //   method: this.$api.goodsManager.deleteGoodsType.method,
124
-        //   urlData: { id: row.TypeId }
125
-        // }).then(res => {
126
-        //   this.$message({
127
-        //     type: 'success',
128
-        //     message: '删除成功!'
129
-        //   })
130
-        //   this.search()
131
-        // })
134
+        this.deleteGoodType(row).then(() => {
135
+          this.currentList = this.currentList.filter(item => item.typeId !== row.typeId)
136
+          this.$message('操作成功')
137
+        }).catch(err => this.$message.error(err.message || err))
132 138
       }).catch(() => {
133 139
         this.$message({
134 140
           type: 'info',
@@ -141,6 +147,23 @@ export default {
141 147
       this.dialogFormVisible = true
142 148
     },
143 149
     submitTypeDetail () {
150
+      const newData = !this.typeDetail.typeId
151
+      const api = newData ? this.saveGoodType : this.updateGoodType
152
+
153
+      api(this.typeDetail).then((data) => {
154
+        if (newData) {
155
+          this.currentList = this.currentList.concat(data)
156
+        } else {
157
+          this.currentList = this.currentList.map((item) => {
158
+            return item.typeId === data.typeId ? data : item
159
+          })
160
+        }
161
+
162
+        this.$message('操作成功')
163
+      }).catch((err) => {
164
+        this.$message.error(err.message || err)
165
+      })
166
+
144 167
       this.dialogFormVisible = false
145 168
     }
146 169
   }

+ 155
- 200
src/views/goodsManager/goodManager/edit.vue Parādīt failu

@@ -1,255 +1,210 @@
1 1
 <template>
2 2
   <div class="subPage">
3
-    <form class="mainForm">
4
-      <ul>
5
-         <li class="flex-h">
6
-          <span>选择案场:<em>*</em></span>
7
-          <div class="flex-item">
8
-            <div style="width:50%">
9
-              <el-select v-model="Case" placeholder="请选择">
10
-                <el-option
11
-                  v-for="item in cases"
12
-                  :key="item.CaseId"
13
-                  :label="item.CaseName"
14
-                  :value="item.CaseId">
15
-                </el-option>
16
-              </el-select>
17
-            </div>
3
+    <el-form class="mainForm" label-width="80px">
4
+      <el-form-item label="商品名称" required>
5
+        <el-input
6
+          placeholder="请输入商品名称"
7
+          v-model="detail.goodsName"
8
+          clearable>
9
+        </el-input>
10
+      </el-form-item>
11
+      <el-form-item label="商品图片" required>
12
+        <div class="flex-item">
13
+          <div class="red-hint">建议上传150*150尺寸的图片</div>
14
+          <div style="width:50%">
15
+            <el-upload
16
+              class="avatar-uploader"
17
+              name="uploadFile"
18
+              :action="upFileUrl"
19
+              :show-file-list="false"
20
+              :before-upload="beforeImgUpload"
21
+              :on-success="handleAvatarSuccess">
22
+              <img v-if="detail.imgUrl" :src="detail.imgUrl" class="avatar">
23
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
24
+            </el-upload>
18 25
           </div>
19
-        </li>
20
-        <li class="flex-h">
21
-          <span>商品名称:<em>*</em></span>
22
-          <div class="flex-item">
23
-            <div style="width:50%">
24
-              <el-input
25
-                placeholder="请输入商品名称"
26
-                v-model="detail.GoodsName"
27
-                clearable>
28
-              </el-input>
29
-            </div>
30
-          </div>
31
-        </li>
32
-        <li class="flex-h">
33
-          <span>商品图片:<em>*</em></span>
34
-          <div class="flex-item">
35
-            <div class="red-hint">建议上传150*150尺寸的图片</div>
36
-            <div style="width:50%">
37
-              <el-upload
38
-                class="avatar-uploader"
39
-                action='string'
40
-                :before-upload="toolClass.beforeUpload"
41
-                :http-request="toolClass.upload"
42
-                :show-file-list="false"
43
-                :on-success="handleAvatarSuccess">
44
-                <img v-if="Image" :src="Image" class="avatar">
45
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
46
-              </el-upload>
47
-            </div>
48
-          </div>
49
-        </li>
50
-        <li class="flex-h">
51
-          <span>商品价格:<em>*</em></span>
52
-          <div class="flex-item">
53
-            <div style="width:50%">
54
-              <el-input
55
-                placeholder="请输入商品价格"
56
-                v-model="detail.Price"
57
-                clearable>
58
-              </el-input>
59
-            </div>
60
-          </div>
61
-        </li>
62
-        <li class="flex-h">
63
-          <span>商品规格:</span>
64
-          <div class="flex-item">
65
-            <div style="width:50%">
66
-              <el-select v-model="detailSpecs" multiple placeholder="请选择" style="width:100%;">
67
-                <el-option
68
-                  v-for="item in ((Case || '') === '' ? [] : specs.list)"
69
-                  :key="item.SpecId"
70
-                  :label="item.SpecName"
71
-                  :value="item.SpecId">
72
-                </el-option>
73
-              </el-select>
74
-            </div>
75
-          </div>
76
-        </li>
77
-        <li class="flex-h">
78
-          <span>商品类别:<em>*</em></span>
79
-          <div class="flex-item">
80
-            <div style="width:50%">
81
-              <el-select v-model="TypeId" placeholder="请选择商品类型">
82
-                <el-option
83
-                  v-for="item in ((Case || '') === '' ? [] : types.list)"
84
-                  :key="item.TypeId"
85
-                  :label="item.TypeName"
86
-                  :value="item.TypeId">
87
-                </el-option>
88
-              </el-select>
89
-            </div>
90
-          </div>
91
-        </li>
92
-        <li style="text-align:center">
93
-          <el-button type="primary" size="mini" @click='submit'>保存</el-button>
94
-          <el-button type="danger" size="mini" @click="cancel">取消</el-button>
95
-        </li>
96
-      </ul>
97
-    </form>
26
+        </div>
27
+      </el-form-item>
28
+      <el-form-item label="商品规格" required>
29
+        <el-select v-model="detailSpecs" multiple placeholder="请选择" style="width:100%;">
30
+          <el-option
31
+            v-for="item in goodsSpecs"
32
+            :key="item.specId"
33
+            :label="item.specName"
34
+            :value="item.specId">
35
+          </el-option>
36
+        </el-select>
37
+      </el-form-item>
38
+      <el-form-item label="商品类别" required>
39
+        <el-select v-model="detail.typeId" placeholder="请选择商品类型" style="width: 100%">
40
+          <el-option
41
+            v-for="item in goodsTypes"
42
+            :key="item.typeId"
43
+            :label="item.typeName"
44
+            :value="item.typeId">
45
+          </el-option>
46
+        </el-select>
47
+      </el-form-item>
48
+      <el-form-item>
49
+        <el-button type="primary" @click='submit'>保存</el-button>
50
+        <el-button type="danger" @click="cancel">取消</el-button>
51
+      </el-form-item>
52
+    </el-form>
98 53
   </div>
99 54
 </template>
100 55
 
101 56
 <script>
102
-import { createNamespacedHelpers, mapState, mapActions } from 'vuex'
57
+import { createNamespacedHelpers } from 'vuex'
58
+import apis from '../../../config/api'
103 59
 
104
-const { mapState: mapGoodsState, mapActions: mapGoodsActions } = createNamespacedHelpers('goods')
60
+const { mapActions: mapGoodsActions } = createNamespacedHelpers('goods')
105 61
 export default {
106 62
   name: '',
107 63
   data () {
108 64
     return {
109
-      limit: 1,
110
-      dialogVisible: false,
111
-      infoSpecs: null,
65
+      loading: undefined,
66
+      upFileUrl: apis.file.upload.url,
67
+      goodsTypes: [],
68
+      goodsSpecs: [],
69
+      detailSpecs: [],
70
+      detail: {
71
+        goodsId: undefined,
72
+        goodsName: undefined,
73
+        orgId: undefined,
74
+        caseId: undefined,
75
+        typeId: undefined,
76
+        price: undefined,
77
+        status: 1,
78
+        createDate: undefined,
79
+        createUser: undefined,
80
+        imgUrl: undefined,
81
+        typeName: undefined,
82
+        specList: [],
83
+      },
112 84
     }
113 85
   },
114 86
   components: {},
115 87
   computed: {
116
-    ...mapGoodsState({
117
-      detail: x => x.goodsInfo,
118
-      types: x => x.goodsTypes,
119
-      specs: x => x.goodsSpecs,
120
-    }),
121
-    ...mapState({
122
-      cases: x => x.app.cases.list,
123
-      caseid: x => x.app.cases.default,
124
-      orgid: x => x.app.user.OrgId,
125
-    }),
126
-    Case: {
127
-      get () {
128
-        return this.detail.CaseId
129
-      },
130
-      set (val) {
131
-        this.UpdateInfo({ ...this.detail, CaseId: val })
132
-        this.detail.TypeId = ''
133
-        this.GetGoodTypes({ pagesize: 1000, caseid: this.Case })
134
-        this.GetGoodSpecs({ pagesize: 1000, caseid: this.Case })
135
-      }
136
-    },
137
-    detailSpecs: {
138
-      get () {
139
-        // console.log(this.infoSpecs || (this.detail.Specs || []).map(x => x.SpecId))
140
-        return this.infoSpecs || (this.detail.Specs || []).map(x => x.SpecId)
141
-      },
142
-      set (val) {
143
-        this.infoSpecs = val
144
-      },
145
-    },
146
-    Image () {
147
-      return ((this.detail.Images || [])[0] || {}).ImgUrl
148
-    },
149
-    TypeId: {
150
-      get () {
151
-        return this.detail.TypeId
152
-      },
153
-      set (val) {
154
-        this.UpdateInfo({ ...this.detail, TypeId: val })
155
-      },
156
-    },
157 88
   },
158 89
   methods: {
159 90
     ...mapGoodsActions([
160
-      'GetGoodTypes',
161
-      'GetGoodsByID',
162
-      'AddGoods',
163
-      'UpdateGoods',
164
-      'SetNull',
165
-      'UpdateInfo',
166
-      'GetGoodSpecs',
167
-    ]),
168
-    ...mapActions([
169
-      'picSize'
91
+      'getGoodTypes',
92
+      'getGoodsByID',
93
+      'saveGoods',
94
+      'updateGoods',
95
+      'getGoodsSpecList',
170 96
     ]),
171 97
     submit () {
172
-      this.detail.specs = JSON.stringify(this.detailSpecs.map(x => ({ SpecId: x, GoodsPrice: this.detail.Price })))
173
-      this.detail.images = (this.detail.Images || []).map(x => {
174
-        if (x.response) {
175
-          return x.response.result.url
176
-        } else {
177
-          return x.ImgUrl
178
-        }
179
-      }).join(',')
180
-      if ((this.detail.CaseId || '') === '') {
181
-        this.$message({
182
-          type: 'error',
183
-          message: '案场不能为空'
184
-        })
185
-        return false
186
-      }
187
-      if ((this.detail.GoodsName || '') === '') {
98
+      this.detail.price = 0
99
+      this.detail.specList = this.detailSpecs.map(x => ({ specId: x }))
100
+
101
+      if (!this.detail.goodsName) {
188 102
         this.$message({
189 103
           type: 'error',
190 104
           message: '商品名称不能为空'
191 105
         })
192 106
         return false
193 107
       }
194
-      if ((this.detail.Images || '') === '') {
108
+      if (!this.detail.imgUrl) {
195 109
         this.$message({
196 110
           type: 'error',
197 111
           message: '图片不能为空'
198 112
         })
199 113
         return false
200 114
       }
201
-      if ((this.detail.Price || '') === '') {
202
-        this.$message({
203
-          type: 'error',
204
-          message: '价格不能为空'
205
-        })
206
-        return false
207
-      }
208
-      if ((this.detail.TypeId || '') === '') {
115
+
116
+      if (!this.detail.typeId) {
209 117
         this.$message({
210 118
           type: 'error',
211 119
           message: '类别不能为空'
212 120
         })
213 121
         return false
214 122
       }
215
-      if ((this.detail.GoodsId || '') === '') {
216
-        this.detail.OrgId = this.orgid
217
-        this.AddGoods(this.detail)
218
-      } else {
219
-        if ((this.detail.CaseId || '') === '') {
220
-          this.$message({
221
-            type: 'error',
222
-            message: '案场不能为空'
223
-          })
224
-          return false
225
-        }
226
-        this.UpdateGoods(this.detail)
227
-      }
228
-      this.$message({
229
-        type: 'success',
230
-        message: '操作成功'
231
-      })
232
-      this.$router.push({ name: 'goodsInfo' })
123
+
124
+      const newRec = !this.detail.goodsId
125
+      const api = newRec ? this.saveGoods : this.updateGoods
126
+
127
+      api(this.detail).then(() => {
128
+        this.$alert('操作成功', '', {
129
+          callback: () => this.$router.push({ name: 'goodsprofile' })
130
+        })        
131
+      }).catch((err) => this.$message.error(err.message || err))
233 132
     },
234 133
     cancel () {
235 134
       this.$router.go(-1)
236 135
     },
237
-    handleAvatarSuccess (res, file) {
238
-      this.UpdateInfo({ ...this.detail, Images: [{ ImgUrl: res.result.url }] })
136
+    handleAvatarSuccess (res) {
137
+      this.detail.imgUrl = res.data
138
+      this.loading.close()
139
+    },
140
+    beforeImgUpload (file) {
141
+      if (file.type !== 'image/jpeg') {
142
+        this.$message.error('上传图片只能是 JPG 格式!')
143
+        return false
144
+      }
145
+      if (file.size / 1024 > 300) {
146
+        this.$message.error('图片大小不允许超过300k!')
147
+        return false
148
+      }
149
+      this.loading = this.$loading({
150
+        lock: true,
151
+        text: '上传中...',
152
+        spinner: 'el-icon-loading',
153
+        background: 'rgba(0, 0, 0, 0.7)'
154
+      })
155
+
156
+      return true
239 157
     },
240 158
   },
241 159
   created () {
242
-    this.picSize({ w: 150, h: 150 })
160
+    this.getGoodTypes({ pageSize: 9999 }).then((dt) => {
161
+      this.goodsTypes = dt.records || []
162
+    })
163
+    this.getGoodsSpecList({ pageSize: 9999 }).then((dt) => {
164
+      this.goodsSpecs = dt.records || []
165
+    })
243 166
     const { id } = this.$route.query
244
-    if (id && id !== '') {
245
-      this.GetGoodTypes({ pagesize: 1000, caseid: this.Case })
246
-      this.GetGoodSpecs({ pagesize: 1000, caseid: this.Case })
247
-      this.GetGoodsByID({ id: id })
167
+    if (id) {
168
+      this.getGoodsByID({ id }).then((dt) => {
169
+        this.detail = { ...dt }
170
+        this.detailSpecs = (dt.specList || []).map(x => x.specId)
171
+      })
248 172
     }
249 173
   }
250 174
 }
251 175
 </script>
252 176
 
253 177
 <!-- Add "scoped" attribute to limit CSS to this component only -->
178
+
179
+<style lang="scss">
180
+.avatar-uploader .el-upload {
181
+  border: 1px dashed #d9d9d9;
182
+  border-radius: 6px;
183
+  cursor: pointer;
184
+  position: relative;
185
+  overflow: hidden;
186
+}
187
+.avatar-uploader .el-upload:hover {
188
+  border-color: #409EFF;
189
+}
190
+.avatar-uploader-icon {
191
+  font-size: 28px;
192
+  color: #8c939d;
193
+  width: 178px;
194
+  height: 178px;
195
+  line-height: 178px;
196
+  text-align: center;
197
+}
198
+.avatar {
199
+  width: 178px;
200
+  height: 178px;
201
+  display: block;
202
+}
203
+</style>
204
+
254 205
 <style lang="scss" scoped>
206
+.mainForm {
207
+  width: 60%;
208
+  min-width: 480px;
209
+}
255 210
 </style>

+ 59
- 123
src/views/goodsManager/goodManager/index.vue Parādīt failu

@@ -1,76 +1,40 @@
1 1
 <template>
2
-  <div class="subPage">
3
-    <div class="system-table-search">
4
-      <div class="flex-h">
5
-        <div class="flex-item flex-h">
6
-          <el-button size="mini" type="success" @click='addRole'>新增商品</el-button>
7
-        </div>
8
-        <ul>
9
-          <li>
10
-            <!-- <span>选择案场:</span> -->
11
-            <el-select v-model="CaseId" placeholder="请选择">
12
-              <el-option
13
-                key="all"
14
-                label="所有案场"
15
-                value="all">
16
-              </el-option>
17
-              <el-option
18
-                v-for="item in cases"
19
-                :key="item.CaseId"
20
-                :label="item.CaseName"
21
-                :value="item.CaseId">
22
-              </el-option>
23
-            </el-select>
24
-          </li>
25
-          <li>
26
-            <el-input
27
-              placeholder="请输入商品名称"
28
-              v-model="postData.name"
29
-            >
30
-            </el-input>
31
-          </li>
32
-          <li>
33
-            <span>商品类型:</span>
34
-            <el-select v-model="postData.type" placeholder="请选择">
35
-              <el-option
36
-                v-for="item in types.list"
37
-                :key="item.TypeId"
38
-                :label="item.TypeName"
39
-                :value="item.TypeId">
40
-              </el-option>
41
-            </el-select>
42
-          </li>
43
-        </ul>
44
-        <el-button
45
-          size="mini"
46
-          type="primary" @click="search">搜索</el-button>
47
-      </div>
48
-      <div class="moreFilter"></div>
49
-    </div>
2
+  <r-layout class="subPage">
3
+    <xm-search>
4
+      <el-form-item>
5
+        <el-button type="success" @click='addGoods'>新增商品</el-button>
6
+      </el-form-item>
7
+      <el-form-item label="商品名称">
8
+        <el-input
9
+          placeholder="请输入商品名称"
10
+          v-model="postData.goodsName"
11
+          clearable
12
+        >
13
+        </el-input>
14
+      </el-form-item>
15
+      <el-form-item label="商品类型">
16
+        <el-select v-model="postData.typeId" placeholder="请选择">
17
+          <el-option
18
+            v-for="item in goodsTypes"
19
+            :key="item.typeId"
20
+            :label="item.typeName"
21
+            :value="item.typeId">
22
+          </el-option>
23
+        </el-select>
24
+      </el-form-item>
25
+    </xm-search>
50 26
     <div class="system-table-box">
51
-      <el-table :data="goods.list" stripe style="width: 100%">
52
-        <el-table-column prop="GoodsName" label="商品名称">
53
-        </el-table-column>
27
+      <el-table :data="currentList" stripe style="width: 100%">
28
+        <el-table-column prop="goodsId" label="#"></el-table-column>
29
+        <el-table-column prop="goodsName" label="商品名称"></el-table-column>
54 30
         <el-table-column label="图片" width="300">
55 31
           <template slot-scope="scope">
56
-            <img :src="((scope.row.Images || [])[0] || {}).ImgUrl" style="width:200px;" />
32
+            <img :src="scope.row.imgUrl" style="width: 96px;" />
57 33
           </template>
58 34
         </el-table-column>
59
-        <el-table-column prop="Price" label="价格">
60
-        </el-table-column>
61 35
         <el-table-column label="类型">
62 36
           <template slot-scope="scope">
63
-            <label>{{getTypeName(scope.row.TypeId)}}</label>
64
-          </template>
65
-        </el-table-column>
66
-        <el-table-column label="规格">
67
-          <template slot-scope="scope">
68
-            <label>{{getSpecNames(scope.row.Specs)}}</label>
69
-          </template>
70
-        </el-table-column>
71
-        <el-table-column label="案场">
72
-          <template slot-scope="scope">
73
-            <label>{{getCaseName(scope.row.CaseId)}}</label>
37
+            <label>{{getTypeName(scope.row.typeId)}}</label>
74 38
           </template>
75 39
         </el-table-column>
76 40
         <el-table-column fixed='right' label="操作" width="300">
@@ -82,74 +46,45 @@
82 46
       </el-table>
83 47
     </div>
84 48
     <el-pagination
85
-    @size-change="handleSizeChange"
86 49
     @current-change="handleCurrentChange"
87
-    :current-page.sync="currentPage"
50
+    :current-page="postData.page"
88 51
     :page-size="postData.pagesize"
89 52
     layout="prev, pager, next, jumper"
90
-    :total="goods.pagenum">
53
+    :total="pageTotal">
91 54
     </el-pagination>
92
-  </div>
55
+  </r-layout>
93 56
 </template>
94 57
 
95 58
 <script>
96
-import { createNamespacedHelpers, mapState } from 'vuex'
97
-import tableSearch from '@/components/tableSearch/index'
59
+import { createNamespacedHelpers } from 'vuex'
98 60
 
99
-const { mapState: mapGoodsState, mapActions: mapGoodsActions } = createNamespacedHelpers('goods')
61
+const { mapActions: mapGoodsActions } = createNamespacedHelpers('goods')
100 62
 
101 63
 export default {
102 64
   name: '',
103 65
   data () {
104 66
     return {
105
-      currentPage: 0, // 当前页码
106
-      key: '',
67
+      goodsTypes: [],
68
+      currentList: [],
69
+      pageTotal: 0,
107 70
       postData: {
108
-        caseid: '',
109
-        name: '',
110
-        type: '',
71
+        goodsName: '',
72
+        typeId: '',
111 73
         page: 1,
112 74
         pagesize: 10,
113 75
       },
114 76
     }
115 77
   },
116 78
   computed: {
117
-    ...mapState({
118
-      cases: x => x.app.cases.list,
119
-      defaultCaseId: x => x.app.cases.default
120
-    }),
121
-    ...mapGoodsState({
122
-      goods: x => x.goodsList,
123
-      types: x => x.goodsTypes,
124
-    }),
125
-    CaseId: {
126
-      get () {
127
-        return this.postData.caseid || this.defaultCaseId
128
-      },
129
-      set (val) {
130
-        this.postData.caseid = val
131
-        this.GetGoodTypes({ pagesize: 1000, caseid: this.CaseId === 'all' ? '' : this.CaseId })
132
-      }
133
-    }
134
-  },
135
-  components: {
136
-    tableSearch
137 79
   },
138 80
   methods: {
139 81
     ...mapGoodsActions([
140
-      'GetGoodsList',
141
-      'GetGoodTypes',
142
-      'DelGoods',
143
-      'SetNull',
82
+      'getGoodsList',
83
+      'getGoodTypes',
84
+      'delGoods',
144 85
     ]),
145 86
     getTypeName (typeid) {
146
-      return (this.types.list.filter(x => x.TypeId === typeid)[0] || {}).TypeName
147
-    },
148
-    getSpecNames (specs) {
149
-      return (specs || []).map(x => x.SpecName).join(',')
150
-    },
151
-    getCaseName (caseid) {
152
-      return (this.cases.filter(x => x.CaseId === caseid)[0] || {}).CaseName
87
+      return (this.goodsTypes.filter(x => x.typeId === typeid)[0] || {}).typeName
153 88
     },
154 89
     search () { // 搜索
155 90
       this.postData.page = 1
@@ -157,19 +92,20 @@ export default {
157 92
       this.getList()
158 93
     },
159 94
     getList () {
160
-      this.GetGoodsList({ ...this.postData, caseid: this.CaseId === 'all' ? '' : this.CaseId })
161
-    },
162
-    handleSizeChange (val) {
163
-      console.log(`每页 ${val} 条`)
95
+      this.getGoodsList({ ...this.postData }).then((dt) => {
96
+        this.currentList = dt.records
97
+        this.postData.page = dt.current
98
+        this.postData.pagesize = dt.size
99
+        this.pageTotal = dt.total
100
+      })
164 101
     },
165 102
     handleCurrentChange (val) {
166
-      this.postData.page = this.currentPage
103
+      this.postData.page = val
167 104
       this.getList()
168 105
     },
169 106
     handleEdit (index, row) {
170 107
       // 编辑
171
-      this.SetNull()
172
-      this.$router.push({ name: 'editGoods', query: { id: row.GoodsId } })
108
+      this.$router.push({ name: 'goodsedit', query: { id: row.goodsId } })
173 109
     },
174 110
     handleDelete (index, row) {
175 111
       // 删除
@@ -179,7 +115,7 @@ export default {
179 115
         type: 'warning'
180 116
       })
181 117
         .then(() => {
182
-          this.DelGoods({ id: row.GoodsId, callback: this.delCallBack })
118
+          this.delGoods({ id: row.goodsId, callback: this.delCallBack })
183 119
         })
184 120
         .catch(() => {
185 121
           this.$message({
@@ -195,16 +131,16 @@ export default {
195 131
       })
196 132
       this.getList()
197 133
     },
198
-    addRole () {
199
-      this.SetNull()
200
-      this.$router.push({ name: 'addGoods' })
134
+    addGoods () {
135
+      this.$router.push({ name: 'goodsedit' })
201 136
     },
202 137
   },
203
-  created () {
204
-    this.GetGoodTypes({ pagesize: 1000, caseid: this.CaseId })
205
-    this.$nextTick(function () {
206
-      this.getList()
138
+  mounted () {
139
+    this.getGoodTypes({ pageSize: 999 }).then((dt) => {
140
+      this.goodsTypes = dt.records || []
207 141
     })
142
+
143
+    this.getList()
208 144
   },
209 145
 }
210 146
 </script>

+ 0
- 105
src/views/goodsManager/goodsSpecManager/add.vue Parādīt failu

@@ -1,105 +0,0 @@
1
-<template>
2
-  <div class="subPage">
3
-    <form class="mainForm">
4
-      <ul>
5
-        <li class="flex-h">
6
-          <span>规格名:<em>*</em></span>
7
-          <div class="flex-item">
8
-            <div style="width:50%">
9
-              <el-input
10
-                placeholder="请输入规格名"
11
-                v-model="postData.SpecName"
12
-                clearable>
13
-              </el-input>
14
-            </div>
15
-          </div>
16
-        </li>
17
-        <li class="flex-h">
18
-          <span>选择案场:<em>*</em></span>
19
-          <div class="flex-item">
20
-            <div style="width:50%">
21
-              <el-select v-model="CaseId" placeholder="请选择">
22
-                <el-option
23
-                  v-for="item in cases"
24
-                  :key="item.CaseId"
25
-                  :label="item.CaseName"
26
-                  :value="item.CaseId">
27
-                </el-option>
28
-              </el-select>
29
-            </div>
30
-          </div>
31
-        </li>
32
-        <li style="text-align:center">
33
-          <el-button type="primary" size="mini" @click="submit">保存</el-button>
34
-          <el-button type="danger" size="mini" @click="cancel">取消</el-button>
35
-        </li>
36
-      </ul>
37
-    </form>
38
-  </div>
39
-</template>
40
-
41
-<script>
42
-import { mapState } from 'vuex'
43
-
44
-export default {
45
-  name: '',
46
-  data () {
47
-    return {
48
-      postData: {
49
-        SpecId: '', // 规格id(新增传空值)
50
-        SpecName: '', // 规格名称
51
-        Status: '', // 状态(无状态可传空值)
52
-        OrgId: '', // 机构id
53
-        CaseId: '', // 案场id
54
-      }
55
-    }
56
-  },
57
-  computed: {
58
-    ...mapState({
59
-      cases: x => x.app.cases.list,
60
-      defaultCaseId: x => x.app.cases.default,
61
-      OrgId: x => x.app.user.OrgId,
62
-    }),
63
-    CaseId: {
64
-      get () {
65
-        return this.postData.CaseId === '' ? this.defaultCaseId || '' : this.postData.CaseId
66
-      },
67
-      set (val) {
68
-        this.postData.CaseId = val
69
-      }
70
-    }
71
-  },
72
-  components: {},
73
-  methods: {
74
-    submit () { // 提交数据
75
-      if (this.postData.SpecName === '') {
76
-        this.$message({
77
-          message: '规格名不能为空',
78
-          type: 'error'
79
-        })
80
-        return false
81
-      }
82
-      this.postData.OrgId = this.OrgId
83
-      if (this.postData.CaseId === '') this.postData.CaseId = this.CaseId
84
-      this.$ajax(this.$api.goodsManager.addGoodsSpec.url, {
85
-        method: this.$api.goodsManager.addGoodsSpec.method,
86
-        data: this.postData
87
-      }).then(res => {
88
-        this.$message({
89
-          type: 'success',
90
-          message: '操作成功'
91
-        })
92
-        this.$router.push({ name: 'goodsSpecManager' })
93
-      })
94
-    },
95
-    cancel () {
96
-      this.$router.push({ name: 'goodsSpecManager' })
97
-    }
98
-  },
99
-  mounted () { }
100
-}
101
-</script>
102
-
103
-<!-- Add "scoped" attribute to limit CSS to this component only -->
104
-<style lang="scss" scoped>
105
-</style>

+ 0
- 115
src/views/goodsManager/goodsSpecManager/edit.vue Parādīt failu

@@ -1,115 +0,0 @@
1
-<template>
2
-  <div class="subPage">
3
-    <form class="mainForm">
4
-      <ul>
5
-        <li class="flex-h">
6
-          <span>规格名:<em>*</em></span>
7
-          <div class="flex-item">
8
-            <div style="width:50%">
9
-              <el-input
10
-                placeholder="请输入规格名"
11
-                v-model="postData.SpecName"
12
-                clearable>
13
-              </el-input>
14
-            </div>
15
-          </div>
16
-        </li>
17
-        <li class="flex-h">
18
-          <span>选择案场:<em>*</em></span>
19
-          <div class="flex-item">
20
-            <div style="width:50%">
21
-              <el-select v-model="CaseId" placeholder="请选择">
22
-                <el-option
23
-                  v-for="item in cases"
24
-                  :key="item.CaseId"
25
-                  :label="item.CaseName"
26
-                  :value="item.CaseId">
27
-                </el-option>
28
-              </el-select>
29
-            </div>
30
-          </div>
31
-        </li>
32
-        <li style="text-align:center">
33
-          <el-button type="primary" size="mini" @click="submit">保存</el-button>
34
-          <el-button type="danger" size="mini" @click="cancel">取消</el-button>
35
-        </li>
36
-      </ul>
37
-    </form>
38
-  </div>
39
-</template>
40
-
41
-<script>
42
-import { mapState } from 'vuex'
43
-
44
-export default {
45
-  name: '',
46
-  data () {
47
-    return {
48
-      postData: {
49
-        SpecId: '',
50
-        SpecName: '',
51
-        Status: '',
52
-        OrgId: '',
53
-        CaseId: ''
54
-      }
55
-    }
56
-  },
57
-  computed: {
58
-    ...mapState({
59
-      cases: x => x.app.cases.list,
60
-      defaultCaseId: x => x.app.cases.default,
61
-      OrgId: x => x.app.user.OrgId,
62
-    }),
63
-    CaseId: {
64
-      get () {
65
-        return this.postData.CaseId === '' ? this.defaultCaseId || '' : this.postData.CaseId
66
-      },
67
-      set (val) {
68
-        this.postData.CaseId = val
69
-      }
70
-    }
71
-  },
72
-  components: {},
73
-  created () {
74
-    this.getInfo()
75
-  },
76
-  methods: {
77
-    getInfo () { // 获取规格信息
78
-      this.$ajax(this.$api.goodsManager.getGoodsSpecById.url, {
79
-        method: this.$api.goodsManager.getGoodsSpecById.method,
80
-        urlData: {id: this.$route.query.id}
81
-      }).then(res => {
82
-        this.postData = res
83
-      })
84
-    },
85
-    submit () { // 提交数据
86
-      if (this.postData.SpecName === '') {
87
-        this.$message({
88
-          type: 'error',
89
-          message: '规格名称不能为空'
90
-        })
91
-        return false
92
-      }
93
-      this.$ajax(this.$api.goodsManager.editGoodsSpec.url, {
94
-        method: this.$api.goodsManager.editGoodsSpec.method,
95
-        data: this.postData,
96
-        urlData: {id: this.postData.SpecId}
97
-      }).then(res => {
98
-        this.$message({
99
-          type: 'success',
100
-          message: '操作成功'
101
-        })
102
-        this.$router.push({ name: 'goodsSpecManager' })
103
-      })
104
-    },
105
-    cancel () {
106
-      this.$router.go(-1)
107
-    }
108
-  },
109
-  mounted () { }
110
-}
111
-</script>
112
-
113
-<!-- Add "scoped" attribute to limit CSS to this component only -->
114
-<style lang="scss" scoped>
115
-</style>

+ 0
- 164
src/views/goodsManager/goodsSpecManager/index.vue Parādīt failu

@@ -1,164 +0,0 @@
1
-<template>
2
-  <div class="subPage">
3
-    <div class="system-table-search">
4
-      <div class="flex-h">
5
-        <div class="flex-item flex-h">
6
-          <el-button size="mini" type="success" @click="addGoodsSpec">新增商品规格</el-button>
7
-        </div>
8
-        <ul>
9
-          <li>
10
-            <!-- <span>选择案场:</span> -->
11
-            <el-select v-model="CaseId" placeholder="请选择">
12
-              <el-option
13
-                key="all"
14
-                label="所有案场"
15
-                value="all">
16
-              </el-option>
17
-              <el-option
18
-                v-for="item in cases"
19
-                :key="item.CaseId"
20
-                :label="item.CaseName"
21
-                :value="item.CaseId">
22
-              </el-option>
23
-            </el-select>
24
-          </li>
25
-        </ul>
26
-        <el-button
27
-          size="mini"
28
-          type="primary" @click="search">搜索</el-button>
29
-      </div>
30
-      <div class="moreFilter"></div>
31
-    </div>
32
-    <div class="system-table-box">
33
-      <el-table
34
-        :data="currentList"
35
-        stripe
36
-        style="width: 100%">
37
-        <el-table-column
38
-          prop="SpecName"
39
-          label="规格名">
40
-        </el-table-column>
41
-        <el-table-column
42
-          label="所属案场">
43
-          <template slot-scope="scope">
44
-            <label>{{getCaseName(scope.row.CaseId)}}</label>
45
-          </template>
46
-        </el-table-column>
47
-        <el-table-column label="操作">
48
-          <template slot-scope="scope">
49
-            <el-button
50
-              size="mini"
51
-              type="warning"
52
-              @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
53
-            <el-button
54
-              size="mini"
55
-              type="danger"
56
-              @click="handleDelete(scope.$index, scope.row)">删除</el-button>
57
-          </template>
58
-        </el-table-column>
59
-      </el-table>
60
-    </div>
61
-    <el-pagination
62
-      @current-change="handleCurrentChange"
63
-      :current-page.sync="postData.page"
64
-      :page-size="postData.pagesize"
65
-      layout="prev, pager, next, jumper"
66
-      :total="total">
67
-    </el-pagination>
68
-  </div>
69
-</template>
70
-
71
-<script>
72
-import { mapState } from 'vuex'
73
-
74
-export default {
75
-  name: '',
76
-  data () {
77
-    return {
78
-      total: 0,
79
-      postData: { // 表格搜索条件
80
-        CaseId: '', // 案场id
81
-        page: 1, // 当前页码
82
-        pagesize: 10, // 请求数据量
83
-      },
84
-      currentList: []
85
-    }
86
-  },
87
-  mounted () {
88
-    this.$nextTick(function () {
89
-      this.getList()
90
-    })
91
-  },
92
-  computed: {
93
-    ...mapState({
94
-      cases: x => x.app.cases.list,
95
-      defaultCaseId: x => x.app.cases.default
96
-    }),
97
-    CaseId: {
98
-      get () {
99
-        return this.postData.CaseId || this.defaultCaseId
100
-      },
101
-      set (val) {
102
-        this.postData.CaseId = val
103
-      }
104
-    }
105
-  },
106
-  methods: {
107
-    getCaseName (caseid) {
108
-      return (this.cases.filter(x => x.CaseId === caseid)[0] || {}).CaseName
109
-    },
110
-    search () { // 搜索
111
-      this.postData.page = 1
112
-      this.currentList = []
113
-      this.getList()
114
-    },
115
-    getList () { // 获取列表
116
-      this.$ajax(this.$api.goodsManager.getGoodsSpecList.url, {
117
-        method: this.$api.goodsManager.getGoodsSpecList.method,
118
-        queryData: { ...this.postData, caseid: this.CaseId === 'all' ? '' : this.CaseId }
119
-      }).then(res => {
120
-        this.currentList = res.list
121
-        this.postData.page = res.page
122
-        this.total = res.pagenum
123
-      })
124
-    },
125
-    handleCurrentChange (val) { // 跳转到分页
126
-      this.getList()
127
-    },
128
-    handleEdit (index, row) { // 编辑
129
-      this.$router.push({ name: 'editGoodsSpec', query: { id: row.SpecId } })
130
-    },
131
-    handleDelete (index, row) { // 删除
132
-      let name = '确认删除规格“' + row.SpecName + '”?'
133
-      this.$confirm(name, '提示', {
134
-        confirmButtonText: '确定',
135
-        cancelButtonText: '取消',
136
-        type: 'warning'
137
-      }).then(() => {
138
-        this.$ajax(this.$api.goodsManager.deleteGoodsSpec.url, {
139
-          method: this.$api.goodsManager.deleteGoodsSpec.method,
140
-          urlData: { id: row.SpecId }
141
-        }).then(res => {
142
-          this.$message({
143
-            type: 'success',
144
-            message: '删除成功!'
145
-          })
146
-          this.search()
147
-        })
148
-      }).catch(() => {
149
-        this.$message({
150
-          type: 'info',
151
-          message: '已取消删除'
152
-        })
153
-      })
154
-    },
155
-    addGoodsSpec () {
156
-      this.$router.push({ name: 'addGoodsSpec' })
157
-    }
158
-  }
159
-}
160
-</script>
161
-
162
-<!-- Add "scoped" attribute to limit CSS to this component only -->
163
-<style lang="scss" scoped>
164
-</style>

+ 46
- 5
src/views/index.js Parādīt failu

@@ -203,14 +203,55 @@ const pages = [
203 203
         },
204 204
       },
205 205
       {
206
-        path: 'goodstype',
207
-        name: 'goodstype',
208
-        component: () => import('./goodsManager/goodsTypeManager'),
206
+        path: 'goods',
207
+        name: 'goods',
208
+        component: () => import('./index.vue'),
209 209
         meta: {
210 210
           menuShow: true,
211
-          title: '商品类型管理',
211
+          title: '商品管理',
212 212
         },
213
-      }
213
+        children: [
214
+          {
215
+            path: 'goodstype',
216
+            name: 'goodstype',
217
+            component: () => import('./goodsManager/GoodsType'),
218
+            meta: {
219
+              menuShow: true,
220
+              title: '类型管理',
221
+            },
222
+          },
223
+          {
224
+            path: 'goodsspec',
225
+            name: 'goodsspec',
226
+            component: () => import('./goodsManager/GoodsSpec'),
227
+            meta: {
228
+              menuShow: true,
229
+              title: '规格管理',
230
+            },
231
+          },
232
+          {
233
+            path: 'profile',
234
+            name: 'goodsprofile',
235
+            component: () => import('./goodsManager/goodManager'),
236
+            meta: {
237
+              menuShow: true,
238
+              title: '商品维护',
239
+              hasChildren: true,
240
+            },
241
+            children: [
242
+              {
243
+                path: 'edit',
244
+                name: 'goodsedit',
245
+                component: () => import('./goodsManager/goodManager/edit.vue'),
246
+                meta: {
247
+                  menuShow: true,
248
+                  title: '商品编辑',
249
+                },
250
+              },
251
+            ]
252
+          },
253
+        ],
254
+      },
214 255
     ]
215 256
   },
216 257
 

+ 2
- 2
src/views/person/edit.vue Parādīt failu

@@ -31,8 +31,8 @@
31 31
         <el-form-item label="头像">
32 32
           <el-upload
33 33
             class="avatar-uploader"
34
-            :action='upFileUrl'
35
-            name='uploadFile'
34
+            :action="upFileUrl"
35
+            name="uploadFile"
36 36
             :show-file-list="false"
37 37
             :before-upload="beforeImgUpload"
38 38
             :on-success="handleAvatarSuccess">

+ 9
- 9
src/views/sysuser/edit.vue Parādīt failu

@@ -24,15 +24,15 @@
24 24
         </el-select>
25 25
       </el-form-item>
26 26
 
27
-      <el-form-item label="角色权限"  required>
28
-      <el-select v-model="roleId" multiple placeholder="请选择">
29
-      <el-option
30
-      v-for="(item, index) in sysRole"
31
-      :key="index"
32
-      :label="item.roleName"
33
-      :value="item.roleId">
34
-      </el-option>
35
-      </el-select>
27
+      <el-form-item label="角色权限" required>
28
+        <el-select v-model="roleId" multiple placeholder="请选择">
29
+          <el-option
30
+          v-for="(item, index) in sysRole"
31
+          :key="index"
32
+          :label="item.roleName"
33
+          :value="item.roleId">
34
+          </el-option>
35
+        </el-select>
36 36
       </el-form-item>
37 37
       <el-form-item>
38 38
         <el-button type="primary" @click="onSubmit">保存</el-button>