林倩 4 лет назад
Родитель
Сommit
45460c2c71
24 измененных файлов с 554 добавлено и 463 удалено
  1. 4 2
      config/dev.env.js
  2. 37 0
      src/api/data-auth.js
  3. 26 0
      src/assets/style/project.scss
  4. 4 6
      src/pages/common/select-tree/index.vue
  5. 2 3
      src/pages/common/table/index.vue
  6. 2 1
      src/pages/common/tree/index.vue
  7. 3 1
      src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/add-app-form.vue
  8. 0 138
      src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/add-func-form.vue
  9. 4 2
      src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/app-list.vue
  10. 0 173
      src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/func-list.vue
  11. 0 9
      src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/index.vue
  12. 31 55
      src/pages/data-auth-module/auth-object-manage/object-prop-manage/index.vue
  13. 1 0
      src/pages/data-auth-module/auth-object-manage/service-resource-manage/add-form.vue
  14. 8 0
      src/pages/data-auth-module/auth-object-manage/sort-code-manage/data-level.vue
  15. 9 0
      src/pages/data-auth-module/auth-object-manage/sort-code-manage/field-sort-code.vue
  16. 46 0
      src/pages/data-auth-module/auth-object-manage/sort-code-manage/layers/data-level-layer.vue
  17. 9 0
      src/pages/data-auth-module/auth-object-manage/sort-code-manage/source-sort-code.vue
  18. 1 1
      src/pages/data-auth-module/property-management/application-management/application-properties.vue
  19. 18 1
      src/pages/data-auth-module/property-management/index.scss
  20. 27 14
      src/pages/data-auth-module/property-management/subject-management/application-list.vue
  21. 134 0
      src/pages/data-auth-module/property-management/subject-management/prop-detail.vue
  22. 155 0
      src/pages/data-auth-module/property-management/subject-management/prop-tree.vue
  23. 32 55
      src/pages/data-auth-module/property-management/subject-management/subject-property.vue
  24. 1 2
      src/router/modules/data-auth-module.js

+ 4 - 2
config/dev.env.js

@@ -14,7 +14,7 @@ module.exports = merge(prodEnv, {
     QQQ: '"/easy-mock2"',
 
     //是否需要登录验证
-    NEED_LOGIN: "false",
+    NEED_LOGIN: "true",
 
     //需要依赖的系统名称
     // INSTALLED_PROJECT: "'zfba,demo2,cross-env'",
@@ -39,10 +39,12 @@ module.exports = merge(prodEnv, {
             // target: "http://10.11.1.192:8871" // 马志强
             // target: "http://10.11.1.142:8861", // 易长安
             // target: "http://10.254.11.200:8861" // 傅志强
-            target: "http://10.254.10.15:8861" // 傅志强
+            // target: "http://10.254.10.15:8861" // 傅志强
             // target: "http://10.11.1.164:8861"
             // target: "http://10.11.0.48:8861",// 邱宇
             // target: "http://10.254.11.203:8861"
+            target: "http://10.11.1.237:8861"
+            
         }
     })
 });

+ 37 - 0
src/api/data-auth.js

@@ -163,3 +163,40 @@ export function orgInfoDetail(id) {
     })
 }
 
+/******************************* 主客体授权管理    ********************************* */
+
+// 根据属性所属类别获取属性列表,返回树结构
+export function getPropTreeByType(attrType) {
+    return request({
+        url: `/attrsvr/v2/getAttrTreeList`,
+        method: "GET",
+        params: {
+            attrType
+        }
+    })
+}
+// 获取属性详情
+export function getPropDetail(params) {
+    return request({
+        url: `/attrsvr/v2/attrRelToIds`,
+        method: "GET",
+        params
+    })
+}
+
+// 保存属性
+export function saveProp(data) {
+   return request({
+       url: `/attrsvr/v2/attrAdds`,
+       method: "POST",
+       data
+   })
+}
+// 删除属性
+export function deleteProp(params) {
+    return request({
+        url: `/attrsvr/v2/deleteAllById`,
+        method: "GET",
+        params
+    })
+}

+ 26 - 0
src/assets/style/project.scss

@@ -8,6 +8,32 @@
 	width: 100% !important;
 }
 
+// 重置滚动条样式
+::-webkit-scrollbar {
+    width: 6px;
+    height: 6px;
+    background-color: rgba(0, 0, 0, 0);
+    transition: opacity 120ms ease-out;
+	cursor: pointer;
+}
+
+/*定义滚动条轨道 内阴影+圆角*/
+::-webkit-scrollbar-track {
+    -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.09);
+    border-radius: 4px;
+    background-color: rgba(0, 0, 0, 0);
+	cursor: pointer;
+}
+
+/*定义滑块 内阴影+圆角*/
+::-webkit-scrollbar-thumb {
+    border-radius: 4px;
+    -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, .09);
+    background-color: rgba(0, 0, 0, .09);
+	cursor: pointer;
+}
+
+
 
 
 

+ 4 - 6
src/pages/common/select-tree/index.vue

