haoyahui
2023-11-11 332c012e7336f2996c4fe5c8c110d00713c1bde2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<template>
  <win-sm :title="setting.title" @close="close" :width="'800px'">
    <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
      <el-form-item label="编号" prop="warehouseCode">
        <el-input disabled v-model="formData.warehouseCode" clearable maxlength="20" show-word-limit style="width: 100%" />
      </el-form-item>
      <el-form-item label="仓库名称" prop="warehouseName">
        <el-input v-model="formData.warehouseName" clearable maxlength="20" show-word-limit style="width: 100%" />
      </el-form-item>
      <el-form-item label="仓库类型" prop="classificationCode">
        <el-select v-model="formData.classificationCode" clearable placeholder="请选择" style="width: 100%">
          <el-option
            v-for="item in classList"
            :key="item.dict_code"
            :label="item.dict_label"
            :value="item.dict_code"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="所属机构" prop="agencyIds">
          <el-cascader v-model="formData.agencyIds" :options="treeList" :props="{checkStrictly: true,value:'id'}" @change="handleChange" style="width: 100%"></el-cascader>
      </el-form-item>
      <el-form-item label="地址">
        <el-input v-model="formData.adress" clearable maxlength="20" show-word-limit style="width: 100%" />
      </el-form-item>
      <el-form-item label="状态" prop="states">
        <el-radio-group v-model="formData.states">
          <el-radio :label="1" border>启用</el-radio>
          <el-radio :label="0" border>禁用</el-radio>
        </el-radio-group>
      </el-form-item>
    </el-form>
    <div slot="footer" align="center" class="dialog-footer">
      <my-button name="取消" site="form" @click="close" />
      <my-button name="保存" site="form" @click="save" />
    </div>
  </win-sm>
</template>
 
<script>
import winSm from '@/components/win/win-sm';
import myButton from '@/components/myButton/myButton';
import * as finsystenant from '@/api/baseSetting/finsystenant';
 
export default {
  components: { winSm, myButton },
  props: {
    setting: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      classList: [],
      treeList: [],
      checkAll: false,
      checkedList: [],
      formData: {
        warehouseCode:null,
        classificationId: null,
        classificationCode:null,
        states: 1,
        agencyIds:[],
        agencyId:''
      },
      rules: {
        warehouseName: [{ required: true, message: '请输入', trigger: 'blur' }],
        classificationCode: [{ required: true, message: '请选择', trigger: 'blur' }],
        agencyIds: [{ required: true, message: '请选择', trigger: 'blur' }],
        states: [{ required: true, message: '请选择状态', trigger: 'blur' }],
      },
    };
  },
  created() {
    this.class_List();
    this.tree_List();
    if (this.setting.info) {
      this.formData = Object.assign({}, JSON.parse(this.setting.info));
    }
  },
  methods: {
    class_List() {
      finsystenant.classList().then((res) => {
        if (res) {
          console.log(res, 'res');
          this.classList = res;
        }
      });
    },
    tree_List() {
      finsystenant.getTree().then((res) => {
        if (res) {
          this.treeList = res;
          this.$set(this.formData,'agencyIds',this.findParentIds(this.treeList,this.formData.agencyId))
        }
      });
    },
    handleChange(e){
      this.formData.agencyId = e[e.length-1]
    },
    getEditInfo(id) {},
    close() {
      this.$emit('close');
    },
    save() {
      this.$refs.ruleForm.validate((valid) => {
        if (valid) {
          const params = Object.assign({}, this.formData);
          if (this.setting.id) {
            // 编辑接口
            finsystenant.editstore(params).then((res) => {
              if (res) {
                this.$message.success('保存成功!');
                this.close();
                this.$emit('search');
              } else {
                this.$message.error('保存失败');
              }
            });
          } else {
            params.orgId = this.setting.orgId;
            finsystenant.addstore(params).then((res) => {
              if (res) {
                this.$message.success('保存成功!');
                this.close();
                this.$emit('search');
              } else {
                this.$message.error('保存失败');
              }
            });
          }
        } else {
          this.$message.error('校验未通过,请检查。');
        }
      });
    },
    // 通过子集id查到所以相关父级id并返回数组
    findParentIds(dataSource, nodeId) {
      const parentIds = [nodeId]; // 用于存储所有父节点ID的数组
 
      // 定义一个递归函数,用于遍历整棵树并查找子节点的所有父节点
      function traverse(node, nodeId) {
        if (node.id === nodeId) {
          // 如果当前节点的ID等于子节点的ID,则表示已经找到了子节点,可以开始向上查找父节点
          return true; // 返回true表示已经找到了子节点
        }
 
        if (node.children) {
          // 如果当前节点有子节点,则继续遍历子节点
          for (const childNode of node.children) {
            if (traverse(childNode, nodeId)) {
              // 如果在子节点中找到了子节点的父节点,则将当前节点的ID添加到父节点ID数组中,并返回true表示已经找到了子节点
              parentIds.unshift(node.id);
              return true;
            }
          }
        }
 
        return false; // 如果当前节点不是子节点的父节点,则返回false
      }
 
      // 从根节点开始遍历整棵树,并调用递归函数查找子节点的所有父节点
      for (const node of dataSource) {
        if (traverse(node, nodeId)) {
          // 如果在当前节点的子树中找到了子节点的父节点,则直接退出循环
          break;
        }
      }
 
      return parentIds; // 返回所有父节点ID的数组
    },
  },
};
</script>