Merge remote-tracking branch 'origin/master'

This commit is contained in:
zjf committed 2025-03-07 20:28:59 +08:00
commit 9597bf921d
26 files changed
+465 -178

No files matched your search

+18
View File
@@ -31,6 +31,24 @@ export function getErpSpuSimpleAll() {
})
}
// 采购申请单分页查询
export function getCgsqPage(query?: Object) {
return request({
url: "/supermarket/smErpCgDd/cgsq/page",
method: "get",
params: query,
})
}
// 采购订单分页查询
export function getCgddPage(params?: Object) {
return request({
url: "/supermarket/smErpInventoryRecords/cgdd/page",
method: "get",
params,
})
}
// 获取出入库订单列表
export function getCgInventoryPage(params?: Object) {
return request({
+9
View File
@@ -8,3 +8,12 @@ export function getInventoryPage(params?: object) {
params,
})
}
// 分页获取出入库汇总 orderType: 1入库 2出库
export function getInventoryPageSum(params?: object) {
return request({
url: "/supermarket/smErpInventoryRecords/inventoryTypeSum/page",
method: "get",
params,
})
}
-40
View File
@@ -1,40 +0,0 @@
import request from "/@/utils/request"
export function fetchList(query?: Object) {
return request({
url: "/supermarket/smErpCgBack/page",
method: "get",
params: query,
})
}
export function addObj(obj?: Object) {
return request({
url: "/supermarket/smErpCgBack",
method: "post",
data: obj,
})
}
export function getObj(id?: string) {
return request({
url: "/supermarket/smErpCgBack/" + id,
method: "get",
})
}
export function delObjs(ids?: Object) {
return request({
url: "/supermarket/smErpCgBack",
method: "delete",
data: ids,
})
}
export function putObj(obj?: Object) {
return request({
url: "/supermarket/smErpCgBack",
method: "put",
data: obj,
})
}
-9
View File
@@ -38,12 +38,3 @@ export function putObj(obj?: Object) {
data: obj,
})
}
// 采购申请单分页查询
export function getCgsqPage(query?: Object) {
return request({
url: "/supermarket/smErpCgDd/cgsq/page",
method: "get",
params: query,
})
}
@@ -38,11 +38,3 @@ export function putObj(obj?: Object) {
data: obj,
})
}
export function getCgddPage(params?: Object) {
return request({
url: "/supermarket/smErpInventoryRecords/cgdd/page",
method: "get",
params,
})
}
+33 -25
View File
@@ -1,41 +1,49 @@
import request from "/@/utils/request"
export function fetchList(query?: Object) {
return request({
url: '/wallet/walletType/page',
method: 'get',
params: query
})
return request({
url: "/wallet/walletType/page",
method: "get",
params: query,
})
}
// 获取钱包类型下拉列表
export function getWalletTypeSimple(query?: Object) {
return request({
url: "/wallet/walletType/list",
method: "get",
params: query,
})
}
export function addObj(obj?: Object) {
return request({
url: '/wallet/walletType',
method: 'post',
data: obj
})
return request({
url: "/wallet/walletType",
method: "post",
data: obj,
})
}
export function getObj(id?: string) {
return request({
url: '/wallet/walletType/' + id,
method: 'get'
})
return request({
url: "/wallet/walletType/" + id,
method: "get",
})
}
export function delObjs(ids?: Object) {
return request({
url: '/wallet/walletType',
method: 'delete',
data: ids
})
return request({
url: "/wallet/walletType",
method: "delete",
data: ids,
})
}
export function putObj(obj?: Object) {
return request({
url: '/wallet/walletType',
method: 'put',
data: obj
})
return request({
url: "/wallet/walletType",
method: "put",
data: obj,
})
}
+11 -1
View File
@@ -50,7 +50,16 @@
show-checkbox
@node-click="handleNodeClick"
@check="handleCheck"
/>
>
<template #default="{ node, data }">
<el-tooltip v-if="data.isLock" effect="dark" :content="$t('sysuser.noDataScopeTip')" placement="right">
<span>
{{ node.label }}
<SvgIcon name="ele-Lock" />
</span>
</el-tooltip>
</template>
</el-tree>
</div>
<!-- 底部区域 -->
@@ -115,6 +124,7 @@ const props = withDefaults(
label: "name",
children: "children",
value: "id",
disabled: "isLock",
}
},
nodeClickable: true,
+2 -2
View File
@@ -26,8 +26,8 @@
<script setup lang="ts" name="select-wallet-type">
import { reactive } from "vue"
import * as walletTypeApi from "/@/api/wallet/wallet-type"
import { useDict } from "/@/hooks/dict"
import { getWalletTypeSimple } from "/@/api/wallet/wallet-type"
const selectId = defineModel()
@@ -67,7 +67,7 @@ async function getOptions() {
const _pa = {
...queryForm,
}
const { data } = await walletTypeApi.fetchList(_pa)
const { data } = await getWalletTypeSimple(_pa)
state.options = data.records ?? []
const { wallet_type } = useDict("wallet_type")
-1
View File
@@ -187,7 +187,6 @@
<script lang="ts" name="systemUser" setup>
import { delObj, pageList, putObj } from "/@/api/admin/user"
import { putGlobalFace } from "/@/api/admin/userFace"
import { deptTree } from "/@/api/admin/dept"
import { BasicTableProps, useTable } from "/@/hooks/table"
import { useMessage, useMessageBox } from "/@/hooks/message"
import { useI18n } from "vue-i18n"
@@ -11,18 +11,17 @@
:data="linkCodeTableData"
@radio-change="radioChangeEvent"
>
<vxe-column type="radio" width="60" align="center"></vxe-column>
<!-- <vxe-column field="id" title="id" align="center" width="200"></vxe-column>-->
<vxe-column field="planCode" title="编号" align="center" width="200"></vxe-column>
<vxe-column field="planDate" title="单据日期" align="center" width="200"></vxe-column>
<vxe-column field="productName" title="商品名称" align="center" width="200"></vxe-column>
<vxe-column field="handlerUserName" title="经办人" align="center" width="100"></vxe-column>
<!-- <vxe-column field="checkStatus" title="审批状态" align="center" width="100">-->
<!-- <template #default="{ row }">-->
<!-- <dict-tag :options="check_status" :value="row.checkStatus" />-->
<!-- </template>-->
<!-- </vxe-column>-->
<vxe-column field="remark" title="备注" show-overflow align="center" min-width="100"></vxe-column>
<vxe-column type="radio" width="60" align="center" />
<vxe-column field="planCode" title="编号" align="center" width="200" />
<vxe-column field="planDate" title="单据日期" align="center" width="200" />
<vxe-column field="productName" title="商品名称" align="center" width="200" />
<vxe-column field="handlerUserName" title="经办人" align="center" width="100" />
<!-- <vxe-column field="checkStatus" title="审批状态" align="center" width="100">-->
<!-- <template #default="{ row }">-->
<!-- <dict-tag :options="check_status" :value="row.checkStatus" />-->
<!-- </template>-->
<!-- </vxe-column>-->
<vxe-column field="remark" title="备注" show-overflow align="center" min-width="100" />
</vxe-table>
<!-- <pagination
@size-change="sizeChangeHandle"
@@ -40,7 +39,6 @@
:data="currRadioRowItems"
>
<vxe-column type="checkbox" width="60" align="center"></vxe-column>
<!-- <vxe-column field="erpSpuId" title="erpSpuId" align="center" width="200"></vxe-column>-->
<vxe-column field="unit" title="包装单位" align="center" width="200"></vxe-column>
<vxe-column field="quantity" title="数量" align="center" width="100"></vxe-column>
<vxe-column field="purchasePrice" title="进价" align="center" width="100"></vxe-column>
@@ -61,9 +59,7 @@
<script setup lang="ts" name="linkCgCodeDialog">
import { ref } from "vue"
import { VxeTableEvents } from "vxe-table"
import { useDict } from "/@/hooks/dict"
const { check_status } = useDict("check_status")
const linkCodeDialogVisible = defineModel()
const emit = defineEmits(["getSelectedLinkCode"])
const props = withDefaults(
@@ -172,14 +172,13 @@
import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router"
import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgBack"
import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgInventoryPage } from "/@/api/supermarketerp/common"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { formatDate } from "/@/utils/formatTime"
import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { getCgInventoryPage } from "/@/api/supermarketerp/common"
import { displayPrice } from "/@/utils/formatMoney"
const router = useRouter()
@@ -115,7 +115,7 @@
<script setup lang="ts">
import { useRouter } from "vue-router"
import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpCgInventory"
import { fetchList, delObjs } from "../../../../api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict"
@@ -173,13 +173,12 @@ import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router"
import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgDd"
import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import { getPlanCode, getErpSpuSimpleAll, getCgsqPage } from "/@/api/supermarketerp/common"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { formatDate } from "/@/utils/formatTime"
import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { getCgsqPage } from "/@/api/supermarketerp/smErpCgDd"
import { displayPrice } from "/@/utils/formatMoney"
import { useDict } from "/@/hooks/dict"
@@ -177,14 +177,13 @@
import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router"
import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgInventory"
import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { formatDate } from "/@/utils/formatTime"
import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { getCgddPage } from "/@/api/supermarketerp/smErpCgInventory"
import { displayPrice } from "/@/utils/formatMoney"
import { useDict } from "/@/hooks/dict"
@@ -115,7 +115,7 @@
<script setup lang="ts">
import { useRouter } from "vue-router"
import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpCgInventory"
import { fetchList, delObjs } from "../../../../api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict"
@@ -0,0 +1,101 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row v-show="showSearch">
<el-form :model="state.queryForm" :inline="true" ref="queryRef" @keyup.enter="getDataList">
<el-form-item label="关键字" prop="key">
<el-input placeholder="请输入关键字" v-model.trim="state.queryForm.key" />
</el-form-item>
<el-form-item label="单据日期" prop="inventoryDate">
<el-date-picker
v-modeltrim="state.queryForm.inventoryDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
placeholder="请输入单据日期"
/>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="getDataList">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="mb8" style="width: 100%">
<right-toolbar
v-model:showSearch="showSearch"
:export="''"
@exportExcel="exportExcel"
class="ml10 mr20"
style="float: right"
@queryTable="getDataList"
/>
</div>
</el-row>
<el-table
:data="state.dataList"
v-loading="state.loading"
border
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle"
@selection-change="selectionChangHandle"
>
<!-- <el-table-column type="selection" width="40" align="center" fixed="left" />
<el-table-column type="index" label="#" width="50" fixed="left" />
<el-table-column prop="productName" label="商品名" show-overflow-tooltip min-width="160" />
<el-table-column prop="unit" label="单位" show-overflow-tooltip />
<el-table-column prop="spec" label="规格" show-overflow-tooltip />
<el-table-column prop="stock" label="库存" show-overflow-tooltip />
<el-table-column prop="warnType" label="预警类型" show-overflow-tooltip min-width="100" />
<el-table-column prop="barcode" label="条码" show-overflow-tooltip min-width="120" />
<el-table-column prop="categoryId" label="分类" show-overflow-tooltip min-width="100" />
<el-table-column prop="inventoryLowerLimit" label="库存下限" show-overflow-tooltip min-width="90" />
<el-table-column prop="inventoryUpperLimit" label="库存上限" show-overflow-tooltip min-width="90" />
<el-table-column prop="packageNum" label="内装数量" show-overflow-tooltip min-width="90" />
<el-table-column prop="picUrl" label="商品图" show-overflow-tooltip>
<template #default="scope">
<preview-image :src="scope.row.picUrl" />
</template>
</el-table-column>
<el-table-column prop="productCode" label="货号" show-overflow-tooltip min-width="120" /> -->
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
</div>
</template>
<script setup lang="ts">
import { BasicTableProps, useTable } from "/@/hooks/table"
import { getInventoryPage } from "/@/api/supermarketerp/report"
const queryRef = ref()
const showSearch = ref(true)
const selectObjs = ref([]) as any
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {
orderType: 2,
},
pageList: getInventoryPage,
})
const { getDataList, currentChangeHandle, sizeChangeHandle, downBlobFile, tableStyle } = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
getDataList()
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id)
}
// 导出excel
const exportExcel = () => {
downBlobFile("/supermarketerp/smErpInventoryWarning/export", Object.assign(state.queryForm, { ids: selectObjs }), "出库记录.xlsx")
}
</script>
@@ -0,0 +1,101 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row v-show="showSearch">
<el-form :model="state.queryForm" :inline="true" ref="queryRef" @keyup.enter="getDataList">
<el-form-item label="关键字" prop="key">
<el-input placeholder="请输入关键字" v-model.trim="state.queryForm.key" />
</el-form-item>
<el-form-item label="单据日期" prop="inventoryDate">
<el-date-picker
v-modeltrim="state.queryForm.inventoryDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
placeholder="请输入单据日期"
/>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="getDataList">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="mb8" style="width: 100%">
<right-toolbar
v-model:showSearch="showSearch"
:export="''"
@exportExcel="exportExcel"
class="ml10 mr20"
style="float: right"
@queryTable="getDataList"
/>
</div>
</el-row>
<el-table
:data="state.dataList"
v-loading="state.loading"
border
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle"
@selection-change="selectionChangHandle"
>
<!-- <el-table-column type="selection" width="40" align="center" fixed="left" />
<el-table-column type="index" label="#" width="50" fixed="left" />
<el-table-column prop="productName" label="商品名" show-overflow-tooltip min-width="160" />
<el-table-column prop="unit" label="单位" show-overflow-tooltip />
<el-table-column prop="spec" label="规格" show-overflow-tooltip />
<el-table-column prop="stock" label="库存" show-overflow-tooltip />
<el-table-column prop="warnType" label="预警类型" show-overflow-tooltip min-width="100" />
<el-table-column prop="barcode" label="条码" show-overflow-tooltip min-width="120" />
<el-table-column prop="categoryId" label="分类" show-overflow-tooltip min-width="100" />
<el-table-column prop="inventoryLowerLimit" label="库存下限" show-overflow-tooltip min-width="90" />
<el-table-column prop="inventoryUpperLimit" label="库存上限" show-overflow-tooltip min-width="90" />
<el-table-column prop="packageNum" label="内装数量" show-overflow-tooltip min-width="90" />
<el-table-column prop="picUrl" label="商品图" show-overflow-tooltip>
<template #default="scope">
<preview-image :src="scope.row.picUrl" />
</template>
</el-table-column>
<el-table-column prop="productCode" label="货号" show-overflow-tooltip min-width="120" /> -->
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
</div>
</template>
<script setup lang="ts">
import { BasicTableProps, useTable } from "/@/hooks/table"
import { getInventoryPageSum } from "/@/api/supermarketerp/report"
const queryRef = ref()
const showSearch = ref(true)
const selectObjs = ref([]) as any
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {
orderType: 2,
},
pageList: getInventoryPageSum,
})
const { getDataList, currentChangeHandle, sizeChangeHandle, downBlobFile, tableStyle } = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
getDataList()
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id)
}
// 导出excel
const exportExcel = () => {
downBlobFile("/supermarketerp/smErpInventoryWarning/export", Object.assign(state.queryForm, { ids: selectObjs }), "出库汇总.xlsx")
}
</script>
@@ -1,26 +1,26 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<!-- <el-row v-show="showSearch">
<el-row v-show="showSearch">
<el-form :model="state.queryForm" :inline="true" ref="queryRef" @keyup.enter="getDataList">
<el-form-item label="商品名" prop="productName">
<el-input placeholder="请输入商品名" v-model.trim="state.queryForm.productName" />
<el-form-item label="关键字" prop="key">
<el-input placeholder="请输入关键字" v-model.trim="state.queryForm.key" />
</el-form-item>
<el-form-item label="预警类型" prop="warnType">
<el-select v-model="state.queryForm.warnType" placeholder="请选择">
<el-option label="库存不足" :value="1" />
<el-option label="库存超额" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="条码" prop="barcode">
<el-input placeholder="请输入条码" v-model.trim="state.queryForm.barcode" />
<el-form-item label="单据日期" prop="inventoryDate">
<el-date-picker
v-modeltrim="state.queryForm.inventoryDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
placeholder="请输入单据日期"
/>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="getDataList">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-row> -->
</el-row>
<el-row>
<div class="mb8" style="width: 100%">
<right-toolbar
@@ -41,18 +41,13 @@
:header-cell-style="tableStyle.headerCellStyle"
@selection-change="selectionChangHandle"
>
<el-table-column type="selection" width="40" align="center" fixed="left" />
<!-- <el-table-column type="selection" width="40" align="center" fixed="left" />
<el-table-column type="index" label="#" width="50" fixed="left" />
<el-table-column prop="productName" label="商品名" show-overflow-tooltip min-width="160" />
<el-table-column prop="unit" label="单位" show-overflow-tooltip />
<el-table-column prop="spec" label="规格" show-overflow-tooltip />
<el-table-column prop="stock" label="库存" show-overflow-tooltip />
<el-table-column prop="warnType" label="预警类型" show-overflow-tooltip min-width="100">
<template #default="scope">
<el-tag type="danger" v-if="scope.row.warnType == 1">库存不足</el-tag>
<el-tag type="danger" v-if="scope.row.warnType == 2">库存超额</el-tag>
</template>
</el-table-column>
<el-table-column prop="warnType" label="预警类型" show-overflow-tooltip min-width="100" />
<el-table-column prop="barcode" label="条码" show-overflow-tooltip min-width="120" />
<el-table-column prop="categoryId" label="分类" show-overflow-tooltip min-width="100" />
<el-table-column prop="inventoryLowerLimit" label="库存下限" show-overflow-tooltip min-width="90" />
@@ -63,7 +58,7 @@
<preview-image :src="scope.row.picUrl" />
</template>
</el-table-column>
<el-table-column prop="productCode" label="货号" show-overflow-tooltip min-width="120" />
<el-table-column prop="productCode" label="货号" show-overflow-tooltip min-width="120" /> -->
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
@@ -88,11 +83,11 @@ const state: BasicTableProps = reactive<BasicTableProps>({
const { getDataList, currentChangeHandle, sizeChangeHandle, downBlobFile, tableStyle } = useTable(state)
// 清空搜索条件
// const resetQuery = () => {
// // 清空搜索条件
// queryRef.value?.resetFields()
// getDataList()
// }
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
getDataList()
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
@@ -0,0 +1,101 @@
<template>
<div class="layout-padding">
<div class="layout-padding-auto layout-padding-view">
<el-row v-show="showSearch">
<el-form :model="state.queryForm" :inline="true" ref="queryRef" @keyup.enter="getDataList">
<el-form-item label="关键字" prop="key">
<el-input placeholder="请输入关键字" v-model.trim="state.queryForm.key" />
</el-form-item>
<el-form-item label="单据日期" prop="inventoryDate">
<el-date-picker
v-modeltrim="state.queryForm.inventoryDate"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
placeholder="请输入单据日期"
/>
</el-form-item>
<el-form-item>
<el-button icon="search" type="primary" @click="getDataList">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<div class="mb8" style="width: 100%">
<right-toolbar
v-model:showSearch="showSearch"
:export="''"
@exportExcel="exportExcel"
class="ml10 mr20"
style="float: right"
@queryTable="getDataList"
/>
</div>
</el-row>
<el-table
:data="state.dataList"
v-loading="state.loading"
border
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle"
@selection-change="selectionChangHandle"
>
<!-- <el-table-column type="selection" width="40" align="center" fixed="left" />
<el-table-column type="index" label="#" width="50" fixed="left" />
<el-table-column prop="productName" label="商品名" show-overflow-tooltip min-width="160" />
<el-table-column prop="unit" label="单位" show-overflow-tooltip />
<el-table-column prop="spec" label="规格" show-overflow-tooltip />
<el-table-column prop="stock" label="库存" show-overflow-tooltip />
<el-table-column prop="warnType" label="预警类型" show-overflow-tooltip min-width="100" />
<el-table-column prop="barcode" label="条码" show-overflow-tooltip min-width="120" />
<el-table-column prop="categoryId" label="分类" show-overflow-tooltip min-width="100" />
<el-table-column prop="inventoryLowerLimit" label="库存下限" show-overflow-tooltip min-width="90" />
<el-table-column prop="inventoryUpperLimit" label="库存上限" show-overflow-tooltip min-width="90" />
<el-table-column prop="packageNum" label="内装数量" show-overflow-tooltip min-width="90" />
<el-table-column prop="picUrl" label="商品图" show-overflow-tooltip>
<template #default="scope">
<preview-image :src="scope.row.picUrl" />
</template>
</el-table-column>
<el-table-column prop="productCode" label="货号" show-overflow-tooltip min-width="120" /> -->
</el-table>
<pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" v-bind="state.pagination" />
</div>
</div>
</template>
<script setup lang="ts">
import { BasicTableProps, useTable } from "/@/hooks/table"
import { getInventoryPageSum } from "/@/api/supermarketerp/report"
const queryRef = ref()
const showSearch = ref(true)
const selectObjs = ref([]) as any
const state: BasicTableProps = reactive<BasicTableProps>({
queryForm: {
orderType: 1,
},
pageList: getInventoryPageSum,
})
const { getDataList, currentChangeHandle, sizeChangeHandle, downBlobFile, tableStyle } = useTable(state)
// 清空搜索条件
const resetQuery = () => {
// 清空搜索条件
queryRef.value?.resetFields()
getDataList()
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id)
}
// 导出excel
const exportExcel = () => {
downBlobFile("/supermarketerp/smErpInventoryWarning/export", Object.assign(state.queryForm, { ids: selectObjs }), "入库汇总.xlsx")
}
</script>
@@ -201,14 +201,13 @@
import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router"
import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgInventory"
import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgInventoryPage } from "/@/api/supermarketerp/common"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { formatDate } from "/@/utils/formatTime"
import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { getCgInventoryPage } from "/@/api/supermarketerp/common"
import { displayPrice, storePrice } from "/@/utils/formatMoney"
import { useDict } from "/@/hooks/dict"
@@ -279,7 +278,7 @@ const validRules = ref<VxeTablePropTypes.EditRules<any>>({
const receiveAmountFormRules = ref({
receiveAmount: [
{ required: true, message: "不能为空", trigger: "blur" },
{ pattern: /^\d+(\.\d{1,1})?$/, message: "格式错误" },
{ pattern: /^\d+(\.\d{1,2})?$/, message: "格式错误" },
],
})
@@ -115,7 +115,7 @@
<script setup lang="ts">
import { useRouter } from "vue-router"
import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpCgInventory"
import { fetchList, delObjs } from "../../../../api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message"
const router = useRouter()
@@ -201,14 +201,13 @@
import { ref, reactive, computed, onMounted } from "vue"
import { useRouter, useRoute } from "vue-router"
import { useMessage } from "/@/hooks/message"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpCgInventory"
import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common"
import { VxeTableEvents, VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { formatDate } from "/@/utils/formatTime"
import { Search } from "@element-plus/icons-vue"
import erpSpuSelectDialog from "/@/views/supermarketerp/components/erpSpuSelectDialog.vue"
import linkCodeDialog from "/@/views/supermarketerp/components/linkCodeDialog.vue"
import { getCgddPage } from "/@/api/supermarketerp/smErpCgInventory"
import { displayPrice, storePrice } from "/@/utils/formatMoney"
import { useDict } from "/@/hooks/dict"
@@ -279,7 +278,7 @@ const validRules = ref<VxeTablePropTypes.EditRules<any>>({
const receiveAmountFormRules = ref({
receiveAmount: [
{ required: true, message: "不能为空", trigger: "blur" },
{ pattern: /^\d+(\.\d{1,1})?$/, message: "格式错误" },
{ pattern: /^\d+(\.\d{1,2})?$/, message: "格式错误" },
],
})
@@ -115,7 +115,7 @@
<script setup lang="ts">
import { useRouter } from "vue-router"
import { BasicTableProps, useTable } from "/@/hooks/table"
import { fetchList, delObjs } from "/@/api/supermarketerp/smErpCgInventory"
import { fetchList, delObjs } from "../../../../api/supermarketerp/smErpInventoryRecords"
import { useMessage, useMessageBox } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict"
@@ -48,9 +48,8 @@
<el-table-column prop="spec" label="规格" show-overflow-tooltip />
<el-table-column prop="stock" label="库存" show-overflow-tooltip />
<el-table-column prop="warnType" label="预警类型" show-overflow-tooltip min-width="100">
<template #default="scope">
<el-tag type="danger" v-if="scope.row.warnType == 1">库存不足</el-tag>
<el-tag type="danger" v-if="scope.row.warnType == 2">库存超额</el-tag>
<template #default="{ row }">
<dict-tag :options="sm_inventory_warning_type" :value="row.warnType" />
</template>
</el-table-column>
<el-table-column prop="barcode" label="条码" show-overflow-tooltip min-width="120" />
@@ -78,7 +77,9 @@
import { BasicTableProps, useTable } from "/@/hooks/table"
import { getSmErpInventoryWarningList } from "/@/api/supermarketerp/smErpInventoryWarning"
import { getSupermarketCategory } from "/@/api/supermarketerp/supermarketSpu"
import { useDict } from "/@/hooks/dict"
const { sm_inventory_warning_type } = useDict("sm_inventory_warning_type")
const queryRef = ref()
const showSearch = ref(true)
const selectObjs = ref([]) as any
@@ -33,20 +33,23 @@
<vxe-column field="unit" title="单位" :edit-render="{}">
<template #edit="{ row }">
<el-select v-model="row.unitId">
<div v-for="item in smErpUnitEntityList">
<div v-for="item in computedSmErpUnitEntityList">
<el-option :label="item.unit" :value="item.id" />
</div>
</el-select>
</template>
<template #default="{ row }">
<span v-if="row.unitId">{{ smErpUnitEntityList?.find((item) => item.id === row.unitId)?.unit }}</span>
<span v-if="row.unitId">{{ computedSmErpUnitEntityList?.find((item: rowVU) => item.id === row.unitId)?.unit }}</span>
<span v-else style="color: #c0c4cf">请选择</span>
</template>
</vxe-column>
<vxe-column field="barCode" title="条码">
<template #default="{ row }">
{{ smErpUnitEntityList?.find((item) => item.id == row.unitId)?.barCode }}
<vxe-column field="barCode" title="辅助条码" :edit-render="{ autoFocus: 'input', placeholder: '请输入' }">
<template #edit="{ row }">
<el-input v-model.trim="row.barCode" />
</template>
<!-- <template #default="{ row }">
{{ computedSmErpUnitEntityList?.find((item) => item.id == row.unitId)?.barCode }}
</template> -->
</vxe-column>
</vxe-table>
</div>
@@ -55,7 +58,7 @@
<script setup lang="ts">
import { nanoid } from "nanoid"
import { useMessage } from "/@/hooks/message"
import { rowVU } from "./packageUnit.vue"
import { type rowVU } from "./packageUnit.vue"
export interface rowVC {
id: string
@@ -109,6 +112,19 @@ const pushEvent = () => {
})
}
// 包装单位行删除时清除辅助条码中选择该包装单位的行
watch(
() => props.smErpUnitEntityList?.length,
() => {
auxiliaryCodeList.value = auxiliaryCodeList.value.filter((codeItem: rowVC) =>
props.smErpUnitEntityList?.some((item: rowVU) => codeItem.unitId === item.id),
)
},
)
// 计算辅助条码中可选择的包装单位下拉菜单
const computedSmErpUnitEntityList = computed(() => props.smErpUnitEntityList?.filter((item: rowVU) => item.unit))
// 删除选中的行
const removeSelectRowEvent = () => {
const $table = editableTableRef.value
@@ -25,7 +25,7 @@
<el-button @click="visible = false">取消</el-button>
<el-button v-if="currentTabPaneIndex != 0" type="primary" @click="currentTabPaneIndex--" :disabled="loading">上一步</el-button>
<el-button v-if="currentTabPaneIndex != 3" type="primary" @click="currentTabPaneIndex++">下一步</el-button>
<el-button v-if="currentTabPaneIndex == 3" type="primary" @click="onSubmit" :disabled="loading">确 认</el-button>
<el-button v-if="currentTabPaneIndex == 3" type="primary" @click="onSubmit" :disabled="loading">提 交</el-button>
</template>
</el-dialog>
</template>
@@ -34,7 +34,7 @@
import baseInfo from "./components/baseInfo.vue"
import packageUnit, { type rowVU } from "./components/packageUnit.vue"
import productInventory from "./components/productInventory.vue"
import auxiliaryCode, { rowVC } from "./components/auxiliaryCode.vue"
import auxiliaryCode, { type rowVC } from "./components/auxiliaryCode.vue"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/supermarketSpu"
import { TabPaneName } from "element-plus"
import { useMessage } from "/@/hooks/message"
@@ -161,10 +161,10 @@ const resetForm = () => {
// tab栏切换
const handleTabChange = (name: TabPaneName) => (currentTabPaneIndex.value = tabPaneEnum.findIndex((item) => item === name))
// 整理包装单位列表
const usePackageUnitList = () => {
// 计算包装单位列表
const usePackageUnitList = computed(() => {
const curRadioRowUnit = packageUnitRef.value.getRadioEvent()
return form.smErpUnitEntityList.map((item: rowVU) => {
return [...form.smErpUnitEntityList].map((item: rowVU) => {
if (item.id === curRadioRowUnit.id) {
item.isBase = true
} else {
@@ -180,23 +180,23 @@ const usePackageUnitList = () => {
}
return item
})
}
})
// 整理辅助条码列表
const useAuxiliaryCode = () => {
// 计算辅助条码列表
const useAuxiliaryCode = computed(() => {
return form.smErpAuxiliaryCodeEntityList
.filter((item: rowVC) => item.unitId)
.map((item: rowVC) => {
const curAuxiliaryCodeItem = form.smErpUnitEntityList.find((unitItem: any) => unitItem.id === item.unitId)
if (curAuxiliaryCodeItem.barCode) item.barCode = curAuxiliaryCodeItem.barCode
// const curAuxiliaryCodeItem = form.smErpUnitEntityList.find((unitItem: any) => unitItem.id === item.unitId)
// if (curAuxiliaryCodeItem.barCode) item.barCode = curAuxiliaryCodeItem.barCode
if (item.isNew) {
item.id = ""
if (curAuxiliaryCodeItem.isNew) item.unitId = ""
// if (curAuxiliaryCodeItem.isNew) item.unitId = ""
delete item.isNew
}
return item
})
}
})
// 提交
const onSubmit = async () => {
@@ -210,23 +210,17 @@ const onSubmit = async () => {
// if (!form.smErpAuxiliaryCodeEntityList || form.smErpAuxiliaryCodeEntityList.length <= 0) return useMessage().warning("请添加辅助条码")
// if (!(await auxiliaryCodeRef.value.editableTableValidate())) return useMessage().warning("辅助条码必填项未填写完整")
const handleAuxiliaryCode = useAuxiliaryCode()
const handlePackageUnit = usePackageUnitList()
console.log("提交的数据", {
...form,
grossMargin: storePrice(form.grossMargin),
smErpUnitEntityList: handlePackageUnit,
smErpAuxiliaryCodeEntityList: handleAuxiliaryCode,
})
try {
loading.value = true
const _pa = {
...form,
grossMargin: storePrice(form.grossMargin),
smErpUnitEntityList: handlePackageUnit,
smErpAuxiliaryCodeEntityList: handleAuxiliaryCode,
smErpUnitEntityList: usePackageUnitList.value,
smErpAuxiliaryCodeEntityList: useAuxiliaryCode.value,
}
console.log("提交的数据", _pa)
const res = form.id ? await putObj(_pa) : await addObj(_pa)
if (res.code === 0) {
useMessage().success(form.id ? "修改成功" : "添加成功")