@@ -55,10 +55,9 @@ export default {
     components: {},
     data() {
         return {
-            timer: null,
             value: "",
             props: {
-                value: "id",
+                value: "code",
                 label: "name",
                 children: "children",
                 isLeaf(data) {
@@ -66,7 +65,7 @@ export default {
                 }
             },
             treeProps: {
-                nodeKey: "id",
+                nodeKey: "code",
                 lazy: true,
                 load: this.loadNode
             }
@@ -75,8 +74,7 @@ export default {
     computed: {},
     methods: {
         loadNode(node, resolve) {
-            
-            this.getTree(node.level === 0 ? void 0 : node.key, resolve, node.level);
+            this.getTree(node.level === 0 ? void 0 : node.data.id, resolve, node.level);
         },
         // 组织机构
         getTree(id, resolve) {
@@ -89,7 +87,7 @@ export default {
                 .catch(() => resolve([]));
         },
          handleChange(val) {
-            // this.$emit("submitTreeValue", val)
+            this.$emit("submitTreeValue", val)
          }
     },
     created() {},

+ 2 - 3
src/pages/common/table/index.vue

@@ -5,18 +5,17 @@
 -->
 <template>
     <dg-table
+        ref="grid"
+        row-key="id"
         border
         :auto-page="(h) => h * 0.6"
         :expand-row-keys="expands"
-        overflow="tooltip"
         @change-current="handleChangeCurrent"
         @change-size="handleChangeSize"
         @selection-change="handleSelectionChange"
         @expand-change="handleExpandChange"
         @row-click="handleRowClick"
         @cell-click="handleCellClick"
-        ref="grid"
-        row-key="id"
         :url="url"
         :condition="condition"
         :pagination="pagination"

+ 2 - 1
src/pages/common/tree/index.vue

@@ -36,7 +36,7 @@
                         <p @dblclick="handlerNodeDoubleClick(data)" @click="handleNodeClick(data)">
                             <i class="el-icon-folder-opened" v-if="data.isParent"></i>
                             <i class="el-icon-document" v-else></i>
-                            <span class="tree-node__text"> {{ data[labelName] }}</span>
+                            <span class="tree-node__text" :title="data[labelName]"> {{ data[labelName] }}</span>
                         </p>
                     </div>
                 </dg-tree>
@@ -48,6 +48,7 @@
                         v-for="(item, index) in searchResultList"
                         :key="index"
                         @click="doClickSearchItem(item, index)"
+                        :title="item.fullName"
                     >
                         {{ item.fullName }}
                     </li>

+ 3 - 1
src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/add-app-form.vue

@@ -61,9 +61,10 @@
         </el-form>
     </dg-row>
 </template>
-S
+
 <script>
 import { appRestApi } from "@/api/application";
+import moment from "moment"
 export default {
     props: {
         id: String,
@@ -122,6 +123,7 @@ export default {
          */
         getDetail() {
             appRestApi.detail(this.id).then((res) => {
+                res.lineTime = moment(res.lineTime).format("YYYY-MM-DD");
                 this.form = res;
             });
         }

+ 0 - 138
src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/add-func-form.vue

@@ -1,138 +0,0 @@
-<!--
-新增功能
-@Author: linqian
-@Date: 2021-05-17 16:47
--->
-<template>
-    <dg-row>
-        <el-form ref="form" :model="form" :rules="rules" label-width="150px">
-            <dg-col :span="12">
-                <el-form-item label="功能编号:" prop="code">
-                    <el-input v-model="form.code" placeholder="" v-if="!isDetail"></el-input>
-                    <span v-else>{{ form.code }}</span>
-                </el-form-item>
-                <el-form-item label="上级功能编号:" prop="parentId">
-                    <el-input v-model="form.parentId" placeholder="" v-if="!isDetail"></el-input>
-                    <span v-else>{{ form.parentId }}</span>
-                </el-form-item>
-                <el-form-item label="所属应用:" prop="appName">
-                    <el-input v-model="form.appName" placeholder="" v-if="!isDetail" disabled></el-input>
-                    <span v-else>{{ form.appName }}</span>
-                </el-form-item>
-                <el-form-item label="设计安全隐私类别:" prop="designSecureType">
-                    <dg-select v-model="form.designSecureType" placeholder="" enum="SecurityPrivacyEnum" v-if="!isDetail"></dg-select>
-                    <span v-else>{{ form.designSecureType }}</span>
-                </el-form-item>
-            </dg-col>
-            <dg-col :span="12">
-                <el-form-item label="功能名称:" prop="name">
-                    <el-input v-model="form.name" placeholder="" v-if="!isDetail"></el-input>
-                    <span v-else>{{ form.name }}</span>
-                </el-form-item>
-                <el-form-item label="在用状态:" prop="isActive">
-                    <dg-select code="DM_APPLY_STATUS" v-model="form.isActive" v-if="!isDetail"></dg-select>
-                    <span v-else>{{ form.isActive == "0" ? "禁用" : "启用" }}</span>
-                </el-form-item>
-                <el-form-item label="功能使用场景代码:" prop="functionUsageScenarios">
-                    <el-input v-model="form.functionUsageScenarios" placeholder="" v-if="!isDetail"></el-input>
-                    <span v-else>{{ form.functionUsageScenarios }}</span>
-                </el-form-item>
-            </dg-col>
-            <dg-col :span="24">
-                <el-form-item label="功能说明:" prop="remark">
-                    <el-input
-                        v-model="form.remark"
-                        placeholder=""
-                        type="textarea"
-                        :rows="3"
-                        v-if="!isDetail"
-                    ></el-input>
-                    <span v-else>{{ form.remark }}</span>
-                </el-form-item>
-            </dg-col>
-        </el-form>
-    </dg-row>
-</template>
-S
-<script>
-import { funcRestApi } from "@/api/application";
-export default {
-    props: {
-        id: String,
-        isDetail: {
-            type: Boolean,
-            default: false
-        },
-        app: Object
-    },
-    components: {},
-    data() {
-        return {
-            form: {
-                appId: "",
-                appName: "",
-                code: "",
-                designSecureType: "",
-                functionUsageScenarios: "",
-                isActive: "",
-                name: "",
-                parentId: "",
-                remark: ""
-            },
-            rules: {
-                code: [{ required: true, message: "请输入功能编号", trigger: "change" }],
-                name: [{ required: true, message: "请输入功能名称", trigger: "change" }],
-                parentId: [{ required: true, message: "请输入上级功能编号", trigger: "change" }],
-                isActive: [{ required: true, message: "请选择在用状态", trigger: "change" }],
-                appName: [{ required: true, message: "请选择应用", trigger: "change" }]
-            }
-        };
-    },
-    computed: {},
-    methods: {
-        /**
-         * 保存
-         */
-        saveForm() {
-            return new Promise((resolve) => {
-                this.$refs.form.validate((valid) => {
-                    if (valid) {
-                        const api = this.id ? "update" : "save";
-                        funcRestApi[api](this.form)
-                            .then((res) => {
-                                this.$message.success("保存成功!");
-                                resolve("成功");
-                            })
-                            .catch((error) => {
-                                this.$message.error(error);
-                            });
-                    }
-                });
-            });
-        },
-        /**
-         * 获取详情
-         */
-        getDetail() {
-            funcRestApi.detail(this.id).then((res) => {
-                this.form = res;
-            });
-        }
-    },
-    created() {
-        if (this.id) {
-            if (this.isDetail) {
-                this.rules = {};
-            }
-            this.getDetail();
-        } else {
-            this.form.appName = this.app.applyName;
-            this.form.appId = this.app.id;
-        }
-    },
-    mounted() {}
-};
-</script>
-
-<style lang='scss'>
-</style>

+ 4 - 2
src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/app-list.vue

@@ -4,7 +4,8 @@
 @Date: 2021-05-17 15:59
 -->
 <template>
-    <dg-card header="应用列表">
+    <!-- <dg-card header="应用列表"> -->
+    <div>
         <!-- 搜索项 -->
         <el-form :inline="true" class="search-form">
             <el-form-item label="应用系统名称">
@@ -61,7 +62,8 @@
                 </template>
             </dg-table-column>
         </dg-table>
-    </dg-card>
+    </div>
+    <!-- </dg-card> -->
 </template>
 
 <script>

+ 0 - 173
src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/func-list.vue

@@ -1,173 +0,0 @@
-<!--
-功能列表
-@Author: linqian
-@Date: 2021-05-17 16:10
--->
-<template>
-    <dg-card header="功能列表">
-        <!-- 搜索项 -->
-        <el-form :inline="true" class="search-form">
-            <el-form-item label="功能名称">
-                <el-input v-model="form.name.value" clearable></el-input>
-            </el-form-item>
-            <el-form-item label="在用状态">
-                <dg-select v-model="form.isActive.value" clearable code="DM_APPLY_STATUS"></dg-select>
-            </el-form-item>
-            <el-form-item>
-                <dg-button type="primary" @click="handleSearch" icon="el-icon-search">查询</dg-button>
-                <!-- <dg-button type="primary" @click="handleReset" icon="el-icon-refresh-right">重置</dg-button> -->
-            </el-form-item>
-        </el-form>
-
-        <!-- 操作 -->
-        <dg-row zebra="10px">
-            <dg-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd" v-if="appRow.id"
-                >新增</dg-button
-            >
-        </dg-row>
-        <!-- 表格 -->
-        <dg-table ref="table" :url="tableUrl" :condition="form" border row-key="id" :before-quest="beforeQuest">
-            <dg-table-column type="index" width="75" label="序号" align="center"></dg-table-column>
-            <dg-table-column prop="code" label="功能编号" align="center"></dg-table-column>
-            <dg-table-column prop="name" label="功能名称" align="center"></dg-table-column>
-            <dg-table-column prop="parentId" label="上级功能编号" align="center"></dg-table-column>
-            <dg-table-column prop="isActive" label="在用状态" align="center" code="DM_APPLY_STATUS"></dg-table-column>
-            <dg-table-column label="操作" align="center">
-                <template slot-scope="scope">
-                    <div class="u-table__operation">
-                        <el-tooltip
-                            v-for="(item, index) in optList"
-                            :key="index"
-                            :content="item.tooltip"
-                            effect="dark"
-                            placement="top-end"
-                        >
-                            <i :class="item.icon" @click="item.on(scope.row)"></i>
-                        </el-tooltip>
-                    </div>
-                </template>
-            </dg-table-column>
-        </dg-table>
-    </dg-card>
-</template>
-
-<script>
-import addFuncForm from "./add-func-form";
-import { funcRestApi } from "@/api/application";
-export default {
-    components: {},
-    props: {
-        appRow: Object
-    },
-    data() {
-        return {
-            form: {
-                name: {
-                    value: "",
-                    op: "like"
-                },
-                appId: {
-                    value: "",
-                    op: "="
-                },
-                isActive: {
-                    value: "",
-                    op: "="
-                }
-            },
-            optList: [
-                { icon: "el-icon-edit", tooltip: "修改", on: this.handleEdit },
-                { icon: "el-icon-document", tooltip: "详情", on: this.handleViewDetail },
-                { icon: "el-icon-delete", tooltip: "删除", on: this.handleDelete }
-            ],
-            tableUrl: funcRestApi.base + "/search"
-        };
-    },
-    computed: {},
-    methods: {
-        /**
-         * 编辑
-         */
-        handleEdit(row) {
-            this.handleOpenForm(row.id, "编辑");
-        },
-        /**
-         * 查看详情
-         */
-        handleViewDetail(row) {
-            this.handleOpenForm(row.id, "详情", true);
-        },
-        /**
-         * 删除
-         */
-        handleDelete(row) {
-            this.$dgConfirm(`是否确认删除该条功能!`, "提示", {}).then(() => {
-                 funcRestApi.del(row.id).then((res) => {
-                    this.$message.success(res);
-                    this.handleSearch();
-                });
-            });
-        },
-        /**
-         * 查询
-         */
-        handleSearch() {
-            this.$refs.table.searchForm();
-        },
-        /**
-         * 重置
-         */
-        handleReset() {
-            for (const key in this.form) {
-                this.form[key].value = "";
-            }
-        },
-        /**
-         * 新增
-         */
-        handleAdd() {
-            this.handleOpenForm(void 0, "新增");
-        },
-        handleOpenForm(id, title, isDetail = false) {
-            const vm = this;
-            const layer = this.$dgLayer({
-                title,
-                content: addFuncForm,
-                props: {
-                    id,
-                    isDetail,
-                    app: vm.appRow
-                },
-                btn: ["确定", "取消"],
-                btnAlign: "r",
-                yes: (index) => {
-                    let _layer = layer.$children[0];
-                     _layer.saveForm().then((res) => {
-                        layer.close(index);
-                        vm.handleSearch();
-                    });
-                },
-
-                area: ["750px", "500px"]
-            });
-        },
-        beforeQuest(res) {
-            const { content, totalElements } = res.data;
-            const result = {
-                data: {
-                    content: this.appRow.id ? content : [],
-                    totalElements
-                }
-            };
-            return result;
-        }
-    },
-    created() {
-        this.form.appId.value = this.appRow.id;
-    },
-    mounted() {}
-};
-</script>
-
-<style lang='scss'>
-</style>

+ 0 - 9
src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/index.vue

@@ -9,20 +9,15 @@
             <dg-col :span="24">
                 <app-list @rowClick="handleAppRowClick"></app-list>
             </dg-col>
-            <!-- <dg-col :span="12">
-                <func-list ref="funcList" :appRow="app" :key="key"></func-list>
-            </dg-col> -->
         </dg-row>
     </div>
 </template>
 
 <script>
 import appList from "./app-list";
-import funcList from "./func-list";
 export default {
     components: {
         appList,
-        funcList
     },
     data() {
         return {
@@ -33,10 +28,6 @@ export default {
     },
     computed: {},
     methods: {
-        handleAppRowClick(row) {
-            this.app = row;
-            this.key++;
-        }
     },
     created() {},
     mounted() {}

+ 31 - 55
src/pages/data-auth-module/auth-object-manage/object-prop-manage/index.vue

@@ -13,40 +13,32 @@
             <dg-col :span="5">
                 <tree
                     ref="tree"
-                    class="u-pm__left"
                     title="主体属性类"
-                    @handleGetNode="handleGetNode"
-                    @submitRootNode="submitRootNode"
+                    type="OBJ"
+                    @submitNodeOperate="getNodeOperate"
                 />
             </dg-col>
-            <dg-col :span="6">
-                <dg-card class="box-card" header="属性详情">
-                    <el-form ref="ruleForm" :rules="rules" :model="form" label-width="80px">
-                        <el-form-item label="属性类别">
-                            <el-input v-model="form.name" placeholder="请输入属性类别"></el-input>
-                        </el-form-item>
-                        <el-form-item label="属性名称">
-                            <el-input v-model="form.name" placeholder="请输入属性名称"></el-input>
-                        </el-form-item>
-                        <el-form-item label="属性值">
-                            <el-input v-model="form.idCard" placeholder="请输入属性值"></el-input>
-                        </el-form-item>
-                        <el-form-item label="说明">
-                            <el-input v-model="form.idCard" type="" placeholder="请输入说明"></el-input>
-                        </el-form-item>
-                    </el-form>
-                </dg-card>
+            <!-- 属性详情 -->
+            <dg-col :span="7">
+                <prop-detail
+                    :parentNode="parentNode"
+                    type="OBJ"
+                    :key="key"
+                    :operateType="operateType"
+                    @savePropSuccess="refreshTree"
+                ></prop-detail>
             </dg-col>
-            <dg-col :span="13">
+            <dg-col :span="12">
                 <!-- TODO 根据点击属性类型判断显示什么表格 -->
-                <component :is="compoentValue"></component>
+                <component :is="componentValue" :parentNode="parentNode"></component>
             </dg-col>
         </dg-row>
     </main>
 </template>
 
 <script>
-import Tree from "@/pages/common/tree";
+import Tree from "../../property-management/subject-management/prop-tree";
+import propDetail from "../../property-management/subject-management/prop-detail";
 import functionList from "./function-list";
 import serviceList from "./service-list";
 import applicationList from "./application-list";
@@ -73,52 +65,36 @@ export default {
                     value: "application-list"
                 }
             ],
-            compoentValue: "application-list",
-            form: {},
-            rules: {},
-            reportPersionForm: {
-                applyName: { value: "", op: "like" },
-                orgId: { value: "", op: "=" }
-            }
+            componentValue: "application-list",
+               parentNode: {},
+            key: 0,
+            // 操作类型,新增属性还是编辑
+            operateType: ""
         };
     },
     computed: {}, // 计算属性
     watch: {}, // 侦听器(扩展的计算属性)
-    components: { Tree, functionList, serviceList, applicationList }, // 注册局部组件
+    components: { Tree, functionList, serviceList, applicationList, propDetail }, // 注册局部组件
     methods: {
-        /**
-         * @description:树方法
+          /**
+         * 获取树操作
          */
-        handleGetNode({ id }) {
-            const that = this;
-            const oldVal = that.reportPersionForm.orgId.value;
-            if (oldVal != id) {
-                that.reportPersionForm.orgId.value = id;
-                that.handleSearch();
-            }
+        getNodeOperate(data) {
+            (this.operateType = data.operateType), (this.parentNode = data);
+            this.key++;
         },
         /**
-         * @description: 默认查询跟节点
+         * 刷新属性树
          */
-        submitRootNode({ id, name }) {
-            const that = this;
-            this.$nextTick(() => {
-                that.handleGetNode({ id, name });
-            });
-        },
+        refreshTree() {
+            this.$refs.tree.init();
+        },    
         /**
          * @description: 表单查询
          */
         handleSearch() {}
-    }, // 内部方法
-    beforeCreate() {}, // 组件创建前
+    },
     created() {}, // 组件创建完成后
-    beforeMount() {}, // 组件挂载前
-    mounted() {}, // 组件挂载完成后
-    beforeUpdate() {}, // 组件更新前
-    updated() {}, // 组件挂载完成后
-    beforeDestroy() {}, // 组件销毁前
-    destroyed() {} // 组件销毁完成后
 };
 </script>
 <style lang="scss" scoped>

+ 1 - 0
src/pages/data-auth-module/auth-object-manage/service-resource-manage/add-form.vue

@@ -52,6 +52,7 @@
                         placeholder=""
                         value-name="applyCode"
                         label-name="applyName"
+                        filterable
                         v-if="!isDetail"
                     ></dg-select>
                     <span v-else>{{ form.appName }}</span>

+ 8 - 0
src/pages/data-auth-module/auth-object-manage/sort-code-manage/data-level.vue

@@ -12,6 +12,8 @@
             </el-form-item>
             <el-form-item>
                 <dg-button type="primary" @click="handleSearch" icon="el-icon-search">查询</dg-button>
+                <!-- <dg-button type="primary" @click="handleReset" icon="el-icon-refresh-right">重置</dg-button> -->
+
             </el-form-item>
         </el-form>
         <!-- 导入 -->
@@ -54,6 +56,12 @@ export default {
                 this.tableList = this.orgList;
             }
         },
+        /**
+         * 重置
+         */
+        handleReset() {
+          this.keyword = "";
+        },
         /**
          * @description: 导入
          */

+ 9 - 0
src/pages/data-auth-module/auth-object-manage/sort-code-manage/field-sort-code.vue

@@ -15,6 +15,8 @@
             </el-form-item>
             <el-form-item>
                 <dg-button type="primary" @click="handleSearch" icon="el-icon-search">查询</dg-button>
+                <dg-button type="primary" @click="handleReset" icon="el-icon-refresh-right">重置</dg-button>
+
             </el-form-item>
         </el-form>
         <!-- 导入 -->
@@ -65,6 +67,13 @@ export default {
                 );
             }
         },
+        /**
+         * 重置
+         */
+        handleReset() {
+            this.form.firstLevelName = "";
+            this.form.secondLevelName = "";
+        },
         /**
          * @description: 导入
          */

+ 46 - 0
src/pages/data-auth-module/auth-object-manage/sort-code-manage/layers/data-level-layer.vue

@@ -0,0 +1,46 @@
+<!--
+数据分级表码表单
+@Author: linqian
+@Date: 2021-05-24
+-->
+<template>
+    <div>
+        <el-form :model="form" label-suffix=":" :rules="rules">
+            <el-form-item label="代码" prop="levelCode">
+                <el-input v-model="form.levelCode" placeholder="" clearable></el-input>
+            </el-form-item>
+            <el-form-item label="数据分级" prop="levelName">
+                <el-input v-model="form.levelName" placeholder="" clearable></el-input>
+            </el-form-item>
+            <el-form-item label="说明" prop="levelCode">
+                <el-input type="textarea" rows="3" v-model="form.desc" placeholder="" clearable></el-input>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+
+<script>
+export default {
+    components: {},
+    data() {
+        return {
+            form: {
+                levelCode: "",
+                levelName: "",
+                desc: ""
+            },
+            rules: {
+                levelCode: [{ required: true, message: "代码不能为空", trigger: "change" }],
+                levelName: [{ required: true, message: "数据分级不能为空", trigger: "change" }]
+            }
+        };
+    },
+    computed: {},
+    methods: {},
+    created() {},
+    mounted() {}
+};
+</script>
+
+<style lang='scss'>
+</style>

+ 9 - 0
src/pages/data-auth-module/auth-object-manage/sort-code-manage/source-sort-code.vue

@@ -18,6 +18,7 @@
             </el-form-item>
             <el-form-item>
                 <dg-button type="primary" @click="handleSearch" icon="el-icon-search">查询</dg-button>
+                <dg-button type="primary" @click="handleReset" icon="el-icon-refresh-right">重置</dg-button>
             </el-form-item>
         </el-form>
         <!-- <el-row class="import-btn">
@@ -73,6 +74,14 @@ export default {
                 );
             }
         },
+        /**
+         * 重置
+         */
+        handleReset() {
+            for (const key in this.form) {
+                this.form[key] = "";
+            }
+        },
         /**
          * @description: 导入
          */

+ 1 - 1
src/pages/data-auth-module/property-management/application-management/application-properties.vue

@@ -149,7 +149,7 @@ export default {
                         layer.close(layer.dialogIndex);
                     }
                 },
-                area: ["700px", "450px"]
+                area: ["800px", "450px"]
             });
         }
     },

