修改物料类别功能模块展示形式

This commit is contained in:
yangjun 2025-07-22 14:32:04 +08:00
parent 4d5e0470eb
commit 4117fee0f4
6 changed files with 420 additions and 231 deletions

View File

@ -6,14 +6,14 @@
<a-row :gutter="24">
<a-col :lg="6">
<a-form-item name="categoryId">
<template #label><span title="物料类别">物料类别</span></template>
<j-dict-select-tag type='list' placeholder="请选择物料类别" v-model:value="queryParam.categoryId" dictCode="nu_config_material_category,category_name,id,iz_enabled = 0 and del_flag = 0" allow-clear />
<template #label><span title="一级分类">一级分类</span></template>
<j-dict-select-tag type='list' placeholder="请选择一级分类" v-model:value="queryParam.categoryId" dictCode="nu_config_material_category,category_name,id,iz_enabled = 0 and del_flag = 0" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6">
<a-form-item name="typeId">
<template #label><span title="物料类型">物料类型</span></template>
<j-dict-select-tag type='list' placeholder="请选择物料类别" v-model:value="queryParam.typeId" :dictCode="`nu_config_material_type,type_name,id,iz_enabled = 0 and del_flag = 0 and category_id = ${queryParam.categoryId || -1}`" allow-clear />
<template #label><span title="二级分类">二级分类</span></template>
<j-dict-select-tag type='list' placeholder="请选择二级分类" v-model:value="queryParam.typeId" :dictCode="`nu_config_material_type,type_name,id,iz_enabled = 0 and del_flag = 0 and category_id = ${queryParam.categoryId || -1}`" allow-clear />
</a-form-item>
</a-col>
<a-col :lg="6" :sm="24">
@ -27,60 +27,129 @@
</a-row>
</a-form>
</div>
<!--引用表格-->
<BasicTable @register="registerTable" >
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" v-auth="'ConfigMaterial:config_material_category:add'" @click="handleCategoryAdd" preIcon="ant-design:plus-outlined"> 物料类别</a-button>
<a-button type="primary" v-auth="'ConfigMaterial:config_material_type:add'" @click="handleTypeAdd" preIcon="ant-design:plus-outlined"> 物料类型</a-button>
<a-button type="primary" v-auth="'ConfigMaterial:config_material_medication:add'" @click="handleMedicationAdd" preIcon="ant-design:plus-outlined"> 用药类型</a-button>
</template>
<!--字段回显插槽-->
<template v-slot:bodyCell="{ column, record, index, text }">
</template>
</BasicTable>
<!-- 表单区域 -->
<ConfigMaterialCategoryListModal @register="registerDrawer" @success="handleSuccess"></ConfigMaterialCategoryListModal>
<ConfigMaterialTypeListModal @register="registerTypeDrawer" @success="handleSuccess"></ConfigMaterialTypeListModal>
<ConfigMaterialMedicationListModal @register="registerMedicationDrawer" @success="handleSuccess"></ConfigMaterialMedicationListModal>
<div style="width: 100%;">
<div style="width: 300px;float: left; white;">
<div style="background: white; border-radius: 8px;padding: 8px;margin-right: 8px;min-height: 400px;">
<div style="width:100%;text-align: right;" v-if="treeData.length == 0">
<a-button type="primary" v-auth="'ConfigMaterial:config_material_category:add'" @click="handleAddbj({levle:'1'})" preIcon="ant-design:plus-outlined"> 一级分类</a-button>
</div>
<a-tree class="draggable-tree" draggable block-node :tree-data="treeData" >
<template #title="{ data,title }">
<div @mouseenter="data.showContent = true" @mouseleave="data.showContent = false">
<span>{{title}}</span>
<span v-if="data?.izEnabled == '1'" style="color:red;">(已停用)</span>
<span v-show="data.showContent" style="margin-left: 5px;">
<!-- 下拉菜单 -->
<a-dropdown>
<a class="ant-dropdown-link" @click.prevent>
<Icon icon="ant-design:setting-outlined" />
</a>
<template #overlay>
<a-menu>
<a-menu-item v-if="data.levle == '1'">
<a href="javascript:;" @click="handleAddbj(data)">添加本级</a>
</a-menu-item>
<a-menu-item v-if="data.levle == '1' || data.levle == '2'">
<a href="javascript:;" @click="handleAddxj(data)">添加下级</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;" @click="handleEdit(data)">编辑</a>
</a-menu-item>
<a-menu-item v-if="data.izEnabled == '1'">
<a href="javascript:;" @click="handleQyty(data,'0')">启用</a>
</a-menu-item>
<a-menu-item v-if="data.izEnabled == '0'">
<a href="javascript:;" @click="handleQyty(data,'1')">停用</a>
</a-menu-item>
</a-menu>
</template>
</a-dropdown>
</span>
</div>
</template>
</a-tree>
</div>
</div>
<div style="width: calc(100% - 300px);float: left;">
<!--引用表格-->
<BasicTable @register="registerTable" >
<!--插槽:table标题-->
<!-- <template #tableTitle>
<a-button type="primary" v-auth="'ConfigMaterial:config_material_category:add'" @click="handleCategoryAdd" preIcon="ant-design:plus-outlined"> 一级分类</a-button>
<a-button type="primary" v-auth="'ConfigMaterial:config_material_type:add'" @click="handleTypeAdd" preIcon="ant-design:plus-outlined"> 二级分类</a-button>
<a-button type="primary" v-auth="'ConfigMaterial:config_material_medication:add'" @click="handleMedicationAdd" preIcon="ant-design:plus-outlined"> 用药类型</a-button>
</template> -->
<!--字段回显插槽-->
<!-- <template v-slot:bodyCell="{ column, record, index, text }">
</template> -->
</BasicTable>
</div>
</div>
<ConfigMaterialCategoryModal ref="registerDrawer" @success="handleSuccess"></ConfigMaterialCategoryModal>
<ConfigMaterialTypeModal ref="registerTypeDrawer" @success="handleSuccess"></ConfigMaterialTypeModal>
<ConfigMaterialMedicationModal ref="registerMedicationDrawer" @success="handleSuccess"></ConfigMaterialMedicationModal>
</div>
</template>
<script lang="ts" name="ConfigMaterial-configMaterialCategory" setup>
import {ref, reactive, computed, unref} from 'vue';
import {ref, reactive, computed, unref, onMounted} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import ConfigMaterialCategoryModal from './components/ConfigMaterialCategoryModal.vue'
// import ConfigMaterialCategoryModal from './components/ConfigMaterialCategoryModal.vue'
import {allColumns, searchFormSchema, superQuerySchema} from './ConfigMaterialCategory.data';
import {selectMaterialList, deleteOne, batchDelete, getImportUrl,getExportUrl} from './ConfigMaterialCategory.api';
import { downloadFile } from '/@/utils/common/renderUtils';
import { useUserStore } from '/@/store/modules/user';
import JSelectMultiple from '/@/components/Form/src/jeecg/components/JSelectMultiple.vue';
import ConfigMaterialCategoryListModal from '/@/views/invoicing/ConfigMaterial/ConfigMaterialCategoryListModal.vue';
import ConfigMaterialTypeListModal from '/@/views/invoicing/ConfigMaterial/ConfigMaterialTypeListModal.vue';
import ConfigMaterialMedicationListModal from '/@/views/invoicing/ConfigMaterial/ConfigMaterialMedicationListModal.vue';
import { useDrawer } from '/@/components/Drawer';
import ConfigMaterialCategoryModal from '/@/views/invoicing/ConfigMaterial/components/ConfigMaterialCategoryModal.vue';
import ConfigMaterialTypeModal from '/@/views/invoicing/ConfigMaterial/components/ConfigMaterialTypeModal.vue';
import ConfigMaterialMedicationModal from '/@/views/invoicing/ConfigMaterial/components/ConfigMaterialMedicationModal.vue';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { defHttp } from '/@/utils/http/axios';
import { useDrawer } from '/@/components/Drawer';
const formRef = ref();
const queryParam = reactive<any>({});
const checkedKeys = ref<Array<string | number>>([]);
const userStore = useUserStore();
const registerDrawer = ref();
const registerTypeDrawer = ref();
const registerMedicationDrawer = ref();
//model
const [registerModal, {openModal}] = useModal();
// const [registerModal, {openModal}] = useModal();
//drawer
const [registerDrawer, { openDrawer:openCategoryDrawer }] = useDrawer();
const [registerTypeDrawer, { openDrawer: openTypeDrawer }] = useDrawer();
const [registerMedicationDrawer, { openDrawer:openMedicationDrawer }] = useDrawer();
// const [registerDrawer, { openDrawer:openCategoryDrawer }] = useDrawer();
// const [registerTypeDrawer, { openDrawer: openTypeDrawer }] = useDrawer();
// const [registerMedicationDrawer, { openDrawer:openMedicationDrawer }] = useDrawer();
const treeData = ref<any>([]);
// node hover
const menuState = reactive<Record<string, { timer?: number, openedByClick: boolean, open: boolean }>>({
})
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '物料类别',
// title: '',
api: selectMaterialList,
columns: allColumns,
canResize:false,
showActionColumn: false,
showIndexColumn: true,
showTableSetting: false,
formConfig: {
//labelWidth: 120,
schemas: searchFormSchema,
@ -103,45 +172,80 @@
})
const labelCol = reactive({
xs:24,
sm:4,
sm:6,
xl:6,
xxl:4
xxl:6
});
const wrapperCol = reactive({
xs: 24,
sm: 20,
sm: 18,
});
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
//
function handleCategoryAdd(){
openCategoryDrawer(true, {
isUpdate: false,
showFooter: false,
tenantSaas: false,
});
//
function handleAddbj(data){
// var params = {id:data.key,level:1,title:data.title}
var params = {}
registerDrawer.value.disableSubmit = false;
registerDrawer.value.edit(params);
}
//
function handleAddxj(data){
var levle = parseInt(data.levle)+1;
var params = {levle,categoryId:data.categoryId,typeId:data.typeId}
if(data.levle == 1){
registerTypeDrawer.value.disableSubmit = false;
registerTypeDrawer.value.edit(params);
}else if(data.levle == 2){
registerMedicationDrawer.value.disableSubmit = false;
registerMedicationDrawer.value.edit(params);
}
}
//
function handleEdit(data){
const params = {id:data.key,categoryId:data.categoryId,typeId:data.typeId,}
if(data.levle == 1){
params.categoryName = data.title
registerTypeDrawer.value.disableSubmit = false;
registerTypeDrawer.value.edit(params);
}else if(data.levle == 2){
params.categoryName = data.title
registerTypeDrawer.value.disableSubmit = false;
registerTypeDrawer.value.edit(params);
}else if(data.levle == 3){
params.medicationName = data.title
registerMedicationDrawer.value.disableSubmit = false;
registerMedicationDrawer.value.edit(params);
}
}
//
function handleQyty(data,type){
console.log("🚀 ~ handleQyty ~ data:", data)
var levle = data.levle;
var params = {id:data.key,izEnabled:type}
var url = "";
//
if(levle == 1){
url = "/invoicing/configMaterialCategory/edit";
//
}else if(levle == 2){
url = "/invoicing/configMaterialType/edit";
//
}else if(levle == 3){
url = "/invoicing/configMaterialMedication/edit";
}else{
return;
}
defHttp.post({url:url,params}).then(res =>{
console.log("🚀 ~ defHttp.post ~ res:", res)
reload();
getTreeData();
})
}
//
function handleTypeAdd(){
openTypeDrawer(true, {
isUpdate: false,
showFooter: false,
tenantSaas: false,
});
}
//
function handleMedicationAdd(){
openMedicationDrawer(true, {
isUpdate: false,
showFooter: false,
tenantSaas: false,
});
}
/**
* 查询
@ -161,8 +265,26 @@
}
function handleSuccess(){
searchQuery()
getTreeData();
searchQuery();
}
function getTreeData(){
defHttp.get({url:'/invoicing/configMaterialCategory/getMaterialTreeData'}).then(res =>{
treeData.value = res;
// console.log("🚀 ~ defHttp.get ~ treeData:", treeData)
// console.log("🚀 ~ defHttp.get ~ res:", res)
// if(treeData.value.length > 0){
// treeChildData.value = treeData.value[0].children;
// }
})
}
//
onMounted(() => {
getTreeData()
});
</script>
<style lang="less" scoped>

View File

@ -19,27 +19,27 @@ export const columns: BasicColumn[] = [
export const allColumns: BasicColumn[] = [
{
title: '物料类别名称',
title: '一级分类名称',
align:"center",
dataIndex: 'categoryName',
customCell: (record, index, column) => {
if (record.categoryRowSpan != null) {
return { rowSpan: record.categoryRowSpan };
}
},
// customCell: (record, index, column) => {
// if (record.categoryRowSpan != null) {
// return { rowSpan: record.categoryRowSpan };
// }
// },
},
{
title: '物料类型名称',
title: '二级分类名称',
align:"center",
dataIndex: 'typeName',
customCell: (record, index, column) => {
if (record.typeRowSpan != null) {
return { rowSpan: record.typeRowSpan };
}
},
// customCell: (record, index, column) => {
// if (record.typeRowSpan != null) {
// return { rowSpan: record.typeRowSpan };
// }
// },
},
{
title: '用药类型名称',
title: '三级分类名称',
align:"center",
dataIndex: 'medicationName'
},

View File

@ -1,70 +1,147 @@
<template>
<div style="min-height: 400px">
<BasicForm @register="registerForm"></BasicForm>
<div style="width: 100%;text-align: center" v-if="!formDisabled">
<a-button @click="submitForm" pre-icon="ant-design:check" type="primary"> </a-button>
</div>
</div>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="ConfigMaterialMedicationForm">
<a-row>
<a-col :span="24" style="margin-top: 100px;">
<a-form-item label="一级分类名称" v-bind="validateInfos.categoryName" id="ConfigMaterialMedicationForm-categoryName" name="categoryId">
<a-input v-model:value="formData.categoryName" placeholder="请输入一级分类名称" allow-clear ></a-input>
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
</a-spin>
</template>
<script lang="ts">
import {BasicForm, useForm} from '/@/components/Form/index';
import {computed, defineComponent} from 'vue';
import {defHttp} from '/@/utils/http/axios';
import { propTypes } from '/@/utils/propTypes';
import {getBpmFormSchema} from '../ConfigMaterialCategory.data';
import {saveOrUpdate} from '../ConfigMaterialCategory.api';
export default defineComponent({
name: "ConfigMaterialCategoryForm",
components:{
BasicForm
},
props:{
formData: propTypes.object.def({}),
formBpm: propTypes.bool.def(true),
},
setup(props){
const [registerForm, { setFieldsValue, setProps, getFieldsValue }] = useForm({
labelWidth: 150,
schemas: getBpmFormSchema(props.formData),
showActionButtonGroup: false,
baseColProps: {span: 24}
});
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { getValueType } from '/@/utils';
import { saveOrUpdate } from '../ConfigMaterialCategory.api';
import { Form } from 'ant-design-vue';
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => ({})},
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const formData = reactive<Record<string, any>>({
id: '',
categoryName: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
categoryName: [{ required: true, message: '请输入一级分类名称', trigger: 'blur' }],
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
const formDisabled = computed(()=>{
if(props.formData.disabled === false){
return false;
}
return true;
});
//
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
let formData = {};
const queryByIdUrl = '/invoicing/configMaterialCategory/queryById';
async function initFormData(){
let params = {id: props.formData.dataId};
const data = await defHttp.get({url: queryByIdUrl, params});
formData = {...data}
//
await setFieldsValue(formData);
//
await setProps({disabled: formDisabled.value})
}
/**
* 新增
*/
function add() {
edit({});
}
async function submitForm() {
let data = getFieldsValue();
let params = Object.assign({}, formData, data);
console.log('表单数据', params)
await saveOrUpdate(params, true)
}
initFormData();
return {
registerForm,
formDisabled,
submitForm,
}
/**
* 编辑
*/
function edit(record) {
console.log("🚀 ~ edit ~ record:", record)
nextTick(() => {
resetFields();
const tmpData = {};
Object.keys(formData).forEach((key) => {
if(record.hasOwnProperty(key)){
tmpData[key] = record[key]
}
})
//
Object.assign(formData, tmpData);
});
</script>
}
/**
* 提交数据
*/
async function submitForm() {
try {
//
await validate();
} catch ({ errorFields }) {
if (errorFields) {
const firstField = errorFields[0];
if (firstField) {
formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
return Promise.reject(errorFields);
}
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//
for (let data in model) {
//
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
await saveOrUpdate(model, isUpdate.value)
.then((res) => {
emit('ok');
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 14px;
}
.ant-modal .ant-modal-body {
padding: 0;
height: 300px !important;
}
</style>

View File

@ -1,76 +1,77 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="title" :width="800" @ok="handleSubmit">
<BasicForm @register="registerForm" name="ConfigMaterialCategoryForm" />
</BasicModal>
<j-modal :title="title" :width="width" :visible="visible" @ok="handleOk" :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }" @cancel="handleCancel" cancelText="关闭">
<ConfigMaterialCategoryForm ref="registerForm" @ok="submitCallback" :formDisabled="disableSubmit" :formBpm="false"></ConfigMaterialCategoryForm>
</j-modal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../ConfigMaterialCategory.data';
import {saveOrUpdate} from '../ConfigMaterialCategory.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
const isDetail = ref(false);
//
const [registerForm, { setProps,resetFields, setFieldsValue, validate, scrollToField }] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
baseColProps: {span: 24}
import { ref, nextTick, defineExpose } from 'vue';
import ConfigMaterialCategoryForm from './ConfigMaterialCategoryForm.vue'
import JModal from '/@/components/Modal/src/JModal/JModal.vue';
const title = ref<string>('');
const width = ref<number>(800);
const visible = ref<boolean>(false);
const disableSubmit = ref<boolean>(false);
const registerForm = ref();
const emit = defineEmits(['register', 'success']);
/**
* 新增
*/
function add() {
title.value = '新增';
visible.value = true;
nextTick(() => {
registerForm.value.add();
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
isDetail.value = !!data?.showFooter;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
}
/**
* 编辑
* @param record
*/
function edit(record) {
title.value = disableSubmit.value ? '详情' : '编辑';
visible.value = true;
nextTick(() => {
registerForm.value.edit(record);
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : !unref(isDetail) ? '详情' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} catch ({ errorFields }) {
if (errorFields) {
const firstField = errorFields[0];
if (firstField) {
scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
return Promise.reject(errorFields);
} finally {
setModalProps({confirmLoading: false});
}
}
}
/**
* 确定按钮点击事件
*/
function handleOk() {
registerForm.value.submitForm();
}
/**
* form保存回调事件
*/
function submitCallback() {
handleCancel();
emit('success');
}
/**
* 取消按钮回调事件
*/
function handleCancel() {
visible.value = false;
}
defineExpose({
add,
edit,
disableSubmit,
});
</script>
<style lang="less" scoped>
/** 时间和数字输入框样式 */
:deep(.ant-input-number) {
width: 100%;
<style lang="less">
/**隐藏样式-modal确定按钮 */
.jee-hidden {
display: none !important;
}
:deep(.ant-calendar-picker) {
width: 100%;
}
</style>
</style>
<style lang="less" scoped></style>

View File

@ -5,23 +5,18 @@
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="ConfigMaterialMedicationForm">
<a-row>
<a-col :span="24">
<a-form-item label="物料类别" v-bind="validateInfos.categoryId" id="ConfigMaterialMedicationForm-categoryId" name="categoryId">
<j-dict-select-tag type='radio' v-model:value="formData.categoryId" dictCode="nu_config_material_category,category_name,id,iz_enabled = 0 and del_flag = 0" placeholder="请选择物料类别" allow-clear />
<a-form-item label="一级分类" v-bind="validateInfos.categoryId" id="ConfigMaterialMedicationForm-categoryId" name="categoryId">
<j-dict-select-tag type='radio' v-model:value="formData.categoryId" dictCode="nu_config_material_category,category_name,id,iz_enabled = 0 and del_flag = 0" placeholder="请选择一级分类" allow-clear />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="物料类型" v-bind="validateInfos.typeId" id="ConfigMaterialMedicationForm-typeId" name="typeId">
<j-dict-select-tag type='radio' v-model:value="formData.typeId" :dictCode="`nu_config_material_type,type_name,id,iz_enabled = 0 and del_flag = 0 and category_id = ${formData.categoryId || -1}`" placeholder="请选择物料类型" allow-clear />
<a-form-item label="二级分类" v-bind="validateInfos.typeId" id="ConfigMaterialMedicationForm-typeId" name="typeId">
<j-dict-select-tag type='radio' v-model:value="formData.typeId" :dictCode="`nu_config_material_type,type_name,id,iz_enabled = 0 and del_flag = 0 and category_id = ${formData.categoryId || -1}`" placeholder="请选择二级分类" allow-clear />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="名称" v-bind="validateInfos.medicationName" id="ConfigMaterialMedicationForm-medicationName" name="medicationName">
<a-input v-model:value="formData.medicationName" placeholder="请输入名称" allow-clear ></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="是否启用" v-bind="validateInfos.izEnabled" id="ConfigMaterialMedicationForm-izEnabled" name="izEnabled">
<j-dict-select-tag type='radio' v-model:value="formData.izEnabled" dictCode="iz_enabled" placeholder="请选择是否启用" allow-clear />
<a-form-item label="三级分类" v-bind="validateInfos.medicationName" id="ConfigMaterialMedicationForm-medicationName" name="medicationName">
<a-input v-model:value="formData.medicationName" placeholder="请输入三级分类" allow-clear ></a-input>
</a-form-item>
</a-col>
</a-row>
@ -53,7 +48,6 @@
categoryId: '',
typeId: '',
medicationName: '',
izEnabled: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
@ -61,9 +55,9 @@
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
categoryId: [{ required: true, message: '请输入物料类别!'},],
typeId: [{ required: true, message: '请输入物料类型!'},],
medicationName: [{ required: true, message: '请输入名称!'},],
categoryId: [{ required: true, message: '请输入一级分类!'},],
typeId: [{ required: true, message: '请输入二级分类!'},],
medicationName: [{ required: true, message: '请输入三级分类!'},],
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });

View File

@ -5,18 +5,13 @@
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="ConfigMaterialTypeForm">
<a-row>
<a-col :span="24">
<a-form-item label="物料类别" v-bind="validateInfos.categoryId" id="ConfigMaterialTypeForm-categoryId" name="categoryId">
<j-dict-select-tag type='radio' v-model:value="formData.categoryId" dictCode="nu_config_material_category,category_name,id,iz_enabled = 0 and del_flag = 0" placeholder="请选择物料类别" allow-clear />
<a-form-item label="一级分类" v-bind="validateInfos.categoryId" id="ConfigMaterialTypeForm-categoryId" name="categoryId">
<j-dict-select-tag type='radio' v-model:value="formData.categoryId" dictCode="nu_config_material_category,category_name,id,iz_enabled = 0 and del_flag = 0" placeholder="请选择一级分类" allow-clear />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="物料类型" v-bind="validateInfos.typeName" id="ConfigMaterialTypeForm-typeName" name="typeName">
<a-input v-model:value="formData.typeName" placeholder="请输入物料类型" allow-clear ></a-input>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="是否启用" v-bind="validateInfos.izEnabled" id="ConfigMaterialTypeForm-izEnabled" name="izEnabled">
<j-dict-select-tag type='radio' v-model:value="formData.izEnabled" dictCode="iz_enabled" placeholder="请选择是否启用" allow-clear />
<a-form-item label="二级分类" v-bind="validateInfos.typeName" id="ConfigMaterialTypeForm-typeName" name="typeName">
<a-input v-model:value="formData.typeName" placeholder="请输入二级分类" allow-clear ></a-input>
</a-form-item>
</a-col>
</a-row>
@ -47,7 +42,6 @@
id: '',
categoryId: '',
typeName: '',
izEnabled: '',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
@ -55,8 +49,8 @@
const confirmLoading = ref<boolean>(false);
//
const validatorRules = reactive({
categoryId: [{ required: true, message: '请输入物料类别!'},],
typeName: [{ required: true, message: '请输入物料类型!'},],
categoryId: [{ required: true, message: '请输入一级分类!'},],
typeName: [{ required: true, message: '请输入二级分类!'},],
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
@ -84,6 +78,7 @@
* 编辑
*/
function edit(record) {
console.log("🚀 ~ edit ~ record:", record)
nextTick(() => {
resetFields();
const tmpData = {};