main
fanfan 11 months ago
parent 654c0386f0
commit c764984e20
  1. 88
      src/components/Modal/GoodsModal/GoodsModal.vue
  2. 6
      src/views/dataCenter/goods/Create.vue
  3. 14
      src/views/dataCenter/goods/Update.vue

@ -2,7 +2,7 @@
<a-modal <a-modal
class="noborder" class="noborder"
:title="title" :title="title"
:width="820" :width="900"
:visible="visible" :visible="visible"
:isLoading="isLoading" :isLoading="isLoading"
:maskClosable="false" :maskClosable="false"
@ -47,11 +47,14 @@
image: item.goods_image, image: item.goods_image,
imageAlt: '商品图片', imageAlt: '商品图片',
title: item.goods_name, title: item.goods_name,
subtitle: `¥${item.goods_price_min}` subtitle: `¥${item.goods_price_min}`,
}" }"
:subTitleColor="true" :subTitleColor="true"
/> />
</template> </template>
<span slot="specific_value" slot-scope="text">
<a-tooltip placement="topLeft" :title="text"> {{ text}}</a-tooltip>
</span>
<!-- 商品状态 --> <!-- 商品状态 -->
<span slot="status" slot-scope="text"> <span slot="status" slot-scope="text">
<a-tag :color="text == 10 ? 'green' : 'red'">{{ text == 10 ? '上架' : '下架' }}</a-tag> <a-tag :color="text == 10 ? 'green' : 'red'">{{ text == 10 ? '上架' : '下架' }}</a-tag>
@ -71,27 +74,33 @@ import { STable, GoodsItem } from '@/components/Table/table'
const columns = [ const columns = [
{ {
title: '商品ID', title: '商品ID',
dataIndex: 'goods_id' dataIndex: 'goods_id',
}, },
{ {
title: '商品信息', title: '商品信息',
width: '335px', width: '335px',
scopedSlots: { customRender: 'item' } scopedSlots: { customRender: 'item' },
},
{
title: '规格值',
dataIndex: 'specific_value',
width: '100px',
scopedSlots: { customRender: 'specific_value' },
}, },
{ {
title: '商品价格', title: '商品价格',
dataIndex: 'goods_price_min', dataIndex: 'goods_price_min',
scopedSlots: { customRender: 'goods_price_min' } scopedSlots: { customRender: 'goods_price_min' },
}, },
{ {
title: '库存总量', title: '库存总量',
dataIndex: 'stock_total' dataIndex: 'stock_total',
}, },
{ {
title: '状态', title: '状态',
dataIndex: 'status', dataIndex: 'status',
scopedSlots: { customRender: 'status' } scopedSlots: { customRender: 'status' },
} },
] ]
export default { export default {
@ -102,13 +111,13 @@ export default {
// , multiple // , multiple
maxNum: PropTypes.integer.def(100), maxNum: PropTypes.integer.def(100),
// //
defaultList: PropTypes.array.def([]) defaultList: PropTypes.array.def([]),
}, },
components: { components: {
STable, STable,
GoodsItem GoodsItem,
}, },
data () { data() {
return { return {
// //
title: '商品库', title: '商品库',
@ -123,11 +132,10 @@ export default {
// table // table
columns, columns,
// Promise // Promise
loadData: param => { loadData: (param) => {
return GoodsApi.list({ ...param, ...this.queryParam }) return GoodsApi.list({ ...param, ...this.queryParam }).then((response) => {
.then(response => { return response.data.list
return response.data.list })
})
}, },
// ID // ID
fieldName: 'goods_id', fieldName: 'goods_id',
@ -136,26 +144,25 @@ export default {
// //
selectedItems: [], selectedItems: [],
// //
categoryListTree: [] categoryListTree: [],
} }
}, },
computed: { computed: {
rowSelection () { rowSelection() {
return { return {
selectedRowKeys: this.selectedRowKeys, selectedRowKeys: this.selectedRowKeys,
onChange: this.onSelectChange, onChange: this.onSelectChange,
type: !this.multiple ? 'radio' : 'checkbox' type: !this.multiple ? 'radio' : 'checkbox',
} }
} },
}, },
created () { created() {
// //
this.getCategoryList() this.getCategoryList()
}, },
methods: { methods: {
// //
handle () { handle() {
// //
this.visible = true this.visible = true
this.$nextTick(() => { this.$nextTick(() => {
@ -167,24 +174,24 @@ export default {
}, },
// //
setDefaultValue () { setDefaultValue() {
const { fieldName, defaultList } = this const { fieldName, defaultList } = this
if (defaultList.length) { if (defaultList.length) {
this.selectedItems = cloneDeep(defaultList) this.selectedItems = cloneDeep(defaultList)
this.selectedRowKeys = defaultList.map(item => item[fieldName]) this.selectedRowKeys = defaultList.map((item) => item[fieldName])
} }
}, },
// //
getCategoryList () { getCategoryList() {
this.isLoading = true this.isLoading = true
CategoryModel.getListFromScreen() CategoryModel.getListFromScreen()
.then(selectList => this.categoryListTree = selectList) .then((selectList) => (this.categoryListTree = selectList))
.finally(() => this.isLoading = false) .finally(() => (this.isLoading = false))
}, },
// //
onSelectChange (selectedRowKeys, newSelectedItems) { onSelectChange(selectedRowKeys, newSelectedItems) {
const { selectedItems } = this const { selectedItems } = this
this.selectedRowKeys = selectedRowKeys this.selectedRowKeys = selectedRowKeys
this.selectedItems = this.createSelectedItems(selectedRowKeys, selectedItems, newSelectedItems) this.selectedItems = this.createSelectedItems(selectedRowKeys, selectedItems, newSelectedItems)
@ -196,16 +203,16 @@ export default {
* @param array oldSelectedItems 已选择的列表记录 (change前) * @param array oldSelectedItems 已选择的列表记录 (change前)
* @param array newSelectedItems 已选择的列表记录 (change后) * @param array newSelectedItems 已选择的列表记录 (change后)
*/ */
createSelectedItems (selectedRowKeys, oldSelectedItems, newSelectedItems) { createSelectedItems(selectedRowKeys, oldSelectedItems, newSelectedItems) {
const { fieldName } = this const { fieldName } = this
const selectedItems = [] const selectedItems = []
oldSelectedItems.forEach(item => { oldSelectedItems.forEach((item) => {
if (selectedRowKeys.includes(item[fieldName])) { if (selectedRowKeys.includes(item[fieldName])) {
selectedItems.push(item) selectedItems.push(item)
} }
}) })
const oldSelectedKeys = oldSelectedItems.map(item => item[fieldName]) const oldSelectedKeys = oldSelectedItems.map((item) => item[fieldName])
newSelectedItems.forEach(item => { newSelectedItems.forEach((item) => {
if (!oldSelectedKeys.includes(item[fieldName]) && selectedRowKeys.includes(item[fieldName])) { if (!oldSelectedKeys.includes(item[fieldName]) && selectedRowKeys.includes(item[fieldName])) {
selectedItems.push(item) selectedItems.push(item)
} }
@ -217,12 +224,12 @@ export default {
* 刷新列表 * 刷新列表
* @param Boolean bool 强制刷新到第一页 * @param Boolean bool 强制刷新到第一页
*/ */
handleRefresh (bool = false) { handleRefresh(bool = false) {
this.$refs.table.refresh(true) this.$refs.table.refresh(true)
}, },
// //
handleSearch (e) { handleSearch(e) {
e.preventDefault() e.preventDefault()
this.searchForm.validateFields((error, values) => { this.searchForm.validateFields((error, values) => {
if (!error) { if (!error) {
@ -233,7 +240,7 @@ export default {
}, },
// //
handleCancel () { handleCancel() {
this.visible = false this.visible = false
this.queryParam = {} this.queryParam = {}
this.searchForm.resetFields() this.searchForm.resetFields()
@ -242,18 +249,17 @@ export default {
}, },
// //
handleSubmit (e) { handleSubmit(e) {
e.preventDefault() e.preventDefault()
// //
this.$emit('handleSubmit', { this.$emit('handleSubmit', {
selectedItems: this.selectedItems, selectedItems: this.selectedItems,
selectedRowKeys: this.selectedRowKeys selectedRowKeys: this.selectedRowKeys,
}) })
// //
this.handleCancel() this.handleCancel()
} },
},
}
} }
</script> </script>

@ -174,6 +174,12 @@
<!-- <a-radio :value="20" :disabled="true">多规格</a-radio> --> <!-- <a-radio :value="20" :disabled="true">多规格</a-radio> -->
</a-radio-group> </a-radio-group>
</a-form-item> </a-form-item>
<a-form-item label="规格值" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
placeholder="多个规格值,以英文分号分隔"
v-decorator="['specific_value', { rules: [{ required: true, message: '请输入规格值' }] }]"
/>
</a-form-item>
<!-- 多规格的表单内容 --> <!-- 多规格的表单内容 -->
<div v-show="form.getFieldValue('spec_type') == 20"> <div v-show="form.getFieldValue('spec_type') == 20">
<MultiSpec ref="MultiSpec" /> <MultiSpec ref="MultiSpec" />

@ -164,6 +164,12 @@
<small class="c-red">该商品当前正在参与其他活动商品规格不允许更改</small> <small class="c-red">该商品当前正在参与其他活动商品规格不允许更改</small>
</p> </p>
</a-form-item> </a-form-item>
<a-form-item label="规格值" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
placeholder="多个规格值,以英文分号分隔"
v-decorator="['specific_value', { rules: [{ required: true, message: '请输入规格值' }] }]"
/>
</a-form-item>
<!-- 多规格的表单内容 --> <!-- 多规格的表单内容 -->
<div v-if="form.getFieldValue('spec_type') == 20"> <div v-if="form.getFieldValue('spec_type') == 20">
<MultiSpec <MultiSpec
@ -176,12 +182,6 @@
</div> </div>
<!-- 单规格的表单内容 --> <!-- 单规格的表单内容 -->
<div v-if="form.getFieldValue('spec_type') == 10"> <div v-if="form.getFieldValue('spec_type') == 10">
<a-form-item label="规格值" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
placeholder="多个规格值,以英文分号分隔"
v-decorator="['specific_value', { rules: [{ required: true, message: '请输入规格值' }] }]"
/>
</a-form-item>
<a-form-item <a-form-item
label="商品价格" label="商品价格"
:labelCol="labelCol" :labelCol="labelCol"
@ -606,7 +606,7 @@ export default {
// (form-item) // (form-item)
this.$nextTick(() => { this.$nextTick(() => {
this.form.setFieldsValue(GoodsModel.getFieldsValue2()) this.form.setFieldsValue(GoodsModel.getFieldsValue2())
this.ruleList = this.formData.goods.rules?this.formData.goods.rules:[] this.ruleList = this.formData.goods.rules ? this.formData.goods.rules : []
this.onForceUpdate() this.onForceUpdate()
}) })
} }

Loading…
Cancel
Save