|
@@ -0,0 +1,55 @@
|
|
|
|
|
+import { basicAreaPageAPI } from '@/api/factoryModel';
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 区域(作业地点)公共逻辑
|
|
|
|
|
+ * - 提供区域树数据
|
|
|
|
|
+ * - 维护「区域全路径 -> 区域id」映射,便于编辑时把区域名称反查成区域id回显
|
|
|
|
|
+ */
|
|
|
|
|
+export default {
|
|
|
|
|
+ data() {
|
|
|
|
|
+ return {
|
|
|
|
|
+ areaTreeList: [],
|
|
|
|
|
+ // 区域全路径 -> 区域id
|
|
|
|
|
+ areaPathMap: {}
|
|
|
|
|
+ };
|
|
|
|
|
+ },
|
|
|
|
|
+ created() {
|
|
|
|
|
+ this.getAreaTree();
|
|
|
|
|
+ },
|
|
|
|
|
+ methods: {
|
|
|
|
|
+ // 获取区域树
|
|
|
|
|
+ async getAreaTree() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const list = await basicAreaPageAPI({
|
|
|
|
|
+ pageNum: 1,
|
|
|
|
|
+ size: 9999
|
|
|
|
|
+ });
|
|
|
|
|
+ this.areaTreeList = this.$util.toTreeData({
|
|
|
|
|
+ data: list || [],
|
|
|
|
|
+ idField: 'id',
|
|
|
|
|
+ parentIdField: 'parentId'
|
|
|
|
|
+ });
|
|
|
|
|
+ this.areaPathMap = this.buildAreaPathMap(this.areaTreeList, []);
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.error('获取区域数据失败', e);
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ // 生成「区域全路径 -> 区域id」映射
|
|
|
|
|
+ buildAreaPathMap(nodes, parents) {
|
|
|
|
|
+ const map = {};
|
|
|
|
|
+ (nodes || []).forEach((node) => {
|
|
|
|
|
+ const path = [...parents, node.name].join('/');
|
|
|
|
|
+ map[path] = node.id;
|
|
|
|
|
+ Object.assign(
|
|
|
|
|
+ map,
|
|
|
|
|
+ this.buildAreaPathMap(node.children, [...parents, node.name])
|
|
|
|
|
+ );
|
|
|
|
|
+ });
|
|
|
|
|
+ return map;
|
|
|
|
|
+ },
|
|
|
|
|
+ // 根据区域全路径名称反查区域id
|
|
|
|
|
+ getAreaIdByName(name) {
|
|
|
|
|
+ return (name && this.areaPathMap[name]) || '';
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+};
|