parent
74bcb3c194
commit
e100956037
|
@ -5,7 +5,7 @@ NODE_ENV = development
|
||||||
VITE_TITLE = Snowy
|
VITE_TITLE = Snowy
|
||||||
|
|
||||||
# 接口地址
|
# 接口地址
|
||||||
VITE_API_BASEURL = http://localhost:82
|
VITE_API_BASEURL = http://49.234.181.176:27315/bsx
|
||||||
|
|
||||||
# 本地端口
|
# 本地端口
|
||||||
VITE_PORT = 81
|
VITE_PORT = 81
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div></div>
|
<div></div>
|
||||||
<a-modal v-model:open="visible" title="物料选择" width="80%" @ok="handleOk" @cancel="handleClose">
|
<a-modal v-model:open="visible" title="客户选择" width="80%" @ok="handleOk" @cancel="handleClose">
|
||||||
<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
|
<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
|
||||||
<a-row :gutter="24">
|
<a-row :gutter="24">
|
||||||
<a-col :span="6">
|
<a-col :span="6">
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
treeTitle="物料分类"
|
treeTitle="物料分类"
|
||||||
:tableRef="tableRef"
|
:tableRef="tableRef"
|
||||||
:apiModel="{
|
:apiModel="{
|
||||||
getTree: customerCategoryApi.customerCategoryTree,
|
getTree: customerCategoryApi.customerCategoryTree
|
||||||
}"
|
}"
|
||||||
@selectTree="selectTree"
|
@selectTree="selectTree"
|
||||||
@treeRefresh="treeRefresh"
|
@treeRefresh="treeRefresh"
|
||||||
|
@ -82,94 +82,94 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { useTableManagement } from '@/hook/useTableManagement'
|
import { useTableManagement } from '@/hook/useTableManagement'
|
||||||
import { message } from 'ant-design-vue'
|
import { message } from 'ant-design-vue'
|
||||||
import customerApi from "@/api/base/customer/customerApi";
|
import customerApi from '@/api/base/customer/customerApi'
|
||||||
import customerCategoryApi from "@/api/base/customer/customerCategoryApi";
|
import customerCategoryApi from '@/api/base/customer/customerCategoryApi'
|
||||||
import {clientColumn} from "@/views/productionBusiness/basicData/client/columns/clientColumn";
|
import { clientColumn } from '@/views/productionBusiness/basicData/client/columns/clientColumn'
|
||||||
|
|
||||||
const emits = defineEmits(['ok'])
|
const emits = defineEmits(['ok'])
|
||||||
|
|
||||||
// 弹窗是否打开
|
// 弹窗是否打开
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
// 物料分类
|
// 物料分类
|
||||||
const dynamicTreeRef = ref(null)
|
const dynamicTreeRef = ref(null)
|
||||||
// 列表查询
|
// 列表查询
|
||||||
const { searchFormState, tableRef, selectedRowKeys, columns, loadData, reset, options, searchFormRef } =
|
const { searchFormState, tableRef, selectedRowKeys, columns, loadData, reset, options, searchFormRef } =
|
||||||
useTableManagement(
|
useTableManagement(
|
||||||
{
|
{
|
||||||
page: customerApi.customerPage,
|
page: customerApi.customerPage
|
||||||
},
|
},
|
||||||
clientColumn,
|
clientColumn,
|
||||||
[],
|
[],
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
|
|
||||||
// 选择树
|
// 选择树
|
||||||
const selectTree = (value) => {
|
const selectTree = (value) => {
|
||||||
searchFormState.value.categoryId = value.id
|
searchFormState.value.categoryId = value.id
|
||||||
tableRef.value.refresh()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 刷新树
|
|
||||||
const treeRefresh = () => {
|
|
||||||
searchFormState.value.categoryId = null
|
|
||||||
tableRef.value.refresh()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 物料单选
|
|
||||||
let clientSelectedRowKey = []
|
|
||||||
let clientSelectedRows = []
|
|
||||||
const tableRowSelection = {
|
|
||||||
type: 'radio',
|
|
||||||
onChange: (selectedRowKey, selectedRows) => {
|
|
||||||
clientSelectedRowKey = selectedRowKey
|
|
||||||
clientSelectedRows = selectedRows
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 确认
|
|
||||||
const handleOk = () => {
|
|
||||||
if (clientSelectedRowKey.length === 0) return message.error('请选择物料')
|
|
||||||
|
|
||||||
emits('ok', {
|
|
||||||
clientSelectedRowKey,
|
|
||||||
clientSelectedRows
|
|
||||||
})
|
|
||||||
|
|
||||||
closeModal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 关闭弹窗
|
|
||||||
const handleClose = () => {
|
|
||||||
closeModal()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 关闭方法
|
|
||||||
const closeModal = () => {
|
|
||||||
// 关闭弹窗
|
|
||||||
visible.value = false
|
|
||||||
// 清空table 选项
|
|
||||||
tableRef.value.clearSelected()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 打开方法
|
|
||||||
const showOpen = () => {
|
|
||||||
visible.value = true
|
|
||||||
|
|
||||||
nextTick(() => {
|
|
||||||
// 加载物料分类
|
|
||||||
dynamicTreeRef.value.loadTreeData()
|
|
||||||
|
|
||||||
// 加载表格
|
|
||||||
tableRef.value.refresh()
|
tableRef.value.refresh()
|
||||||
})
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// 导出方法
|
// 刷新树
|
||||||
defineExpose({
|
const treeRefresh = () => {
|
||||||
showOpen
|
searchFormState.value.categoryId = null
|
||||||
})
|
tableRef.value.refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 物料单选
|
||||||
|
let clientSelectedRowKey = []
|
||||||
|
let clientSelectedRows = []
|
||||||
|
const tableRowSelection = {
|
||||||
|
type: 'radio',
|
||||||
|
onChange: (selectedRowKey, selectedRows) => {
|
||||||
|
clientSelectedRowKey = selectedRowKey
|
||||||
|
clientSelectedRows = selectedRows
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确认
|
||||||
|
const handleOk = () => {
|
||||||
|
if (clientSelectedRowKey.length === 0) return message.error('请选择物料')
|
||||||
|
|
||||||
|
emits('ok', {
|
||||||
|
clientSelectedRowKey,
|
||||||
|
clientSelectedRows
|
||||||
|
})
|
||||||
|
|
||||||
|
closeModal()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭弹窗
|
||||||
|
const handleClose = () => {
|
||||||
|
closeModal()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭方法
|
||||||
|
const closeModal = () => {
|
||||||
|
// 关闭弹窗
|
||||||
|
visible.value = false
|
||||||
|
// 清空table 选项
|
||||||
|
tableRef.value.clearSelected()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打开方法
|
||||||
|
const showOpen = () => {
|
||||||
|
visible.value = true
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
// 加载物料分类
|
||||||
|
dynamicTreeRef.value.loadTreeData()
|
||||||
|
|
||||||
|
// 加载表格
|
||||||
|
tableRef.value.refresh()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出方法
|
||||||
|
defineExpose({
|
||||||
|
showOpen
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
|
|
@ -0,0 +1,173 @@
|
||||||
|
<template>
|
||||||
|
<div></div>
|
||||||
|
<a-modal v-model:open="visible" title="客户选择" width="80%" @ok="handleOk" @cancel="handleClose">
|
||||||
|
<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-form-item label="名称" name="name">
|
||||||
|
<a-input v-model:value="searchFormState.name" placeholder="请输入名称" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-form-item label="编码" name="number">
|
||||||
|
<a-input v-model:value="searchFormState.number" placeholder="请输入编码" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-form-item label="可用状态" name="enabledState">
|
||||||
|
<a-select
|
||||||
|
v-model:value="searchFormState.enabledState"
|
||||||
|
placeholder="请选择可用状态"
|
||||||
|
:options="$TOOL.dictList('COMMON_STATUS')"
|
||||||
|
/>
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
|
||||||
|
<a-button style="margin: 0 8px" @click="reset">重置</a-button>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form>
|
||||||
|
|
||||||
|
<a-row :gutter="24">
|
||||||
|
<a-col :span="6">
|
||||||
|
<dynamic-tree
|
||||||
|
ref="dynamicTreeRef"
|
||||||
|
treeTitle="仓库分类"
|
||||||
|
:tableRef="tableRef"
|
||||||
|
:apiModel="{
|
||||||
|
getTree: sysStoreApi.sysStoreTree
|
||||||
|
}"
|
||||||
|
@selectTree="selectTree"
|
||||||
|
@treeRefresh="treeRefresh"
|
||||||
|
:toolConfig="{
|
||||||
|
plus: false,
|
||||||
|
edit: false,
|
||||||
|
delete: false,
|
||||||
|
refresh: true
|
||||||
|
}"
|
||||||
|
></dynamic-tree>
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="18">
|
||||||
|
<s-table
|
||||||
|
ref="tableRef"
|
||||||
|
:columns="columns"
|
||||||
|
:data="loadData"
|
||||||
|
:alert="options.alert.show"
|
||||||
|
bordered
|
||||||
|
:row-key="(record) => record.id"
|
||||||
|
:tool-config="options.toolConfig"
|
||||||
|
:row-selection="tableRowSelection"
|
||||||
|
:scroll="{
|
||||||
|
x: 100,
|
||||||
|
y: 500
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #bodyCell="{ column, record }">
|
||||||
|
<template v-if="column.dataIndex === 'number'">
|
||||||
|
<a href="#">{{ record.number }}</a>
|
||||||
|
</template>
|
||||||
|
<template v-if="column.dataIndex === 'enabledState'">
|
||||||
|
<a-tag color="#87d068" v-if="record.enabledState === 'ENABLE'">启用</a-tag>
|
||||||
|
<a-tag color="#f50" v-if="record.enabledState === 'DISABLED'">停用</a-tag>
|
||||||
|
</template>
|
||||||
|
<template v-if="column.dataIndex === 'type'">
|
||||||
|
{{ $TOOL.dictTypeData('OFFICIAL_ACCOUNT_TYPE', record.type) }}
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</s-table>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useTableManagement } from '@/hook/useTableManagement'
|
||||||
|
import { message } from 'ant-design-vue'
|
||||||
|
import { clientColumn } from '@/views/productionBusiness/basicData/client/columns/clientColumn'
|
||||||
|
import sysStoreApi from '@/api/base/store/sysStoreApi'
|
||||||
|
|
||||||
|
const emits = defineEmits(['ok'])
|
||||||
|
|
||||||
|
// 弹窗是否打开
|
||||||
|
const visible = ref(false)
|
||||||
|
// 仓库分类
|
||||||
|
const dynamicTreeRef = ref(null)
|
||||||
|
// 列表查询
|
||||||
|
const { searchFormState, tableRef, columns, loadData, reset, options, searchFormRef } = useTableManagement(
|
||||||
|
{
|
||||||
|
page: sysStoreApi.page
|
||||||
|
},
|
||||||
|
clientColumn,
|
||||||
|
[],
|
||||||
|
false
|
||||||
|
)
|
||||||
|
|
||||||
|
// 选择树
|
||||||
|
const selectTree = (value) => {
|
||||||
|
searchFormState.value.categoryId = value.id
|
||||||
|
tableRef.value.refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 刷新树
|
||||||
|
const treeRefresh = () => {
|
||||||
|
searchFormState.value.categoryId = null
|
||||||
|
tableRef.value.refresh()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 仓库单选
|
||||||
|
let clientSelectedRowKey = []
|
||||||
|
let clientSelectedRows = []
|
||||||
|
const tableRowSelection = {
|
||||||
|
type: 'radio',
|
||||||
|
onChange: (selectedRowKey, selectedRows) => {
|
||||||
|
clientSelectedRowKey = selectedRowKey
|
||||||
|
clientSelectedRows = selectedRows
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确认
|
||||||
|
const handleOk = () => {
|
||||||
|
if (clientSelectedRowKey.length === 0) return message.error('请选择仓库')
|
||||||
|
|
||||||
|
emits('ok', {
|
||||||
|
clientSelectedRowKey,
|
||||||
|
clientSelectedRows
|
||||||
|
})
|
||||||
|
|
||||||
|
closeModal()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭弹窗
|
||||||
|
const handleClose = () => {
|
||||||
|
closeModal()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 关闭方法
|
||||||
|
const closeModal = () => {
|
||||||
|
// 关闭弹窗
|
||||||
|
visible.value = false
|
||||||
|
// 清空table 选项
|
||||||
|
tableRef.value.clearSelected()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打开方法
|
||||||
|
const showOpen = () => {
|
||||||
|
visible.value = true
|
||||||
|
|
||||||
|
nextTick(() => {
|
||||||
|
// 加载仓库分类
|
||||||
|
dynamicTreeRef.value.loadTreeData()
|
||||||
|
|
||||||
|
// 加载表格
|
||||||
|
tableRef.value.refresh()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出方法
|
||||||
|
defineExpose({
|
||||||
|
showOpen
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
|
@ -0,0 +1,18 @@
|
||||||
|
export const apkColumns = [
|
||||||
|
{
|
||||||
|
title: '版本号',
|
||||||
|
dataIndex: 'versionNumber'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '版本更新介绍',
|
||||||
|
dataIndex: 'versionIntroduction'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'apk链接',
|
||||||
|
dataIndex: 'apkLink'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '状态',
|
||||||
|
dataIndex: 'state'
|
||||||
|
}
|
||||||
|
]
|
|
@ -6,18 +6,25 @@
|
||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
@close="onClose"
|
@close="onClose"
|
||||||
>
|
>
|
||||||
|
<a-alert message="注意:新增后默认为第一条是最新安装包!" type="warning" show-icon />
|
||||||
<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
|
<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
|
||||||
<a-form-item label="版本号:" name="versionNumber">
|
<a-form-item label="版本号:" name="versionNumber">
|
||||||
<a-input v-model:value="formData.versionNumber" placeholder="请输入版本号" allow-clear />
|
<a-input :min="100" v-model:value="formData.versionNumber" placeholder="版本号范围 100 ~ 100000" allow-clear />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="版本更新介绍:" name="versionIntroduction">
|
<a-form-item label="版本更新介绍:" name="versionIntroduction">
|
||||||
<a-input v-model:value="formData.versionIntroduction" placeholder="请输入版本更新介绍" allow-clear />
|
<XnEditor v-model:value="formData.versionIntroduction"></XnEditor>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item label="apk链接:" name="apkLink">
|
<a-form-item label="apk链接:" name="apkLink">
|
||||||
<a-input v-model:value="formData.apkLink" placeholder="请输入apk链接" allow-clear />
|
<a-upload
|
||||||
</a-form-item>
|
@change="handleUploadChange"
|
||||||
<a-form-item label="状态:" name="state">
|
action="http://49.234.181.176:27315/bsx/dev/file/uploadLocalReturnUrl"
|
||||||
<a-input v-model:value="formData.state" placeholder="请输入状态" allow-clear />
|
:multiple="true"
|
||||||
|
>
|
||||||
|
<a-button>
|
||||||
|
<upload-outlined></upload-outlined>
|
||||||
|
上传APK包
|
||||||
|
</a-button>
|
||||||
|
</a-upload>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
@ -28,52 +35,57 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="pdaChangelogForm">
|
<script setup name="pdaChangelogForm">
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { cloneDeep } from 'lodash-es'
|
||||||
import { required } from '@/utils/formRules'
|
import { required } from '@/utils/formRules'
|
||||||
import pdaChangelogApi from '@/api/biz/pdaChangelogApi'
|
import pdaChangelogApi from '@/api/biz/pdaChangelogApi'
|
||||||
// 抽屉状态
|
// 抽屉状态
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
const emit = defineEmits({ successful: null })
|
const emit = defineEmits({ successful: null })
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
// 表单数据
|
// 表单数据
|
||||||
const formData = ref({})
|
const formData = ref({})
|
||||||
const submitLoading = ref(false)
|
const submitLoading = ref(false)
|
||||||
|
|
||||||
// 打开抽屉
|
// 打开抽屉
|
||||||
const onOpen = (record) => {
|
const onOpen = (record) => {
|
||||||
visible.value = true
|
visible.value = true
|
||||||
if (record) {
|
if (record) {
|
||||||
let recordData = cloneDeep(record)
|
let recordData = cloneDeep(record)
|
||||||
formData.value = Object.assign({}, recordData)
|
formData.value = Object.assign({}, recordData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
// 关闭抽屉
|
||||||
// 关闭抽屉
|
const onClose = () => {
|
||||||
const onClose = () => {
|
formRef.value.resetFields()
|
||||||
formRef.value.resetFields()
|
formData.value = {}
|
||||||
formData.value = {}
|
visible.value = false
|
||||||
visible.value = false
|
}
|
||||||
}
|
const handleUploadChange = (data) => {
|
||||||
// 默认要校验的
|
if (data.file.status === 'done') {
|
||||||
const formRules = {
|
console.log(data.file.response.data, 'data.file.response.data')
|
||||||
}
|
formData.value.apkLink = data.file.response.data
|
||||||
// 验证并提交数据
|
}
|
||||||
const onSubmit = () => {
|
}
|
||||||
formRef.value.validate().then(() => {
|
// 默认要校验的
|
||||||
submitLoading.value = true
|
const formRules = {}
|
||||||
const formDataParam = cloneDeep(formData.value)
|
// 验证并提交数据
|
||||||
pdaChangelogApi
|
const onSubmit = () => {
|
||||||
.pdaChangelogSubmitForm(formDataParam, formDataParam.id)
|
formRef.value.validate().then(() => {
|
||||||
.then(() => {
|
submitLoading.value = true
|
||||||
onClose()
|
const formDataParam = cloneDeep(formData.value)
|
||||||
emit('successful')
|
pdaChangelogApi
|
||||||
})
|
.pdaChangelogSubmitForm(formDataParam, formDataParam.id)
|
||||||
.finally(() => {
|
.then(() => {
|
||||||
submitLoading.value = false
|
onClose()
|
||||||
})
|
emit('successful')
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
submitLoading.value = false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 抛出函数
|
||||||
|
defineExpose({
|
||||||
|
onOpen
|
||||||
})
|
})
|
||||||
}
|
|
||||||
// 抛出函数
|
|
||||||
defineExpose({
|
|
||||||
onOpen
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
import tool from '@/utils/tool'
|
||||||
|
|
||||||
|
export const searchFields = [
|
||||||
|
{ name: 'name', label: '名称', component: 'a-input', props: { placeholder: '请输入名称' } },
|
||||||
|
{
|
||||||
|
name: 'enabledState',
|
||||||
|
label: '可用状态',
|
||||||
|
component: 'a-select',
|
||||||
|
props: { placeholder: '请选择状态', options: tool.dictList('COMMON_STATUS') }
|
||||||
|
},
|
||||||
|
{ name: 'number', label: '编码', component: 'a-input', props: { placeholder: '请输入编码' } }
|
||||||
|
]
|
|
@ -1,23 +1,12 @@
|
||||||
<template>
|
<template>
|
||||||
<a-card :bordered="false">
|
<AdvancedSearchForm
|
||||||
<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
|
:formState="searchFormState"
|
||||||
<a-row :gutter="24">
|
:formFields="searchFields"
|
||||||
<a-col :span="6">
|
@search="tableRef.refresh()"
|
||||||
<a-form-item label="版本号" name="versionNumber">
|
@reset="tableRef.refresh()"
|
||||||
<a-input v-model:value="searchFormState.versionNumber" placeholder="请输入版本号" />
|
/>
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
<a-card :bordered="false" class="mt-4">
|
||||||
<a-col :span="6">
|
|
||||||
<a-form-item label="状态" name="state">
|
|
||||||
<a-input v-model:value="searchFormState.state" placeholder="请输入状态" />
|
|
||||||
</a-form-item>
|
|
||||||
</a-col>
|
|
||||||
<a-col :span="6">
|
|
||||||
<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
|
|
||||||
<a-button style="margin: 0 8px" @click="reset">重置</a-button>
|
|
||||||
</a-col>
|
|
||||||
</a-row>
|
|
||||||
</a-form>
|
|
||||||
<s-table
|
<s-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
|
@ -44,11 +33,43 @@
|
||||||
<template #bodyCell="{ column, record }">
|
<template #bodyCell="{ column, record }">
|
||||||
<template v-if="column.dataIndex === 'action'">
|
<template v-if="column.dataIndex === 'action'">
|
||||||
<a-space>
|
<a-space>
|
||||||
<a @click="formRef.onOpen(record)" v-if="hasPerm('pdaChangelogEdit')">编辑</a>
|
<a
|
||||||
<a-divider type="vertical" v-if="hasPerm(['pdaChangelogEdit', 'pdaChangelogDelete'], 'and')" />
|
@click="
|
||||||
<a-popconfirm title="确定要删除吗?" @confirm="deletePdaChangelog(record)">
|
navigateTo('/basicData/brand/detail', {
|
||||||
<a-button type="link" danger size="small" v-if="hasPerm('pdaChangelogDelete')">删除</a-button>
|
type: 'SEARCH',
|
||||||
</a-popconfirm>
|
id: record.id
|
||||||
|
})
|
||||||
|
"
|
||||||
|
v-if="hasPerm('customerEdit')"
|
||||||
|
>
|
||||||
|
<EyeOutlined />
|
||||||
|
查看
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a-divider type="vertical" v-if="hasPerm(['customerEdit', 'customerDelete'], 'and')" />
|
||||||
|
|
||||||
|
<a-dropdown>
|
||||||
|
<a class="ant-dropdown-link" @click.prevent>
|
||||||
|
更多
|
||||||
|
<DownOutlined />
|
||||||
|
</a>
|
||||||
|
<template #overlay>
|
||||||
|
<a-menu>
|
||||||
|
<a-menu-item>
|
||||||
|
<a-button
|
||||||
|
type="link"
|
||||||
|
danger
|
||||||
|
size="small"
|
||||||
|
v-if="hasPerm('materialDelete')"
|
||||||
|
@click="deleteRecord(record)"
|
||||||
|
>
|
||||||
|
<DeleteOutlined />
|
||||||
|
删除
|
||||||
|
</a-button>
|
||||||
|
</a-menu-item>
|
||||||
|
</a-menu>
|
||||||
|
</template>
|
||||||
|
</a-dropdown>
|
||||||
</a-space>
|
</a-space>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
|
@ -58,83 +79,30 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="changelog">
|
<script setup name="changelog">
|
||||||
import { cloneDeep } from 'lodash-es'
|
import { searchFields } from '@/views/biz/app/apk/formFields/searchFields'
|
||||||
import Form from './detail/form.vue'
|
|
||||||
import pdaChangelogApi from '@/api/biz/pdaChangelogApi'
|
import pdaChangelogApi from '@/api/biz/pdaChangelogApi'
|
||||||
const searchFormState = ref({})
|
import Form from './detail/form.vue'
|
||||||
const searchFormRef = ref()
|
import { apkColumns } from '@/views/biz/app/apk/columns/apkColumns'
|
||||||
const tableRef = ref()
|
import { useTableManagement } from '@/hook/useTableManagement'
|
||||||
const formRef = ref()
|
|
||||||
const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
|
const formRef = ref(null)
|
||||||
const columns = [
|
const {
|
||||||
|
searchFormState,
|
||||||
|
tableRef,
|
||||||
|
selectedRowKeys,
|
||||||
|
columns,
|
||||||
|
loadData,
|
||||||
|
deleteRecord,
|
||||||
|
deleteBatchRecords,
|
||||||
|
options,
|
||||||
|
navigateTo,
|
||||||
|
toolConfig
|
||||||
|
} = useTableManagement(
|
||||||
{
|
{
|
||||||
title: '版本号',
|
page: pdaChangelogApi.pdaChangelogPage,
|
||||||
dataIndex: 'versionNumber'
|
delete: pdaChangelogApi.pdaChangelogDelete
|
||||||
},
|
},
|
||||||
{
|
apkColumns,
|
||||||
title: '版本更新介绍',
|
['sysBrandEdit', 'sysBrandDelete']
|
||||||
dataIndex: 'versionIntroduction'
|
)
|
||||||
},
|
|
||||||
{
|
|
||||||
title: 'apk链接',
|
|
||||||
dataIndex: 'apkLink'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '状态',
|
|
||||||
dataIndex: 'state'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
// 操作栏通过权限判断是否显示
|
|
||||||
if (hasPerm(['pdaChangelogEdit', 'pdaChangelogDelete'])) {
|
|
||||||
columns.push({
|
|
||||||
title: '操作',
|
|
||||||
dataIndex: 'action',
|
|
||||||
align: 'center',
|
|
||||||
width: 150
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const selectedRowKeys = ref([])
|
|
||||||
// 列表选择配置
|
|
||||||
const options = {
|
|
||||||
// columns数字类型字段加入 needTotal: true 可以勾选自动算账
|
|
||||||
alert: {
|
|
||||||
show: true,
|
|
||||||
clear: () => {
|
|
||||||
selectedRowKeys.value = ref([])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
rowSelection: {
|
|
||||||
onChange: (selectedRowKey, selectedRows) => {
|
|
||||||
selectedRowKeys.value = selectedRowKey
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const loadData = (parameter) => {
|
|
||||||
const searchFormParam = cloneDeep(searchFormState.value)
|
|
||||||
return pdaChangelogApi.pdaChangelogPage(Object.assign(parameter, searchFormParam)).then((data) => {
|
|
||||||
return data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 重置
|
|
||||||
const reset = () => {
|
|
||||||
searchFormRef.value.resetFields()
|
|
||||||
tableRef.value.refresh(true)
|
|
||||||
}
|
|
||||||
// 删除
|
|
||||||
const deletePdaChangelog = (record) => {
|
|
||||||
let params = [
|
|
||||||
{
|
|
||||||
id: record.id
|
|
||||||
}
|
|
||||||
]
|
|
||||||
pdaChangelogApi.pdaChangelogDelete(params).then(() => {
|
|
||||||
tableRef.value.refresh(true)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
// 批量删除
|
|
||||||
const deleteBatchPdaChangelog = (params) => {
|
|
||||||
pdaChangelogApi.pdaChangelogDelete(params).then(() => {
|
|
||||||
tableRef.value.clearRefreshSelected()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<a-page-header style="padding: 10px; font-size: 20px" @back="handleBack">
|
<a-page-header style="padding: 10px; font-size: 20px">
|
||||||
<template #extra>
|
<template #extra>
|
||||||
<a-button v-if="route.query.type !== 'SEARCH'" key="1" type="primary" @click="onSubmitForm">保存</a-button>
|
<a-button v-if="route.query.type !== 'SEARCH'" type="primary" @click="onSubmitFormBack">保存后退出</a-button>
|
||||||
|
<a-button v-if="route.query.type !== 'SEARCH'" type="primary" @click="onSubmitFormAdd">保存后新增</a-button>
|
||||||
|
<a-button @click="handleBack('/inventory/invoice')">退出</a-button>
|
||||||
</template>
|
</template>
|
||||||
</a-page-header>
|
</a-page-header>
|
||||||
|
|
||||||
<a-card :bordered="false" title="基本信息">
|
<a-card :bordered="false" title="基本信息">
|
||||||
<DynamicForm
|
<DynamicForm
|
||||||
|
v-if="route.query.type !== 'SEARCH'"
|
||||||
:allDisabled="route.query.type === 'SEARCH'"
|
:allDisabled="route.query.type === 'SEARCH'"
|
||||||
:formItems="basicInfoFormItemsRef"
|
:formItems="basicInfoFormItemsRef"
|
||||||
:rules="basicInfoFormRules"
|
:rules="basicInfoFormRules"
|
||||||
|
@ -22,10 +25,32 @@
|
||||||
@click="openClient"
|
@click="openClient"
|
||||||
></a-input>
|
></a-input>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #storeSlot="{ model, item }">
|
||||||
|
<a-input
|
||||||
|
:disabled="route.query.type === 'SEARCH'"
|
||||||
|
readonly
|
||||||
|
v-bind="{ ...item.attrs }"
|
||||||
|
v-model:value="model[item.name]"
|
||||||
|
@click="openStore"
|
||||||
|
></a-input>
|
||||||
|
</template>
|
||||||
</DynamicForm>
|
</DynamicForm>
|
||||||
|
|
||||||
|
<a-descriptions bordered v-else>
|
||||||
|
<a-descriptions-item
|
||||||
|
:span="item.span"
|
||||||
|
:label="item.label"
|
||||||
|
v-for="(item, index) in basicInfoViewFormItems"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
<span v-if="!item.type">{{ detailData[item.name] }}</span>
|
||||||
|
<span v-if="item.type === 'dict'">{{ tool.dictTypeData(item.attrs.options, detailData[item.name]) }}</span>
|
||||||
|
</a-descriptions-item>
|
||||||
|
</a-descriptions>
|
||||||
</a-card>
|
</a-card>
|
||||||
|
|
||||||
<a-card
|
<!-- <a-card
|
||||||
:bordered="false"
|
:bordered="false"
|
||||||
class="mt-4"
|
class="mt-4"
|
||||||
style="height: 100%"
|
style="height: 100%"
|
||||||
|
@ -38,7 +63,7 @@
|
||||||
:model="extendFormData"
|
:model="extendFormData"
|
||||||
v-if="extendData.length > 0"
|
v-if="extendData.length > 0"
|
||||||
/>
|
/>
|
||||||
</a-card>
|
</a-card>-->
|
||||||
|
|
||||||
<a-card :bordered="false" class="mt-4" style="height: 100%" title="商品明细信息">
|
<a-card :bordered="false" class="mt-4" style="height: 100%" title="商品明细信息">
|
||||||
<a-space>
|
<a-space>
|
||||||
|
@ -110,6 +135,8 @@
|
||||||
<materiel-selector-plus ref="materielSelectorPlusRef" @ok="materielBackOk"></materiel-selector-plus>
|
<materiel-selector-plus ref="materielSelectorPlusRef" @ok="materielBackOk"></materiel-selector-plus>
|
||||||
|
|
||||||
<client-selector-plus ref="clientSelectorPlusRef" @ok="clientBackOk"></client-selector-plus>
|
<client-selector-plus ref="clientSelectorPlusRef" @ok="clientBackOk"></client-selector-plus>
|
||||||
|
|
||||||
|
<store-selector-plus ref="storeSelectorPlusRef" @ok="storeBackOk"></store-selector-plus>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="taskDetail">
|
<script setup name="taskDetail">
|
||||||
|
@ -125,11 +152,17 @@
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import MaterielSelectorPlus from '@/components/Selector/materielSelectorPlus.vue'
|
import MaterielSelectorPlus from '@/components/Selector/materielSelectorPlus.vue'
|
||||||
import ClientSelectorPlus from '@/components/Selector/clientSelectorPlus.vue'
|
import ClientSelectorPlus from '@/components/Selector/clientSelectorPlus.vue'
|
||||||
|
import StoreSelectorPlus from '@/components/Selector/storeSelectorPlus.vue'
|
||||||
|
import router from '@/router'
|
||||||
|
import tool from '@/utils/tool'
|
||||||
|
import { basicInfoViewFormItems } from '@/views/productionBusiness/inventory/invoice/formFields/detailFields'
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
const formRef1 = ref(null)
|
const formRef1 = ref(null)
|
||||||
let extendData = ref([])
|
let extendData = ref([])
|
||||||
|
let detailData = ref({})
|
||||||
|
|
||||||
const basicInfoFormItemsRef = ref(basicInfoFormItems)
|
const basicInfoFormItemsRef = ref(basicInfoFormItems)
|
||||||
|
|
||||||
|
@ -143,19 +176,21 @@
|
||||||
formRefs.value = [formRef1.value]
|
formRefs.value = [formRef1.value]
|
||||||
fetchData(route.query.type).then((res) => {
|
fetchData(route.query.type).then((res) => {
|
||||||
if (res) {
|
if (res) {
|
||||||
|
detailData.value = res
|
||||||
formData.customerId = res.customerId // 客户id
|
formData.customerId = res.customerId // 客户id
|
||||||
formData.customerName = res.customerName // 客户id
|
formData.customerName = res.customerName // 客户id
|
||||||
formData.customerNumber = res.customerNumber // 客户编码
|
formData.customerNumber = res.customerNumber // 客户编码
|
||||||
formData.storeId = res.storeId // 仓库id
|
formData.storeId = res.storeId // 仓库id
|
||||||
formData.storeName = res.storeName // 仓库名称
|
formData.storeName = res.storeName // 仓库名称
|
||||||
formData.storeNumber = res.storeNumber // 仓库编码
|
formData.storeNumber = res.storeNumber // 仓库编码
|
||||||
|
formData.businessDate = dayjs(detailData.value.businessDate).format('YYYY-MM-DD HH:mm:ss')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (route.query.type === 'EDIT') {
|
if (route.query.type === 'EDIT') {
|
||||||
// 获取明细列表
|
// 获取明细列表
|
||||||
productDetailData.value = await inventoryInvoiceApi.inventoryInvoiceDetailList({
|
productDetailData.value = await inventoryInvoiceApi.inventoryInvoiceDetailList({
|
||||||
invoiceId: formRefs.value.id
|
invoiceId: route.query.id
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,11 +205,32 @@
|
||||||
extendData.value = await getExtendField('MATERIAL')
|
extendData.value = await getExtendField('MATERIAL')
|
||||||
})
|
})
|
||||||
|
|
||||||
const onSubmitForm = () => {
|
const onSubmitFormBack = () => {
|
||||||
onSubmit({
|
onSubmit(
|
||||||
isDeep: true,
|
{
|
||||||
...formData,
|
isDeep: true,
|
||||||
detailList: productDetailData.value
|
...formData,
|
||||||
|
detailList: productDetailData.value,
|
||||||
|
id: detailData.value?.id,
|
||||||
|
},
|
||||||
|
'/inventory/invoice'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
const onSubmitFormAdd = () => {
|
||||||
|
onSubmit(
|
||||||
|
{
|
||||||
|
isDeep: true,
|
||||||
|
...formData,
|
||||||
|
detailList: productDetailData.value,
|
||||||
|
id: detailData.value?.id,
|
||||||
|
},
|
||||||
|
'/inventory/invoice'
|
||||||
|
).then(() => {
|
||||||
|
// 新增清空所有的表单数据
|
||||||
|
router.replace({ path: route.path, query: { type: route.type } }).then(() => {
|
||||||
|
router.go(0) // 刷新页面
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,7 +240,7 @@
|
||||||
record.barcodeType = unitObj.type
|
record.barcodeType = unitObj.type
|
||||||
record.barcodeTypeNumber = unitObj.number
|
record.barcodeTypeNumber = unitObj.number
|
||||||
|
|
||||||
if(record.planAmount) {
|
if (record.planAmount) {
|
||||||
record.basicPlanAmount = parseFloat(record.planAmount * parseFloat(unitObj.unitRate)).toFixed(2)
|
record.basicPlanAmount = parseFloat(record.planAmount * parseFloat(unitObj.unitRate)).toFixed(2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -223,9 +279,6 @@
|
||||||
productDetailData.value[materielIndex].packageProportion = event.materielSelectedRows[0].packageProportion
|
productDetailData.value[materielIndex].packageProportion = event.materielSelectedRows[0].packageProportion
|
||||||
productDetailData.value[materielIndex].baseUnitName = event.materielSelectedRows[0].baseUnitName
|
productDetailData.value[materielIndex].baseUnitName = event.materielSelectedRows[0].baseUnitName
|
||||||
productDetailData.value[materielIndex].baseUnitId = event.materielSelectedRows[0].baseUnitId
|
productDetailData.value[materielIndex].baseUnitId = event.materielSelectedRows[0].baseUnitId
|
||||||
// productDetailData.value[materielIndex].basicPlanAmount = event.materielSelectedRows[0].basicPlanAmount // 批次号
|
|
||||||
|
|
||||||
// productDetailData.value[materielIndex].planAmount = event.materielSelectedRows[0].planAmount
|
|
||||||
|
|
||||||
// 获取单位列表
|
// 获取单位列表
|
||||||
productDetailData.value[materielIndex].unitArr = await handleMaterialPackageData(event.materielSelectedRows[0].id)
|
productDetailData.value[materielIndex].unitArr = await handleMaterialPackageData(event.materielSelectedRows[0].id)
|
||||||
|
@ -260,6 +313,20 @@
|
||||||
formData.customerNumber = event.clientSelectedRows[0].number
|
formData.customerNumber = event.clientSelectedRows[0].number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓库选择器
|
||||||
|
* */
|
||||||
|
const storeSelectorPlusRef = ref(null)
|
||||||
|
const openStore = () => {
|
||||||
|
storeSelectorPlusRef.value.showOpen()
|
||||||
|
}
|
||||||
|
|
||||||
|
const storeBackOk = (event) => {
|
||||||
|
formData.storeName = event.clientSelectedRows[0].name
|
||||||
|
formData.storeId = event.clientSelectedRows[0].id
|
||||||
|
formData.storeNumber = event.clientSelectedRows[0].number
|
||||||
|
}
|
||||||
|
|
||||||
/* =================================== 商品明细 ============================*/
|
/* =================================== 商品明细 ============================*/
|
||||||
const productDetailData = ref([])
|
const productDetailData = ref([])
|
||||||
let selectedListRowKeys = ref([])
|
let selectedListRowKeys = ref([])
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { required } from '@/utils/formRules'
|
||||||
const basicInfoFormRules = {
|
const basicInfoFormRules = {
|
||||||
type: [required('请选择类型')],
|
type: [required('请选择类型')],
|
||||||
businessDate: [required('请选择业务日期')],
|
businessDate: [required('请选择业务日期')],
|
||||||
storeId: [required('请选择仓库')],
|
storeName: [required('请选择仓库')],
|
||||||
customerName: [required('请选择客户')]
|
customerName: [required('请选择客户')]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,17 +50,12 @@ const basicInfoFormItems = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '仓库:',
|
label: '仓库:',
|
||||||
name: 'storeId',
|
name: 'storeName',
|
||||||
type: 'a-tree-select',
|
|
||||||
span: 6,
|
span: 6,
|
||||||
|
slotName: 'storeSlot',
|
||||||
|
isUseSlot: true,
|
||||||
attrs: {
|
attrs: {
|
||||||
placeholder: '请选择仓库',
|
placeholder: '请选择仓库',
|
||||||
treeData: [],
|
|
||||||
fieldNames: {
|
|
||||||
children: 'children',
|
|
||||||
label: 'name',
|
|
||||||
value: 'id'
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
defaultValue: ''
|
defaultValue: ''
|
||||||
},
|
},
|
||||||
|
@ -114,6 +109,7 @@ const basicInfoFormItems = [
|
||||||
label: '交货地址:',
|
label: '交货地址:',
|
||||||
name: 'deliveryAddress',
|
name: 'deliveryAddress',
|
||||||
type: 'a-input',
|
type: 'a-input',
|
||||||
|
span: 12,
|
||||||
attrs: {
|
attrs: {
|
||||||
placeholder: '请输入交货地址',
|
placeholder: '请输入交货地址',
|
||||||
allowClear: true
|
allowClear: true
|
||||||
|
@ -131,6 +127,74 @@ const basicInfoFormItems = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const basicInfoViewFormItems = [
|
||||||
|
{
|
||||||
|
label: '单据号:',
|
||||||
|
name: 'billNumber',
|
||||||
|
span: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '业务日期:',
|
||||||
|
name: 'businessDate',
|
||||||
|
span: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '类型:',
|
||||||
|
name: 'type',
|
||||||
|
type: 'dict',
|
||||||
|
span: 1,
|
||||||
|
attrs: {
|
||||||
|
options: 'OUTBOUND_TYPE'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '客户:',
|
||||||
|
name: 'customerName',
|
||||||
|
span: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '仓库:',
|
||||||
|
name: 'storeName',
|
||||||
|
span: 1,
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '车牌号:',
|
||||||
|
name: 'carNumber',
|
||||||
|
span: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '停车位:',
|
||||||
|
name: 'parkingSpace',
|
||||||
|
span: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '业务员:',
|
||||||
|
name: 'salesman',
|
||||||
|
span: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '收货方:',
|
||||||
|
name: 'receiveParty',
|
||||||
|
span: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '交货日期:',
|
||||||
|
name: 'deliveryDate',
|
||||||
|
span: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '交货地址:',
|
||||||
|
name: 'deliveryAddress',
|
||||||
|
span: 24
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '备注:',
|
||||||
|
name: 'remarks',
|
||||||
|
span: 24
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
const productDetailFormItems = [
|
const productDetailFormItems = [
|
||||||
{
|
{
|
||||||
title: '序号',
|
title: '序号',
|
||||||
|
@ -184,4 +248,4 @@ const productDetailFormItems = [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
export { basicInfoFormRules, basicInfoFormItems, productDetailFormItems }
|
export { basicInfoFormRules, basicInfoFormItems, productDetailFormItems, basicInfoViewFormItems}
|
||||||
|
|
Loading…
Reference in New Issue