Commit 51fd2e02 by 杨子

feat: 重构WMS仓库管理系统并添加多个功能组件

refactor(仓库管理): 将"库位"统一改为"货架"并调整相关代码
feat(组件): 新增仓库、货架、客户、供应商等选择对话框组件
feat(退库单): 优化退库单页面布局和交互体验
style(主题): 更新系统主题颜色为军绿色调
docs: 更新系统名称和描述为WMS仓库管理系统
build: 添加vue-office相关依赖以支持文档处理
parent d5d551f4
# 页面标题 # 页面标题
VITE_APP_TITLE = 若依管理系统 VITE_APP_TITLE = WMS仓库管理系统
# 开发环境配置 # 开发环境配置
VITE_APP_ENV = 'development' VITE_APP_ENV = 'development'
# 若依管理系统/开发环境 # WMS仓库管理系统/开发环境
VITE_APP_BASE_API = '/dev-api' VITE_APP_BASE_API = '/dev-api'
# 页面标题 # 页面标题
VITE_APP_TITLE = 若依管理系统 VITE_APP_TITLE = WMS仓库管理系统
# 生产环境配置 # 生产环境配置
VITE_APP_ENV = 'production' VITE_APP_ENV = 'production'
# 若依管理系统/生产环境 # WMS仓库管理系统/生产环境
VITE_APP_BASE_API = '/prod-api' VITE_APP_BASE_API = '/prod-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli # 是否在打包时开启压缩,支持 gzip 和 brotli
......
# 页面标题 # 页面标题
VITE_APP_TITLE = 若依管理系统 VITE_APP_TITLE = WMS仓库管理系统
# 生产环境配置 # 生产环境配置
VITE_APP_ENV = 'staging' VITE_APP_ENV = 'staging'
# 若依管理系统/生产环境 # WMS仓库管理系统/生产环境
VITE_APP_BASE_API = '/stage-api' VITE_APP_BASE_API = '/stage-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli # 是否在打包时开启压缩,支持 gzip 和 brotli
......
custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="/favicon.ico"> <link rel="icon" href="/favicon.ico">
<title>若依管理系统</title> <title>WMS仓库管理系统</title>
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]--> <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style> <style>
html, html,
......
{ {
"name": "ruoyi", "name": "ruoyi",
"version": "3.9.0", "version": "3.9.0",
"description": "若依管理系统", "description": "WMS仓库管理系统",
"author": "若依", "author": "若依",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "2.3.1", "@element-plus/icons-vue": "2.3.1",
"@vue-office/docx": "^1.6.3",
"@vue-office/excel": "^1.7.14",
"@vue-office/pdf": "^2.0.10",
"@vueup/vue-quill": "1.2.0", "@vueup/vue-quill": "1.2.0",
"@vueuse/core": "13.3.0", "@vueuse/core": "13.3.0",
"axios": "1.9.0", "axios": "1.9.0",
...@@ -34,6 +37,7 @@ ...@@ -34,6 +37,7 @@
"splitpanes": "4.0.4", "splitpanes": "4.0.4",
"vue": "3.5.16", "vue": "3.5.16",
"vue-cropper": "1.1.1", "vue-cropper": "1.1.1",
"vue-demi": "^0.14.10",
"vue-router": "4.5.1", "vue-router": "4.5.1",
"vuedraggable": "4.1.0" "vuedraggable": "4.1.0"
}, },
......
...@@ -11,6 +11,15 @@ importers: ...@@ -11,6 +11,15 @@ importers:
'@element-plus/icons-vue': '@element-plus/icons-vue':
specifier: 2.3.1 specifier: 2.3.1
version: 2.3.1(vue@3.5.16) version: 2.3.1(vue@3.5.16)
'@vue-office/docx':
specifier: ^1.6.3
version: 1.6.3(vue-demi@0.14.10(vue@3.5.16))(vue@3.5.16)
'@vue-office/excel':
specifier: ^1.7.14
version: 1.7.14(vue-demi@0.14.10(vue@3.5.16))(vue@3.5.16)
'@vue-office/pdf':
specifier: ^2.0.10
version: 2.0.10(vue-demi@0.14.10(vue@3.5.16))(vue@3.5.16)
'@vueup/vue-quill': '@vueup/vue-quill':
specifier: 1.2.0 specifier: 1.2.0
version: 1.2.0(vue@3.5.16) version: 1.2.0(vue@3.5.16)
...@@ -62,6 +71,9 @@ importers: ...@@ -62,6 +71,9 @@ importers:
vue-cropper: vue-cropper:
specifier: 1.1.1 specifier: 1.1.1
version: 1.1.1 version: 1.1.1
vue-demi:
specifier: ^0.14.10
version: 0.14.10(vue@3.5.16)
vue-router: vue-router:
specifier: 4.5.1 specifier: 4.5.1
version: 4.5.1(vue@3.5.16) version: 4.5.1(vue@3.5.16)
...@@ -481,6 +493,36 @@ packages: ...@@ -481,6 +493,36 @@ packages:
vite: ^5.0.0 || ^6.0.0 vite: ^5.0.0 || ^6.0.0
vue: ^3.2.25 vue: ^3.2.25
'@vue-office/docx@1.6.3':
resolution: {integrity: sha512-Cs+3CAaRBOWOiW4XAhTwwxJ0dy8cPIf6DqfNvYcD3YACiLwO4kuawLF2IAXxyijhbuOeoFsfvoVbOc16A/4bZA==}
peerDependencies:
'@vue/composition-api': ^1.7.1
vue: ^2.0.0 || >=3.0.0
vue-demi: ^0.14.6
peerDependenciesMeta:
'@vue/composition-api':
optional: true
'@vue-office/excel@1.7.14':
resolution: {integrity: sha512-pVUgt+emDQUnW7q22CfnQ+jl43mM/7IFwYzOg7lwOwPEbiVB4K4qEQf+y/bc4xGXz75w1/e3Kz3G6wAafmFBFg==}
peerDependencies:
'@vue/composition-api': ^1.7.1
vue: ^2.0.0 || >=3.0.0
vue-demi: ^0.14.6
peerDependenciesMeta:
'@vue/composition-api':
optional: true
'@vue-office/pdf@2.0.10':
resolution: {integrity: sha512-yHVLrMAKpMPBkhBwofFyGEtEeJF0Zd7oGmf56Pe5aj/xObdRq3E1CIZqTqhWJNgHV8oLQqaX0vs4p5T1zq+GIA==}
peerDependencies:
'@vue/composition-api': ^1.7.1
vue: ^2.0.0 || >=3.0.0
vue-demi: ^0.14.6
peerDependenciesMeta:
'@vue/composition-api':
optional: true
'@vue/compiler-core@3.5.16': '@vue/compiler-core@3.5.16':
resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==} resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==}
...@@ -2549,6 +2591,21 @@ snapshots: ...@@ -2549,6 +2591,21 @@ snapshots:
vite: 6.3.5(@types/node@25.0.2)(sass-embedded@1.89.1) vite: 6.3.5(@types/node@25.0.2)(sass-embedded@1.89.1)
vue: 3.5.16 vue: 3.5.16
'@vue-office/docx@1.6.3(vue-demi@0.14.10(vue@3.5.16))(vue@3.5.16)':
dependencies:
vue: 3.5.16
vue-demi: 0.14.10(vue@3.5.16)
'@vue-office/excel@1.7.14(vue-demi@0.14.10(vue@3.5.16))(vue@3.5.16)':
dependencies:
vue: 3.5.16
vue-demi: 0.14.10(vue@3.5.16)
'@vue-office/pdf@2.0.10(vue-demi@0.14.10(vue@3.5.16))(vue@3.5.16)':
dependencies:
vue: 3.5.16
vue-demi: 0.14.10(vue@3.5.16)
'@vue/compiler-core@3.5.16': '@vue/compiler-core@3.5.16':
dependencies: dependencies:
'@babel/parser': 7.28.5 '@babel/parser': 7.28.5
......
import request from '@/utils/request' import request from '@/utils/request'
// 查询库位信息列表 // 查询货架信息列表
export function listWmsLocation(query) { export function listWmsLocation(query) {
return request({ return request({
url: '/ware/wmsLocation/list', url: '/ware/wmsLocation/list',
...@@ -9,7 +9,7 @@ export function listWmsLocation(query) { ...@@ -9,7 +9,7 @@ export function listWmsLocation(query) {
}) })
} }
// 查询库位信息详细 // 查询货架信息详细
export function getWmsLocation(locationId) { export function getWmsLocation(locationId) {
return request({ return request({
url: '/ware/wmsLocation/' + locationId, url: '/ware/wmsLocation/' + locationId,
...@@ -17,7 +17,7 @@ export function getWmsLocation(locationId) { ...@@ -17,7 +17,7 @@ export function getWmsLocation(locationId) {
}) })
} }
// 新增库位信息 // 新增货架信息
export function addWmsLocation(data) { export function addWmsLocation(data) {
return request({ return request({
url: '/ware/wmsLocation', url: '/ware/wmsLocation',
...@@ -26,7 +26,7 @@ export function addWmsLocation(data) { ...@@ -26,7 +26,7 @@ export function addWmsLocation(data) {
}) })
} }
// 修改库位信息 // 修改货架信息
export function updateWmsLocation(data) { export function updateWmsLocation(data) {
return request({ return request({
url: '/ware/wmsLocation', url: '/ware/wmsLocation',
...@@ -35,7 +35,7 @@ export function updateWmsLocation(data) { ...@@ -35,7 +35,7 @@ export function updateWmsLocation(data) {
}) })
} }
// 删除库位信息 // 删除货架信息
export function delWmsLocation(locationId) { export function delWmsLocation(locationId) {
return request({ return request({
url: '/ware/wmsLocation/' + locationId, url: '/ware/wmsLocation/' + locationId,
......
...@@ -8,28 +8,28 @@ $tiffany: #4AB7BD; ...@@ -8,28 +8,28 @@ $tiffany: #4AB7BD;
$yellow: #FEC171; $yellow: #FEC171;
$panGreen: #30B08F; $panGreen: #30B08F;
// 默认主题变量 // 默认主题变量 - 部队军绿色主题
$menuText: #bfcbd9; $menuText: #e6e6e6;
$menuActiveText: #409eff; $menuActiveText: #ffffff;
$menuBg: #304156; $menuBg: #2b580c;
$menuHover: #263445; $menuHover: #6f8a5d;
// 浅色主题theme-light // 浅色主题theme-light
$menuLightBg: #ffffff; $menuLightBg: #2b580c;
$menuLightHover: #f0f1f5; $menuLightHover: #6f8a5d;
$menuLightText: #303133; $menuLightText: #e6e6e6;
$menuLightActiveText: #409EFF; $menuLightActiveText: #ffffff;
// 基础变量 // 基础变量
$base-sidebar-width: 200px; $base-sidebar-width: 200px;
$sideBarWidth: 200px; $sideBarWidth: 200px;
// 菜单暗色变量 // 菜单暗色变量
$base-menu-color: #bfcbd9; $base-menu-color: #e6e6e6;
$base-menu-color-active: #f4f4f5; $base-menu-color-active: #ffffff;
$base-menu-background: #304156; $base-menu-background: #2b580c;
$base-sub-menu-background: #1f2d3d; $base-sub-menu-background: #1e3e08;
$base-sub-menu-hover: #001528; $base-sub-menu-hover: #152d06;
// 组件变量 // 组件变量
$--color-primary: #409EFF; $--color-primary: #409EFF;
......
<template>
<el-dialog :title="title" v-model="dialogVisible" width="1200px" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px">
<el-form-item label="库区编码" prop="areaCode">
<el-input
v-model="queryParams.areaCode"
placeholder="请输入库区编码"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="库区名称" prop="areaName">
<el-input
v-model="queryParams.areaName"
placeholder="请输入库区名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="所属仓库" prop="warehouseId">
<el-input
v-model="queryParams.warehouseId"
placeholder="请输入所属仓库ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table
v-loading="loading"
:data="areaList"
default-expand-all
@selection-change="handleSelectionChange"
row-key="areaId"
:tree-props="{ children: 'children' }"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="库区编码" align="center" prop="areaCode" />
<el-table-column label="库区名称" align="center" prop="areaName" />
<el-table-column label="所属仓库ID" align="center" prop="warehouseId" />
<el-table-column label="库区类型" align="center" prop="areaType" />
<el-table-column label="温度范围" align="center" prop="temperatureRange" />
<el-table-column label="湿度范围" align="center" prop="humidityRange" />
<el-table-column label="库区容量" align="center" prop="capacity" />
<el-table-column label="状态" align="center" prop="status" />
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleConfirm">确 定</el-button>
<el-button @click="handleCancel">取 消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="AreaSelectTreeDialog">
import { ref, reactive, watch } from 'vue'
import { listWmsArea } from "@/api/ware/wmsArea"
import { handleTree } from "@/utils/ruoyi"
const props = defineProps({
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: '选择库区'
}
})
const emit = defineEmits(['update:visible', 'confirm', 'cancel'])
// 本地对话框可见性状态
const dialogVisible = ref(props.visible)
// 监听props变化,同步本地状态
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
// 监听本地状态变化,通知父组件
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 库区列表
const areaList = ref([])
// 加载状态
const loading = ref(false)
// 选中的库区
const selectedAreas = ref([])
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 100,
areaCode: null,
areaName: null,
warehouseId: null
})
// 加载库区列表
const handleQuery = () => {
loading.value = true
listWmsArea(queryParams).then(response => {
// 处理树形结构
areaList.value = handleTree(response.rows, 'areaId', 'parentId')
loading.value = false
})
}
// 重置查询参数
const resetQuery = () => {
queryParams.areaCode = null
queryParams.areaName = null
queryParams.warehouseId = null
queryParams.pageNum = 1
handleQuery()
}
// 库区选择变化
const handleSelectionChange = (selection) => {
selectedAreas.value = selection
}
// 确认选择
const handleConfirm = () => {
if (selectedAreas.value.length === 0) {
return
}
emit('confirm', selectedAreas.value)
dialogVisible.value = false
}
// 取消选择
const handleCancel = () => {
emit('cancel')
dialogVisible.value = false
}
// 暴露方法
const exposeMethods = {
handleQuery
}
defineExpose(exposeMethods)
</script>
<style scoped>
.dialog-footer {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
</style>
\ No newline at end of file
<template>
<el-dialog :title="title" v-model="dialogVisible" width="1000px" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px">
<el-form-item label="客户编码" prop="customerCode">
<el-input
v-model="queryParams.customerCode"
placeholder="请输入客户编码"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="客户名称" prop="customerName">
<el-input
v-model="queryParams.customerName"
placeholder="请输入客户名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="联系人" prop="contactPerson">
<el-input
v-model="queryParams.contactPerson"
placeholder="请输入联系人"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="联系电话" prop="contactPhone">
<el-input
v-model="queryParams.contactPhone"
placeholder="请输入联系电话"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="customerList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="客户编码" align="center" prop="customerCode" />
<el-table-column label="客户名称" align="center" prop="customerName" />
<el-table-column label="联系人" align="center" prop="contactPerson" />
<el-table-column label="联系电话" align="center" prop="contactPhone" />
<el-table-column label="邮箱" align="center" prop="email" />
<el-table-column label="地址" align="center" prop="address" />
<el-table-column label="状态" align="center" prop="status" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="handleQuery"
/>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleConfirm">确 定</el-button>
<el-button @click="handleCancel">取 消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="CustomerSelectDialog">
import { ref, reactive, watch } from 'vue'
import { listWmsCustomer } from "@/api/ware/wmsCustomer"
const props = defineProps({
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: '选择客户'
}
})
const emit = defineEmits(['update:visible', 'confirm', 'cancel'])
// 本地对话框可见性状态
const dialogVisible = ref(props.visible)
// 监听props变化,同步本地状态
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
// 监听本地状态变化,通知父组件
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 客户列表
const customerList = ref([])
// 加载状态
const loading = ref(false)
// 总条数
const total = ref(0)
// 选中的客户
const selectedCustomers = ref([])
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
customerCode: null,
customerName: null,
contactPerson: null,
contactPhone: null
})
// 加载客户列表
const handleQuery = () => {
loading.value = true
listWmsCustomer(queryParams).then(response => {
customerList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 重置查询参数
const resetQuery = () => {
queryParams.customerCode = null
queryParams.customerName = null
queryParams.contactPerson = null
queryParams.contactPhone = null
queryParams.pageNum = 1
handleQuery()
}
// 客户选择变化
const handleSelectionChange = (selection) => {
selectedCustomers.value = selection
}
// 确认选择
const handleConfirm = () => {
if (selectedCustomers.value.length === 0) {
return
}
emit('confirm', selectedCustomers.value)
dialogVisible.value = false
}
// 取消选择
const handleCancel = () => {
emit('cancel')
dialogVisible.value = false
}
// 暴露方法
defineExpose({
handleQuery
})
</script>
<style scoped>
.dialog-footer {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
</style>
\ No newline at end of file
<template>
<el-dialog
:title="title"
v-model="dialogVisible"
width="1200px"
append-to-body
>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="68px">
<el-form-item label="操作类型" prop="operationType">
<el-input
v-model="queryParams.operationType"
placeholder="请输入操作类型"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="操作时间" prop="operationTime">
<el-date-picker clearable
v-model="queryParams.operationTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择操作时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="wmsInventoryFlowList">
<el-table-column label="流水ID" align="center" prop="flowId" />
<el-table-column label="库存ID" align="center" prop="inventoryId" />
<el-table-column label="物资ID" align="center" prop="materialId" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="货架ID" align="center" prop="locationId" />
<el-table-column label="操作类型" align="center" prop="operationType" />
<el-table-column label="变动数量" align="center" prop="changeQuantity" />
<el-table-column label="变动前数量" align="center" prop="beforeQuantity" />
<el-table-column label="变动后数量" align="center" prop="afterQuantity" />
<el-table-column label="操作人" align="center" prop="operator" />
<el-table-column label="操作时间" align="center" prop="operationTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.operationTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
</el-table>
<pagination
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">关闭</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="InventoryFlowDialog">
import { ref, reactive, watch, toRefs } from 'vue'
import { listWmsInventoryFlow } from '@/api/ware/wmsInventoryFlow'
import { parseTime } from '@/utils/ruoyi'
import Pagination from '@/components/Pagination'
const props = defineProps({
visible: {
type: Boolean,
default: false
},
inventoryId: {
type: String,
default: ''
},
title: {
type: String,
default: '库存履历'
}
})
const emit = defineEmits(['update:visible', 'update:inventoryId'])
const dialogVisible = ref(false)
const loading = ref(true)
const total = ref(0)
const wmsInventoryFlowList = ref([])
// 监听可见性变化
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 查询参数
const data = reactive({
queryParams: {
pageNum: 1,
pageSize: 10,
inventoryId: props.inventoryId,
operationType: null,
operationTime: null
}
})
const { queryParams } = toRefs(data)
// 监听inventoryId变化,更新查询参数
watch(() => props.inventoryId, (newVal) => {
queryParams.value.inventoryId = newVal
getList()
})
// 监听查询参数中的inventoryId变化,通知父组件
watch(() => queryParams.value.inventoryId, (newVal) => {
if (newVal !== props.inventoryId) {
emit('update:inventoryId', newVal)
}
})
/** 查询库存流水列表 */
function getList() {
loading.value = true
listWmsInventoryFlow(queryParams.value).then(response => {
wmsInventoryFlowList.value = response.rows
total.value = response.total
loading.value = false
})
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
function resetQuery() {
queryParams.value.operationType = null
queryParams.value.operationTime = null
queryParams.value.pageNum = 1
getList()
}
// 暴露方法供外部调用
defineExpose({
handleQuery
})
</script>
<style scoped>
.mb8 {
margin-bottom: 8px;
}
</style>
\ No newline at end of file
<template>
<el-dialog :title="title" v-model="dialogVisible" width="1200px" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px">
<el-form-item label="货架编码" prop="locationCode">
<el-input
v-model="queryParams.locationCode"
placeholder="请输入货架编码"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="货架名称" prop="locationName">
<el-input
v-model="queryParams.locationName"
placeholder="请输入货架名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="所属库区" prop="areaId">
<el-input
v-model="queryParams.areaId"
placeholder="请输入所属库区ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="X坐标" prop="xCoordinate">
<el-input
v-model="queryParams.xCoordinate"
placeholder="请输入X坐标"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="Y坐标" prop="yCoordinate">
<el-input
v-model="queryParams.yCoordinate"
placeholder="请输入Y坐标"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="locationList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="货架编码" align="center" prop="locationCode" />
<el-table-column label="货架名称" align="center" prop="locationName" />
<el-table-column label="所属库区" align="center" prop="areaId" />
<el-table-column label="X坐标" align="center" prop="xCoordinate" />
<el-table-column label="Y坐标" align="center" prop="yCoordinate" />
<el-table-column label="Z坐标" align="center" prop="zCoordinate" />
<el-table-column label="货架状态" align="center" prop="status" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="handleQuery"
/>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleConfirm">确 定</el-button>
<el-button @click="handleCancel">取 消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="LocationSelectDialog">
import { ref, reactive, watch } from 'vue'
import { listWmsLocation } from "@/api/ware/wmsLocation"
const props = defineProps({
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: '选择货架'
}
})
const emit = defineEmits(['update:visible', 'confirm', 'cancel'])
// 本地对话框可见性状态
const dialogVisible = ref(props.visible)
// 监听props变化,同步本地状态
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
// 监听本地状态变化,通知父组件
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 货架列表
const locationList = ref([])
// 加载状态
const loading = ref(false)
// 总条数
const total = ref(0)
// 选中的货架
const selectedLocations = ref([])
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
locationCode: null,
locationName: null,
areaId: null,
xCoordinate: null,
yCoordinate: null,
zCoordinate: null,
status: null
})
// 加载货架列表
const handleQuery = () => {
loading.value = true
listWmsLocation(queryParams).then(response => {
locationList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 重置查询参数
const resetQuery = () => {
queryParams.locationCode = null
queryParams.locationName = null
queryParams.areaId = null
queryParams.xCoordinate = null
queryParams.yCoordinate = null
queryParams.zCoordinate = null
queryParams.status = null
queryParams.pageNum = 1
handleQuery()
}
// 货架选择变化
const handleSelectionChange = (selection) => {
selectedLocations.value = selection
}
// 确认选择
const handleConfirm = () => {
if (selectedLocations.value.length === 0) {
return
}
emit('confirm', selectedLocations.value)
dialogVisible.value = false
}
// 取消选择
const handleCancel = () => {
emit('cancel')
dialogVisible.value = false
}
// 暴露方法
const exposeMethods = {
handleQuery
}
defineExpose(exposeMethods)
</script>
<style scoped>
.dialog-footer {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
</style>
\ No newline at end of file
<template>
<el-dialog :title="title" v-model="dialogVisible" width="1200px" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px">
<el-form-item label="物资编码" prop="materialCode">
<el-input
v-model="queryParams.materialCode"
placeholder="请输入物资编码"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="物资名称" prop="materialName">
<el-input
v-model="queryParams.materialName"
placeholder="请输入物资名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="物资分类" prop="categoryId">
<el-tree-select
v-model="queryParams.categoryId"
:data="materialCategoryOptions"
:props="{ value: 'categoryId', label: 'categoryName', children: 'children' }"
value-key="categoryId"
placeholder="请选择物资分类"
check-strictly
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="规格型号" prop="specification">
<el-input
v-model="queryParams.specification"
placeholder="请输入规格型号"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="计量单位" prop="unit">
<el-input
v-model="queryParams.unit"
placeholder="请输入计量单位"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="materialList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="物资编码" align="center" prop="materialCode" />
<el-table-column label="物资名称" align="center" prop="materialName" />
<el-table-column label="规格型号" align="center" prop="specification" />
<el-table-column label="计量单位" align="center" prop="unit" />
<el-table-column label="生产厂家" align="center" prop="manufacturer" />
<el-table-column label="安全库存" align="center" prop="safetyStock" />
<el-table-column label="状态" align="center" prop="status" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="handleQuery"
/>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleConfirm">确 定</el-button>
<el-button @click="handleCancel">取 消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="MaterialSelectDialog">
import { ref, reactive, watch } from 'vue'
import { listWmsMaterial } from "@/api/ware/wmsMaterial"
import { listWmsMaterialCategory } from "@/api/ware/wmsMaterialCategory"
const props = defineProps({
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: '选择物资'
}
})
const emit = defineEmits(['update:visible', 'confirm', 'cancel'])
// 本地对话框可见性状态
const dialogVisible = ref(props.visible)
// 监听props变化,同步本地状态
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
// 监听本地状态变化,通知父组件
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 物资列表
const materialList = ref([])
// 加载状态
const loading = ref(false)
// 总条数
const total = ref(0)
// 选中的物资
const selectedMaterials = ref([])
// 物资分类树选项
const materialCategoryOptions = ref([])
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
materialCode: null,
materialName: null,
categoryId: null,
specification: null,
unit: null
})
// 加载物资列表
const handleQuery = () => {
loading.value = true
listWmsMaterial(queryParams).then(response => {
materialList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 重置查询参数
const resetQuery = () => {
queryParams.materialCode = null
queryParams.materialName = null
queryParams.categoryId = null
queryParams.specification = null
queryParams.unit = null
queryParams.pageNum = 1
handleQuery()
}
// 物资选择变化
const handleSelectionChange = (selection) => {
selectedMaterials.value = selection
}
// 确认选择
const handleConfirm = () => {
if (selectedMaterials.value.length === 0) {
return
}
emit('confirm', selectedMaterials.value)
dialogVisible.value = false
}
// 取消选择
const handleCancel = () => {
emit('cancel')
dialogVisible.value = false
}
// 查询物资分类下拉树结构
const getTreeselect = () => {
return new Promise((resolve) => {
listWmsMaterialCategory().then(response => {
materialCategoryOptions.value = []
const data = { categoryId: 0, categoryName: '顶级节点', children: [] }
data.children = handleTree(response.data, "categoryId", "parentId")
materialCategoryOptions.value.push(data)
resolve()
})
})
}
// 处理树数据
const handleTree = (data, id, parentId, children) => {
children = children || 'children'
const result = []
const hash = {}
data.forEach((item) => {
hash[item[id]] = item
})
data.forEach((item) => {
const hashParent = hash[item[parentId]]
if (hashParent) {
!hashParent[children] && (hashParent[children] = [])
hashParent[children].push(item)
} else {
result.push(item)
}
})
return result
}
// 暴露方法
const exposeMethods = {
handleQuery,
getTreeselect
}
defineExpose(exposeMethods)
</script>
<style scoped>
.dialog-footer {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
</style>
\ No newline at end of file
<template>
<el-dialog :title="title" v-model="dialogVisible" width="1000px" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px">
<el-form-item label="出库单号" prop="orderNo">
<el-input
v-model="queryParams.orderNo"
placeholder="请输入出库单号"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="客户ID" prop="customerId">
<el-input
v-model="queryParams.customerId"
placeholder="请输入客户ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="单据状态" prop="orderStatus">
<el-input
v-model="queryParams.orderStatus"
placeholder="请输入单据状态"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="outboundOrderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="出库单号" align="center" prop="orderNo" />
<el-table-column label="原入库单号" align="center" prop="originalOrderNo" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="客户ID" align="center" prop="customerId" />
<el-table-column label="出库类型" align="center" prop="outboundType" />
<el-table-column label="总数量" align="center" prop="totalQuantity" />
<el-table-column label="总金额" align="center" prop="totalAmount" />
<el-table-column label="单据状态" align="center" prop="orderStatus" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="handleQuery"
/>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleConfirm">确 定</el-button>
<el-button @click="handleCancel">取 消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="OutboundOrderSelectDialog">
import { ref, reactive, watch } from 'vue'
import { listWmsOutboundOrder } from "@/api/ware/wmsOutboundOrder"
const props = defineProps({
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: '选择出库单'
}
})
const emit = defineEmits(['update:visible', 'confirm', 'cancel'])
// 本地对话框可见性状态
const dialogVisible = ref(props.visible)
// 监听props变化,同步本地状态
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
// 监听本地状态变化,通知父组件
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 出库单列表
const outboundOrderList = ref([])
// 加载状态
const loading = ref(false)
// 总条数
const total = ref(0)
// 选中的出库单
const selectedOutboundOrders = ref([])
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
orderNo: null,
originalOrderNo: null,
warehouseId: null,
customerId: null,
outboundType: null,
orderStatus: null,
})
// 加载出库单列表
const handleQuery = () => {
loading.value = true
listWmsOutboundOrder(queryParams).then(response => {
outboundOrderList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 重置查询参数
const resetQuery = () => {
queryParams.orderNo = null
queryParams.customerId = null
queryParams.orderStatus = null
queryParams.pageNum = 1
handleQuery()
}
// 出库单选择变化
const handleSelectionChange = (selection) => {
selectedOutboundOrders.value = selection
}
// 确认选择
const handleConfirm = () => {
if (selectedOutboundOrders.value.length === 0) {
return
}
emit('confirm', selectedOutboundOrders.value)
dialogVisible.value = false
}
// 取消选择
const handleCancel = () => {
emit('cancel')
dialogVisible.value = false
}
// 暴露方法
defineExpose({
handleQuery
})
</script>
<style scoped>
.dialog-footer {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
</style>
\ No newline at end of file
<template>
<el-dialog :title="title" v-model="dialogVisible" width="1200px" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="100px">
<el-form-item label="供应商编码" prop="supplierCode">
<el-input
v-model="queryParams.supplierCode"
placeholder="请输入供应商编码"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="供应商名称" prop="supplierName">
<el-input
v-model="queryParams.supplierName"
placeholder="请输入供应商名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="联系人" prop="contactPerson">
<el-input
v-model="queryParams.contactPerson"
placeholder="请输入联系人"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="联系电话" prop="contactPhone">
<el-input
v-model="queryParams.contactPhone"
placeholder="请输入联系电话"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="supplierList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="供应商编码" align="center" prop="supplierCode" />
<el-table-column label="供应商名称" align="center" prop="supplierName" />
<el-table-column label="联系人" align="center" prop="contactPerson" />
<el-table-column label="联系电话" align="center" prop="contactPhone" />
<el-table-column label="邮箱" align="center" prop="email" />
<el-table-column label="地址" align="center" prop="address" />
<el-table-column label="状态" align="center" prop="status" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="handleQuery"
/>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleConfirm">确 定</el-button>
<el-button @click="handleCancel">取 消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="SupplierSelectDialog">
import { ref, reactive, watch } from 'vue'
import { listWmsSupplier } from "@/api/ware/wmsSupplier"
const props = defineProps({
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: '选择供应商'
}
})
const emit = defineEmits(['update:visible', 'confirm', 'cancel'])
// 本地对话框可见性状态
const dialogVisible = ref(props.visible)
// 监听props变化,同步本地状态
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
// 监听本地状态变化,通知父组件
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 供应商列表
const supplierList = ref([])
// 加载状态
const loading = ref(false)
// 总条数
const total = ref(0)
// 选中的供应商
const selectedSuppliers = ref([])
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
supplierCode: null,
supplierName: null,
contactPerson: null,
contactPhone: null
})
// 加载供应商列表
const handleQuery = () => {
loading.value = true
listWmsSupplier(queryParams).then(response => {
supplierList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 重置查询参数
const resetQuery = () => {
queryParams.supplierCode = null
queryParams.supplierName = null
queryParams.contactPerson = null
queryParams.contactPhone = null
queryParams.pageNum = 1
handleQuery()
}
// 供应商选择变化
const handleSelectionChange = (selection) => {
selectedSuppliers.value = selection
}
// 确认选择
const handleConfirm = () => {
if (selectedSuppliers.value.length === 0) {
return
}
emit('confirm', selectedSuppliers.value)
dialogVisible.value = false
}
// 取消选择
const handleCancel = () => {
emit('cancel')
dialogVisible.value = false
}
// 暴露方法
defineExpose({
handleQuery
})
</script>
<style scoped>
.dialog-footer {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
</style>
\ No newline at end of file
<template>
<el-dialog :title="title" v-model="dialogVisible" width="1000px" append-to-body>
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="80px">
<el-form-item label="仓库编码" prop="warehouseCode">
<el-input
v-model="queryParams.warehouseCode"
placeholder="请输入仓库编码"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="仓库名称" prop="warehouseName">
<el-input
v-model="queryParams.warehouseName"
placeholder="请输入仓库名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="仓库类型" prop="warehouseType">
<el-input
v-model="queryParams.warehouseType"
placeholder="请输入仓库类型"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-table v-loading="loading" :data="warehouseList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="仓库编码" align="center" prop="warehouseCode" />
<el-table-column label="仓库名称" align="center" prop="warehouseName" />
<el-table-column label="仓库类型" align="center" prop="warehouseType" />
<el-table-column label="面积" align="center" prop="area" />
<el-table-column label="容量" align="center" prop="capacity" />
<el-table-column label="位置" align="center" prop="location" />
<el-table-column label="状态" align="center" prop="status" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="handleQuery"
/>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="handleConfirm">确 定</el-button>
<el-button @click="handleCancel">取 消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup name="WarehouseSelectDialog">
import { ref, reactive, watch } from 'vue'
import { listWmsWarehouse } from "@/api/ware/wmsWarehouse"
const props = defineProps({
visible: {
type: Boolean,
default: false
},
title: {
type: String,
default: '选择仓库'
}
})
const emit = defineEmits(['update:visible', 'confirm', 'cancel'])
// 本地对话框可见性状态
const dialogVisible = ref(props.visible)
// 监听props变化,同步本地状态
watch(() => props.visible, (newVal) => {
dialogVisible.value = newVal
})
// 监听本地状态变化,通知父组件
watch(dialogVisible, (newVal) => {
emit('update:visible', newVal)
})
// 仓库列表
const warehouseList = ref([])
// 加载状态
const loading = ref(false)
// 总条数
const total = ref(0)
// 选中的仓库
const selectedWarehouses = ref([])
// 查询参数
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
warehouseCode: null,
warehouseName: null,
warehouseType: null
})
// 加载仓库列表
const handleQuery = () => {
loading.value = true
listWmsWarehouse(queryParams).then(response => {
warehouseList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 重置查询参数
const resetQuery = () => {
queryParams.warehouseCode = null
queryParams.warehouseName = null
queryParams.warehouseType = null
queryParams.pageNum = 1
handleQuery()
}
// 仓库选择变化
const handleSelectionChange = (selection) => {
selectedWarehouses.value = selection
}
// 确认选择
const handleConfirm = () => {
if (selectedWarehouses.value.length === 0) {
return
}
emit('confirm', selectedWarehouses.value)
dialogVisible.value = false
}
// 取消选择
const handleCancel = () => {
emit('cancel')
dialogVisible.value = false
}
// 暴露方法
defineExpose({
handleQuery
})
</script>
<style scoped>
.dialog-footer {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
</style>
\ No newline at end of file
...@@ -14,7 +14,7 @@ const useSettingsStore = defineStore( ...@@ -14,7 +14,7 @@ const useSettingsStore = defineStore(
{ {
state: () => ({ state: () => ({
title: '', title: '',
theme: storageSetting.theme || '#409EFF', theme: storageSetting.theme || '#6f7a2fff',
sideTheme: storageSetting.sideTheme || sideTheme, sideTheme: storageSetting.sideTheme || sideTheme,
showSettings: showSettings, showSettings: showSettings,
topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<el-col :sm="24" :lg="12" style="padding-left: 20px"> <el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>若依后台管理框架</h2> <h2>若依后台管理框架</h2>
<p> <p>
一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了WMS仓库管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
</p> </p>
<p> <p>
<b>当前版本:</b> <span>v{{ version }}</span> <b>当前版本:</b> <span>v{{ version }}</span>
......
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input <el-input
v-model="queryParams.locationId" v-model="queryParams.locationId"
placeholder="请输入库位ID" placeholder="请输入货架ID"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -136,7 +136,7 @@ ...@@ -136,7 +136,7 @@
<el-table-column label="预警类型" align="center" prop="alertType" /> <el-table-column label="预警类型" align="center" prop="alertType" />
<el-table-column label="物资ID" align="center" prop="materialId" /> <el-table-column label="物资ID" align="center" prop="materialId" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" /> <el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="库位ID" align="center" prop="locationId" /> <el-table-column label="货架ID" align="center" prop="locationId" />
<el-table-column label="当前值" align="center" prop="currentValue" /> <el-table-column label="当前值" align="center" prop="currentValue" />
<el-table-column label="阈值" align="center" prop="thresholdValue" /> <el-table-column label="阈值" align="center" prop="thresholdValue" />
<el-table-column label="预警级别" align="center" prop="alertLevel" /> <el-table-column label="预警级别" align="center" prop="alertLevel" />
...@@ -182,8 +182,8 @@ ...@@ -182,8 +182,8 @@
<el-form-item label="仓库ID" prop="warehouseId"> <el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入仓库ID" /> <el-input v-model="form.warehouseId" placeholder="请输入仓库ID" />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input v-model="form.locationId" placeholder="请输入库位ID" /> <el-input v-model="form.locationId" placeholder="请输入货架ID" />
</el-form-item> </el-form-item>
<el-form-item label="当前值" prop="currentValue"> <el-form-item label="当前值" prop="currentValue">
<el-input v-model="form.currentValue" placeholder="请输入当前值" /> <el-input v-model="form.currentValue" placeholder="请输入当前值" />
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="所属仓库ID" prop="warehouseId"> <el-form-item label="所属仓库" prop="warehouseId">
<el-input <el-input
v-model="queryParams.warehouseId" v-model="queryParams.warehouseId"
placeholder="请输入所属仓库ID" placeholder="请输入所属仓库ID"
...@@ -25,46 +25,6 @@ ...@@ -25,46 +25,6 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="父库区ID" prop="parentId">
<el-input
v-model="queryParams.parentId"
placeholder="请输入父库区ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="温度范围" prop="temperatureRange">
<el-input
v-model="queryParams.temperatureRange"
placeholder="请输入温度范围"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="湿度范围" prop="humidityRange">
<el-input
v-model="queryParams.humidityRange"
placeholder="请输入湿度范围"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="库区容量" prop="capacity">
<el-input
v-model="queryParams.capacity"
placeholder="请输入库区容量"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="显示顺序" prop="sortOrder">
<el-input
v-model="queryParams.sortOrder"
placeholder="请输入显示顺序"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
...@@ -113,35 +73,37 @@ ...@@ -113,35 +73,37 @@
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="wmsAreaList" @selection-change="handleSelectionChange"> <el-table
v-loading="loading"
:data="wmsAreaList"
default-expand-all
@selection-change="handleSelectionChange"
row-key="areaId"
:tree-props="{ children: 'children' }"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="库区ID" align="center" prop="areaId" />
<el-table-column label="库区编码" align="center" prop="areaCode" /> <el-table-column label="库区编码" align="center" prop="areaCode" />
<el-table-column label="库区名称" align="center" prop="areaName" /> <el-table-column label="库区名称" align="center" prop="areaName" />
<el-table-column label="所属仓库ID" align="center" prop="warehouseId" /> <el-table-column label="所属仓库ID" align="center" prop="warehouseId" />
<el-table-column label="父库区ID" align="center" prop="parentId" />
<el-table-column label="库区类型" align="center" prop="areaType" /> <el-table-column label="库区类型" align="center" prop="areaType" />
<el-table-column label="温度范围" align="center" prop="temperatureRange" /> <el-table-column label="温度范围" align="center" prop="temperatureRange" />
<el-table-column label="湿度范围" align="center" prop="humidityRange" /> <el-table-column label="湿度范围" align="center" prop="humidityRange" />
<el-table-column label="库区容量" align="center" prop="capacity" /> <el-table-column label="库区容量" align="center" prop="capacity" />
<el-table-column label="显示顺序" align="center" prop="sortOrder" /> <el-table-column label="排序" align="center" prop="sortOrder" />
<el-table-column label="状态" align="center" prop="status" /> <el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsArea:edit']">修改</el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsArea:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsArea:remove']">删除</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsArea:remove']">删除</el-button>
<el-button link type="primary" icon="Plus" @click="handleAddSub(scope.row)" v-hasPermi="['ware:wmsArea:add']">添加下级</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination
v-show="total>0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改库区信息对话框 --> <!-- 添加或修改库区信息对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="wmsAreaRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="wmsAreaRef" :model="form" :rules="rules" label-width="80px">
...@@ -151,11 +113,24 @@ ...@@ -151,11 +113,24 @@
<el-form-item label="库区名称" prop="areaName"> <el-form-item label="库区名称" prop="areaName">
<el-input v-model="form.areaName" placeholder="请输入库区名称" /> <el-input v-model="form.areaName" placeholder="请输入库区名称" />
</el-form-item> </el-form-item>
<el-form-item label="所属仓库ID" prop="warehouseId"> <el-form-item label="所属仓库" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入所属仓库ID" /> <el-row :gutter="10">
<el-col :span="18">
<el-input v-model="form.warehouseId" placeholder="请选择仓库" readonly />
</el-col>
<el-col :span="6">
<el-button type="primary" @click="openWarehouseSelect">选择仓库</el-button>
</el-col>
</el-row>
</el-form-item> </el-form-item>
<el-form-item label="父库区ID" prop="parentId"> <el-form-item label="父库区" prop="parentId">
<el-input v-model="form.parentId" placeholder="请输入父库区ID" /> <el-cascader
v-model="form.parentId"
:options="wmsAreaOptions"
:props="{ value: 'areaId', label: 'areaName', checkStrictly: true }"
placeholder="请选择父库区"
clearable
/>
</el-form-item> </el-form-item>
<el-form-item label="温度范围" prop="temperatureRange"> <el-form-item label="温度范围" prop="temperatureRange">
<el-input v-model="form.temperatureRange" placeholder="请输入温度范围" /> <el-input v-model="form.temperatureRange" placeholder="请输入温度范围" />
...@@ -166,7 +141,7 @@ ...@@ -166,7 +141,7 @@
<el-form-item label="库区容量" prop="capacity"> <el-form-item label="库区容量" prop="capacity">
<el-input v-model="form.capacity" placeholder="请输入库区容量" /> <el-input v-model="form.capacity" placeholder="请输入库区容量" />
</el-form-item> </el-form-item>
<el-form-item label="显示顺序" prop="sortOrder"> <el-form-item label="序" prop="sortOrder">
<el-input v-model="form.sortOrder" placeholder="请输入显示顺序" /> <el-input v-model="form.sortOrder" placeholder="请输入显示顺序" />
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -177,14 +152,26 @@ ...@@ -177,14 +152,26 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 仓库选择对话框组件 -->
<WarehouseSelectDialog
ref="warehouseSelectDialogRef"
v-model:visible="warehouseDialogVisible"
title="选择仓库"
@confirm="handleWarehouseConfirm"
/>
</div> </div>
</template> </template>
<script setup name="WmsArea"> <script setup name="WmsArea">
import { listWmsArea, getWmsArea, delWmsArea, addWmsArea, updateWmsArea } from "@/api/ware/wmsArea" import { listWmsArea, getWmsArea, delWmsArea, addWmsArea, updateWmsArea } from "@/api/ware/wmsArea"
import WarehouseSelectDialog from "@/components/WarehouseSelectDialog.vue"
import { handleTree } from "@/utils/ruoyi"
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const {sys_normal_disable} = proxy.useDict('sys_normal_disable')
const wmsAreaList = ref([]) const wmsAreaList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
...@@ -195,11 +182,19 @@ const multiple = ref(true) ...@@ -195,11 +182,19 @@ const multiple = ref(true)
const total = ref(0) const total = ref(0)
const title = ref("") const title = ref("")
// 仓库选择对话框状态
const warehouseDialogVisible = ref(false)
// 仓库选择对话框实例引用
const warehouseSelectDialogRef = ref(null)
// 库区下拉树选项
const wmsAreaOptions = ref([])
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 100,
areaCode: null, areaCode: null,
areaName: null, areaName: null,
warehouseId: null, warehouseId: null,
...@@ -219,7 +214,7 @@ const data = reactive({ ...@@ -219,7 +214,7 @@ const data = reactive({
{ required: true, message: "库区名称不能为空", trigger: "blur" } { required: true, message: "库区名称不能为空", trigger: "blur" }
], ],
warehouseId: [ warehouseId: [
{ required: true, message: "所属仓库ID不能为空", trigger: "blur" } { required: true, message: "所属仓库ID不能为空", trigger: "change" }
], ],
} }
}) })
...@@ -230,7 +225,11 @@ const { queryParams, form, rules } = toRefs(data) ...@@ -230,7 +225,11 @@ const { queryParams, form, rules } = toRefs(data)
function getList() { function getList() {
loading.value = true loading.value = true
listWmsArea(queryParams.value).then(response => { listWmsArea(queryParams.value).then(response => {
wmsAreaList.value = response.rows // 将扁平数据转换为树形结构
wmsAreaList.value = handleTree(response.rows, 'areaId', 'parentId')
wmsAreaOptions.value = [
{ areaId: 0, areaName: '顶级节点', children: wmsAreaList.value }
]
total.value = response.total total.value = response.total
loading.value = false loading.value = false
}) })
...@@ -290,8 +289,17 @@ function handleAdd() { ...@@ -290,8 +289,17 @@ function handleAdd() {
title.value = "添加库区信息" title.value = "添加库区信息"
} }
/** 添加下级按钮操作 */
function handleAddSub(row) {
reset()
// 设置父库区ID
form.value.parentId = row.areaId
open.value = true
title.value = "添加下级库区"
}
/** 修改按钮操作 */ /** 修改按钮操作 */
function handleUpdate(row) { async function handleUpdate(row) {
reset() reset()
const _areaId = row.areaId || ids.value const _areaId = row.areaId || ids.value
getWmsArea(_areaId).then(response => { getWmsArea(_areaId).then(response => {
...@@ -340,5 +348,22 @@ function handleExport() { ...@@ -340,5 +348,22 @@ function handleExport() {
}, `wmsArea_${new Date().getTime()}.xlsx`) }, `wmsArea_${new Date().getTime()}.xlsx`)
} }
/** 打开仓库选择对话框 */
function openWarehouseSelect() {
warehouseDialogVisible.value = true
if (warehouseSelectDialogRef.value) {
warehouseSelectDialogRef.value.handleQuery()
}
}
/** 处理仓库选择结果 */
function handleWarehouseConfirm(selectedWarehouses) {
if (selectedWarehouses.length > 0) {
const warehouse = selectedWarehouses[0]
form.value.warehouseId = warehouse.warehouseId
// 可以根据需要添加更多仓库信息字段
}
}
getList() getList()
</script> </script>
\ No newline at end of file
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="借调单号" prop="orderNo"> <el-form-item label="借调单号" prop="orderNo">
<el-input <el-input
v-model="queryParams.orderNo" v-model="queryParams.orderNo"
...@@ -123,11 +123,10 @@ ...@@ -123,11 +123,10 @@
<el-table v-loading="loading" :data="wmsBorrowOrderList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="wmsBorrowOrderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="借调单ID" align="center" prop="orderId" /> <el-table-column label="借调单号" align="center" prop="orderNo" width="150" />
<el-table-column label="借调单号" align="center" prop="orderNo" /> <el-table-column label="借调类型" align="center" prop="borrowType" width="100" />
<el-table-column label="借调类型" align="center" prop="borrowType" /> <el-table-column label="物资ID" align="center" prop="materialId" width="100" />
<el-table-column label="物资ID" align="center" prop="materialId" /> <el-table-column label="仓库ID" align="center" prop="warehouseId" width="100" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="数量" align="center" prop="quantity" /> <el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="借用人" align="center" prop="borrowerId" /> <el-table-column label="借用人" align="center" prop="borrowerId" />
<el-table-column label="借用部门" align="center" prop="borrowDeptId" /> <el-table-column label="借用部门" align="center" prop="borrowDeptId" />
...@@ -149,10 +148,11 @@ ...@@ -149,10 +148,11 @@
<el-table-column label="单据状态" align="center" prop="orderStatus" /> <el-table-column label="单据状态" align="center" prop="orderStatus" />
<el-table-column label="审批状态" align="center" prop="approvalStatus" /> <el-table-column label="审批状态" align="center" prop="approvalStatus" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsBorrowOrder:edit']">修改</el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsBorrowOrder:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsBorrowOrder:remove']">删除</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsBorrowOrder:remove']">删除</el-button>
<el-button link type="success" icon="Check" @click="handleReturn(scope.row)" v-hasPermi="['ware:wmsBorrowOrder:return']">归还</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -167,15 +167,29 @@ ...@@ -167,15 +167,29 @@
<!-- 添加或修改借调管理对话框 --> <!-- 添加或修改借调管理对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="wmsBorrowOrderRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="wmsBorrowOrderRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="借调单号" prop="orderNo"> <el-form-item label="借调单号" prop="orderNo">
<el-input v-model="form.orderNo" placeholder="请输入借调单号" /> <el-input v-model="form.orderNo" placeholder="请输入借调单号" />
</el-form-item> </el-form-item>
<el-form-item label="物资ID" prop="materialId"> <el-form-item label="物资ID" prop="materialId">
<el-input v-model="form.materialId" placeholder="请输入物资ID" /> <el-row :gutter="10">
<el-col :span="18">
<el-input v-model="form.materialId" placeholder="请选择物资" readonly />
</el-col>
<el-col :span="6">
<el-button type="primary" @click="openMaterialSelect">选择物资</el-button>
</el-col>
</el-row>
</el-form-item> </el-form-item>
<el-form-item label="仓库ID" prop="warehouseId"> <el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入仓库ID" /> <el-row :gutter="10">
<el-col :span="18">
<el-input v-model="form.warehouseId" placeholder="请选择仓库" readonly />
</el-col>
<el-col :span="6">
<el-button type="primary" @click="openWarehouseSelect">选择仓库</el-button>
</el-col>
</el-row>
</el-form-item> </el-form-item>
<el-form-item label="数量" prop="quantity"> <el-form-item label="数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入数量" /> <el-input v-model="form.quantity" placeholder="请输入数量" />
...@@ -202,14 +216,6 @@ ...@@ -202,14 +216,6 @@
placeholder="请选择预计归还时间"> placeholder="请选择预计归还时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="实际归还时间" prop="actualReturnTime">
<el-date-picker clearable
v-model="form.actualReturnTime"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择实际归还时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
...@@ -221,11 +227,29 @@ ...@@ -221,11 +227,29 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 物资选择对话框组件 -->
<MaterialSelectDialog
ref="materialSelectDialogRef"
v-model:visible="materialDialogVisible"
title="选择物资"
@confirm="handleMaterialConfirm"
/>
<!-- 仓库选择对话框组件 -->
<WarehouseSelectDialog
ref="warehouseSelectDialogRef"
v-model:visible="warehouseDialogVisible"
title="选择仓库"
@confirm="handleWarehouseConfirm"
/>
</div> </div>
</template> </template>
<script setup name="WmsBorrowOrder"> <script setup name="WmsBorrowOrder">
import { listWmsBorrowOrder, getWmsBorrowOrder, delWmsBorrowOrder, addWmsBorrowOrder, updateWmsBorrowOrder } from "@/api/ware/wmsBorrowOrder" import { listWmsBorrowOrder, getWmsBorrowOrder, delWmsBorrowOrder, addWmsBorrowOrder, updateWmsBorrowOrder } from "@/api/ware/wmsBorrowOrder"
import MaterialSelectDialog from "@/components/MaterialSelectDialog.vue"
import WarehouseSelectDialog from "@/components/WarehouseSelectDialog.vue"
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -239,6 +263,16 @@ const multiple = ref(true) ...@@ -239,6 +263,16 @@ const multiple = ref(true)
const total = ref(0) const total = ref(0)
const title = ref("") const title = ref("")
// 物资选择对话框状态
const materialDialogVisible = ref(false)
// 物资选择对话框实例引用
const materialSelectDialogRef = ref(null)
// 仓库选择对话框状态
const warehouseDialogVisible = ref(false)
// 仓库选择对话框实例引用
const warehouseSelectDialogRef = ref(null)
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
...@@ -265,10 +299,10 @@ const data = reactive({ ...@@ -265,10 +299,10 @@ const data = reactive({
{ required: true, message: "借调类型不能为空", trigger: "change" } { required: true, message: "借调类型不能为空", trigger: "change" }
], ],
materialId: [ materialId: [
{ required: true, message: "物资ID不能为空", trigger: "blur" } { required: true, message: "物资ID不能为空", trigger: "change" }
], ],
warehouseId: [ warehouseId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" } { required: true, message: "仓库ID不能为空", trigger: "change" }
], ],
quantity: [ quantity: [
{ required: true, message: "数量不能为空", trigger: "blur" } { required: true, message: "数量不能为空", trigger: "blur" }
...@@ -302,7 +336,7 @@ function reset() { ...@@ -302,7 +336,7 @@ function reset() {
form.value = { form.value = {
orderId: null, orderId: null,
orderNo: null, orderNo: null,
borrowType: null, borrowType: '0',
materialId: null, materialId: null,
warehouseId: null, warehouseId: null,
quantity: null, quantity: null,
...@@ -398,5 +432,54 @@ function handleExport() { ...@@ -398,5 +432,54 @@ function handleExport() {
}, `wmsBorrowOrder_${new Date().getTime()}.xlsx`) }, `wmsBorrowOrder_${new Date().getTime()}.xlsx`)
} }
/** 打开物资选择对话框 */
function openMaterialSelect() {
materialDialogVisible.value = true
if (materialSelectDialogRef.value) {
materialSelectDialogRef.value.handleQuery()
}
}
/** 处理物资选择结果 */
function handleMaterialConfirm(selectedMaterials) {
if (selectedMaterials.length > 0) {
const material = selectedMaterials[0]
form.value.materialId = material.materialId
// 可以根据需要添加更多物资信息字段
}
}
/** 打开仓库选择对话框 */
function openWarehouseSelect() {
warehouseDialogVisible.value = true
if (warehouseSelectDialogRef.value) {
warehouseSelectDialogRef.value.handleQuery()
}
}
/** 处理仓库选择结果 */
function handleWarehouseConfirm(selectedWarehouses) {
if (selectedWarehouses.length > 0) {
const warehouse = selectedWarehouses[0]
form.value.warehouseId = warehouse.warehouseId
// 可以根据需要添加更多仓库信息字段
}
}
/** 归还按钮操作 */
function handleReturn(row) {
proxy.$modal.confirm('是否确认归还该借调单?').then(function() {
const updateData = {
orderId: row.orderId,
actualReturnTime: new Date().toISOString().split('T')[0], // 设置为当前日期
orderStatus: '已归还' // 假设"已归还"是订单状态的一个有效值
}
return updateWmsBorrowOrder(updateData)
}).then(() => {
getList()
proxy.$modal.msgSuccess("归还成功")
}).catch(() => {})
}
getList() getList()
</script> </script>
...@@ -97,7 +97,11 @@ ...@@ -97,7 +97,11 @@
<el-table-column label="联系人" align="center" prop="contactPerson" /> <el-table-column label="联系人" align="center" prop="contactPerson" />
<el-table-column label="联系电话" align="center" prop="contactPhone" /> <el-table-column label="联系电话" align="center" prop="contactPhone" />
<el-table-column label="地址" align="center" prop="address" /> <el-table-column label="地址" align="center" prop="address" />
<el-table-column label="状态" align="center" prop="status" /> <el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
...@@ -152,6 +156,8 @@ import { listWmsCustomer, getWmsCustomer, delWmsCustomer, addWmsCustomer, update ...@@ -152,6 +156,8 @@ import { listWmsCustomer, getWmsCustomer, delWmsCustomer, addWmsCustomer, update
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { sys_normal_disable } = proxy.useDict('sys_normal_disable')
const wmsCustomerList = ref([]) const wmsCustomerList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
......
...@@ -97,10 +97,10 @@ ...@@ -97,10 +97,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="存储库位" prop="storageLocation"> <el-form-item label="存储货架" prop="storageLocation">
<el-input <el-input
v-model="queryParams.storageLocation" v-model="queryParams.storageLocation"
placeholder="请输入存储库位" placeholder="请输入存储货架"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -178,7 +178,7 @@ ...@@ -178,7 +178,7 @@
<el-table-column label="质检数量" align="center" prop="checkQuantity" /> <el-table-column label="质检数量" align="center" prop="checkQuantity" />
<el-table-column label="不合格数量" align="center" prop="unqualifiedQuantity" /> <el-table-column label="不合格数量" align="center" prop="unqualifiedQuantity" />
<el-table-column label="不合格原因" align="center" prop="unqualifiedReason" /> <el-table-column label="不合格原因" align="center" prop="unqualifiedReason" />
<el-table-column label="存储库位" align="center" prop="storageLocation" /> <el-table-column label="存储货架" align="center" prop="storageLocation" />
<el-table-column label="上架状态" align="center" prop="putawayStatus" /> <el-table-column label="上架状态" align="center" prop="putawayStatus" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
...@@ -249,8 +249,8 @@ ...@@ -249,8 +249,8 @@
<el-form-item label="不合格原因" prop="unqualifiedReason"> <el-form-item label="不合格原因" prop="unqualifiedReason">
<el-input v-model="form.unqualifiedReason" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.unqualifiedReason" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
<el-form-item label="存储库位" prop="storageLocation"> <el-form-item label="存储货架" prop="storageLocation">
<el-input v-model="form.storageLocation" placeholder="请输入存储库位" /> <el-input v-model="form.storageLocation" placeholder="请输入存储货架" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
......
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input <el-input
v-model="queryParams.locationId" v-model="queryParams.locationId"
placeholder="请输入库位ID" placeholder="请输入货架ID"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -159,7 +159,7 @@ ...@@ -159,7 +159,7 @@
<el-table-column label="库存ID" align="center" prop="inventoryId" /> <el-table-column label="库存ID" align="center" prop="inventoryId" />
<el-table-column label="物资ID" align="center" prop="materialId" /> <el-table-column label="物资ID" align="center" prop="materialId" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" /> <el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="库位ID" align="center" prop="locationId" /> <el-table-column label="货架ID" align="center" prop="locationId" />
<el-table-column label="流水类型" align="center" prop="flowType" /> <el-table-column label="流水类型" align="center" prop="flowType" />
<el-table-column label="流水单号" align="center" prop="flowCode" /> <el-table-column label="流水单号" align="center" prop="flowCode" />
<el-table-column label="批次号" align="center" prop="batchNo" /> <el-table-column label="批次号" align="center" prop="batchNo" />
...@@ -203,8 +203,8 @@ ...@@ -203,8 +203,8 @@
<el-form-item label="仓库ID" prop="warehouseId"> <el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入仓库ID" /> <el-input v-model="form.warehouseId" placeholder="请输入仓库ID" />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input v-model="form.locationId" placeholder="请输入库位ID" /> <el-input v-model="form.locationId" placeholder="请输入货架ID" />
</el-form-item> </el-form-item>
<el-form-item label="流水单号" prop="flowCode"> <el-form-item label="流水单号" prop="flowCode">
<el-input v-model="form.flowCode" placeholder="请输入流水单号" /> <el-input v-model="form.flowCode" placeholder="请输入流水单号" />
......
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input <el-input
v-model="queryParams.locationId" v-model="queryParams.locationId"
placeholder="请输入库位ID" placeholder="请输入货架ID"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -166,7 +166,7 @@ ...@@ -166,7 +166,7 @@
<el-table-column label="盘点结果ID" align="center" prop="resultId" /> <el-table-column label="盘点结果ID" align="center" prop="resultId" />
<el-table-column label="盘点任务ID" align="center" prop="taskId" /> <el-table-column label="盘点任务ID" align="center" prop="taskId" />
<el-table-column label="物资ID" align="center" prop="materialId" /> <el-table-column label="物资ID" align="center" prop="materialId" />
<el-table-column label="库位ID" align="center" prop="locationId" /> <el-table-column label="货架ID" align="center" prop="locationId" />
<el-table-column label="批次号" align="center" prop="batchNo" /> <el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="系统数量" align="center" prop="systemQuantity" /> <el-table-column label="系统数量" align="center" prop="systemQuantity" />
<el-table-column label="实际数量" align="center" prop="actualQuantity" /> <el-table-column label="实际数量" align="center" prop="actualQuantity" />
...@@ -209,8 +209,8 @@ ...@@ -209,8 +209,8 @@
<el-form-item label="物资ID" prop="materialId"> <el-form-item label="物资ID" prop="materialId">
<el-input v-model="form.materialId" placeholder="请输入物资ID" /> <el-input v-model="form.materialId" placeholder="请输入物资ID" />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input v-model="form.locationId" placeholder="请输入库位ID" /> <el-input v-model="form.locationId" placeholder="请输入货架ID" />
</el-form-item> </el-form-item>
<el-form-item label="批次号" prop="batchNo"> <el-form-item label="批次号" prop="batchNo">
<el-input v-model="form.batchNo" placeholder="请输入批次号" /> <el-input v-model="form.batchNo" placeholder="请输入批次号" />
......
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
<el-table-column label="盘点计划ID" align="center" prop="planId" /> <el-table-column label="盘点计划ID" align="center" prop="planId" />
<el-table-column label="盘点任务编号" align="center" prop="taskNo" /> <el-table-column label="盘点任务编号" align="center" prop="taskNo" />
<el-table-column label="库区ID" align="center" prop="areaId" /> <el-table-column label="库区ID" align="center" prop="areaId" />
<el-table-column label="库位范围" align="center" prop="locationRange" /> <el-table-column label="货架范围" align="center" prop="locationRange" />
<el-table-column label="负责人ID" align="center" prop="assigneeId" /> <el-table-column label="负责人ID" align="center" prop="assigneeId" />
<el-table-column label="协助人IDs" align="center" prop="assistantIds" /> <el-table-column label="协助人IDs" align="center" prop="assistantIds" />
<el-table-column label="任务状态" align="center" prop="taskStatus" /> <el-table-column label="任务状态" align="center" prop="taskStatus" />
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
<el-form-item label="库区ID" prop="areaId"> <el-form-item label="库区ID" prop="areaId">
<el-input v-model="form.areaId" placeholder="请输入库区ID" /> <el-input v-model="form.areaId" placeholder="请输入库区ID" />
</el-form-item> </el-form-item>
<el-form-item label="库位范围" prop="locationRange"> <el-form-item label="货架范围" prop="locationRange">
<el-input v-model="form.locationRange" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.locationRange" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
<el-form-item label="负责人ID" prop="assigneeId"> <el-form-item label="负责人ID" prop="assigneeId">
......
...@@ -17,38 +17,7 @@ ...@@ -17,38 +17,7 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="父分类ID" prop="parentId">
<el-input
v-model="queryParams.parentId"
placeholder="请输入父分类ID"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="祖级列表" prop="ancestors">
<el-input
v-model="queryParams.ancestors"
placeholder="请输入祖级列表"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="分类级别" prop="categoryLevel">
<el-input
v-model="queryParams.categoryLevel"
placeholder="请输入分类级别"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="显示顺序" prop="sortOrder">
<el-input
v-model="queryParams.sortOrder"
placeholder="请输入显示顺序"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
...@@ -86,11 +55,13 @@ ...@@ -86,11 +55,13 @@
> >
<el-table-column label="分类编码" prop="categoryCode" /> <el-table-column label="分类编码" prop="categoryCode" />
<el-table-column label="分类名称" align="center" prop="categoryName" /> <el-table-column label="分类名称" align="center" prop="categoryName" />
<el-table-column label="父分类ID" align="center" prop="parentId" />
<el-table-column label="祖级列表" align="center" prop="ancestors" />
<el-table-column label="分类级别" align="center" prop="categoryLevel" /> <el-table-column label="分类级别" align="center" prop="categoryLevel" />
<el-table-column label="显示顺序" align="center" prop="sortOrder" /> <el-table-column label="排序" align="center" prop="sortOrder" />
<el-table-column label="状态" align="center" prop="status" /> <el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="属性模板" align="center" prop="attributeTemplate" /> <el-table-column label="属性模板" align="center" prop="attributeTemplate" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
...@@ -123,7 +94,7 @@ ...@@ -123,7 +94,7 @@
<el-form-item label="分类级别" prop="categoryLevel"> <el-form-item label="分类级别" prop="categoryLevel">
<el-input v-model="form.categoryLevel" placeholder="请输入分类级别" /> <el-input v-model="form.categoryLevel" placeholder="请输入分类级别" />
</el-form-item> </el-form-item>
<el-form-item label="显示顺序" prop="sortOrder"> <el-form-item label="序" prop="sortOrder">
<el-input v-model="form.sortOrder" placeholder="请输入显示顺序" /> <el-input v-model="form.sortOrder" placeholder="请输入显示顺序" />
</el-form-item> </el-form-item>
<el-form-item label="属性模板" prop="attributeTemplate"> <el-form-item label="属性模板" prop="attributeTemplate">
...@@ -146,6 +117,8 @@ import { getCurrentInstance } from 'vue' ...@@ -146,6 +117,8 @@ import { getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { sys_normal_disable } = proxy.useDict('sys_normal_disable')
const wmsMaterialCategoryList = ref([]) const wmsMaterialCategoryList = ref([])
const wmsMaterialCategoryOptions = ref([]) const wmsMaterialCategoryOptions = ref([])
const open = ref(false) const open = ref(false)
......
...@@ -41,10 +41,10 @@ ...@@ -41,10 +41,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input <el-input
v-model="queryParams.locationId" v-model="queryParams.locationId"
placeholder="请输入库位ID" placeholder="请输入货架ID"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -315,7 +315,7 @@ ...@@ -315,7 +315,7 @@
<el-table-column label="业务单号" align="center" prop="businessNo" /> <el-table-column label="业务单号" align="center" prop="businessNo" />
<el-table-column label="物资ID" align="center" prop="materialId" /> <el-table-column label="物资ID" align="center" prop="materialId" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" /> <el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="库位ID" align="center" prop="locationId" /> <el-table-column label="货架ID" align="center" prop="locationId" />
<el-table-column label="批次号" align="center" prop="batchNo" /> <el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="操作数量" align="center" prop="operationQuantity" /> <el-table-column label="操作数量" align="center" prop="operationQuantity" />
<el-table-column label="操作时间" align="center" prop="operationTime" width="180"> <el-table-column label="操作时间" align="center" prop="operationTime" width="180">
...@@ -391,8 +391,8 @@ ...@@ -391,8 +391,8 @@
<el-form-item label="仓库ID" prop="warehouseId"> <el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入仓库ID" /> <el-input v-model="form.warehouseId" placeholder="请输入仓库ID" />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input v-model="form.locationId" placeholder="请输入库位ID" /> <el-input v-model="form.locationId" placeholder="请输入货架ID" />
</el-form-item> </el-form-item>
<el-form-item label="批次号" prop="batchNo"> <el-form-item label="批次号" prop="batchNo">
<el-input v-model="form.batchNo" placeholder="请输入批次号" /> <el-input v-model="form.batchNo" placeholder="请输入批次号" />
......
...@@ -65,10 +65,10 @@ ...@@ -65,10 +65,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="拣货库位" prop="pickingLocation"> <el-form-item label="拣货货架" prop="pickingLocation">
<el-input <el-input
v-model="queryParams.pickingLocation" v-model="queryParams.pickingLocation"
placeholder="请输入拣货库位" placeholder="请输入拣货货架"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -156,7 +156,7 @@ ...@@ -156,7 +156,7 @@
<el-table-column label="单价" align="center" prop="unitPrice" /> <el-table-column label="单价" align="center" prop="unitPrice" />
<el-table-column label="金额" align="center" prop="amount" /> <el-table-column label="金额" align="center" prop="amount" />
<el-table-column label="批次号" align="center" prop="batchNo" /> <el-table-column label="批次号" align="center" prop="batchNo" />
<el-table-column label="拣货库位" align="center" prop="pickingLocation" /> <el-table-column label="拣货货架" align="center" prop="pickingLocation" />
<el-table-column label="已拣数量" align="center" prop="pickingQuantity" /> <el-table-column label="已拣数量" align="center" prop="pickingQuantity" />
<el-table-column label="拣货状态" align="center" prop="pickingStatus" /> <el-table-column label="拣货状态" align="center" prop="pickingStatus" />
<el-table-column label="复核数量" align="center" prop="checkQuantity" /> <el-table-column label="复核数量" align="center" prop="checkQuantity" />
...@@ -207,8 +207,8 @@ ...@@ -207,8 +207,8 @@
<el-form-item label="批次号" prop="batchNo"> <el-form-item label="批次号" prop="batchNo">
<el-input v-model="form.batchNo" placeholder="请输入批次号" /> <el-input v-model="form.batchNo" placeholder="请输入批次号" />
</el-form-item> </el-form-item>
<el-form-item label="拣货库位" prop="pickingLocation"> <el-form-item label="拣货货架" prop="pickingLocation">
<el-input v-model="form.pickingLocation" placeholder="请输入拣货库位" /> <el-input v-model="form.pickingLocation" placeholder="请输入拣货货架" />
</el-form-item> </el-form-item>
<el-form-item label="已拣数量" prop="pickingQuantity"> <el-form-item label="已拣数量" prop="pickingQuantity">
<el-input v-model="form.pickingQuantity" placeholder="请输入已拣数量" /> <el-input v-model="form.pickingQuantity" placeholder="请输入已拣数量" />
......
...@@ -115,9 +115,8 @@ ...@@ -115,9 +115,8 @@
<el-table v-loading="loading" :data="wmsReturnOrderList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="wmsReturnOrderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="退库单ID" align="center" prop="orderId" /> <el-table-column label="退库单号" align="center" prop="orderNo" width="150" />
<el-table-column label="退库单号" align="center" prop="orderNo" /> <el-table-column label="原出库单号" align="center" prop="outboundOrderNo" width="150" />
<el-table-column label="原出库单号" align="center" prop="outboundOrderNo" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" /> <el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="退库原因" align="center" prop="returnReason" /> <el-table-column label="退库原因" align="center" prop="returnReason" />
<el-table-column label="退库类型" align="center" prop="returnType" /> <el-table-column label="退库类型" align="center" prop="returnType" />
...@@ -133,7 +132,7 @@ ...@@ -133,7 +132,7 @@
<el-table-column label="质检状态" align="center" prop="qualityStatus" /> <el-table-column label="质检状态" align="center" prop="qualityStatus" />
<el-table-column label="审批状态" align="center" prop="approvalStatus" /> <el-table-column label="审批状态" align="center" prop="approvalStatus" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsReturnOrder:edit']">修改</el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['ware:wmsReturnOrder:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsReturnOrder:remove']">删除</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['ware:wmsReturnOrder:remove']">删除</el-button>
...@@ -156,13 +155,27 @@ ...@@ -156,13 +155,27 @@
<el-input v-model="form.orderNo" placeholder="请输入退库单号" /> <el-input v-model="form.orderNo" placeholder="请输入退库单号" />
</el-form-item> </el-form-item>
<el-form-item label="原出库单号" prop="outboundOrderNo"> <el-form-item label="原出库单号" prop="outboundOrderNo">
<el-input v-model="form.outboundOrderNo" placeholder="请输入原出库单号" /> <el-row :gutter="10">
<el-col :span="18">
<el-input v-model="form.outboundOrderNo" placeholder="请选择原出库单号" readonly />
</el-col>
<el-col :span="6">
<el-button type="primary" @click="openOutboundOrderSelect">选择出库单</el-button>
</el-col>
</el-row>
</el-form-item> </el-form-item>
<el-form-item label="仓库ID" prop="warehouseId"> <el-form-item label="仓库ID" prop="warehouseId">
<el-input v-model="form.warehouseId" placeholder="请输入仓库ID" /> <el-row :gutter="10">
<el-col :span="18">
<el-input v-model="form.warehouseId" placeholder="请选择仓库" readonly />
</el-col>
<el-col :span="6">
<el-button type="primary" @click="openWarehouseSelect">选择仓库</el-button>
</el-col>
</el-row>
</el-form-item> </el-form-item>
<el-form-item label="退库原因" prop="returnReason"> <el-form-item label="退库原因" prop="returnReason">
<el-input v-model="form.returnReason" placeholder="请输入退库原因" /> <el-input type="textarea" v-model="form.returnReason" placeholder="请输入退库原因" />
</el-form-item> </el-form-item>
<el-form-item label="总数量" prop="totalQuantity"> <el-form-item label="总数量" prop="totalQuantity">
<el-input v-model="form.totalQuantity" placeholder="请输入总数量" /> <el-input v-model="form.totalQuantity" placeholder="请输入总数量" />
...@@ -192,11 +205,29 @@ ...@@ -192,11 +205,29 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 仓库选择对话框组件 -->
<WarehouseSelectDialog
ref="warehouseSelectDialogRef"
v-model:visible="warehouseDialogVisible"
title="选择仓库"
@confirm="handleWarehouseConfirm"
/>
<!-- 出库单选择对话框组件 -->
<OutboundOrderSelectDialog
ref="outboundOrderSelectDialogRef"
v-model:visible="outboundOrderDialogVisible"
title="选择出库单"
@confirm="handleOutboundOrderConfirm"
/>
</div> </div>
</template> </template>
<script setup name="WmsReturnOrder"> <script setup name="WmsReturnOrder">
import { listWmsReturnOrder, getWmsReturnOrder, delWmsReturnOrder, addWmsReturnOrder, updateWmsReturnOrder } from "@/api/ware/wmsReturnOrder" import { listWmsReturnOrder, getWmsReturnOrder, delWmsReturnOrder, addWmsReturnOrder, updateWmsReturnOrder } from "@/api/ware/wmsReturnOrder"
import WarehouseSelectDialog from "@/components/WarehouseSelectDialog.vue"
import OutboundOrderSelectDialog from "@/components/OutboundOrderSelectDialog.vue"
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -210,6 +241,16 @@ const multiple = ref(true) ...@@ -210,6 +241,16 @@ const multiple = ref(true)
const total = ref(0) const total = ref(0)
const title = ref("") const title = ref("")
// 仓库选择对话框状态
const warehouseDialogVisible = ref(false)
// 仓库选择对话框实例引用
const warehouseSelectDialogRef = ref(null)
// 出库单选择对话框状态
const outboundOrderDialogVisible = ref(false)
// 出库单选择对话框实例引用
const outboundOrderSelectDialogRef = ref(null)
const data = reactive({ const data = reactive({
form: {}, form: {},
queryParams: { queryParams: {
...@@ -232,8 +273,11 @@ const data = reactive({ ...@@ -232,8 +273,11 @@ const data = reactive({
orderNo: [ orderNo: [
{ required: true, message: "退库单号不能为空", trigger: "blur" } { required: true, message: "退库单号不能为空", trigger: "blur" }
], ],
outboundOrderNo: [
{ required: true, message: "原出库单号不能为空", trigger: "change" }
],
warehouseId: [ warehouseId: [
{ required: true, message: "仓库ID不能为空", trigger: "blur" } { required: true, message: "仓库ID不能为空", trigger: "change" }
], ],
returnReason: [ returnReason: [
{ required: true, message: "退库原因不能为空", trigger: "blur" } { required: true, message: "退库原因不能为空", trigger: "blur" }
...@@ -360,5 +404,40 @@ function handleExport() { ...@@ -360,5 +404,40 @@ function handleExport() {
}, `wmsReturnOrder_${new Date().getTime()}.xlsx`) }, `wmsReturnOrder_${new Date().getTime()}.xlsx`)
} }
/** 打开仓库选择对话框 */
function openWarehouseSelect() {
warehouseDialogVisible.value = true
if (warehouseSelectDialogRef.value) {
warehouseSelectDialogRef.value.handleQuery()
}
}
/** 处理仓库选择结果 */
function handleWarehouseConfirm(selectedWarehouses) {
if (selectedWarehouses.length > 0) {
const warehouse = selectedWarehouses[0]
form.value.warehouseId = warehouse.warehouseId
// 可以根据需要添加更多仓库信息字段
}
}
/** 打开出库单选择对话框 */
function openOutboundOrderSelect() {
outboundOrderDialogVisible.value = true
if (outboundOrderSelectDialogRef.value) {
outboundOrderSelectDialogRef.value.handleQuery()
}
}
/** 处理出库单选择结果 */
function handleOutboundOrderConfirm(selectedOrders) {
if (selectedOrders.length > 0) {
const order = selectedOrders[0]
form.value.outboundOrderNo = order.orderNo
// 可以根据需要添加更多出库单信息字段,比如自动填充仓库ID
form.value.warehouseId = order.warehouseId
}
}
getList() getList()
</script> </script>
...@@ -33,10 +33,10 @@ ...@@ -33,10 +33,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input <el-input
v-model="queryParams.locationId" v-model="queryParams.locationId"
placeholder="请输入库位ID" placeholder="请输入货架ID"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -192,7 +192,7 @@ ...@@ -192,7 +192,7 @@
<el-table-column label="读写器ID" align="center" prop="readerId" /> <el-table-column label="读写器ID" align="center" prop="readerId" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" /> <el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="库区ID" align="center" prop="areaId" /> <el-table-column label="库区ID" align="center" prop="areaId" />
<el-table-column label="库位ID" align="center" prop="locationId" /> <el-table-column label="货架ID" align="center" prop="locationId" />
<el-table-column label="安装位置" align="center" prop="installationLocation" /> <el-table-column label="安装位置" align="center" prop="installationLocation" />
<el-table-column label="X坐标" align="center" prop="xCoordinate" /> <el-table-column label="X坐标" align="center" prop="xCoordinate" />
<el-table-column label="Y坐标" align="center" prop="yCoordinate" /> <el-table-column label="Y坐标" align="center" prop="yCoordinate" />
...@@ -242,8 +242,8 @@ ...@@ -242,8 +242,8 @@
<el-form-item label="库区ID" prop="areaId"> <el-form-item label="库区ID" prop="areaId">
<el-input v-model="form.areaId" placeholder="请输入库区ID" /> <el-input v-model="form.areaId" placeholder="请输入库区ID" />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input v-model="form.locationId" placeholder="请输入库位ID" /> <el-input v-model="form.locationId" placeholder="请输入货架ID" />
</el-form-item> </el-form-item>
<el-form-item label="安装位置" prop="installationLocation"> <el-form-item label="安装位置" prop="installationLocation">
<el-input v-model="form.installationLocation" placeholder="请输入安装位置" /> <el-input v-model="form.installationLocation" placeholder="请输入安装位置" />
......
...@@ -33,10 +33,10 @@ ...@@ -33,10 +33,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input <el-input
v-model="queryParams.locationId" v-model="queryParams.locationId"
placeholder="请输入库位ID" placeholder="请输入货架ID"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -208,7 +208,7 @@ ...@@ -208,7 +208,7 @@
<el-table-column label="RFID卡ID" align="center" prop="cardId" /> <el-table-column label="RFID卡ID" align="center" prop="cardId" />
<el-table-column label="仓库ID" align="center" prop="warehouseId" /> <el-table-column label="仓库ID" align="center" prop="warehouseId" />
<el-table-column label="库区ID" align="center" prop="areaId" /> <el-table-column label="库区ID" align="center" prop="areaId" />
<el-table-column label="库位ID" align="center" prop="locationId" /> <el-table-column label="货架ID" align="center" prop="locationId" />
<el-table-column label="检测时间" align="center" prop="detectTime" width="180"> <el-table-column label="检测时间" align="center" prop="detectTime" width="180">
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.detectTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.detectTime, '{y}-{m}-{d}') }}</span>
...@@ -260,8 +260,8 @@ ...@@ -260,8 +260,8 @@
<el-form-item label="库区ID" prop="areaId"> <el-form-item label="库区ID" prop="areaId">
<el-input v-model="form.areaId" placeholder="请输入库区ID" /> <el-input v-model="form.areaId" placeholder="请输入库区ID" />
</el-form-item> </el-form-item>
<el-form-item label="库位ID" prop="locationId"> <el-form-item label="货架ID" prop="locationId">
<el-input v-model="form.locationId" placeholder="请输入库位ID" /> <el-input v-model="form.locationId" placeholder="请输入货架ID" />
</el-form-item> </el-form-item>
<el-form-item label="检测时间" prop="detectTime"> <el-form-item label="检测时间" prop="detectTime">
<el-date-picker clearable <el-date-picker clearable
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="供应商编码" prop="supplierCode"> <el-form-item label="供应商编码" prop="supplierCode">
<el-input <el-input
v-model="queryParams.supplierCode" v-model="queryParams.supplierCode"
...@@ -97,7 +97,11 @@ ...@@ -97,7 +97,11 @@
<el-table-column label="联系人" align="center" prop="contactPerson" /> <el-table-column label="联系人" align="center" prop="contactPerson" />
<el-table-column label="联系电话" align="center" prop="contactPhone" /> <el-table-column label="联系电话" align="center" prop="contactPhone" />
<el-table-column label="地址" align="center" prop="address" /> <el-table-column label="地址" align="center" prop="address" />
<el-table-column label="状态" align="center" prop="status" /> <el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
...@@ -117,7 +121,7 @@ ...@@ -117,7 +121,7 @@
<!-- 添加或修改供应商对话框 --> <!-- 添加或修改供应商对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="wmsSupplierRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="wmsSupplierRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="供应商编码" prop="supplierCode"> <el-form-item label="供应商编码" prop="supplierCode">
<el-input v-model="form.supplierCode" placeholder="请输入供应商编码" /> <el-input v-model="form.supplierCode" placeholder="请输入供应商编码" />
</el-form-item> </el-form-item>
...@@ -152,6 +156,8 @@ import { listWmsSupplier, getWmsSupplier, delWmsSupplier, addWmsSupplier, update ...@@ -152,6 +156,8 @@ import { listWmsSupplier, getWmsSupplier, delWmsSupplier, addWmsSupplier, update
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { sys_normal_disable } = proxy.useDict('sys_normal_disable')
const wmsSupplierList = ref([]) const wmsSupplierList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
......
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="仓库编码" prop="warehouseCode"> <el-form-item label="仓库编码" prop="warehouseCode">
<el-input <el-input
v-model="queryParams.warehouseCode" v-model="queryParams.warehouseCode"
...@@ -33,10 +33,10 @@ ...@@ -33,10 +33,10 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="仓库位置" prop="location"> <el-form-item label="仓货架置" prop="location">
<el-input <el-input
v-model="queryParams.location" v-model="queryParams.location"
placeholder="请输入仓库位置" placeholder="请输入仓货架置"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
...@@ -105,9 +105,13 @@ ...@@ -105,9 +105,13 @@
<el-table-column label="仓库类型" align="center" prop="warehouseType" /> <el-table-column label="仓库类型" align="center" prop="warehouseType" />
<el-table-column label="仓库面积" align="center" prop="area" /> <el-table-column label="仓库面积" align="center" prop="area" />
<el-table-column label="仓库容量" align="center" prop="capacity" /> <el-table-column label="仓库容量" align="center" prop="capacity" />
<el-table-column label="仓库位置" align="center" prop="location" /> <el-table-column label="仓货架置" align="center" prop="location" />
<el-table-column label="仓库管理员" align="center" prop="managerId" /> <el-table-column label="仓库管理员" align="center" prop="managerId" />
<el-table-column label="状态" align="center" prop="status" /> <el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
...@@ -127,7 +131,7 @@ ...@@ -127,7 +131,7 @@
<!-- 添加或修改仓库信息对话框 --> <!-- 添加或修改仓库信息对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="wmsWarehouseRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="wmsWarehouseRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="仓库编码" prop="warehouseCode"> <el-form-item label="仓库编码" prop="warehouseCode">
<el-input v-model="form.warehouseCode" placeholder="请输入仓库编码" /> <el-input v-model="form.warehouseCode" placeholder="请输入仓库编码" />
</el-form-item> </el-form-item>
...@@ -140,8 +144,8 @@ ...@@ -140,8 +144,8 @@
<el-form-item label="仓库容量" prop="capacity"> <el-form-item label="仓库容量" prop="capacity">
<el-input v-model="form.capacity" placeholder="请输入仓库容量" /> <el-input v-model="form.capacity" placeholder="请输入仓库容量" />
</el-form-item> </el-form-item>
<el-form-item label="仓库位置" prop="location"> <el-form-item label="仓货架置" prop="location">
<el-input v-model="form.location" placeholder="请输入仓库位置" /> <el-input v-model="form.location" placeholder="请输入仓货架置" />
</el-form-item> </el-form-item>
<el-form-item label="仓库管理员" prop="managerId"> <el-form-item label="仓库管理员" prop="managerId">
<el-input v-model="form.managerId" placeholder="请输入仓库管理员" /> <el-input v-model="form.managerId" placeholder="请输入仓库管理员" />
...@@ -165,6 +169,8 @@ import { listWmsWarehouse, getWmsWarehouse, delWmsWarehouse, addWmsWarehouse, up ...@@ -165,6 +169,8 @@ import { listWmsWarehouse, getWmsWarehouse, delWmsWarehouse, addWmsWarehouse, up
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { sys_normal_disable } = proxy.useDict('sys_normal_disable')
const wmsWarehouseList = ref([]) const wmsWarehouseList = ref([])
const open = ref(false) const open = ref(false)
const loading = ref(true) const loading = ref(true)
......
...@@ -42,7 +42,7 @@ export default defineConfig(({ mode, command }) => { ...@@ -42,7 +42,7 @@ export default defineConfig(({ mode, command }) => {
}, },
// vite 相关配置 // vite 相关配置
server: { server: {
port: 80, port: 8851,
host: true, host: true,
open: true, open: true,
proxy: { proxy: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment