15 changed files with 826 additions and 54 deletions
@ -0,0 +1,178 @@ |
|||
<template> |
|||
<el-dialog |
|||
v-model="dialogVisible" |
|||
title="编辑" |
|||
width="70%" |
|||
:close-on-click-modal="false" |
|||
top="10vh" |
|||
> |
|||
<div v-loading="formLoading" style="height:calc(70vh - 50px);overflow:auto"> |
|||
<el-form |
|||
ref="editFormRef" |
|||
v-if="!formLoading" |
|||
:model="formData" |
|||
:size="'large'" |
|||
:rules="props.formRules"> |
|||
<el-row :gutter="40"> |
|||
<el-col |
|||
v-for="(item, index) in formConfig" |
|||
:span="getItemConfig(item,'colSpan') || 12" |
|||
:key="index" |
|||
> |
|||
<el-form-item |
|||
:prop="getItemConfig(item,'prop')" |
|||
:label="getItemConfig(item,'title')" |
|||
:label-width="getItemConfig(item,'labelWidth') || 180" |
|||
> |
|||
<!-- 文本 --> |
|||
<el-input |
|||
v-if="!getItemConfig(item) || getItemConfig(item) == 'input'" |
|||
v-model="formData[getItemConfig(item,'prop')]" |
|||
:placeholder="'请输入'" |
|||
:clearable="!getItemConfig(item,'noClear')" |
|||
:disabled="getItemConfig(item,'disabled')" |
|||
/> |
|||
<!-- 数字 --> |
|||
<el-input-number |
|||
v-if="getItemConfig(item) == 'number'" |
|||
v-model="formData[getItemConfig(item,'prop')]" |
|||
:min="getItemConfig(item,'min')" |
|||
:max="getItemConfig(item,'max')" |
|||
:clearable="!getItemConfig(item,'noClear')" |
|||
:disabled="getItemConfig(item,'disabled')" |
|||
/> |
|||
<!-- 时间 --> |
|||
<el-date-picker |
|||
v-if="getItemConfig(item) == 'datetime'" |
|||
v-model="formData[getItemConfig(item,'prop')]" |
|||
style="width:100%" |
|||
type="datetime" |
|||
format="YYYY-MM-DD HH:mm:ss" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
:clearable="!getItemConfig(item,'noClear')" |
|||
:disabled="getItemConfig(item,'disabled')" |
|||
/> |
|||
<!-- 选择框 --> |
|||
<el-select |
|||
v-if="getItemConfig(item) == 'select' || getItemConfig(item) == 'tagFilter'" |
|||
v-model="formData[getItemConfig(item,'prop')]" |
|||
:filterable="!getItemConfig(item,'noSearch')" |
|||
placeholder="请选择" |
|||
:clearable="!getItemConfig(item,'noClear')" |
|||
:disabled="getItemConfig(item,'disabled')" |
|||
> |
|||
<el-option |
|||
v-for="(op,op_index) in getItemConfig(item,'options')" |
|||
:key="op_index" |
|||
:label="op.label" |
|||
:value="op.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<div style="padding:10px"> |
|||
<el-button el-button @click="close">取消</el-button> |
|||
<el-button :disabled="formLoading" type="primary" @click="submitForm">确定</el-button> |
|||
</div> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
defineOptions({ name: 'apiEditPop' }) |
|||
import { reactive, ref, onMounted } from 'vue' |
|||
import { ElDialog,ElMessage } from 'element-plus' |
|||
import { getCommonInfoById } from '@/api/common/index' |
|||
|
|||
import { useRoute } from 'vue-router' |
|||
const route = useRoute() |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const formLoading = ref(false) // 表单的加载中 |
|||
const formData = ref(null)//表单数据 |
|||
const formConfig = ref(null)//表单配置 |
|||
|
|||
const props = defineProps({ |
|||
// api名称 |
|||
apiName: { |
|||
type: String, |
|||
default: null |
|||
}, |
|||
// 表单规则 |
|||
formRules:{ |
|||
type: Object, |
|||
default: null |
|||
} |
|||
}) |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
// 重置上传状态和文件 |
|||
formLoading.value = false |
|||
formData.value = null |
|||
formConfig.value = null |
|||
} |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = (configs,row) => { |
|||
resetForm() |
|||
dialogVisible.value = true |
|||
formConfig.value = configs |
|||
getFormData(row.uId) |
|||
} |
|||
|
|||
/** 关闭弹窗 */ |
|||
const close = () => { |
|||
// 重置上传状态和文件 |
|||
resetForm() |
|||
dialogVisible.value = false |
|||
} |
|||
|
|||
// 更改加载 |
|||
const changeLoading = (data) => { |
|||
formLoading.value = data |
|||
} |
|||
|
|||
const editFormRef = ref(null)//表单配置 |
|||
// 获取验证是否通过 |
|||
const validate = (data) => { |
|||
return editFormRef.value.validate(data) |
|||
} |
|||
|
|||
defineExpose({ open,close,changeLoading,validate }) |
|||
|
|||
/** 获取表单 */ |
|||
const getFormData = async (uId) => { |
|||
formLoading.value = true |
|||
getCommonInfoById(props.apiName,uId) |
|||
.then(res=>{ |
|||
formData.value = res.data |
|||
formLoading.value = false |
|||
}) |
|||
} |
|||
|
|||
// 获取类型 |
|||
const getItemConfig = (item,type='type') => { |
|||
if(item.formConfig && item.formConfig[type]){ |
|||
return item.formConfig[type] |
|||
}else{ |
|||
return item[type] |
|||
} |
|||
} |
|||
|
|||
const emits = defineEmits(['submitEditForm']) |
|||
/** 提交表单 */ |
|||
const submitForm = async () => { |
|||
emits('submitEditForm',formData.value,formConfig.value) |
|||
} |
|||
|
|||
|
|||
</script> |
|||
<style lang="scss" scoped> |
|||
::v-deep .el-row{ |
|||
margin:0 !important |
|||
} |
|||
</style> |
@ -0,0 +1,55 @@ |
|||
<template> |
|||
<tablePage |
|||
:apiName="state.apiName" |
|||
:searchOptions="state.searchOptions" |
|||
:searchFilter="state.searchFilter" |
|||
></tablePage> |
|||
</template> |
|||
|
|||
<script setup> |
|||
// tablePage 使用demo |
|||
defineOptions({ name: 'tablePageDemo' }) |
|||
import { reactive, ref, onMounted } from 'vue' |
|||
import tablePage from '@/components/tablePage/index.vue' |
|||
|
|||
const state = reactive({ |
|||
apiName:'supplierproplaning', |
|||
searchFilter: { |
|||
materialCode: null, |
|||
// createTime:null, |
|||
// isDelete:null, |
|||
// quantity1:null |
|||
}, |
|||
searchOptions:[ |
|||
{type:'input',prop:'materialCode',label:'物料号'}, |
|||
// {type:'datetimerange',prop:'createTime',label:'创建时间'}, |
|||
// {type:'number',prop:'quantity1',label:'数量1'}, |
|||
// {type:'select',prop:'isDelete',label:'是否删除',options:EnumList.whether,noSearch:true}, |
|||
], |
|||
|
|||
// 左侧操作列,可参考 view/task/taskConifgure.vue 的查看明细 |
|||
// leftOperation:[ |
|||
// {label:'查看详情',name:'showInfo',link:true,type:'primary'} |
|||
// ], |
|||
|
|||
// 右侧操作列方式1,默认为api通用方式 |
|||
// rightOperation:'apiUpdate', |
|||
//右侧操作列方式2,自定义方式,如果需要默认的api,则使用showApiRightOperation传参 |
|||
// rightOperation:[], |
|||
// showApiRightOperation:['apiUpdate'] |
|||
}) |
|||
|
|||
// 左侧操作事件 |
|||
// function leftOperationHadel(btn,scope) { |
|||
// console.log(btn,scope) |
|||
// } |
|||
|
|||
//右侧操作列方式2,自定义方式 |
|||
// state.rightOperation = [{label:'编辑2',name:'edit',link:true,type:'danger',auth:state.apiName+':page'}] |
|||
|
|||
// 节点传参 |
|||
// :leftOperation="state.leftOperation" |
|||
// @leftOperationHadel="leftOperationHadel" |
|||
// :rightOperation="state.rightOperation" |
|||
// :showApiRightOperation="state.showApiRightOperation" |
|||
</script> |
@ -0,0 +1,26 @@ |
|||
<template> |
|||
<tablePage |
|||
:columnWidth="150" |
|||
:apiName="state.apiName" |
|||
:searchOptions="state.searchOptions" |
|||
:searchFilter="state.searchFilter" |
|||
:rightOperation="state.rightOperation" |
|||
></tablePage> |
|||
</template> |
|||
|
|||
<script setup> |
|||
defineOptions({ name: 'supplierConMmrp' }) |
|||
import { reactive, ref, onMounted } from 'vue' |
|||
import tablePage from '@/components/tablePage/index.vue' |
|||
|
|||
const state = reactive({ |
|||
apiName:'cherysupplierconmmrp', |
|||
searchFilter: { |
|||
supplierCode: null |
|||
}, |
|||
searchOptions:[ |
|||
{type:'input',prop:'supplierCode',label:'供应商代码'} |
|||
], |
|||
rightOperation:'apiUpdate', |
|||
}) |
|||
</script> |
@ -0,0 +1,39 @@ |
|||
<template> |
|||
<tablePage |
|||
:columnWidth="150" |
|||
:apiName="state.apiName" |
|||
:searchOptions="state.searchOptions" |
|||
:searchFilter="state.searchFilter" |
|||
:rightOperation="state.rightOperation" |
|||
:apiEditFormRules="state.apiEditFormRules" |
|||
></tablePage> |
|||
</template> |
|||
|
|||
<script setup> |
|||
defineOptions({ name: 'supplierSinvData' }) |
|||
import { reactive, ref, onMounted } from 'vue' |
|||
import tablePage from '@/components/tablePage/index.vue' |
|||
|
|||
const state = reactive({ |
|||
apiName:'cherysuppliersinvdata', |
|||
searchFilter: { |
|||
supplierCode: null |
|||
}, |
|||
searchOptions:[ |
|||
{type:'input',prop:'supplierCode',label:'供应商代码'} |
|||
], |
|||
rightOperation:'apiUpdate', |
|||
apiEditFormRules:{ |
|||
supplierCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
supplierName: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
materialCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
materialDescription: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
quantityCurrent: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
quantityPlan: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
inventoryStatus: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
safetyStock: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
productionCycle: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
supplierBatch: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
} |
|||
}) |
|||
</script> |
@ -0,0 +1,54 @@ |
|||
<template> |
|||
<tablePage |
|||
:columnWidth="150" |
|||
:apiName="state.apiName" |
|||
:searchOptions="state.searchOptions" |
|||
:searchFilter="state.searchFilter" |
|||
:rightOperation="state.rightOperation" |
|||
:apiEditFormRules="state.apiEditFormRules" |
|||
:searchButtons="['search','import','export']" |
|||
></tablePage> |
|||
</template> |
|||
|
|||
<script setup> |
|||
defineOptions({ name: 'supplierProMaterialStock' }) |
|||
import { reactive, ref, onMounted } from 'vue' |
|||
import tablePage from '@/components/tablePage/index.vue' |
|||
|
|||
const state = reactive({ |
|||
apiName:'supplierpromaterialstock', |
|||
searchFilter: { |
|||
supplierCode: null |
|||
}, |
|||
searchOptions:[ |
|||
{type:'input',prop:'supplierCode',label:'供应商代码'} |
|||
], |
|||
rightOperation:'apiUpdate', |
|||
apiEditFormRules:{ |
|||
supplierCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
supplierName: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
supplierSubCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
supplierSubName: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
subSupplierCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
subSupplierName: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
subSupplierAddress: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
subBatchNo: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
subBatchNum: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
empCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
empName: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
deviceCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
deviceName: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
featureName: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
featureUnit: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
standardValue: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
featureUpper: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
featureLower: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
featureValue: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
checkNo: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
checkResult: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
checkTime: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
vendorFieldCode: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
deadLine: [{ required: true, message: '必填项', trigger: 'blur' }], |
|||
} |
|||
}) |
|||
</script> |
@ -0,0 +1,75 @@ |
|||
<template> |
|||
<div class="taskConifgurePage"> |
|||
<!-- --> |
|||
<tablePage |
|||
:apiName="state.apiName" |
|||
:searchOptions="state.searchOptions" |
|||
:searchFilter="state.searchFilter" |
|||
@leftOperationHadel="leftOperationHadel" |
|||
:leftOperation="state.leftOperation" |
|||
></tablePage> |
|||
|
|||
<!-- 明细抽屉 --> |
|||
<el-drawer |
|||
v-model="state.drawerShow" |
|||
title="详情" |
|||
direction="rtl" |
|||
destroy-on-close |
|||
:size="'80%'" |
|||
> |
|||
<div style="height: 100%;display: flex"> |
|||
<tablePage |
|||
:apiName="state.drawerApiName" |
|||
:hideSearch="true" |
|||
></tablePage> |
|||
</div> |
|||
</el-drawer> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup> |
|||
defineOptions({ name: 'taskSub' }) |
|||
import { reactive, ref, onMounted,nextTick } from 'vue' |
|||
import tablePage from '@/components/tablePage/index.vue' |
|||
|
|||
const state = reactive({ |
|||
apiName:'tasksub', |
|||
searchFilter: { |
|||
taskName: null |
|||
}, |
|||
searchOptions:[ |
|||
{type:'input',prop:'taskName',label:'任务名称'} |
|||
], |
|||
leftOperation:[ |
|||
{label:'查看详情',name:'showInfo',link:true,type:'primary'} |
|||
], |
|||
drawerShow:false, |
|||
drawerApiName:null, |
|||
}) |
|||
|
|||
function leftOperationHadel(btn,scope) { |
|||
// 查看详情 |
|||
if(btn.name == 'showInfo'){ |
|||
// todo: |
|||
if(scope.row.uId == '1'){ |
|||
state.drawerApiName = 'cherysuppliersaweek' |
|||
}else{ |
|||
state.drawerApiName = 'supplierproplaning' |
|||
} |
|||
nextTick(() => { |
|||
state.drawerShow = true |
|||
}) |
|||
} |
|||
} |
|||
</script> |
|||
<style scope lang="scss"> |
|||
.taskConifgurePage{ |
|||
height: 100%; |
|||
display: flex; |
|||
width:100%; |
|||
|
|||
.el-drawer__header { |
|||
margin-bottom:0 !important |
|||
} |
|||
} |
|||
</style> |
Loading…
Reference in new issue