mirror of
https://gitee.com/y_project/RuoYi-Cloud.git
synced 2026-01-26 11:51:55 +08:00
强化文件api,添加FilePond
This commit is contained in:
@@ -19,6 +19,10 @@
|
||||
"echarts": "5.4.3",
|
||||
"element-plus": "2.4.3",
|
||||
"file-saver": "2.0.5",
|
||||
"filepond": "^4.30.6",
|
||||
"filepond-plugin-file-validate-size": "^2.2.8",
|
||||
"filepond-plugin-file-validate-type": "^1.2.9",
|
||||
"filepond-plugin-image-preview": "^4.6.12",
|
||||
"fuse.js": "6.6.2",
|
||||
"js-cookie": "3.0.5",
|
||||
"jsencrypt": "3.3.2",
|
||||
@@ -26,6 +30,7 @@
|
||||
"pinia": "2.1.7",
|
||||
"vue": "3.3.9",
|
||||
"vue-cropper": "1.1.1",
|
||||
"vue-filepond": "^7.0.4",
|
||||
"vue-router": "4.2.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -33,9 +38,9 @@
|
||||
"@vue/compiler-sfc": "3.3.9",
|
||||
"sass": "1.69.5",
|
||||
"unplugin-auto-import": "0.17.1",
|
||||
"unplugin-vue-setup-extend-plus": "1.0.0",
|
||||
"vite": "5.0.4",
|
||||
"vite-plugin-compression": "0.5.1",
|
||||
"vite-plugin-svg-icons": "2.0.1",
|
||||
"unplugin-vue-setup-extend-plus": "1.0.0"
|
||||
"vite-plugin-svg-icons": "2.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,3 +16,29 @@ export function getFileRecord(fileId) {
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增文件存储记录
|
||||
export function addFileRecord(data) {
|
||||
return request({
|
||||
url: '/file/FileRecord',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改文件存储记录
|
||||
export function updateFileRecord(data) {
|
||||
return request({
|
||||
url: '/file/FileRecord',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除文件存储记录
|
||||
export function delFileRecord(fileId) {
|
||||
return request({
|
||||
url: '/file/FileRecord/' + fileId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import request from '@/utils/request'
|
||||
import request, { upload } from '@/utils/request'
|
||||
|
||||
// 查询物品基础信息列表
|
||||
export function listItemInfo(query) {
|
||||
@@ -18,21 +18,35 @@ export function getItemInfo(itemCd) {
|
||||
}
|
||||
|
||||
// 新增物品基础信息
|
||||
export function addItemInfo(data) {
|
||||
return request({
|
||||
url: '/wms/ItemInfo',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
export function addItemInfo(data, withImage = false, imageFiles = []) {
|
||||
if (withImage) {
|
||||
//连着图片文件一起提交
|
||||
const url = '/wms/ItemInfo/addWithImage'
|
||||
return upload(url, imageFiles, data)
|
||||
} else {
|
||||
//只提交json数据
|
||||
return request({
|
||||
url: '/wms/ItemInfo',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 修改物品基础信息
|
||||
export function updateItemInfo(data) {
|
||||
return request({
|
||||
url: '/wms/ItemInfo',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
export function updateItemInfo(data, withImage = false, imageFiles = []) {
|
||||
if (withImage) {
|
||||
//连着图片文件一起提交
|
||||
const url = '/wms/ItemInfo/editWithImage'
|
||||
return upload(url, imageFiles, data, { method: 'put' })
|
||||
} else {
|
||||
//只提交json数据
|
||||
return request({
|
||||
url: '/wms/ItemInfo',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 删除物品基础信息
|
||||
|
||||
169
ruoyi-ui/src/components/FpFileUpload/index.vue
Normal file
169
ruoyi-ui/src/components/FpFileUpload/index.vue
Normal file
@@ -0,0 +1,169 @@
|
||||
<template>
|
||||
<div>
|
||||
<!--
|
||||
allowFileSizeValidation: true //开启文件大小检验
|
||||
allowFileTypeValidation: true //开启文件类型检验
|
||||
allowImagePreview: true //开启图片预览
|
||||
allowMultiple: true //启用多文件上传
|
||||
allowProcess: false //禁用组件自己的上传按钮
|
||||
allowRevert: false //禁用撤销按钮
|
||||
instantUpload: false //禁用自动上传
|
||||
credits: false //隐藏[Powered by PQINA]字样
|
||||
-->
|
||||
<file-pond
|
||||
ref="pond"
|
||||
@Init="handleInit"
|
||||
label-idle="拖放文件到这里..."
|
||||
:max-file-size="fileSize"
|
||||
:accepted-file-types="fileType"
|
||||
:max-files="maxFilesLimit"
|
||||
:image-preview-min-height="imgPreviewMinHeight"
|
||||
:image-preview-max-height="imgPreviewMaxHeight"
|
||||
:image-preview-height="imgPreviewFixedHeight"
|
||||
:allow-file-size-validation="true"
|
||||
:allow-file-type-validation="true"
|
||||
:allow-image-preview="true"
|
||||
:allow-multiple="true"
|
||||
:allow-process="false"
|
||||
:allow-revert="false"
|
||||
:instant-upload="false"
|
||||
credits="false"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
// Import FilePond
|
||||
import vueFilePond from 'vue-filepond';
|
||||
|
||||
// Import plugins
|
||||
import FilePondPluginFileValidateType from 'filepond-plugin-file-validate-type/dist/filepond-plugin-file-validate-type';
|
||||
import FilePondPluginFileValidateSize from 'filepond-plugin-file-validate-size/dist/filepond-plugin-file-validate-size';
|
||||
import FilePondPluginImagePreview from 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview';
|
||||
|
||||
// Import styles
|
||||
import 'filepond/dist/filepond.min.css';
|
||||
import 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.css';
|
||||
|
||||
// Create FilePond component
|
||||
const FilePond = vueFilePond(FilePondPluginFileValidateType, FilePondPluginFileValidateSize, FilePondPluginImagePreview);
|
||||
const pond = ref(null);
|
||||
|
||||
const {proxy} = getCurrentInstance();
|
||||
const emit = defineEmits();
|
||||
|
||||
const props = defineProps({
|
||||
// 文件数量限制
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 5,
|
||||
},
|
||||
// 单个文件大小限制
|
||||
fileSize: {
|
||||
type: String,
|
||||
default: '5MB',
|
||||
},
|
||||
// 总体文件大小限制,格式同fileSize
|
||||
totalFileSize: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
// 允许上传的文件类型
|
||||
fileType: {
|
||||
type: Array,
|
||||
default: () => [
|
||||
//文档
|
||||
'text/plain', 'application/pdf', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
//图片
|
||||
'image/jpeg', 'image/png', 'image/webp', 'image/gif',
|
||||
//压缩包
|
||||
'application/vnd.rar', 'application/zip', 'application/x-7z-compressed',
|
||||
],
|
||||
},
|
||||
// 允许上传的最大文件数量
|
||||
maxFilesLimit: {
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
// 图片预览最小高度
|
||||
imgPreviewMinHeight: {
|
||||
type: Number,
|
||||
default: 44,
|
||||
},
|
||||
// 图片预览最大高度
|
||||
imgPreviewMaxHeight: {
|
||||
type: Number,
|
||||
default: 256,
|
||||
},
|
||||
// 图片预览固定高度
|
||||
imgPreviewFixedHeight: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
defineExpose({
|
||||
pond,
|
||||
getFiles,
|
||||
getFile,
|
||||
addFile,
|
||||
addFiles,
|
||||
removeFile,
|
||||
removeFiles,
|
||||
});
|
||||
|
||||
// 初始化
|
||||
function handleInit() {
|
||||
// console.info('pond.value', pond.value)
|
||||
// console.info('FilePond', FilePond)
|
||||
}
|
||||
|
||||
// 获取文件(确保一定返回JavaScript File对象的数组)
|
||||
function getFiles() {
|
||||
const pondFiles = pond.value.getFiles()
|
||||
if (pondFiles) {
|
||||
const jsFiles = []
|
||||
for (let i = 0; i < pondFiles.length; i++) {
|
||||
jsFiles.push(pondFiles[i].file)
|
||||
}
|
||||
return jsFiles
|
||||
} else {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
// 获取指定索引的文件(JavaScript File对象)
|
||||
function getFile(index) {
|
||||
const pondFile = pond.value.getFile(index)
|
||||
return pondFile ? pondFile.file : null;
|
||||
}
|
||||
|
||||
// 添加文件
|
||||
function addFile(source) {
|
||||
pond.value.addFile(source);
|
||||
}
|
||||
|
||||
function addFiles(source) {
|
||||
pond.value.addFiles(source);
|
||||
}
|
||||
|
||||
// 移除文件
|
||||
function removeFile(index) {
|
||||
pond.value.removeFile(index);
|
||||
}
|
||||
|
||||
// 移除所有文件
|
||||
function removeFiles() {
|
||||
pond.value.removeFiles();
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<!--
|
||||
注意:如果需要网格布局,则需要在没有scoped的style标签里添加式样,示例如下:
|
||||
<style>
|
||||
.filepond--item {
|
||||
width: calc(20% - 0.5em);
|
||||
}
|
||||
</style>
|
||||
-->
|
||||
@@ -40,7 +40,7 @@
|
||||
<img
|
||||
:src="dialogImageUrl"
|
||||
style="display: block; max-width: 100%; margin: 0 auto"
|
||||
/>
|
||||
alt=""/>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -43,6 +43,8 @@ import ImagePreview from "@/components/ImagePreview"
|
||||
import TreeSelect from '@/components/TreeSelect'
|
||||
// 字典标签组件
|
||||
import DictTag from '@/components/DictTag'
|
||||
// FilePond文件上传组件
|
||||
import FpFileUpload from '@/components/FpFileUpload'
|
||||
|
||||
const app = createApp(App)
|
||||
|
||||
@@ -65,6 +67,7 @@ app.component('ImageUpload', ImageUpload)
|
||||
app.component('ImagePreview', ImagePreview)
|
||||
app.component('RightToolbar', RightToolbar)
|
||||
app.component('Editor', Editor)
|
||||
app.component('FpFileUpload', FpFileUpload)
|
||||
|
||||
app.use(router)
|
||||
app.use(store)
|
||||
|
||||
@@ -1,152 +1,233 @@
|
||||
import axios from 'axios'
|
||||
import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import {ElNotification, ElMessageBox, ElMessage, ElLoading} from 'element-plus'
|
||||
import {getToken} from '@/utils/auth'
|
||||
import errorCode from '@/utils/errorCode'
|
||||
import { tansParams, blobValidate } from '@/utils/ruoyi'
|
||||
import {tansParams, blobValidate} from '@/utils/ruoyi'
|
||||
import cache from '@/plugins/cache'
|
||||
import { saveAs } from 'file-saver'
|
||||
import {saveAs} from 'file-saver'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
|
||||
let downloadLoadingInstance;
|
||||
// 是否显示重新登录
|
||||
export let isRelogin = { show: false };
|
||||
export let isRelogin = {show: false};
|
||||
|
||||
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
|
||||
// 创建axios实例
|
||||
const service = axios.create({
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: import.meta.env.VITE_APP_BASE_API,
|
||||
// 超时
|
||||
timeout: 10000
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
baseURL: import.meta.env.VITE_APP_BASE_API,
|
||||
// 超时
|
||||
timeout: 60000
|
||||
})
|
||||
|
||||
// request拦截器
|
||||
/**
|
||||
* 请求拦截器
|
||||
*/
|
||||
service.interceptors.request.use(config => {
|
||||
// 是否需要设置 token
|
||||
const isToken = (config.headers || {}).isToken === false
|
||||
// 是否需要防止数据重复提交
|
||||
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
|
||||
if (getToken() && !isToken) {
|
||||
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
}
|
||||
// get请求映射params参数
|
||||
if (config.method === 'get' && config.params) {
|
||||
let url = config.url + '?' + tansParams(config.params);
|
||||
url = url.slice(0, -1);
|
||||
config.params = {};
|
||||
config.url = url;
|
||||
}
|
||||
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
|
||||
const requestObj = {
|
||||
url: config.url,
|
||||
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
|
||||
time: new Date().getTime()
|
||||
// 是否需要设置 token
|
||||
const isToken = (config.headers || {}).isToken === false
|
||||
// 是否需要防止数据重复提交
|
||||
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
|
||||
if (getToken() && !isToken) {
|
||||
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
|
||||
}
|
||||
const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小
|
||||
const limitSize = 5 * 1024 * 1024; // 限制存放数据5M
|
||||
if (requestSize >= limitSize) {
|
||||
console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。')
|
||||
return config;
|
||||
// get请求映射params参数
|
||||
if (config.method === 'get' && config.params) {
|
||||
let url = config.url + '?' + tansParams(config.params);
|
||||
url = url.slice(0, -1);
|
||||
config.params = {};
|
||||
config.url = url;
|
||||
}
|
||||
const sessionObj = cache.session.getJSON('sessionObj')
|
||||
if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
|
||||
cache.session.setJSON('sessionObj', requestObj)
|
||||
} else {
|
||||
const s_url = sessionObj.url; // 请求地址
|
||||
const s_data = sessionObj.data; // 请求数据
|
||||
const s_time = sessionObj.time; // 请求时间
|
||||
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
|
||||
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
|
||||
const message = '数据正在处理,请勿重复提交';
|
||||
console.warn(`[${s_url}]: ` + message)
|
||||
return Promise.reject(new Error(message))
|
||||
} else {
|
||||
cache.session.setJSON('sessionObj', requestObj)
|
||||
}
|
||||
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
|
||||
const requestObj = {
|
||||
url: config.url,
|
||||
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
|
||||
time: new Date().getTime()
|
||||
}
|
||||
const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小
|
||||
const limitSize = 5 * 1024 * 1024; // 限制存放数据5M
|
||||
if (requestSize >= limitSize) {
|
||||
console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。')
|
||||
return config;
|
||||
}
|
||||
const sessionObj = cache.session.getJSON('sessionObj')
|
||||
if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
|
||||
cache.session.setJSON('sessionObj', requestObj)
|
||||
} else {
|
||||
const s_url = sessionObj.url; // 请求地址
|
||||
const s_data = sessionObj.data; // 请求数据
|
||||
const s_time = sessionObj.time; // 请求时间
|
||||
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
|
||||
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
|
||||
const message = '数据正在处理,请勿重复提交';
|
||||
console.warn(`[${s_url}]: ` + message)
|
||||
return Promise.reject(new Error(message))
|
||||
} else {
|
||||
cache.session.setJSON('sessionObj', requestObj)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return config
|
||||
return config
|
||||
}, error => {
|
||||
console.log(error)
|
||||
Promise.reject(error)
|
||||
})
|
||||
|
||||
// 响应拦截器
|
||||
/**
|
||||
* 响应拦截器
|
||||
*/
|
||||
service.interceptors.response.use(res => {
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || 200;
|
||||
// 获取错误信息
|
||||
const msg = errorCode[code] || res.data.msg || errorCode['default']
|
||||
// 二进制数据则直接返回
|
||||
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
||||
return res.data
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || 200;
|
||||
// 获取错误信息
|
||||
const msg = errorCode[code] || res.data.msg || errorCode['default']
|
||||
// 二进制数据则直接返回
|
||||
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
||||
return res.data
|
||||
}
|
||||
if (code === 401) {
|
||||
if (!isRelogin.show) {
|
||||
isRelogin.show = true;
|
||||
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
|
||||
confirmButtonText: '重新登录',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
isRelogin.show = false;
|
||||
useUserStore().logOut().then(() => {
|
||||
location.href = '/index';
|
||||
})
|
||||
}).catch(() => {
|
||||
isRelogin.show = false;
|
||||
});
|
||||
}
|
||||
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
|
||||
} else if (code === 500) {
|
||||
ElMessage({message: msg, type: 'error'})
|
||||
return Promise.reject(new Error(msg))
|
||||
} else if (code === 601) {
|
||||
ElMessage({message: msg, type: 'warning'})
|
||||
return Promise.reject(new Error('[WARNING]' + msg))
|
||||
} else if (code !== 200) {
|
||||
ElNotification.error({title: msg})
|
||||
return Promise.reject('error')
|
||||
} else {
|
||||
return Promise.resolve(res.data)
|
||||
}
|
||||
},
|
||||
error => {
|
||||
console.log('err' + error)
|
||||
let {message} = error;
|
||||
if (message == "Network Error") {
|
||||
message = "后端接口连接异常";
|
||||
} else if (message.includes("timeout")) {
|
||||
message = "系统接口请求超时";
|
||||
} else if (message.includes("Request failed with status code")) {
|
||||
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
||||
}
|
||||
ElMessage({message: message, type: 'error', duration: 5 * 1000})
|
||||
return Promise.reject(error)
|
||||
}
|
||||
if (code === 401) {
|
||||
if (!isRelogin.show) {
|
||||
isRelogin.show = true;
|
||||
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
|
||||
isRelogin.show = false;
|
||||
useUserStore().logOut().then(() => {
|
||||
location.href = '/index';
|
||||
})
|
||||
}).catch(() => {
|
||||
isRelogin.show = false;
|
||||
});
|
||||
}
|
||||
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
|
||||
} else if (code === 500) {
|
||||
ElMessage({ message: msg, type: 'error' })
|
||||
return Promise.reject(new Error(msg))
|
||||
} else if (code === 601) {
|
||||
ElMessage({ message: msg, type: 'warning' })
|
||||
return Promise.reject(new Error(msg))
|
||||
} else if (code !== 200) {
|
||||
ElNotification.error({ title: msg })
|
||||
return Promise.reject('error')
|
||||
} else {
|
||||
return Promise.resolve(res.data)
|
||||
}
|
||||
},
|
||||
error => {
|
||||
console.log('err' + error)
|
||||
let { message } = error;
|
||||
if (message == "Network Error") {
|
||||
message = "后端接口连接异常";
|
||||
} else if (message.includes("timeout")) {
|
||||
message = "系统接口请求超时";
|
||||
} else if (message.includes("Request failed with status code")) {
|
||||
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
||||
}
|
||||
ElMessage({ message: message, type: 'error', duration: 5 * 1000 })
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
// 通用下载方法
|
||||
export function download(url, params, filename, config) {
|
||||
downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
|
||||
return service.post(url, params, {
|
||||
transformRequest: [(params) => { return tansParams(params) }],
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
responseType: 'blob',
|
||||
...config
|
||||
}).then(async (data) => {
|
||||
const isBlob = blobValidate(data);
|
||||
if (isBlob) {
|
||||
const blob = new Blob([data])
|
||||
saveAs(blob, filename)
|
||||
/**
|
||||
* 通用下载方法
|
||||
*
|
||||
* @param url 请求地址
|
||||
* @param params 请求参数
|
||||
* @param filename 下载文件名
|
||||
* @param type 请求类型,可选值:form、json,默认为form
|
||||
* @param config axios配置
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export function download(url, params, filename, type = 'form', config = {}) {
|
||||
let headers, finalSubmitData
|
||||
if (type === 'json') {
|
||||
//处理json格式
|
||||
headers = {'Content-Type': 'application/json'}
|
||||
finalSubmitData = JSON.stringify(params)
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
|
||||
ElMessage.error(errMsg);
|
||||
//处理form格式
|
||||
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
|
||||
finalSubmitData = params
|
||||
if (!config) {
|
||||
config = {}
|
||||
}
|
||||
config.transformRequest = [(params) => {
|
||||
return tansParams(params)
|
||||
}]
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
}).catch((r) => {
|
||||
console.error(r)
|
||||
ElMessage.error('下载文件出现错误,请联系管理员!')
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
downloadLoadingInstance = ElLoading.service({text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)",})
|
||||
return service.post(url, {
|
||||
headers: headers,
|
||||
data: finalSubmitData,
|
||||
responseType: 'blob',
|
||||
...config
|
||||
}).then(async (data) => {
|
||||
const isBlob = blobValidate(data);
|
||||
if (isBlob) {
|
||||
const blob = new Blob([data])
|
||||
saveAs(blob, filename)
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
}).catch((error) => {
|
||||
console.error(error)
|
||||
if (!error.includes('[WARNING]')) {
|
||||
ElMessage.error('下载文件出现错误,请联系管理员!')
|
||||
}
|
||||
}).finally(() => {
|
||||
downloadLoadingInstance.close()
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用上传方法
|
||||
*
|
||||
* @param url 上传地址
|
||||
* @param files 要上传的文件数组,如果数组中的元素可以直接是File对象,此时提交的字段名默认为"files"。否则数组中的元素应该是一个键值对的对象,其中"key"是字段名,"value"是File对象。
|
||||
* @param otherSubmitData 其他要提交的数据(一个键值对的对象)
|
||||
* @param config axios配置
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
export function upload(url, files, otherSubmitData, config = {}) {
|
||||
//组装表单数据
|
||||
const formData = new FormData()
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const fileObj = files[i];
|
||||
if (fileObj instanceof File) {
|
||||
formData.append('files', fileObj);
|
||||
} else {
|
||||
formData.append(fileObj.key, fileObj.value);
|
||||
}
|
||||
}
|
||||
if (otherSubmitData) {
|
||||
const keys = Object.keys(otherSubmitData);
|
||||
for (let i = 0; i < keys.length; i++) {
|
||||
const key = keys[i]
|
||||
//只提交非空数据
|
||||
if (otherSubmitData[key]) {
|
||||
formData.append(key, otherSubmitData[key])
|
||||
}
|
||||
}
|
||||
}
|
||||
//上传
|
||||
const loadingInstance = ElLoading.service({text: "正在上传数据,请稍候", background: "rgba(0, 0, 0, 0.7)",})
|
||||
return service.request({
|
||||
url: url,
|
||||
method: 'post',
|
||||
headers: {'Content-Type': 'multipart/form-data'},
|
||||
data: formData,
|
||||
...config
|
||||
}).catch((r) => {
|
||||
console.error('Upload file error:', r)
|
||||
return Promise.reject(r)
|
||||
}).finally(() => {
|
||||
loadingInstance.close()
|
||||
})
|
||||
}
|
||||
|
||||
export default service
|
||||
|
||||
@@ -209,13 +209,13 @@ export function tansParams(params) {
|
||||
let result = ''
|
||||
for (const propName of Object.keys(params)) {
|
||||
const value = params[propName];
|
||||
var part = encodeURIComponent(propName) + "=";
|
||||
let part = encodeURIComponent(propName) + "=";
|
||||
if (value !== null && value !== "" && typeof (value) !== "undefined") {
|
||||
if (typeof value === 'object') {
|
||||
for (const key of Object.keys(value)) {
|
||||
if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
|
||||
let params = propName + '[' + key + ']';
|
||||
var subPart = encodeURIComponent(params) + "=";
|
||||
let subPart = encodeURIComponent(params) + "=";
|
||||
result += subPart + encodeURIComponent(value[key]) + "&";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<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="85px">
|
||||
<el-form-item label="文件ID" prop="fileId">
|
||||
<el-input
|
||||
v-model="queryParams.fileId"
|
||||
@@ -17,13 +17,27 @@
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="文件后缀" prop="extension">
|
||||
<el-input
|
||||
v-model="queryParams.extension"
|
||||
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-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
@@ -33,26 +47,36 @@
|
||||
v-hasPermi="['file:FileRecord:export']"
|
||||
>导出</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="Delete"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['wms:FileRecord:remove']"
|
||||
>删除</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="FileRecordList" @selection-change="handleSelectionChange" show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table v-loading="loading" :data="FileRecordList" @selection-change="handleSelectionChange" :show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="30" align="center" />
|
||||
<el-table-column label="文件ID" align="center" prop="fileId" />
|
||||
<el-table-column label="保存文件名" align="center" prop="savedName" />
|
||||
<el-table-column label="原始文件名" align="center" prop="originalName" />
|
||||
<el-table-column label="保存文件名" width="190" align="center" prop="savedName" />
|
||||
<el-table-column label="原始文件名" width="200" align="center" prop="originalName" />
|
||||
<el-table-column label="文件路径" align="center" prop="filePath" />
|
||||
<el-table-column label="文件后缀" align="center" prop="extension" />
|
||||
<el-table-column label="存储方式" align="center" prop="storageType" />
|
||||
<el-table-column label="获取文件的URL" align="center" prop="requestUrl" />
|
||||
<el-table-column label="文件URL" align="center" prop="requestUrl" />
|
||||
<el-table-column label="文件大小(Byte)" align="center" prop="fileSize" />
|
||||
<el-table-column label="创建者" align="center" prop="createBy" />
|
||||
<el-table-column label="创建者ID" align="center" prop="createBy" />
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新者" align="center" prop="updateBy" />
|
||||
<el-table-column label="更新者ID" align="center" prop="updateBy" />
|
||||
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
|
||||
@@ -71,7 +95,7 @@
|
||||
</template>
|
||||
|
||||
<script setup name="FileRecord">
|
||||
import { listFileRecord, getFileRecord } from "@/api/file/FileRecord";
|
||||
import { listFileRecord, delFileRecord } from "@/api/file/FileRecord";
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
@@ -89,10 +113,11 @@ const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pageSize: 20,
|
||||
fileId: null,
|
||||
savedName: null,
|
||||
originalName: null,
|
||||
extension: null,
|
||||
},
|
||||
rules: {
|
||||
}
|
||||
@@ -155,6 +180,24 @@ function handleSelectionChange(selection) {
|
||||
multiple.value = !selection.length;
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(row) {
|
||||
const _fileIds = row.fileId || ids.value;
|
||||
proxy.$modal.confirm('是否确认删除文件ID为"' + _fileIds + '"的数据项?').then(function() {
|
||||
return delFileRecord(_fileIds);
|
||||
}).then(() => {
|
||||
getList();
|
||||
proxy.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
function handleExport() {
|
||||
proxy.download('file/FileRecord/export', {
|
||||
...queryParams.value
|
||||
}, `FileRecord_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
//页面打开时查询
|
||||
//getList();
|
||||
</script>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="SeqRuleList" @selection-change="handleSelectionChange" show-overflow-tooltip="true">
|
||||
<el-table v-loading="loading" :data="SeqRuleList" @selection-change="handleSelectionChange" :show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="规则ID" align="center" prop="ruleId" />
|
||||
<el-table-column label="序列号识别码" align="center" prop="seqDistCd" />
|
||||
@@ -132,7 +132,7 @@
|
||||
<el-form-item label="状态" prop="enableFlag">
|
||||
<el-radio-group v-model="form.enableFlag">
|
||||
<el-radio
|
||||
v-for="dict in sys_normal_disable"
|
||||
v-for="dict in sys_enable_flag"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{ dict.label }}</el-radio>
|
||||
@@ -153,7 +153,7 @@
|
||||
import { listSeqRule, getSeqRule, delSeqRule, addSeqRule, updateSeqRule, changeRuleEnableFlag } from "@/api/system/SeqRule";
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
|
||||
const { sys_enable_flag } = proxy.useDict("sys_enable_flag");
|
||||
|
||||
const SeqRuleList = ref([]);
|
||||
const open = ref(false);
|
||||
@@ -185,10 +185,10 @@ const data = reactive({
|
||||
{ required: true, message: "前缀不能为空", trigger: "blur" }
|
||||
],
|
||||
minDigits: [
|
||||
{ required: true, message: "序列号数字部分的最小位数,不足补0不能为空", trigger: "blur" }
|
||||
{ required: true, message: "最小位数不能为空", trigger: "blur" }
|
||||
],
|
||||
enableFlag: [
|
||||
{ required: true, message: "是否启用不能为空", trigger: "blur" }
|
||||
{ required: true, message: "启用状态不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
});
|
||||
|
||||
@@ -3,18 +3,18 @@
|
||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="物品代码" prop="itemCd">
|
||||
<el-input
|
||||
v-model="queryParams.itemCd"
|
||||
placeholder="请输入物品代码"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
v-model="queryParams.itemCd"
|
||||
placeholder="请输入物品代码"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物品名称" prop="itemName">
|
||||
<el-input
|
||||
v-model="queryParams.itemName"
|
||||
placeholder="请输入物品名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
v-model="queryParams.itemName"
|
||||
placeholder="请输入物品名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
@@ -26,74 +26,88 @@
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['wms:ItemInfo:add']"
|
||||
>新增</el-button>
|
||||
type="primary"
|
||||
plain
|
||||
icon="Plus"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['wms:ItemInfo:add']"
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
icon="Edit"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['wms:ItemInfo:edit']"
|
||||
>修改</el-button>
|
||||
type="success"
|
||||
plain
|
||||
icon="Edit"
|
||||
:disabled="single"
|
||||
@click="handleUpdate"
|
||||
v-hasPermi="['wms:ItemInfo:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="danger"
|
||||
plain
|
||||
icon="Delete"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['wms:ItemInfo:remove']"
|
||||
>删除</el-button>
|
||||
type="danger"
|
||||
plain
|
||||
icon="Delete"
|
||||
:disabled="multiple"
|
||||
@click="handleDelete"
|
||||
v-hasPermi="['wms:ItemInfo:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="Download"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['wms:ItemInfo:export']"
|
||||
>导出</el-button>
|
||||
type="warning"
|
||||
plain
|
||||
icon="Download"
|
||||
@click="handleExport"
|
||||
v-hasPermi="['wms:ItemInfo:export']"
|
||||
>导出
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ItemInfoList" @selection-change="handleSelectionChange" show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="物品代码" align="center" prop="itemCd" />
|
||||
<el-table-column label="物品名称" align="center" prop="itemName" />
|
||||
<el-table-column label="默认库位号" align="center" prop="defaultStgBinCd" />
|
||||
<el-table-column label="启用标志" align="center" prop="enableFlg" />
|
||||
<el-table-column label="批号管理区分" align="center" prop="lotNoMgmtCls" />
|
||||
<el-table-column label="物品类型代码" align="center" prop="itemTypeCd" />
|
||||
<el-table-column label="标准单位代码" align="center" prop="stdUnitCd" />
|
||||
<el-table-column label="包装单位代码" align="center" prop="pkgUnitCd" />
|
||||
<el-table-column label="生产商" align="center" prop="manufacturer" />
|
||||
<el-table-column label="供应商" align="center" prop="supplier" />
|
||||
<el-table-column label="安全库存量" align="center" prop="safetyStock" />
|
||||
<el-table-column label="最大库存量" align="center" prop="maxInvQty" />
|
||||
<el-table-column label="购买阈值" align="center" prop="purchLimitQty" />
|
||||
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['wms:ItemInfo:edit']">修改</el-button>-->
|
||||
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:ItemInfo:remove']">删除</el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table v-loading="loading" :data="ItemInfoList" @selection-change="handleSelectionChange"
|
||||
:show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="30" align="center"/>
|
||||
<el-table-column label="物品代码" align="center" prop="itemCd"/>
|
||||
<el-table-column label="物品名称" width="120" align="center" prop="itemName"/>
|
||||
<el-table-column label="启用标志" align="center" prop="enableFlg">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="sys_enable_flag" :value="scope.row.enableFlg"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物品类型" align="center" prop="itemTypeName"/>
|
||||
<el-table-column label="物品图片" align="center" prop="viewImg">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="View" @click="handleViewImage(scope.row)">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="标准单位" align="center" prop="stdUnitName"/>
|
||||
<el-table-column label="包装单位" align="center" prop="pkgUnitName"/>
|
||||
<el-table-column label="批号管理" align="center" prop="lotNoMgmtCls"/>
|
||||
<el-table-column label="默认库位号" width="100" align="center" prop="defaultStgBinCd"/>
|
||||
<el-table-column label="生产商" align="center" prop="manufacturer"/>
|
||||
<el-table-column label="供应商" align="center" prop="supplier"/>
|
||||
<el-table-column label="安全库存量" width="90" align="center" prop="safetyStock"/>
|
||||
<el-table-column label="最大库存量" width="90" align="center" prop="maxInvQty"/>
|
||||
<el-table-column label="购买阈值" align="center" prop="purchLimitQty"/>
|
||||
<el-table-column label="操作" align="center" width="140" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['wms:ItemInfo:edit']">修改</el-button>
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['wms:ItemInfo:remove']">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 添加或修改物品基础信息对话框 -->
|
||||
@@ -105,67 +119,106 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物品代码" prop="itemCd">
|
||||
<el-input v-model="form.itemCd" placeholder="请输入物品代码" />
|
||||
<el-input v-model="form.itemCd" placeholder="请输入物品代码"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物品名称" prop="itemName">
|
||||
<el-input v-model="form.itemName" placeholder="请输入物品名称" />
|
||||
<el-input v-model="form.itemName" placeholder="请输入物品名称"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="启用标志" prop="enableFlg">
|
||||
<el-input v-model="form.enableFlg" placeholder="请输入启用标志" />
|
||||
<el-radio-group v-model="form.enableFlg">
|
||||
<el-radio
|
||||
v-for="dict in sys_enable_flag"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物品类型" prop="itemTypeCd">
|
||||
<el-input v-model="form.itemTypeCd" placeholder="请输入物品类型代码" />
|
||||
<el-select v-model="form.itemTypeCd" placeholder="请选择物品类型" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in itemTypeList"
|
||||
:key="item.itemTypeCd"
|
||||
:label="item.itemTypeName"
|
||||
:value="item.itemTypeCd"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="供应商" prop="supplier">
|
||||
<el-input v-model="form.supplier" placeholder="请输入供应商" />
|
||||
<el-input v-model="form.supplier" placeholder="请输入供应商"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="生产商" prop="manufacturer">
|
||||
<el-input v-model="form.manufacturer" placeholder="请输入生产商" />
|
||||
<el-input v-model="form.manufacturer" placeholder="请输入生产商"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物品区分" prop="goodsCls">
|
||||
<el-input v-model="form.goodsCls" placeholder="请输入物品区分" />
|
||||
<el-form-item label="自定物品区分" prop="goodsCls">
|
||||
<el-input v-model="form.goodsCls" placeholder="请输入自定物品区分"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="批号管理" prop="lotNoMgmtCls">
|
||||
<el-input v-model="form.lotNoMgmtCls" placeholder="请输入批号管理区分" />
|
||||
<el-radio-group v-model="form.lotNoMgmtCls">
|
||||
<el-radio
|
||||
v-for="dict in sys_enable_flag"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="标准单位" prop="stdUnitCd">
|
||||
<el-input v-model="form.stdUnitCd" placeholder="请输入标准单位代码" />
|
||||
<el-select v-model="form.stdUnitCd" placeholder="请选择标准单位" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in unitList"
|
||||
:key="item.unitCode"
|
||||
:label="item.unitName"
|
||||
:value="item.unitCode"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="包装单位" prop="pkgUnitCd">
|
||||
<el-input v-model="form.pkgUnitCd" placeholder="请输入包装单位代码" />
|
||||
<el-select v-model="form.pkgUnitCd" placeholder="请选择标准单位" clearable filterable>
|
||||
<el-option
|
||||
v-for="item in unitList"
|
||||
:key="item.unitCode"
|
||||
:label="item.unitName"
|
||||
:value="item.unitCode"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="物品图片" prop="pictureId">
|
||||
<el-input v-model="form.pictureId" placeholder="此处需要替换为图片上传的控件" />
|
||||
<fp-file-upload
|
||||
ref="fileUpload"
|
||||
style="width: 100%"
|
||||
:file-type="['image/jpeg', 'image/png', 'image/webp', 'image/gif',]"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -175,12 +228,12 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="默认库位号" prop="defaultStgBinCd">
|
||||
<el-input v-model="form.defaultStgBinCd" placeholder="请输入默认库位号" />
|
||||
<el-input v-model="form.defaultStgBinCd" placeholder="请输入默认库位号"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="供货周期" prop="deliveryPeriod">
|
||||
<el-input v-model="form.deliveryPeriod" placeholder="请输入供货周期" />
|
||||
<el-input v-model="form.deliveryPeriod" placeholder="请输入供货周期"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -192,43 +245,43 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="最大库存量" prop="maxInvQty">
|
||||
<el-input-number v-model="form.maxInvQty" placeholder="请输入最大库存量" :precision="2" :min="0" />
|
||||
<el-input-number v-model="form.maxInvQty" placeholder="请输入最大库存量" :precision="2" :min="0"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="购买阈值" prop="purchLimitQty">
|
||||
<el-input-number v-model="form.purchLimitQty" placeholder="请输入购买阈值" :precision="2" :min="0" />
|
||||
<el-input-number v-model="form.purchLimitQty" placeholder="请输入购买阈值" :precision="2" :min="0"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="最小出库数" prop="outstockReqMinQty">
|
||||
<el-input-number v-model="form.outstockReqMinQty" placeholder="请输入最小出库数" :precision="2" :min="0"/>
|
||||
<el-input-number v-model="form.outstockReqMinQty" placeholder="请输入最小出库数" :precision="2"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入库提前期" prop="instockLeadTime">
|
||||
<el-input-number v-model="form.instockLeadTime" placeholder="请输入入库提前期" :precision="1" />
|
||||
<el-input-number v-model="form.instockLeadTime" placeholder="请输入入库提前期" :precision="0"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="出库提前期" prop="outstockLeadTime">
|
||||
<el-input-number v-model="form.outstockLeadTime" placeholder="请输入出库提前期" :precision="1" />
|
||||
<el-input-number v-model="form.outstockLeadTime" placeholder="请输入出库提前期" :precision="0"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="筹备提前期" prop="prepLeadTime">
|
||||
<el-input-number v-model="form.prepLeadTime" placeholder="请输入筹备提前期" :precision="1" />
|
||||
<el-input-number v-model="form.prepLeadTime" placeholder="请输入筹备提前期" :precision="0"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="放置期" prop="restingPeriod">
|
||||
<el-input-number v-model="form.restingPeriod" placeholder="请输入放置期" :precision="1" />
|
||||
<el-input-number v-model="form.restingPeriod" placeholder="请输入放置期" :precision="0"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -238,48 +291,48 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位净重" prop="netWeightPerUnit">
|
||||
<el-input v-model="form.netWeightPerUnit" placeholder="请输入单位净重" />
|
||||
<el-input-number v-model="form.netWeightPerUnit" placeholder="请输入单位净重" :precision="6"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="自身体积(M3)" prop="ownVolM3">
|
||||
<el-input v-model="form.ownVolM3" placeholder="请输入自身体积(M3)" />
|
||||
<el-input-number v-model="form.ownVolM3" placeholder="请输入自身体积(M3)" :precision="6"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="尺寸(长)" prop="sizeD">
|
||||
<el-input v-model="form.sizeD" placeholder="请输入尺寸(长)" />
|
||||
<el-input-number v-model="form.sizeD" placeholder="请输入尺寸(长)" :precision="6"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="尺寸(宽)" prop="sizeW">
|
||||
<el-input v-model="form.sizeW" placeholder="请输入尺寸(宽)" />
|
||||
<el-input-number v-model="form.sizeW" placeholder="请输入尺寸(宽)" :precision="6"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="尺寸(高)" prop="sizeH">
|
||||
<el-input v-model="form.sizeH" placeholder="请输入尺寸(高)" />
|
||||
<el-input-number v-model="form.sizeH" placeholder="请输入尺寸(高)" :precision="6"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="包装要求描述" prop="pkgRqmtDesc">
|
||||
<el-input v-model="form.pkgRqmtDesc" placeholder="请输入包装要求描述" />
|
||||
<el-input v-model="form.pkgRqmtDesc" placeholder="请输入包装要求描述"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="码放要求描述" prop="stackingRqmtDesc">
|
||||
<el-input v-model="form.stackingRqmtDesc" placeholder="请输入码放要求描述" />
|
||||
<el-input v-model="form.stackingRqmtDesc" placeholder="请输入码放要求描述"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="储存要求描述" prop="stgRqmtDesc">
|
||||
<el-input v-model="form.stgRqmtDesc" placeholder="请输入储存要求描述" />
|
||||
<el-input v-model="form.stgRqmtDesc" placeholder="请输入储存要求描述"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -289,60 +342,60 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格1" prop="spec1">
|
||||
<el-input v-model="form.spec1" placeholder="请输入规格1" />
|
||||
<el-input v-model="form.spec1" placeholder="请输入规格1"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格2" prop="spec2">
|
||||
<el-input v-model="form.spec2" placeholder="请输入规格2" />
|
||||
<el-input v-model="form.spec2" placeholder="请输入规格2"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格3" prop="spec3">
|
||||
<el-input v-model="form.spec3" placeholder="请输入规格3" />
|
||||
<el-input v-model="form.spec3" placeholder="请输入规格3"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格4" prop="spec4">
|
||||
<el-input v-model="form.spec4" placeholder="请输入规格4" />
|
||||
<el-input v-model="form.spec4" placeholder="请输入规格4"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格5" prop="spec5">
|
||||
<el-input v-model="form.spec5" placeholder="请输入规格5" />
|
||||
<el-input v-model="form.spec5" placeholder="请输入规格5"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分类1" prop="cls1">
|
||||
<el-input v-model="form.cls1" placeholder="请输入分类1" />
|
||||
<el-input v-model="form.cls1" placeholder="请输入分类1"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分类2" prop="cls2">
|
||||
<el-input v-model="form.cls2" placeholder="请输入分类2" />
|
||||
<el-input v-model="form.cls2" placeholder="请输入分类2"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分类3" prop="cls3">
|
||||
<el-input v-model="form.cls3" placeholder="请输入分类3" />
|
||||
<el-input v-model="form.cls3" placeholder="请输入分类3"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分类4" prop="cls4">
|
||||
<el-input v-model="form.cls4" placeholder="请输入分类4" />
|
||||
<el-input v-model="form.cls4" placeholder="请输入分类4"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分类5" prop="cls5">
|
||||
<el-input v-model="form.cls5" placeholder="请输入分类5" />
|
||||
<el-input v-model="form.cls5" placeholder="请输入分类5"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -360,11 +413,16 @@
|
||||
</template>
|
||||
|
||||
<script setup name="ItemInfo">
|
||||
import { listItemInfo, getItemInfo, delItemInfo, addItemInfo, updateItemInfo } from "@/api/wms/ItemInfo";
|
||||
import {listItemInfo, getItemInfo, delItemInfo, addItemInfo, updateItemInfo} from "@/api/wms/ItemInfo";
|
||||
import {listUnitInfo} from "@/api/wms/UnitInfo";
|
||||
import {listItemType} from "@/api/wms/ItemType";
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const {proxy} = getCurrentInstance();
|
||||
const {sys_enable_flag} = proxy.useDict("sys_enable_flag");
|
||||
|
||||
const ItemInfoList = ref([]);
|
||||
const unitList = ref([]);
|
||||
const itemTypeList = ref([]);
|
||||
const open = ref(false);
|
||||
const loading = ref(false);
|
||||
const showSearch = ref(true);
|
||||
@@ -373,6 +431,8 @@ const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const title = ref("");
|
||||
const submitMode = ref('add');
|
||||
const fileUpload = ref(null);
|
||||
|
||||
const activeName = ref('basicForm');
|
||||
|
||||
@@ -380,24 +440,27 @@ const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pageSize: 20,
|
||||
itemCd: null,
|
||||
itemName: null,
|
||||
},
|
||||
rules: {
|
||||
itemCd: [
|
||||
{ required: true, message: "物品代码不能为空", trigger: "blur" }
|
||||
{required: true, message: "物品代码不能为空", trigger: "blur"}
|
||||
],
|
||||
itemName: [
|
||||
{ required: true, message: "物品名称不能为空", trigger: "blur" }
|
||||
{required: true, message: "物品名称不能为空", trigger: "blur"}
|
||||
],
|
||||
defaultStgBinCd: [
|
||||
{ required: true, message: "默认库位号不能为空", trigger: "blur" }
|
||||
enableFlg: [
|
||||
{required: true, message: "启用标志不能为空", trigger: "blur"}
|
||||
],
|
||||
stdUnitCd: [
|
||||
{required: true, message: "标准单位不能为空", trigger: "blur"}
|
||||
],
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
const {queryParams, form, rules} = toRefs(data);
|
||||
|
||||
/** 查询物品基础信息列表 */
|
||||
function getList() {
|
||||
@@ -409,6 +472,19 @@ function getList() {
|
||||
});
|
||||
}
|
||||
|
||||
/** 查询物品单位列表 */
|
||||
function getUnitList() {
|
||||
listUnitInfo({}).then(response => {
|
||||
unitList.value = response.rows;
|
||||
});
|
||||
}
|
||||
|
||||
function getItemTypeList() {
|
||||
listItemType({}).then(response => {
|
||||
itemTypeList.value = response.rows;
|
||||
});
|
||||
}
|
||||
|
||||
// 取消按钮
|
||||
function cancel() {
|
||||
open.value = false;
|
||||
@@ -426,28 +502,6 @@ function reset() {
|
||||
instockLeadTime: 0,
|
||||
restingPeriod: 0,
|
||||
outstockLeadTime: 0,
|
||||
spec1: null,
|
||||
spec2: null,
|
||||
spec3: null,
|
||||
spec4: null,
|
||||
spec5: null,
|
||||
cls1: null,
|
||||
cls2: null,
|
||||
cls3: null,
|
||||
cls4: null,
|
||||
cls5: null,
|
||||
updateCount: null,
|
||||
deleteFlag: null,
|
||||
createBy: null,
|
||||
createTime: null,
|
||||
updateBy: null,
|
||||
updateTime: null,
|
||||
remark: null,
|
||||
remark1: null,
|
||||
remark2: null,
|
||||
remark3: null,
|
||||
remark4: null,
|
||||
remark5: null,
|
||||
deliveryPeriod: null,
|
||||
defaultStgBinCd: null,
|
||||
enableFlg: null,
|
||||
@@ -471,7 +525,29 @@ function reset() {
|
||||
stgRqmtDesc: null,
|
||||
manufacturer: null,
|
||||
pictureId: null,
|
||||
pictureUrl: null
|
||||
pictureUrl: null,
|
||||
spec1: null,
|
||||
spec2: null,
|
||||
spec3: null,
|
||||
spec4: null,
|
||||
spec5: null,
|
||||
cls1: null,
|
||||
cls2: null,
|
||||
cls3: null,
|
||||
cls4: null,
|
||||
cls5: null,
|
||||
updateCount: null,
|
||||
deleteFlag: null,
|
||||
createBy: null,
|
||||
createTime: null,
|
||||
updateBy: null,
|
||||
updateTime: null,
|
||||
remark: null,
|
||||
remark1: null,
|
||||
remark2: null,
|
||||
remark3: null,
|
||||
remark4: null,
|
||||
remark5: null,
|
||||
};
|
||||
proxy.resetForm("ItemInfoRef");
|
||||
}
|
||||
@@ -500,6 +576,7 @@ function handleAdd() {
|
||||
reset();
|
||||
open.value = true;
|
||||
title.value = "添加物品基础信息";
|
||||
submitMode.value = 'add';
|
||||
}
|
||||
|
||||
/** 修改按钮操作 */
|
||||
@@ -511,20 +588,31 @@ function handleUpdate(row) {
|
||||
open.value = true;
|
||||
title.value = "修改物品基础信息";
|
||||
});
|
||||
submitMode.value = 'update';
|
||||
}
|
||||
|
||||
/** 提交按钮 */
|
||||
function submitForm() {
|
||||
proxy.$refs["ItemInfoRef"].validate(valid => {
|
||||
if (valid) {
|
||||
if (form.value.itemCd != null) {
|
||||
updateItemInfo(form.value).then(response => {
|
||||
//准备要提交的文件,如果有的话
|
||||
const files = fileUpload.value.getFiles();
|
||||
const submitFiles = [];
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
submitFiles.push({
|
||||
key: 'itemImages',
|
||||
value: files[i],
|
||||
})
|
||||
}
|
||||
//提交数据
|
||||
if (submitMode.value === 'update') {
|
||||
updateItemInfo(form.value, true, submitFiles).then(response => {
|
||||
proxy.$modal.msgSuccess("修改成功");
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
} else {
|
||||
addItemInfo(form.value).then(response => {
|
||||
addItemInfo(form.value, true, submitFiles).then(response => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
open.value = false;
|
||||
getList();
|
||||
@@ -537,12 +625,13 @@ function submitForm() {
|
||||
/** 删除按钮操作 */
|
||||
function handleDelete(row) {
|
||||
const _itemCds = row.itemCd || ids.value;
|
||||
proxy.$modal.confirm('是否确认删除物品基础信息编号为"' + _itemCds + '"的数据项?').then(function() {
|
||||
proxy.$modal.confirm('是否确认删除物品基础信息编号为"' + _itemCds + '"的数据项?').then(function () {
|
||||
return delItemInfo(_itemCds);
|
||||
}).then(() => {
|
||||
getList();
|
||||
proxy.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
}).catch(() => {
|
||||
});
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
@@ -552,6 +641,27 @@ function handleExport() {
|
||||
}, `ItemInfo_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
/** 查看图片 */
|
||||
function handleViewImage(row) {
|
||||
if (!row.pictureUrl) {
|
||||
proxy.$modal.msgWarning("该物品没有图片");
|
||||
return;
|
||||
}
|
||||
window.open(row.pictureUrl)
|
||||
}
|
||||
|
||||
//页面打开时查询
|
||||
//getList();
|
||||
getUnitList();
|
||||
getItemTypeList();
|
||||
</script>
|
||||
<style scoped>
|
||||
.el-select,
|
||||
.el-input-number {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.filepond--item {
|
||||
width: calc(50% - 0.5em);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="ItemTypeList" @selection-change="handleSelectionChange" show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table v-loading="loading" :data="ItemTypeList" @selection-change="handleSelectionChange" :show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="30" align="center" />
|
||||
<el-table-column label="物品类型编码" align="center" prop="itemTypeCd" />
|
||||
<el-table-column label="物品类型名称" align="center" prop="itemTypeName" />
|
||||
<el-table-column label="备注" align="center" prop="remark1" />
|
||||
@@ -125,7 +125,7 @@ const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pageSize: 20,
|
||||
itemTypeName: null,
|
||||
remark1: null,
|
||||
},
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="UnitInfoList" @selection-change="handleSelectionChange" show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table v-loading="loading" :data="UnitInfoList" @selection-change="handleSelectionChange" :show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="30" align="center" />
|
||||
<el-table-column label="单位代码" align="center" prop="unitCode" />
|
||||
<el-table-column label="单位名称" align="center" prop="unitName" />
|
||||
<el-table-column label="备注" align="center" prop="remark1" />
|
||||
@@ -125,7 +125,7 @@ const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pageSize: 20,
|
||||
unitCode: null,
|
||||
unitName: null,
|
||||
},
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="WarehouseInfoList" @selection-change="handleSelectionChange" show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table v-loading="loading" :data="WarehouseInfoList" @selection-change="handleSelectionChange" :show-overflow-tooltip="true">
|
||||
<el-table-column type="selection" width="30" align="center" />
|
||||
<el-table-column label="仓库代码" align="center" prop="whsCd" />
|
||||
<el-table-column label="仓库名称" align="center" prop="whsName" />
|
||||
<el-table-column label="仓库类型代码" align="center" prop="whsTypeCd" />
|
||||
@@ -173,7 +173,7 @@ const data = reactive({
|
||||
form: {},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
pageSize: 20,
|
||||
whsCd: null,
|
||||
whsName: null,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user