+ 18 - 1
src/pages/data-auth-module/property-management/index.scss

@@ -8,7 +8,7 @@
 .user-attributes,
 .institutional-attributes,
 .application-properties,
-.subject-property /deep/{
+.subject-property /deep/ {
     .buttonGroup {
         margin-bottom: 20px;
     }
@@ -34,4 +34,21 @@
         }
         height: calc(100vh - 12rem);
     }
+    .subject-property__form-item {
+        display: flex;
+        align-items: center;
+        // margin-bottom: 10px;
+        .icon {
+            margin-left: 10px;
+            cursor: pointer;
+            color: rgba(0, 0, 0, 0.65);
+        }
+    }
+    .subject-property__form-item:last-child {
+        margin-bottom: 0;
+    }
+    .prop-value-item {
+        // margin-bottom: 10px;
+    } 
+   
 }

+ 27 - 14
src/pages/data-auth-module/property-management/subject-management/application-list.vue

@@ -8,27 +8,30 @@
 -->
 <template>
     <dg-card class="box-card" header="应用列表">
-        <el-form ref="form" :model="cardForm" label-suffix=":" inline>
+        <el-form ref="form" label-suffix=":" inline>
             <el-form-item label="应用系统名称">
-                <el-input clearable placeholder="请输入应用系统名称" v-model="cardForm.name"></el-input>
+                <el-input clearable placeholder="请输入应用系统名称" v-model="form.applyName.value"></el-input>
             </el-form-item>
             <el-form-item label="系统在用标识">
