修改物料类别功能模块展示形式
This commit is contained in:
parent
4d5e0470eb
commit
4117fee0f4
|
@ -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>
|
||||
|
|
|
@ -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'
|
||||
},
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 });
|
||||
|
||||
|
|
|
@ -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 = {};
|
||||
|
|
Loading…
Reference in New Issue