123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <template>
- <div class="subPage">
- <form class="mainForm">
- <ul>
- <li class="flex-h">
- <span>选择案场:<em>*</em></span>
- <div class="flex-item">
- <div style="width:50%">
- <el-select v-model="Case" placeholder="请选择">
- <el-option
- v-for="item in cases"
- :key="item.CaseId"
- :label="item.CaseName"
- :value="item.CaseId">
- </el-option>
- </el-select>
- </div>
- </div>
- </li>
- <li class="flex-h">
- <span>商品名称:<em>*</em></span>
- <div class="flex-item">
- <div style="width:50%">
- <el-input
- placeholder="请输入商品名称"
- v-model="detail.GoodsName"
- clearable>
- </el-input>
- </div>
- </div>
- </li>
- <li class="flex-h">
- <span>商品图片:<em>*</em></span>
- <div class="flex-item">
- <div style="width:50%">
- <el-upload
- class="avatar-uploader"
- action='string'
- :http-request="toolClass.upload"
- :show-file-list="false"
- :on-success="handleAvatarSuccess">
- <img v-if="Image" :src="Image" class="avatar">
- <i v-else class="el-icon-plus avatar-uploader-icon"></i>
- </el-upload>
- </div>
- </div>
- </li>
- <li class="flex-h">
- <span>商品价格:<em>*</em></span>
- <div class="flex-item">
- <div style="width:50%">
- <el-input
- placeholder="请输入商品价格"
- v-model="detail.Price"
- clearable>
- </el-input>
- </div>
- </div>
- </li>
- <li class="flex-h">
- <span>商品规格:</span>
- <div class="flex-item">
- <div style="width:50%">
- <el-select v-model="detailSpecs" multiple placeholder="请选择" style="width:100%;">
- <el-option
- v-for="item in (Case === '' ? [] : specs.list)"
- :key="item.SpecId"
- :label="item.SpecName"
- :value="item.SpecId">
- </el-option>
- </el-select>
- </div>
- </div>
- </li>
- <li class="flex-h">
- <span>商品类别:<em>*</em></span>
- <div class="flex-item">
- <div style="width:50%">
- <el-select v-model="TypeId" placeholder="请选择商品类型">
- <el-option
- v-for="item in (Case === '' ? [] : types.list)"
- :key="item.TypeId"
- :label="item.TypeName"
- :value="item.TypeId">
- </el-option>
- </el-select>
- </div>
- </div>
- </li>
- <li style="text-align:center">
- <el-button type="primary" size="mini" @click='submit'>保存</el-button>
- <el-button type="danger" size="mini" @click="cancel">取消</el-button>
- </li>
- </ul>
- </form>
- </div>
- </template>
-
- <script>
- import { createNamespacedHelpers, mapState } from 'vuex'
-
- const { mapState: mapGoodsState, mapActions: mapGoodsActions } = createNamespacedHelpers('goods')
- export default {
- name: '',
- data () {
- return {
- limit: 1,
- dialogVisible: false,
- infoSpecs: null,
- }
- },
- components: {},
- computed: {
- ...mapGoodsState({
- detail: x => x.goodsInfo,
- types: x => x.goodsTypes,
- specs: x => x.goodsSpecs,
- }),
- ...mapState({
- cases: x => x.app.cases.list,
- caseid: x => x.app.cases.default,
- orgid: x => x.app.user.OrgId,
- }),
- Case: {
- get () {
- return this.detail.CaseId || this.caseid
- },
- set (val) {
- this.UpdateInfo({ ...this.detail, CaseId: val })
- this.detail.TypeId = ''
- this.GetGoodTypes({ pagesize: 1000, caseid: this.Case })
- this.GetGoodSpecs({ pagesize: 1000, caseid: this.Case })
- }
- },
- detailSpecs: {
- get () {
- // console.log(this.infoSpecs || (this.detail.Specs || []).map(x => x.SpecId))
- return this.infoSpecs || (this.detail.Specs || []).map(x => x.SpecId)
- },
- set (val) {
- this.infoSpecs = val
- },
- },
- Image () {
- return ((this.detail.Images || [])[0] || {}).ImgUrl
- },
- TypeId: {
- get () {
- return this.detail.TypeId
- },
- set (val) {
- this.UpdateInfo({ ...this.detail, TypeId: val })
- },
- },
- },
- methods: {
- ...mapGoodsActions([
- 'GetGoodTypes',
- 'GetGoodsByID',
- 'AddGoods',
- 'UpdateGoods',
- 'SetNull',
- 'UpdateInfo',
- 'GetGoodSpecs',
- ]),
- submit () {
- this.detail.specs = JSON.stringify(this.detailSpecs.map(x => ({ SpecId: x, GoodsPrice: this.detail.Price })))
- this.detail.images = (this.detail.Images || []).map(x => {
- if (x.response) {
- return x.response.result.url
- } else {
- return x.ImgUrl
- }
- }).join(',')
- if ((this.detail.CaseId || '') === '') {
- this.$message({
- type: 'error',
- message: '案场不能为空'
- })
- return false
- }
- if ((this.detail.GoodsName || '') === '') {
- this.$message({
- type: 'error',
- message: '商品名称不能为空'
- })
- return false
- }
- if ((this.detail.Images || '') === '') {
- this.$message({
- type: 'error',
- message: '图片不能为空'
- })
- return false
- }
- if ((this.detail.Price || '') === '') {
- this.$message({
- type: 'error',
- message: '价格不能为空'
- })
- return false
- }
- if ((this.detail.TypeId || '') === '') {
- this.$message({
- type: 'error',
- message: '类别不能为空'
- })
- return false
- }
- if ((this.detail.GoodsId || '') === '') {
- this.detail.OrgId = this.orgid
- if (!this.detail.CaseId || this.detail.CaseId === '') {
- this.detail.CaseId = this.caseid
- }
- this.AddGoods(this.detail)
- } else {
- this.UpdateGoods(this.detail)
- }
- this.$message({
- type: 'success',
- message: '操作成功'
- })
- this.$router.push({ name: 'goodsInfo' })
- },
- cancel () {
- this.$router.go(-1)
- },
- handleAvatarSuccess (res, file) {
- this.UpdateInfo({ ...this.detail, Images: [{ ImgUrl: res.result.url }] })
- },
- },
- created () {
- const { id } = this.$route.query
- if (id && id !== '') {
- this.GetGoodTypes({ pagesize: 1000, caseid: this.Case })
- this.GetGoodSpecs({ pagesize: 1000, caseid: this.Case })
- this.GetGoodsByID({ id: id })
- }
- }
- }
- </script>
-
- <!-- Add "scoped" attribute to limit CSS to this component only -->
- <style lang="scss" scoped>
- </style>
|