zhangcl 4 mesiacov pred
rodič
commit
3e2c897cd9

+ 13 - 0
src/store/modules/materialGroupTreeStore.ts

@@ -0,0 +1,13 @@
+import { defineStore } from 'pinia'
+
+export const useTreeStore = defineStore('tree', {
+  state: () => ({
+    selectedId: null // 存储物料组树当前选中的树节点 ID
+  }),
+  actions: {
+    // 更新选中的节点 ID
+    setSelectedId(id) {
+      this.selectedId = id;
+    }
+  }
+});

+ 47 - 4
src/views/pms/material/MaterialForm.vue

@@ -20,7 +20,9 @@
               :data="materialGroupList"
               :props="defaultProps"
               check-strictly
-              node-key="id"
+              default-expand-all
+              node-key="materialGroupId"
+              value-key="materialGroupId"
               placeholder="请选择所属物料组"
             />
           </el-form-item>
@@ -38,6 +40,33 @@
           </el-form-item>
         </el-col>
       </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item
+            label="单位"
+            prop="unit"
+          >
+            <el-select
+              :model-value="formData.unit"
+              filterable
+              placeholder="请选择单位"
+              class="w-1/1"
+            >
+              <el-option
+                v-for="(item, index) in getStrDictOptions(DICT_TYPE.IOT_THING_MODEL_UNIT)"
+                :key="index"
+                :label="item.label + '-' + item.value"
+                :value="item.label + '-' + item.value"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="显示排序" prop="sort">
+            <el-input-number v-model="formData.sort" :min="0" controls-position="right" />
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-row>
         <el-col :span="24">
           <el-form-item label="备注">
@@ -58,23 +87,28 @@ import { defaultProps, handleTree } from '@/utils/tree'
 import * as MaterialGroupApi from '@/api/pms/materialgroup'
 import * as MaterialApi from '@/api/pms/material'
 import { FormRules } from 'element-plus'
+import { useTreeStore } from '@/store/modules/materialGroupTreeStore'
+import {DICT_TYPE, getStrDictOptions} from "@/utils/dict";
 
 defineOptions({ name: 'MaterialForm' })
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
-
+const treeStore = useTreeStore();
 const dialogVisible = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
 const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const storedMaterialGroupId = ref(null);  // 通过store存储的物料组id 由父组件传递过来
+
 const formData = ref({
   name: '',
-  materialGroupId: '',
+  materialGroupId: storedMaterialGroupId.value,
   code: '',
   model: '',
   id: undefined,
   unit: '',
+  sort: 0,
   remark: '',
   status: CommonStatusEnum.ENABLE,
 })
@@ -90,6 +124,8 @@ const materialGroupList = ref<Tree[]>([]) // 树形结构
 /** 打开弹窗 */
 const open = async (type: string, id?: number) => {
   dialogVisible.value = true
+  // 获取store中的设备分类id
+  storedMaterialGroupId.value = treeStore.selectedId;
   dialogTitle.value = t('action.' + type)
   formType.value = type
   resetForm()
@@ -137,14 +173,21 @@ const submitForm = async () => {
 const resetForm = () => {
   formData.value = {
     name: '',
-    materialGroupId: '',
+    materialGroupId: storedMaterialGroupId.value,
     code: '',
     model: '',
     id: undefined,
     unit: '',
+    sort: 0,
     remark: '',
     status: CommonStatusEnum.ENABLE,
   }
   formRef.value?.resetFields()
 }
+
+/** 初始化 **/
+onMounted(() => {
+  formData.value.sort = 0
+})
+
 </script>

+ 3 - 0
src/views/pms/material/MaterialGroupTree.vue

@@ -38,9 +38,11 @@
 import { ElTree } from 'element-plus'
 import * as MaterialGroupApi from '@/api/pms/materialgroup'
 import { defaultProps, handleTree } from '@/utils/tree'
+import { useTreeStore } from '@/store/modules/materialGroupTreeStore'
 
 defineOptions({ name: 'MaterialGroupTree' })
 
+const treeStore = useTreeStore();
 const materialGroupName = ref('')
 const materialGroupList = ref<Tree[]>([]) // 树形结构
 const treeRef = ref<InstanceType<typeof ElTree>>()
@@ -86,6 +88,7 @@ const filterNode = (name: string, data: Tree) => {
 /** 处理物料组被点击 */
 const handleNodeClick = async (row: { [key: string]: any }) => {
   emits('node-click', row)
+  treeStore.setSelectedId(row.id);
 }
 const emits = defineEmits(['node-click'])
 

+ 1 - 0
src/views/pms/material/index.vue

@@ -117,6 +117,7 @@
             :show-overflow-tooltip="true"
           />
           <el-table-column label="规格型号" align="center" prop="model" width="120" />
+          <el-table-column label="单位" align="center" prop="unit" width="120" />
           <el-table-column label="状态" key="status">
             <template #default="scope">
               <el-switch