-                <el-select v-model="cardForm.userType" placeholder="请选择应用在用标识" style="width:13rem">
-                    <el-option label="全部" value="all"></el-option>
-                    <el-option label="启用" value="1"></el-option>
-                    <el-option label="停用" value="0"></el-option>
-                </el-select>
+                <dg-select
+                    code="DM_APPLY_STATUS"
+                    v-model="form.applyStatus.value"
+                    placeholder="请选择应用在用标识"
+                    style="width: 13rem"
+                    clearable
+                >
+                </dg-select>
             </el-form-item>
             <el-form-item>
-                <dg-button type="primary" icon="el-icon-search" @click="doSearchPersion">查询</dg-button>
-                <dg-button type="primary" icon="el-icon-plus">添加</dg-button>
+                <dg-button type="primary" icon="el-icon-search" @click="handleSearch">查询</dg-button>
+                <dg-button type="primary" icon="el-icon-plus" @click="handleAdd">添加</dg-button>
             </el-form-item>
         </el-form>
         <Table
             ref="table"
             :url="tableUrl"
             :headerData="cardApplicationList"
-            :condition="reportForm"
+            :condition="form"
             :lazyLoad="true"
             @handleRowClick="handleRowClick"
         >
@@ -53,8 +56,16 @@ export default {
             // 参数名称及默认值
             cardApplicationList,
             tableUrl: dynamicManageApi.tableUrl,
-            reportForm: {},
-            cardForm: {}
+            form: {
+                applyName: {
+                    value: "",
+                    op: "like"
+                },
+                applyStatus: {
+                    value: "",
+                    op: "="
+                }
+            }
         };
     },
     computed: {}, // 计算属性
