This commit is contained in:
parent
6627995f3f
commit
bc1aa23f17
|
@ -0,0 +1,48 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 门店商品属性值辅助表列表
|
||||
export function apiStoreBranchProductAttrValueLists(params: any) {
|
||||
return request.get({
|
||||
url: '/store_branch_product_attr_value/storebranchproductattrvalue/lists',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 添加门店商品属性值辅助表
|
||||
export function apiStoreBranchProductAttrValueAdd(params: any) {
|
||||
return request.post({
|
||||
url: '/store_branch_product_attr_value/storebranchproductattrvalue/add',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑门店商品属性值辅助表
|
||||
export function apiStoreBranchProductAttrValueEdit(params: any) {
|
||||
return request.post({
|
||||
url: '/store_branch_product_attr_value/storebranchproductattrvalue/edit',
|
||||
params
|
||||
})
|
||||
}
|
||||
//更新状态
|
||||
export function apiStoreBranchProductAttrValueStatus(params: any) {
|
||||
return request.post({
|
||||
url: '/store_branch_product_attr_value/storebranchproductattrvalue/status',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 删除门店商品属性值辅助表
|
||||
export function apiStoreBranchProductAttrValueDelete(params: any) {
|
||||
return request.post({
|
||||
url: '/store_branch_product_attr_value/storebranchproductattrvalue/delete',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 门店商品属性值辅助表详情
|
||||
export function apiStoreBranchProductAttrValueDetail(params: any) {
|
||||
return request.get({
|
||||
url: '/store_branch_product_attr_value/storebranchproductattrvalue/detail',
|
||||
params
|
||||
})
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 商品属性值表列表
|
||||
export function apiStoreProductAttrValueLists(params: any) {
|
||||
return request.get({ url: '/store_product_attr_value/storeproductattrvalue/lists', params })
|
||||
}
|
||||
|
||||
// 添加商品属性值表
|
||||
export function apiStoreProductAttrValueAdd(params: any) {
|
||||
return request.post({ url: '/store_product_attr_value/storeproductattrvalue/add', params })
|
||||
}
|
||||
|
||||
// 编辑商品属性值表
|
||||
export function apiStoreProductAttrValueEdit(params: any) {
|
||||
return request.post({ url: '/store_product_attr_value/storeproductattrvalue/edit', params })
|
||||
}
|
||||
|
||||
// 删除商品属性值表
|
||||
export function apiStoreProductAttrValueDelete(params: any) {
|
||||
return request.post({ url: '/store_product_attr_value/storeproductattrvalue/delete', params })
|
||||
}
|
||||
|
||||
// 商品属性值表详情
|
||||
export function apiStoreProductAttrValueDetail(params: any) {
|
||||
return request.get({ url: '/store_product_attr_value/storeproductattrvalue/detail', params })
|
||||
}
|
|
@ -30,11 +30,6 @@ export function apiSourceProductStoreLists(params: any) {
|
|||
return request.get({ url: '/system_store/systemstore/source_product_store_lists', params })
|
||||
}
|
||||
|
||||
// 根据商品来源更新门店
|
||||
export function apiSourceProductUpdateStore(params: any) {
|
||||
return request.post({ url: '/system_store/systemstore/source_product_update_store', params })
|
||||
}
|
||||
|
||||
// 根据商品编辑门店库存
|
||||
export function apiStoreBranchProductEdit(params: any) {
|
||||
return request.post({ url: '/store_branch_product/StoreBranchProduct/edit', params })
|
||||
|
|
|
@ -1,26 +1,65 @@
|
|||
<template>
|
||||
<div class="edit-popup">
|
||||
<popup
|
||||
ref="popupRef"
|
||||
title="详情"
|
||||
:async="true"
|
||||
width="550px"
|
||||
:cancelButtonText="false"
|
||||
:confirmButtonText="false"
|
||||
>
|
||||
<el-form ref="formRef" :model="formData" label-width="90px">
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-drawer title="商品详情" :size="1200" v-model="isOpen">
|
||||
<el-tabs v-model="activeName" class="demo-tabs">
|
||||
<el-tab-pane label="基础信息" name="first">
|
||||
<el-descriptions class="margin-top" :column="2" border>
|
||||
<el-descriptions-item label="商品名称">
|
||||
{{ formData.store_name }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="商品分类">{{
|
||||
formData.cate_name
|
||||
}}</el-descriptions-item>
|
||||
<el-descriptions-item label="商品图片" :span="2">
|
||||
<el-image
|
||||
:src="formData.image"
|
||||
class="w-20 h-20"
|
||||
:preview-teleported="true"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="厂家备注" :span="2">
|
||||
<div style="white-space: pre">
|
||||
{{ formData.manufacturer_information }}
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-table :data="sku_lists" border class="mt-4">
|
||||
<el-table-column label="规格名称" prop="sku_name" min-width="150" />
|
||||
<el-table-column label="单位" prop="unit_name" />
|
||||
<el-table-column label="供货价" prop="purchase" show-overflow-tooltip />
|
||||
<el-table-column label="商户价" prop="cost" show-overflow-tooltip />
|
||||
<el-table-column label="零售价" prop="price" show-overflow-tooltip />
|
||||
<el-table-column label="商品销量" prop="sales" show-overflow-tooltip />
|
||||
<el-table-column label="商品库存" prop="stock" show-overflow-tooltip />
|
||||
<el-table-column label="条码" prop="bar_code" show-overflow-tooltip />
|
||||
<el-table-column label="状态" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<el-switch
|
||||
size="large"
|
||||
@change="statusChange(row)"
|
||||
v-model="row.status"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
active-text="上架"
|
||||
inactive-text="下架"
|
||||
inline-prompt
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="storeBranchProductDETAILS">
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiStoreBranchProductAdd, apiStoreBranchProductEdit, apiStoreBranchProductDetail } from '@/api/store_branch_product'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
<script lang="ts" setup name="storeProductDETAILS">
|
||||
import {
|
||||
apiStoreBranchProductAttrValueLists,
|
||||
apiStoreBranchProductAttrValueStatus
|
||||
} from '@/api/store_branch_product_attr_value'
|
||||
import type { PropType } from 'vue'
|
||||
import feedback from '@/utils/feedback'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
|
@ -28,20 +67,29 @@ defineProps({
|
|||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
|
||||
|
||||
const sku_lists = ref([])
|
||||
const isOpen = ref(false)
|
||||
const activeName = ref('first')
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
|
||||
image: '',
|
||||
store_name: '',
|
||||
bar_code: '',
|
||||
cate_id: '',
|
||||
cate_name: '',
|
||||
price: '',
|
||||
unit: '',
|
||||
unit_name: '',
|
||||
stock: '',
|
||||
cost: '',
|
||||
purchase: '',
|
||||
rose: '0',
|
||||
manufacturer_information: ''
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
for (const key in formData) {
|
||||
|
@ -50,20 +98,23 @@ const setFormData = async (data: Record<any, any>) => {
|
|||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiStoreBranchProductDetail({
|
||||
id: row.id
|
||||
apiStoreBranchProductAttrValueLists({
|
||||
product_id: data.product_id,
|
||||
store_id: data.store_id
|
||||
}).then((res) => {
|
||||
sku_lists.value = res.lists
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
const statusChange = (row: any) => {
|
||||
apiStoreBranchProductAttrValueStatus({
|
||||
id: row.id,
|
||||
status: row.status
|
||||
})
|
||||
}
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
popupRef.value?.open()
|
||||
isOpen.value = true
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -71,11 +122,13 @@ const handleClose = () => {
|
|||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
product_id: ''
|
||||
})
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
setFormData
|
||||
})
|
||||
</script>
|
||||
|
|
|
@ -197,6 +197,14 @@
|
|||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<!-- <el-button
|
||||
v-perms="['store_branch_product.store_branch_product/details']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handleDetail(row)"
|
||||
>
|
||||
详情
|
||||
</el-button> -->
|
||||
<el-button
|
||||
type="primary"
|
||||
v-prems="['store_branch_product.store_branch_product/deit']"
|
||||
|
@ -226,6 +234,7 @@
|
|||
@success="getLists"
|
||||
@close="showEdit = false"
|
||||
/>
|
||||
<Details ref="detailsRef"></Details>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -239,10 +248,12 @@ import { apiSystemStoreLists } from '@/api/system_store'
|
|||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import Details from './details.vue'
|
||||
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const detailsRef = ref(null)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
|
@ -279,6 +290,11 @@ const handleAdd = async () => {
|
|||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
// 详情
|
||||
const handleDetail = async (data: any) => {
|
||||
detailsRef.value?.open()
|
||||
detailsRef.value?.setFormData(data)
|
||||
}
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
showEdit.value = true
|
||||
|
|
|
@ -164,7 +164,6 @@ import { apiStoreProductAdd, apiStoreProductEdit, apiStoreProductDetail } from '
|
|||
import { timeFormat } from '@/utils/util'
|
||||
import {
|
||||
apiSourceProductStoreLists,
|
||||
apiSourceProductUpdateStore,
|
||||
apiStoreBranchProductEdit,
|
||||
apiStoreBranchProductEditPrice
|
||||
} from '@/api/system_store'
|
||||
|
@ -292,35 +291,6 @@ const handleDelete = (store_id: number) => {
|
|||
addList.set(store_id, (addList.get(store_id) || 0) - 1)
|
||||
removeList.set(store_id, (removeList.get(store_id) || 0) + 1)
|
||||
}
|
||||
|
||||
// 修改适用门店
|
||||
const submitStore = () => {
|
||||
feedback
|
||||
.confirm('确定修改适用门店吗?')
|
||||
.then(async () => {
|
||||
const add = Array.from(addList.entries())
|
||||
.filter(([k, v]) => v == 1)
|
||||
.map(([key]) => key)
|
||||
const remove = Array.from(removeList.entries())
|
||||
.filter(([k, v]) => v == 1)
|
||||
.map(([key]) => key)
|
||||
console.log(add, remove)
|
||||
if (add.length == 0 && remove.length == 0) return ElMessage.warning('没有更改门店')
|
||||
apiSourceProductUpdateStore({
|
||||
addList: add,
|
||||
removeList: remove,
|
||||
product_id: queryParams.product_id
|
||||
}).then((res) => {
|
||||
isEidt.value = false
|
||||
addList.clear()
|
||||
removeList.clear()
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
// on cancel
|
||||
})
|
||||
}
|
||||
|
||||
// 库存相关
|
||||
const isEidtStock = ref(false)
|
||||
const stockList = ref(new Map())
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
</el-descriptions>
|
||||
<el-table :data="sku_lists" border class="mt-4">
|
||||
<el-table-column label="规格名称" prop="sku_name" min-width="150" />
|
||||
<el-table-column label="单位" prop="unit_name" />
|
||||
<el-table-column label="供货价" prop="purchase" show-overflow-tooltip />
|
||||
<el-table-column label="商户价" prop="cost" show-overflow-tooltip />
|
||||
<el-table-column label="零售价" prop="price" show-overflow-tooltip />
|
||||
|
@ -93,7 +94,7 @@
|
|||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { ElMessage, type FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiStoreProductAdd, apiStoreProductEdit, apiStoreProductDetail } from '@/api/store_product'
|
||||
import { apiStoreProductAttrValueLists } from '@/api/store_product_attr_value'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { apiSourceProductStoreLists } from '@/api/system_store'
|
||||
import { apiWarehouseProductStoregeLists } from '@/api/warehouse_product_storege'
|
||||
|
@ -144,6 +145,9 @@ const setFormData = async (data: Record<any, any>) => {
|
|||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
apiStoreProductAttrValueLists({ product_id: data.id }).then((res) => {
|
||||
sku_lists.value = res.lists
|
||||
})
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
|
|
|
@ -19,16 +19,6 @@
|
|||
:readonly="false"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="商品条码" prop="bar_code">
|
||||
<el-input
|
||||
v-model="formData.bar_code"
|
||||
class="w-[500px]"
|
||||
@input="validateInput"
|
||||
clearable
|
||||
placeholder="请输入商品条码"
|
||||
:readonly="false"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="商品类型" prop="product_type">
|
||||
<el-radio-group
|
||||
v-model="formData.product_type"
|
||||
|
@ -332,11 +322,19 @@ const columns = ref([
|
|||
{ label: '规格名称', prop: 'sku_name', width: '180' },
|
||||
{ label: '供货价', prop: 'purchase', width: '180' },
|
||||
{ label: '商户价', prop: 'cost', width: '180' },
|
||||
{ label: '零售价', prop: 'price', width: '180' }
|
||||
{ label: '零售价', prop: 'price', width: '180' },
|
||||
{ label: '条码', prop: 'bar_code', width: '180' }
|
||||
])
|
||||
|
||||
const addRow = () => {
|
||||
tableData.value.push({ sku_name: '', purchase: 0, cost: 0, price: 0, editable: true })
|
||||
tableData.value.push({
|
||||
sku_name: '',
|
||||
purchase: 0,
|
||||
cost: 0,
|
||||
price: 0,
|
||||
bar_code: '',
|
||||
editable: true
|
||||
})
|
||||
}
|
||||
|
||||
const deleteRow = (index) => {
|
||||
|
@ -347,18 +345,11 @@ const formData = reactive({
|
|||
id: '',
|
||||
image: '',
|
||||
store_name: '',
|
||||
bar_code: '',
|
||||
store_info: '',
|
||||
product_type: 0,
|
||||
cate_arr: [],
|
||||
cate_id: '',
|
||||
price: '',
|
||||
vip_price: '',
|
||||
unit: '',
|
||||
stock: '',
|
||||
swap: '',
|
||||
cost: '',
|
||||
purchase: '',
|
||||
batch: 1,
|
||||
store_batch: 1,
|
||||
manufacturer_information: '',
|
||||
|
@ -368,18 +359,6 @@ const formData = reactive({
|
|||
spec_type: 0
|
||||
})
|
||||
|
||||
// 定义验证输入的函数
|
||||
const validateInput = () => {
|
||||
// 获取输入框的当前值
|
||||
const inputValue = formData.bar_code
|
||||
|
||||
// 使用正则表达式仅保留英文和数字
|
||||
const filteredValue = inputValue.replace(/[^a-zA-Z0-9]/g, '')
|
||||
|
||||
// 更新输入框的值
|
||||
formData.bar_code = filteredValue
|
||||
}
|
||||
|
||||
const showStore = ref(false) // 选择门店列表是否显示
|
||||
// 门店列表
|
||||
const storeList = ref([])
|
||||
|
@ -471,13 +450,6 @@ const formRules = reactive<any>({
|
|||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
bar_code: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入商品条码',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
store_info: [
|
||||
{
|
||||
required: true,
|
||||
|
@ -499,13 +471,6 @@ const formRules = reactive<any>({
|
|||
trigger: ['blur', 'change']
|
||||
}
|
||||
],
|
||||
swap: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入兑换库存',
|
||||
trigger: ['blur']
|
||||
}
|
||||
],
|
||||
image: [
|
||||
{
|
||||
required: true,
|
||||
|
@ -558,7 +523,8 @@ const handleSubmit = async () => {
|
|||
unit: item.unit,
|
||||
purchase: item.purchase,
|
||||
cost: item.cost,
|
||||
price: item.price
|
||||
price: item.price,
|
||||
bar_code: item.bar_code
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue