|
@@ -270,54 +270,57 @@
|
|
|
</div>
|
|
|
<div class="qt-expandable-content" :class="{ 'is-expanded': qtIsExpanded }">
|
|
|
<el-row>
|
|
|
- <el-col v-for="field in list" :key="field.id" :span="6">
|
|
|
- <el-form-item :label="field.label" :prop="field.model" :rules="field.rules">
|
|
|
+ <el-col v-for="field in list" :key="field.sort" :span="6">
|
|
|
+ <el-form-item :label="field.name" :prop="field.identifier" :rules="field.rules">
|
|
|
<!-- 文本输入 -->
|
|
|
<el-input
|
|
|
- v-if="field.type === 'input'"
|
|
|
- v-model="formData[field.prop]"
|
|
|
- :placeholder="'请输入' + field.label"
|
|
|
+ v-if="field.type === 'text'"
|
|
|
+ v-model="formData[field.identifier]"
|
|
|
+ :placeholder="'请输入' + field.name"
|
|
|
:type="field.type || 'text'"
|
|
|
clearable
|
|
|
- >
|
|
|
- <!-- <template v-if="field.prepend" #prepend>-->
|
|
|
- <!-- {{ field.prepend }}-->
|
|
|
- <!-- </template>-->
|
|
|
- </el-input>
|
|
|
+ :model-value="field.value"
|
|
|
+ />
|
|
|
|
|
|
- <!-- 下拉选择 -->
|
|
|
- <!-- <el-select-->
|
|
|
- <!-- v-else-if="field.type === 'select'"-->
|
|
|
- <!-- v-model="formData[field.model]"-->
|
|
|
- <!-- :placeholder="'请输入'+field.label"-->
|
|
|
- <!-- clearable-->
|
|
|
- <!-- filterable-->
|
|
|
- <!-- >-->
|
|
|
- <!-- <el-option-->
|
|
|
- <!-- v-for="item in field.options"-->
|
|
|
- <!-- :key="item.value"-->
|
|
|
- <!-- :label="item.label"-->
|
|
|
- <!-- :value="item.value"-->
|
|
|
- <!-- />-->
|
|
|
- <!-- </el-select>-->
|
|
|
+ <el-select
|
|
|
+ v-else-if="field.type === 'select'"
|
|
|
+ v-model="formData[field.identifier]"
|
|
|
+ :placeholder="'请输入'+field.name"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in field.options"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
|
|
|
<!-- 数字输入 -->
|
|
|
- <el-input-number
|
|
|
- v-else-if="field.type === 'number'"
|
|
|
- v-model="formData[field.prop]"
|
|
|
- :min="field.min || 0"
|
|
|
- :max="field.max || 100"
|
|
|
- :step="field.step || 1"
|
|
|
+ <el-input
|
|
|
+ v-else-if="field.type === 'int'"
|
|
|
+ type="number"
|
|
|
+ v-model="formData[field.identifier]"
|
|
|
+ style="width: 150%"
|
|
|
+ :model-value="field.value"
|
|
|
+ />
|
|
|
+ <el-input
|
|
|
+ v-else-if="field.type === 'double'"
|
|
|
+ v-model="formData[field.identifier]"
|
|
|
+ @input="handleInput(formData[field.identifier], field.identifier)"
|
|
|
+ style="width: 150%"
|
|
|
+ :model-value="field.value"
|
|
|
/>
|
|
|
-
|
|
|
<!-- 日期选择 -->
|
|
|
<el-date-picker
|
|
|
v-else-if="field.type === 'date'"
|
|
|
- v-model="formData[field.prop]"
|
|
|
+ v-model="formData[field.identifier]"
|
|
|
:type="field.type || 'date'"
|
|
|
- :placeholder="'请输入' + field.label"
|
|
|
+ :placeholder="'请输入' + field.name"
|
|
|
value-format="YYYY-MM-DD"
|
|
|
style="width: 150%"
|
|
|
+ :model-value="field.value"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
@@ -349,13 +352,14 @@ import * as DeptApi from '@/api/system/dept'
|
|
|
import * as ProductClassifyApi from '@/api/pms/productclassify'
|
|
|
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
|
|
import { useTagsViewStore } from '@/store/modules/tagsView'
|
|
|
+import {getAttrTemplateByDeviceCategoryId} from "@/api/pms/devicetemplate";
|
|
|
|
|
|
/** 设备台账 表单 */
|
|
|
defineOptions({ name: 'IotDeviceForm' })
|
|
|
const baseIsExpanded = ref(true) // 控制表单是否展开的变量
|
|
|
-const zzIsExpanded = ref(false) // 控制表单是否展开的变量
|
|
|
-const cwIsExpanded = ref(false) // 控制表单是否展开的变量
|
|
|
-const qtIsExpanded = ref(false) // 控制表单是否展开的变量
|
|
|
+const zzIsExpanded = ref(true) // 控制表单是否展开的变量
|
|
|
+const cwIsExpanded = ref(true) // 控制表单是否展开的变量
|
|
|
+const qtIsExpanded = ref(true) // 控制表单是否展开的变量
|
|
|
|
|
|
const deptList = ref<Tree[]>([]) // 树形结构
|
|
|
const productClassifyList = ref<Tree[]>([]) // 树形结构
|
|
@@ -417,25 +421,25 @@ const formRules = reactive({
|
|
|
manDate: [{ required: true, message: '生产日期不能为空', trigger: 'blur' }]
|
|
|
})
|
|
|
|
|
|
-const list = [
|
|
|
- {
|
|
|
- id: 1,
|
|
|
- label: '姓名',
|
|
|
- prop: 'name',
|
|
|
- type: 'input',
|
|
|
- value: null,
|
|
|
- rules: [{ required: true, message: '姓名不能为空', trigger: 'blur' }]
|
|
|
- },
|
|
|
- { id: 2, label: '邮件', prop: 'email', type: 'date' },
|
|
|
- { id: 3, label: '邮件', prop: 'email', type: 'date' },
|
|
|
- { id: 4, label: '邮件', prop: 'email', type: 'date' },
|
|
|
- { id: 5, label: '邮件', prop: 'email', type: 'date' }
|
|
|
-]
|
|
|
+const list = ref([])
|
|
|
|
|
|
const assetclasschange = () => {
|
|
|
const assetClass = formData.value.assetClass
|
|
|
- debugger
|
|
|
- // todo 调用获取动态模板接口
|
|
|
+ getAttrTemplateByDeviceCategoryId(assetClass).then(res => {
|
|
|
+ if (res){
|
|
|
+ if (res.attrs) {
|
|
|
+ res.attrs.forEach((item) => {
|
|
|
+ if (item.requiredFlag) {
|
|
|
+ const rule = {required: true, message: item.name+'不能为空', trigger: 'blur'}
|
|
|
+ item.rules.push(rule)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ list.value = res.attrs
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ list.value = []
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
const brandChoose = (row) => {
|
|
@@ -479,22 +483,6 @@ const allzhankai = () => {
|
|
|
cwIsExpanded.value = true
|
|
|
qtIsExpanded.value = true
|
|
|
}
|
|
|
-/** 打开弹窗 */
|
|
|
-// const open = async (id?: number,isDetail: boolean, type: string) => {
|
|
|
-// debugger
|
|
|
-// formType.value = type
|
|
|
-// resetForm()
|
|
|
-// // 修改时,设置数据
|
|
|
-// if (id) {
|
|
|
-// formLoading.value = true
|
|
|
-// try {
|
|
|
-// formData.value = await IotDeviceApi.getIotDevice(id)
|
|
|
-// } finally {
|
|
|
-// formLoading.value = false
|
|
|
-// }
|
|
|
-// }
|
|
|
-// }
|
|
|
-// defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
|
|
|
|
const handleInput = (value, obj) => {
|
|
|
// 1. 过滤非法字符(只允许数字和小数点)
|
|
@@ -549,10 +537,13 @@ const submitForm = async () => {
|
|
|
// 提交请求
|
|
|
formLoading.value = true
|
|
|
try {
|
|
|
- list.forEach((item) => {
|
|
|
- item.value = formData.value[item.prop]
|
|
|
- })
|
|
|
- formData.value.templateJson = JSON.stringify(list)
|
|
|
+ if (list.value) {
|
|
|
+ list.value.forEach((item) => {
|
|
|
+ item.value = formData.value[item.identifier]
|
|
|
+ })
|
|
|
+ }
|
|
|
+ formData.value.templateJson = JSON.stringify(list.value)
|
|
|
+ debugger
|
|
|
const data = formData.value as unknown as IotDeviceVO
|
|
|
if (formType.value === 'create') {
|
|
|
await IotDeviceApi.createIotDevice(data)
|
|
@@ -591,6 +582,8 @@ onMounted(async () => {
|
|
|
brandLabel.value = iotDevice.brandName;
|
|
|
zzLabel.value = iotDevice.zzName;
|
|
|
supplierLabel.value = iotDevice.supplierName;
|
|
|
+ list.value = JSON.parse(iotDevice.templateJson);
|
|
|
+ debugger
|
|
|
} finally {
|
|
|
formLoading.value = false
|
|
|
}
|