@@ -64,7 +75,9 @@ export default {
         /**
          * @description: 查询
          */
-        doSearchPersion() {},
+        handleSearch() {
+            this.$refs.table.handleSearchClick();
+        },
         /**
          * @description: 单击表格行
          */
@@ -72,7 +85,7 @@ export default {
         /**
          * @description: 添加
          */
-        add() {
+        handleAdd() {
             const layer = this.$dgLayer({
                 title: "添加应用",
                 shade: [0.4, "#FFF"],

+ 134 - 0
src/pages/data-auth-module/property-management/subject-management/prop-detail.vue

@@ -0,0 +1,134 @@
+<!--
+属性设置
+@Author: linqian
+@Date: 2021-05-25 11:22
+-->
+<template>
+    <div>
+        <dg-card class="box-card" header="属性详情">
+            <el-form ref="ruleForm" :rules="rules" :model="form" label-width="80px" :style="{width: type == 'SUB' ? '50%' : '100%'}">
+                <el-form-item label="属性类别">
+                    <el-input v-model="parentNode.name" placeholder="请输入属性类别" disabled></el-input>
+                </el-form-item>
+                <el-form-item label="属性名称" prop="name">
+                    <el-input v-model="form.name" placeholder="请输入属性名称"></el-input>
+                </el-form-item>
+                <el-form-item
+                    v-for="(item, index) in form.child"
+                    :key="index"
+                    :label="index == 0 ? '属性' : ''"
+                    :prop="'child.' + index + '.name'"
+                    class="prop-value-item"
+                    :rules="{
+                        required: true,
+                        message: '属性值不能为空',
+                        trigger: 'blur'
+                    }"
+                >
+                    <div class="subject-property__form-item">
+                        <el-input v-model="item.name" placeholder="请输入属性值"></el-input>
+                        <i
+                            class="el-icon-remove-outline icon"
+                            @click="handleDeletePropValue(index)"
+                            v-if="form.child.length > 1"
+                        ></i>
+                         <!-- <dg-button class="delete-btn" size="mini" icon="el-icon-minus" plain></dg-button> -->
+                    </div>
+                </el-form-item>
+                <el-form-item label="">
+                    <dg-button
+                        icon="el-icon-circle-plus-outline"
+                        size="mini"
+                        type="primary"
+                        plain
+                        @click="handleAddPropValue"
+                        >添加属性值</dg-button
+                    >
+                </el-form-item>
+                <el-form-item label="说明">
+                    <el-input v-model="form.mark" type="textarea" row="3" placeholder="请输入说明"></el-input>
+                </el-form-item>
+                <el-form-item label="" style="text-align: center"
+                    ><dg-button type="primary" @click="handleSaveProp">保存</dg-button></el-form-item
+                >
+            </el-form>
+        </dg-card>
+    </div>
+</template>
+
+<script>
+import { saveProp } from "@/api/data-auth";
+import _ from "lodash"
+export default {
+    props: {
+        parentNode: Object,
+        type: String,
+        operateType: String
+    },
+    components: {},
+    data() {
+        return {
+            form: {
+                attrBelongType: this.parentNode.attrBelongType,
+                attrType: this.type,
+                child: [
+                    {
+                        name: ""
+                    }
+                ],
+                mark: "",
+                name: "",
+                pid: this.parentNode.id
+            },
+            rules: {
+                name: [{ required: true, message: "属性名称不能为空", trigger: "change" }]
+            }
+        };
+    },
+    computed: {},
+    methods: {
+        /**
+         * 添加属性值
+         */
+        handleAddPropValue() {
+            this.form.child.push({
+                name: ""
+            });
+        },
+        /**
+         * 删除属性值
+         */
+        handleDeletePropValue(index) {
+            this.form.child.splice(1, index);
+        },
+        /**
+         * 保存属性
+         */
+        handleSaveProp() {
+            this.$refs.ruleForm.validate((valid) => {
+                if (valid) {
+                    saveProp(this.form).then((res) => {
+                        this.$message.success("保存成功");
+                        this.$emit("savePropSuccess");
+                    });
+                }
+            });
+        }
+    },
+    created() {
+        if (this.operateType == "edit") {
+            delete this.parentNode.operateType;
+            this.form = _.cloneDeep(this.parentNode);            
+        }
+      
+    },
+    mounted() {}
+};
+</script>
+
+<style lang='scss' scoped>
+.delete-btn {
+    width: 50px !important;
+
+}
+</style>

+ 155 - 0
src/pages/data-auth-module/property-management/subject-management/prop-tree.vue

@@ -0,0 +1,155 @@
+<!--
+属性树
+@Author: linqian
+@Date: 2021-05-24 09:15
+-->
+<template>
+    <div class="u-tree">
+        <h4 class="u-tree__title">{{ title }}</h4>
+        <dg-scrollbar>
+            <dg-tree
+                ref="tree"
+                icon-class="el-icon-folder-opened"
+                icon-leaf="el-icon-document"
+                node-key="id"
+                :data="treeData"
+                :props="props"
+                highlight-current
+                default-expand-all
+                :expand-on-click-node="false"
+            >
+                <div slot-scope="{ data }" class="u-tree-label el-tree-node__edit" style="width: 100%">
+                    <span
+                        @dblclick="handlerNodeDoubleClick(data)"
+                        @click="handleNodeClick(data)"
+                        style="display: inline-block; flex: 1"
+                    >
+                        {{ data[props.label] }}
+                    </span>
+                    <span class="operation-icons">
+                        <i class="el-icon-circle-plus-outline" v-if="!data.pid" @click="handleOperate('add', data)">
+                        </i>
+                        <i class="el-icon-delete" v-if="data.pid && data.child" @click="handleOperate('delete', data)"> </i>
+                    </span>
+                </div>
+            </dg-tree>
+        </dg-scrollbar>
+    </div>
+</template>
+
+<script>
+import { getPropTreeByType, deleteProp } from "@/api/data-auth";
+export default {
+    props: {
+        apiName: {
+            type: String,
+            default: "menuTree"
+        },
+        title: String,
+        // SUB = 主体属性类, OBJ = 客体属性类
+        type: String
+    },
+    components: {},
+    data() {
+        return {
+            treeData: [],
+            props: {
+                value: "id",
+                label: "name",
+                children: "child"
+            }
+        };
+    },
+    computed: {},
+    methods: {
+        handleNodeClick(data) {
+            if(data.pid && data.child) {
+                this.$emit("submitNodeOperate", {
+                    ...data,
+                    operateType: "edit"
+                });
+            }
+        },
+        /**
+         * 操作
+         */
+        handleOperate(operateType, data) {
+            if (operateType == "delete") {
+                this.handleDelProp(data);
+            } else {
+                this.$emit("submitNodeOperate", {
+                    ...data,
+                    operateType
+                });
+            }
+        },
+        /**
+         * 删除
+         */
+        handleDelProp(data) {
+            this.$dgConfirm(`是否确认删除该属性!`, "提示", {}).then(() => {
+                const params = {
+                    attrBelongType: data.attrBelongType,
+                    attrType: this.type,
+                    id: data.id
+                };
+                deleteProp(params).then((res) => {
+                    this.$message.success("删除成功");
+                    this.init();
+                    this.setDefault();
+                });
+            });
+        },
+        init() {
+            return new Promise((resolve) => {
+                getPropTreeByType(this.type).then((res) => {
+                    this.treeData = res.data.content;
+                    resolve(res.data.content)
+                });
+            });
+        },
+        // 默认取第一条,新增
+        setDefault() {
+            if (this.treeData.length > 0) {                
+                this.handleOperate("add", this.treeData[0]);
+                this.$refs.tree.setCurrentKey(this.treeData[0].id);
+            }
+        }
+    },
+    async created() {
+        await this.init();
+        this.setDefault();
+    },
+     mounted() {}
+};
+</script>
+
+<style lang='scss' scoped>
+.u-tree {
+    height: calc(100vh - 12rem);
+    border: 1px solid #eef2fa;
+    &__title {
+        font-size: 14px;
+        height: 48px;
+        line-height: 48px;
+        padding: 0 15px;
+        border: 0 none;
+        background-color: #eef2fa;
+    }
+    .el-tree-node__edit {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding-right: 20px;
+        i {
+            color: #1890ff;
+        }
+        .operation-icons {
+            display: none;
+        }
+        &:hover .operation-icons {
+            display: block;
+        }
+    }
+}
+</style>

+ 32 - 55
src/pages/data-auth-module/property-management/subject-management/subject-property.vue

@@ -13,40 +13,32 @@
             <dg-col :span="5">
                 <tree
                     ref="tree"
-                    class="u-pm__left"
                     title="主体属性类"
-                    @handleGetNode="handleGetNode"
-                    @submitRootNode="submitRootNode"
+                    type="SUB"
+                    @submitNodeOperate="getNodeOperate"
                 />
             </dg-col>
-            <dg-col :span="6">
-                <dg-card class="box-card" header="属性详情">
-                    <el-form ref="ruleForm" :rules="rules" :model="form" label-width="80px">
-                        <el-form-item label="属性类别">
-                            <el-input v-model="form.name" placeholder="请输入属性类别"></el-input>
-                        </el-form-item>
-                        <el-form-item label="属性名称">
-                            <el-input v-model="form.name" placeholder="请输入属性名称"></el-input>
-                        </el-form-item>
-                        <el-form-item label="属性值">
-                            <el-input v-model="form.idCard" placeholder="请输入属性值"></el-input>
-                        </el-form-item>
-                        <el-form-item label="说明">
-                            <el-input v-model="form.idCard" type="" placeholder="请输入说明"></el-input>
-                        </el-form-item>
-                    </el-form>
-                </dg-card>
-            </dg-col>
-            <dg-col :span="13">
-                <!-- TODO 根据点击属性类型判断显示什么表格 -->
-                <component :is="compoentValue"></component>
+            <!-- 属性详情 -->
+            <dg-col :span="19">
+                <prop-detail
+                    :parentNode="parentNode"
+                    type="SUB"
+                    :key="key"
+                    :operateType="operateType"
+                    @savePropSuccess="refreshTree"
+                ></prop-detail>
             </dg-col>
+            <!-- <dg-col :span="13"> -->
+            <!-- TODO 根据点击属性类型判断显示什么表格 -->
+            <!-- <component :is="compoentValue"></component> -->
+            <!-- </dg-col> -->
         </dg-row>
     </main>
 </template>
 
 <script>
-import Tree from "@/pages/common/tree";
+import Tree from "./prop-tree";
+import propDetail from "./prop-detail";
 import personnelList from "./personnel-list";
 import agencyList from "./agency-list";
 import applicationList from "./application-list";
@@ -73,52 +65,37 @@ export default {
                     value: "application-list"
                 }
             ],
-            compoentValue: "personnel-list",
-            form: {},
-            rules: {},
-            reportPersionForm: {
-                applyName: { value: "", op: "like" },
-                orgId: { value: "", op: "=" }
-            }
+            compoentValue: "application-list",
+            parentNode: {},
+            key: 0,
+            // 操作类型,新增属性还是编辑
+            operateType: ""
         };
     },
     computed: {}, // 计算属性
     watch: {}, // 侦听器(扩展的计算属性)
-    components: { Tree, personnelList, agencyList, applicationList }, // 注册局部组件
+    components: { Tree, personnelList, agencyList, applicationList, propDetail }, // 注册局部组件
     methods: {
         /**
-         * @description:树方法
+         * 获取树操作
          */
-        handleGetNode({ id }) {
-            const that = this;
-            const oldVal = that.reportPersionForm.orgId.value;
-            if (oldVal != id) {
-                that.reportPersionForm.orgId.value = id;
-                that.handleSearch();
-            }
+        getNodeOperate(data) {
+            (this.operateType = data.operateType), (this.parentNode = data);
+            this.key++;
         },
         /**
-         * @description: 默认查询跟节点
+         * 刷新属性树
          */
-        submitRootNode({ id, name }) {
-            const that = this;
-            this.$nextTick(() => {
-                that.handleGetNode({ id, name });
-            });
+        refreshTree() {
+            this.$refs.tree.init();
         },
         /**
          * @description: 表单查询
          */
         handleSearch() {}
-    }, // 内部方法
-    beforeCreate() {}, // 组件创建前
+    },
     created() {}, // 组件创建完成后
-    beforeMount() {}, // 组件挂载前
-    mounted() {}, // 组件挂载完成后
-    beforeUpdate() {}, // 组件更新前
-    updated() {}, // 组件挂载完成后
-    beforeDestroy() {}, // 组件销毁前
-    destroyed() {} // 组件销毁完成后
+    mounted() {} // 组件挂载完成后
 };
 </script>
 <style lang="scss" scoped>

+ 1 - 2
src/router/modules/data-auth-module.js

@@ -63,8 +63,7 @@ const componentsRouter = [
                 meta: {
                     title: "应用功能资源管理",
                     noCache: false,
-                    permission: ["QXGL_SQKTGL_SJFJFLBM"],
-                    layout: "page"
+                    permission: ["QXGL_SQKTGL_SJFJFLBM"]
                 }
             },
             {