123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- <template>
- <el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible" width="1000px">
- <el-form ref="dataForm" :model="formData" :rules="rules" size="mini" label-width="120px">
- <el-form-item label="商品名称:">
- <div class="text" v-text="product.productName" />
- </el-form-item>
- <el-form-item label="商品图片:">
- <el-popover
- placement="top-start"
- title=""
- width="120"
- trigger="hover"
- >
- <img :src="product.mainImage" alt="" style="width:100px;height:100px;">
- <img slot="reference" :src="product.mainImage" alt="" style="width:50px;height:50px;">
- </el-popover>
- </el-form-item>
- <el-form-item label="供应商名称:">
- <div class="text" v-text="product.shopName" />
- </el-form-item>
- <el-form-item label="商品状态:" prop="validFlag">
- <el-select v-model="formData.validFlag" placeholder="请选择" :disabled="true" @change="handleChange($event)">
- <el-option :label="storeStatus(formData.validFlag)" :value="formData.validFlag" />
- </el-select>
- </el-form-item>
- <el-form-item label="商品规格:" prop="skus">
- <el-table row-key="title" :data="formData.skus" border height="250">
- <el-table-column label="商品规格" prop="title" align="center">
- <template slot-scope="{row}">
- <span>{{ row.unit }}</span>
- </template>
- </el-table-column>
- <el-table-column label="起订量" prop="name" align="center">
- <template slot-scope="{row}">
- <span>{{ row.minBuyNumber }}</span>
- </template>
- </el-table-column>
- <el-table-column label="售价" prop="name" align="center">
- <template slot-scope="{row}">
- <span> ¥{{ row.price | toThousandFloatFilter }}</span>
- </template>
- </el-table-column>
- </el-table>
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button @click="dialogFormVisible = false"> 关闭 </el-button>
- <el-button v-if="isDetail" type="primary" @click="handleSave"> 保存 </el-button>
- </div>
- </el-dialog>
- </template>
- <script>
- import { saveGoods } from '@/api/goods'
- import storeStatus from '@/views/mixins/storeStatus'
- export default {
- mixins: [storeStatus],
- props: {
- dialogTitle: {
- type: String,
- default: '编辑'
- },
- isVisible: {
- type: Boolean,
- default: false
- },
- product: {
- type: Object,
- default: () => {}
- },
- classify: {
- type: Array,
- default: () => []
- },
- isDetail: {
- type: Boolean,
- default: () => true
- }
- },
- data: function() {
- return {
- postData: null,
- formData: {
- skus: [],
- validFlag: ''
- },
- rules: {
- classifyID: [{ required: true, message: '*必填', trigger: 'change' }],
- ladderPriceFlag: [{ required: true, message: '*必填', trigger: 'change' }],
- retailPrice: [{ validator: this.checkSinglePrice, type: 'float', trigger: 'blur' }],
- minBuyNumber: [{ validator: this.checkSingleNumber, type: 'number', trigger: 'blur' }]
- }
- }
- },
- computed: {
- dialogFormVisible: {
- get() {
- return this.isVisible
- },
- set(val) {
- this.$emit('update:isVisible', val)
- }
- }
- },
- watch: {
- product: function(val) {
- this.postData = JSON.parse(JSON.stringify(val))
- this.formData.skus = this.postData.skus
- this.formData.validFlag = this.postData.validFlag
- }
- },
- methods: {
- handleChange(value) {
- console.log('value', value)
- },
- handleSave() {
- // 保存商品
- this.$refs['dataForm'].validate((valid) => {
- if (valid) {
- this.saveGoods()
- }
- })
- },
- async saveGoods() {
- try {
- await saveGoods(this.formData)
- this.$message.success('操作成功')
- this.$parent.getList()
- this.dialogFormVisible = false
- } catch (error) {
- console.log('error', error)
- }
- },
- checkedInput(event) {
- const pattern = /[^0-9.]/g
- return event.replace(pattern, '')
- }
- }
- }
- </script>
- <style scoped>
- .group label{
- white-space: nowrap;
- font-weight: normal;
- }
- .text{
- line-height: 20px;
- padding: 4px 0 0;
- }
- .line{
- display: flex;
- }
- .single{
- width:280px;
- }
- .multiple{
- display: flex;
- padding-left: 120px;
- justify-content: left;
- align-items: flex-end;
- }
- .group{
- white-space: nowrap;
- font-weight: normal;
- }
- .group button{
- padding:0 15px;
- }
- </style>
|