From 96be59a64cc1d8fcaf1034e787717663c68df4a7 Mon Sep 17 00:00:00 2001 From: 杨磊 <505174330@qq.com> Date: 星期一, 26 五月 2025 10:39:58 +0800 Subject: [PATCH] 2025-5-26提交 --- src/views/model/children/landerModel.vue | 504 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 499 insertions(+), 5 deletions(-) diff --git a/src/views/model/children/landerModel.vue b/src/views/model/children/landerModel.vue index dc84061..2145141 100644 --- a/src/views/model/children/landerModel.vue +++ b/src/views/model/children/landerModel.vue @@ -1,14 +1,508 @@ <template> - <div class="kinematic"> - <h2>鐫�闄嗗櫒妯″瀷搴�</h2> + <div class="landerBox"> + <div class="landerTopBox"> + <el-button :icon="Plus" @click="dialogFormVisible = true">鏂板缓</el-button> + <el-input + v-model="input4" + style="width: 300px" + placeholder="璇疯緭鍏ュ叧閿瓧鎼滅储" + > + <template #suffix> + <el-icon class="el-input__icon" @click="getTableData" + ><search + /></el-icon> + </template> + </el-input> + </div> + <div class="landerContentBox"> + <el-table + ref="multipleTableRef" + :data="tableData" + row-key="id" + border + style="width: 100%" + @selection-change="handleSelectionChange" + class="landerTable" + v-loading="isLoading" + > + <el-table-column type="selection" width="55" /> + <el-table-column prop="id" label="搴忓彿" width="70" /> + <el-table-column prop="ModelName" label="妯″瀷鍚嶇О" width="180" /> + <el-table-column prop="JointData" label="鍏宠妭鏁版嵁閲�" width="180" /> + <el-table-column prop="IsSimulation" label="鏄惁鍙豢鐪�" width="180"> + <template #default="scope"> + <span>{{ scope.row.IsSimulation ? "鏄�" : "鍚�" }}</span> + </template> + </el-table-column> + <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" width="180" /> + <el-table-column prop="creator" label="鍒涘缓浜�"> + <template #default="scope"> + <span>{{ scope.row.creator.Name }}</span> + </template> + </el-table-column> + <el-table-column prop="option" label="鎿嶄綔"> + <template #default="scope"> + <div> + <el-button + type="primary" + size="small" + @click="handleEdit(scope.row)" + >缂栬緫</el-button + > + <el-button + type="danger" + size="small" + @click="handleDelete(scope.row)" + >鍒犻櫎</el-button + > + <el-button + type="success" + size="small" + @click="handlePreview(scope.row)" + >棰勮</el-button + > + <el-button + v-if="scope.$index !== 0" + type="success" + size="small" + @click="handleMoveUp(scope.row)" + >涓婄Щ</el-button + > + <el-button + v-if="scope.$index !== tableData.length - 1" + type="success" + size="small" + @click="handleMoveDown(scope)" + >涓嬬Щ</el-button + > + </div> + </template> + </el-table-column> + </el-table> + <div class="lander-pagination-block"> + <el-pagination + style="width: 100%" + v-model:current-page="currentPage" + :page-size="pageSize" + :size="size" + :background="background" + layout="total, prev, pager, next" + :total="tableTotal" + @current-change="handleCurrentChange" + /> + </div> + </div> + <el-dialog v-model="dialogTableVisible" title="棰勮"> + <div> + <iframe + style="width: 100%; height: 500px" + src="../static/modelView/index.html?md5=62d4eadc420b7403fce2be993baa095d&name=椋炶妫�&domain=https://www.jlstp.cn&target=iframe" + frameborder="0" + ></iframe> + </div> + </el-dialog> + + <el-dialog v-model="dialogFormVisible" title="鏂板缓妯″瀷"> + <el-form :rules="rules" :model="form" ref="formRef"> + <el-form-item + prop="ModelName" + label="妯″瀷鍚嶇О" + :label-width="formLabelWidth" + > + <el-input v-model="form.ModelName" autocomplete="off" /> + </el-form-item> + <el-form-item label="鍏抽敭鏁版嵁閲�" :label-width="formLabelWidth"> + <el-input v-model="form.JointData" autocomplete="off" /> + </el-form-item> + <el-form-item label="鏄惁鍙豢鐪�" :label-width="formLabelWidth"> + <el-switch + v-model="form.IsSimulation" + class="ml-2" + style="--el-switch-on-color: #13ce66" + /> + </el-form-item> + <el-form-item label="澶囨敞" :label-width="formLabelWidth"> + <el-input + v-model="form.ModelRemarks" + :rows="2" + type="textarea" + placeholder="璇疯緭鍏�..." + /> + </el-form-item> + </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button @click="dialogFormVisible = false">鍙栨秷</el-button> + <el-button type="primary" @click="SubmitEvent(formRef)"> + 纭畾 + </el-button> + </span> + </template> + </el-dialog> </div> </template> <script setup lang="ts"> +import { inject, onMounted, reactive, ref, watch } from "vue"; +import { Plus } from "@element-plus/icons-vue"; +import { curStoreInfo } from "@/store/index"; +import { + ComponentSize, + ElMessage, + FormInstance, + TableInstance, +} from "element-plus"; +import { updateLocale } from "moment"; +const MG: any = inject("MG"); +const toolClass: any = inject("toolClass"); +// 鎼滅储 +const input4 = ref(""); +const formRef = ref<FormInstance>(); +// 琛ㄦ牸 +const multipleTableRef = ref<TableInstance>(); +const multipleSelection = ref<any[]>([]); +const dialogTableVisible = ref(false); +const dialogFormVisible = ref(false); +const formLabelWidth = "140px"; +const typeInfo = ref(); +// 鍒嗛〉 +const currentPage = ref(1); +const pageSize = ref(20); +const size = ref<ComponentSize>("default"); +const background = ref(true); +const isLoading = ref(false); +const tableData = ref([]); +const previewUrl = ref( + "./static/modelView/index.html?md5=62d4eadc420b7403fce2be993baa095d&name=椋炶妫�&domain=https://www.jlstp.cn&target=iframe" +); +const form = reactive({ + ModelName: "", + JointData: "", + IsSimulation: false, + ModelRemarks: "", +}); +const seleStore = curStoreInfo(); +//鍒嗛〉鏁版嵁閲� +const tableTotal = ref(0); +//褰撳墠缂栬緫琛� +const currentRow = ref(); +watch( + () => seleStore.channelInfo, // 鐩戝惉 reactive 瀵硅薄锛堥粯璁ゆ繁搴︾洃鍚級 + (newVal) => { + if (newVal) { + console.log(newVal, "newVal"); + console.log(seleStore.storeInfo, "seleStore"); + + getTableData(); + } + } +); + +// 鎼滅储 +const handleSearch = () => { + console.log(input4.value, "input4"); +}; +// 缂栬緫鎿嶄綔 +const handleEdit = (row) => { + console.log(row, "row"); + dialogFormVisible.value = true; + currentRow.value = row; + form.ModelName = row.ModelName; + form.JointData = row.JointData; + form.IsSimulation = row.IsSimulation == "1" ? true : false; + form.ModelRemarks = row.ModelRemarks; +}; +//鍒犻櫎鎿嶄綔 +const handleDelete = async (row) => { + const body = { + accessModule: "", + accessPath: seleStore.channelInfo.data.idPath, + accessStoreId: seleStore.storeInfo.storeId, + accessRepositoryId: seleStore.storeInfo.repositoryId, + accessItemId: seleStore.channelInfo.data.id, + parentId: seleStore.storeInfo.repositoryData.recycleChannel.id, + parentAccessRequest: { + accessModule: "", + accessPath: seleStore.storeInfo.repositoryData.recycleChannel.id + "", + accessStoreId: seleStore.storeInfo.repositoryData.storeId, + accessRepositoryId: seleStore.storeInfo.repositoryData.id, + accessItemId: seleStore.storeInfo.repositoryData.recycleChannel.id, + }, + itemIds: [row.id], + }; + const res = await MG.dps5.DelCmsItemByList(body); + ElMessage({ + message: "鍒犻櫎鎴愬姛", + type: "success", + }); + getTableData(); +}; +//棰勮鎿嶄綔 +const handlePreview = (row) => { + dialogTableVisible.value = true; +}; +//涓婄Щ鎿嶄綔 +const handleMoveUp = (row) => {}; +//涓嬬Щ鎿嶄綔 +const handleMoveDown = (row) => { + console.log(row, "row"); + console.log(tableData.value, "tableData"); +}; + +const getTableData = async () => { + isLoading.value = true; + const fields = { + ModelName: [], + JointData: [], + IsSimulation: [], + ModelRemarks: [], + ChildrenCount: [], + }; + let searchFields = {}; + if (input4.value != "") { + searchFields = { + "ModelName*": [input4.value], + }; + } + const body = { + path: seleStore.channelInfo.data.idPath, + type: "\\", + storeId: seleStore.storeInfo.storeId, + repositoryId: seleStore.storeInfo.repositoryId, + paging: { + Start: (currentPage.value - 1) * pageSize.value, + Size: pageSize.value, + }, + linkTypes: [], + fields: { ...fields, ...searchFields }, + filters: { + "SysType=": ["CmsItem"], + }, + }; + const queryTableData = await toolClass.getCmsItem(body); + tableData.value = queryTableData.datas; + tableTotal.value = queryTableData.total; + isLoading.value = false; +}; + +//鏍¢獙瑙勫垯 +const rules = reactive({ + ModelName: [{ required: true, message: "璇疯緭鍏ュ悕绉�", trigger: "blur" }], +}); +onMounted(() => { + getType(); +}); +//鑾峰彇绫诲瀷 +const getType = async () => { + const type = await MG.dps5.GetTypeByRefCode({ + refCodes: ["ModelRemarks"], + }); + const typeData = toolClass.handleTypeList(type); + typeInfo.value = typeData[0]; +}; + +const SubmitEvent = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate(async (valid, fields) => { + if (valid) { + if (currentRow.value) { + console.log(form, "fields"); + console.log(currentRow.value, "currentRow"); + const keys = Object.keys(form); + const editObj = { + add: [], + update: [], + delete: [], + }; + for (const key of keys) { + const typeField = typeInfo.value.typeLinkList[0].children.find( + (item: any) => item.typeField.refCode === key + ); + + if ( + form[key] && + currentRow.value[key] && + form[key] != currentRow.value[key] + ) { + const updateObj = { + baseType: typeField.typeField.baseType, + order: typeField.order, + itemDataId: currentRow.value.datas[key].Id, + data: form[key], + link: {}, + linkFiles: [], + }; + editObj.update.push(updateObj); + } else if (form[key] == "" && currentRow.value[key] != "") { + const curField = currentRow.value.datas[key].Id; + editObj.delete.push(curField); + } else if (!currentRow.value[key] && form[key] != "") { + const fieldObj = { + baseType: typeField.typeField.baseType, + order: typeField.order, + link: {}, + linkFiles: [], + addLinkItems: [], + typeFieldId: typeField.typeField.id, + refCode: typeField.typeField.refCode, + sequenceNum: typeField.cfg.uuid, + }; + switch (key) { + case "ModelName": + fieldObj["strValue"] = form[key]; + break; + case "JointData": + fieldObj["strValue"] = form[key]; + break; + case "IsSimulation": + fieldObj["intValue"] = form[key] ? 1 : 0; + break; + case "ModelRemarks": + fieldObj["textValue"] = form[key]; + break; + } + editObj.add.push(fieldObj); + } + } + console.log(editObj, "editObj"); + + const params = { + updateList: [ + { + accessModule: "", + accessPath: seleStore.channelInfo.data.idPath, + accessStoreId: seleStore.storeInfo.storeId, + accessRepositoryId: seleStore.storeInfo.repositoryId, + accessItemId: seleStore.channelInfo.data.id, + sysType: "CmsItem", + linkType: "Link", + // name: form.ModelName, + delCmsItemDataRequest: editObj.delete.length + ? { cmsItemDataIds: editObj.delete } + : null, + addCmsItemDataListRequest: editObj.add.length + ? { dataRequests: editObj.add } + : null, + updateCmsItemDataListRequest: { + cmsItemId: currentRow.value.id, + dataRequests: editObj.update, + }, + }, + ], + }; + const res = await MG.dps5.UpdateCmsItem(params); + dialogFormVisible.value = false; + ElMessage({ + message: "缂栬緫鎴愬姛", + type: "success", + }); + getTableData(); + } else { + const keys = Object.keys(form); + const fieldList = []; + for (const key of keys) { + const typeField = typeInfo.value.typeLinkList[0].children.find( + (item: any) => item.typeField.refCode === key + ); + + const fieldObj = { + baseType: typeField.typeField.baseType, + order: typeField.order, + link: {}, + linkFiles: [], + addLinkItems: [], + typeFieldId: typeField.typeField.id, + refCode: typeField.typeField.refCode, + sequenceNum: typeField.cfg.uuid, + }; + switch (key) { + case "ModelName": + fieldObj["strValue"] = form[key]; + break; + case "JointData": + fieldObj["strValue"] = form[key]; + break; + case "IsSimulation": + fieldObj["intValue"] = form[key] ? 1 : 0; + break; + case "ModelRemarks": + fieldObj["textValue"] = form[key]; + break; + } + fieldList.push(fieldObj); + } + const params = { + accessModule: "", + accessPath: seleStore.channelInfo.data.idPath, + accessStoreId: seleStore.storeInfo.storeId, + accessRepositoryId: seleStore.storeInfo.repositoryId, + accessItemId: seleStore.channelInfo.data.id, + sysType: "CmsItem", + linkType: "Link", + cmsItemRequest: { + name: form.ModelName, + description: form.ModelRemarks, + type: "Normal", + state: "Normal", + accessType: "Private", + cmsTypeId: typeInfo.value.id, + cmsItemDataList: fieldList, + linkCmsItemDataIds: [], + linkOrgIds: [1], + linkDepartmentIds: [1], + }, + newProcessInstanceCmsItemRightsPointRequests: [], + }; + console.log(seleStore.channelInfo, "seleStore.channelInfo"); + const res = await MG.dps5.NewCmsItem(params); + dialogFormVisible.value = false; + ElMessage({ + message: "鏂板缓鎴愬姛", + type: "success", + }); + getTableData(); + } + } + }); +}; +const handleCurrentChange = (val: number) => { + currentPage.value = val; + getTableData(); +}; + +const handleSelectionChange = (val: []) => { + multipleSelection.value = val; +}; </script> <style lang="less" scoped> -.kinematic { - padding: 20px; +.landerBox { + width: 100%; + height: 100%; + + .landerTopBox { + display: flex; + justify-content: space-between; + align-items: center; + height: 50px; + padding: 0 10px; + box-sizing: border-box; + } + .landerContentBox { + max-height: calc(100% - 120px); + padding: 0 10px; + box-sizing: border-box; + + .landerTable { + height: 750px; + } + } + .lander-pagination-block { + height: 60px; + display: flex; + justify-content: flex-end; + padding: 0 20px; + background-color: #fff; + } } -</style> \ No newline at end of file +</style> -- Gitblit v1.9.1