You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

305 lines
7.6 KiB

1 year ago
<template>
<Dialog
:title="dialogTitle"
v-model="dialogVisible"
:width="dialogWidth"
:close-on-click-modal="false"
:vLoading="formLoading"
>
<div style="max-height: 60vh; overflow-y: auto; padding: 0px 20px">
<Form ref="formRefMain" :schema="formAllSchemasMain" :is-col="true" />
<div class="tab-pane">
<div class="left">
<div class="plus">
<Icon icon="ep:plus" size="14" color="black" @click="addProcess"
/></div>
<div class="left-list" v-for="(item, index) in data.list" :key="index">
<div class="left-item" :class="chooseIndex == index ? 'active' : ''">
<el-input
v-model="item.description"
style="width: 120px; margin: 0px 10px"
v-if="item.isEdit"
placeholder="请输入工序名称"
/>
<div class="name" v-else @click="chooseItem(item, index)">{{ item.description }}</div>
<Icon
icon="ep:select"
class="mr-5px ml-5px"
v-if="item.isEdit"
@click="editName(item)"
/>
<Icon icon="ep:edit" class="mr-5px ml-5px" v-else @click="editName(item)" />
<Icon icon="ep:close" class="mr-5px" @click="delProcess(index)" />
</div>
</div>
</div>
<div class="right">
<div class="small-title">检验工序</div>
<Form
ref="formRefProcess"
:schema="formAllSchemasProcess"
:is-col="true"
labelWidth="150px"
/>
<div class="small-title">检验特性</div>
<Form
ref="formRefFeatures"
:schema="formAllSchemasFeatures"
:is-col="true"
labelWidth="150px"
/>
</div>
</div>
<!-- <el-tabs
v-model="editableTabsValue"
editable
class="demo-tabs"
@edit="handleTabsEdit"
type="border-card"
tab-position="left"
>
<el-tab-pane
v-for="item in editableTabs"
:key="item.name"
:label="item.title"
:name="item.name"
>
<template #label>
<span class="custom-tabs-label">
<el-icon><calendar /></el-icon>
<span>Route</span>
</span>
</template>
<div class="small-title">检验工序</div>
<Form
ref="formRefProcess"
:schema="formAllSchemasProcess"
:is-col="true"
labelWidth="150px"
/>
<div class="small-title">检验特性</div>
<Form
ref="formRefFeatures"
:schema="formAllSchemasFeatures"
:is-col="true"
labelWidth="150px"
/>
</el-tab-pane>
</el-tabs> -->
</div>
<template #footer>
<ButtonBase :Butttondata="Butttondata" @button-base-click="buttonBaseClick" />
</template>
</Dialog>
</template>
<script setup lang="ts">
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import { json } from 'stream/consumers'
const props = defineProps({
// 显示窗口宽度设置
basicFormWidth: {
type: String,
default: ''
},
// 检验特性表单,列表 相关信息
formAllSchemasFeatures: {
type: Object,
required: true,
default: null
},
// 检验工序表单,列表 相关信息
formAllSchemasProcess: {
type: Object,
required: true,
default: null
},
// 检验模板表单,列表 相关信息
formAllSchemasMain: {
type: Object,
required: true,
default: null
},
// 底部按钮集合
footButttondata: {
type: Array,
required: false,
default: null
}
})
const { t } = useI18n() // 国际化
const dialogVisible = ref(true) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const formType = ref('') // 表单的类型:create - 新增;update - 修改
const dialogWidth = ref()
const form = reactive({
name: '',
region: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: ''
})
const chooseIndex = ref(0)
const formAllSchemasFeatures = ref(props.formAllSchemasFeatures?.formSchema)
const formAllSchemasProcess = ref(props.formAllSchemasProcess?.formSchema)
const formAllSchemasMain = ref(props.formAllSchemasMain?.formSchema)
const formRefMain = ref('')
const formRefProcess = ref('')
const formRefFeatures = ref('')
const onSubmit = () => {
console.log('submit!')
}
if (props.basicFormWidth) {
dialogWidth.value = props.basicFormWidth + '%'
} else {
dialogWidth.value = props.isBusiness ? '60%' : '40%'
}
/** 打开弹窗 */
const open = async (type: string, row?: any, masterParmas?: any, titleName?: any) => {
dialogVisible.value = true
if (titleName) {
dialogTitle.value = t('action.' + titleName)
} else {
dialogTitle.value = t('action.' + type)
}
try {
nextTick(() => {
formRefMain.value.setValues(data.value)
formRefProcess.value.setValues(data.value.list[0])
})
} finally {
formLoading.value = false
}
}
defineExpose({ open, dialogVisible, formLoading }) // 提供 open 方法,用于打开弹窗
const data = ref({
code: '',
description: '',
version: '',
list: [
{
description: '哈哈哈',
code: '',
sequenceCode: ''
},
{
description: '呵呵呵',
isEdit: false,
code: '555',
sequenceCode: '6666'
},
{
description: '哈呵呵',
isEdit: false
}
]
})
/** 弹窗按钮 */
let Butttondata: any = []
if (props.footButttondata) {
Butttondata = props.footButttondata
} else {
Butttondata = [
defaultButtons.formSaveBtn(null), // 保存
defaultButtons.formCloseBtn(null) // 关闭
]
}
// 编辑名字
const editName = (item) => {
if(!item.description){
p
return;
}
item.isEdit = !item.isEdit
}
// 添加工序
const addProcess = () => {
data.value.list.push({
name: '哈哈哈',
isEdit: true
})
}
// 删除工序
const delProcess = (index) => {
data.value.list.splice(index, 1)
}
const chooseItem = (item, index) => {
const data1 = JSON.parse(JSON.stringify(unref(formRefProcess)?.formModel))
data.value.list.forEach((element,index) => {
if (element.code == data1.code) {
data.value.list[index] =JSON.parse(JSON.stringify( data1))
}
})
chooseIndex.value = index
formRefProcess.value.setValues(item)
}
</script>
<style lang="scss" scoped>
.small-title {
font-weight: bold;
padding: 0px 10px 10px;
color: #1a8bfc;
font-size: 16px;
}
.el-tabs--left .el-tabs__header.is-left {
min-height: 700px !important;
}
.tab-pane {
border: 1px solid #dcdfe6;
display: flex;
.left {
background: #f5f7fa;
width: 200px;
border-right: 1px solid #dcdfe6;
position: relative;
.plus {
position: absolute;
right: 0px;
border: 1px solid #dcdfe6;
display: flex;
align-items: center;
justify-content: center;
padding: 2px;
top: 8px;
border-radius: 4px;
cursor: pointer;
}
.left-item {
display: flex;
align-items: center;
height: 36px;
margin-bottom: 10px;
cursor: pointer;
.name {
width: 120px;
overflow: hidden;
padding: 0px 10px;
height: 36px;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 36px;
}
}
.active {
background: white;
}
}
.right {
flex: 1;
padding: 20px;
}
}
</style>