lilinfeng 2 ماه پیش
والد
کامیت
d8b572c7bb
26فایلهای تغییر یافته به همراه4820 افزوده شده و 29 حذف شده
  1. 1 1
      .env.production
  2. 18 0
      src/api/governmentCloud/officialAccount/userActivityLevel/userActivityLevel.js
  3. 7 1
      src/components/Generator/index/DraggableItem.vue
  4. 2 0
      src/components/Generator/index/Home.vue
  5. 23 3
      src/components/Jnpf/UserSelect/index.vue
  6. 6 3
      src/utils/apiUrl.js
  7. 688 0
      src/views/governmentCloud/mdm/mdmuser/Detail.vue
  8. 0 0
      src/views/governmentCloud/mdm/mdmuser/columnList.js
  9. 499 0
      src/views/governmentCloud/mdm/mdmuser/form.vue
  10. 590 0
      src/views/governmentCloud/mdm/mdmuser/index.vue
  11. 0 0
      src/views/governmentCloud/mdm/mdmuser/superQueryJson.js
  12. 306 0
      src/views/governmentCloud/mdm/mdmuserdetail/Detail.vue
  13. 0 0
      src/views/governmentCloud/mdm/mdmuserdetail/columnList.js
  14. 719 0
      src/views/governmentCloud/mdm/mdmuserdetail/form.vue
  15. 672 0
      src/views/governmentCloud/mdm/mdmuserdetail/index.vue
  16. 0 0
      src/views/governmentCloud/mdm/mdmuserdetail/superQueryJson.js
  17. 104 0
      src/views/governmentCloud/officialAccount/mpActivityApi/Detail.vue
  18. 0 0
      src/views/governmentCloud/officialAccount/mpActivityApi/columnList.js
  19. 413 0
      src/views/governmentCloud/officialAccount/mpActivityApi/form.vue
  20. 509 0
      src/views/governmentCloud/officialAccount/mpActivityApi/index.vue
  21. 0 0
      src/views/governmentCloud/officialAccount/mpActivityApi/superQueryJson.js
  22. 108 12
      src/views/governmentCloud/officialAccount/userActivityLevel/index.vue
  23. 50 7
      src/views/governmentCloud/questionnaireInvestigation/Statistics.vue
  24. 2 0
      src/views/governmentCloud/questionnaireInvestigation/index.vue
  25. 82 0
      src/views/permission/user/TagForm.vue
  26. 21 2
      src/views/permission/user/index.vue

+ 1 - 1
.env.production

@@ -4,7 +4,7 @@ ENV = 'production'
 
  #测试地址
 # VUE_APP_BASE_API = 'http://192.168.103.104:58080'
-VUE_APP_BASE_API = 'https://test.api.shidaiyun.net'
+VUE_APP_BASE_API = 'https://test.api.shidaiyun.net:8888'
 
 
 

+ 18 - 0
src/api/governmentCloud/officialAccount/userActivityLevel/userActivityLevel.js

@@ -0,0 +1,18 @@
+import request from "@/utils/request";
+
+// 获取活跃度图表信息
+export const activity = (data) => {
+  return request({
+    url: `/api/jnpf/MpActivityApi/activity`,
+    method: "POST",
+    data: data
+  });
+};
+
+// 获取公众号用户列表
+export const getUserList = () => {
+  return request({
+    url: `/api/jnpf/MpActivityApi/userList`,
+    method: "GET",
+  });
+};

+ 7 - 1
src/components/Generator/index/DraggableItem.vue

@@ -97,8 +97,14 @@ const layouts = {
                 style={element.style} clearable={element.clearable} filterable={element.filterable} key={config.renderKey}></JnpfCascader>
             : <render key={config.renderKey} conf={element} onInput={event => { this.$set(config, 'defaultValue', event) }} />
 
+
+        // 不展示不提交的自定义组件
         if (!element.__config__.isDisplay && element.__config__.jnpfKey.includes('custom')) {
-            return
+            return (
+                <el-col span={config.span} class={className}
+                    nativeOnClick={event => { activeItem(element); event.stopPropagation() }}>
+                </el-col>
+            )
         }
 
         return (

+ 2 - 0
src/components/Generator/index/Home.vue

@@ -743,6 +743,8 @@ export default {
             console.log('tableEnd')
 
             console.log(obj)
+
+            console.log(this.activeItem)
             if (obj.from == obj.to) return
             if (obj.to.className.indexOf('table-wrapper') < 0) {
                 this.$set(this.activeItem.__config__, 'isSubTable', false)

+ 23 - 3
src/components/Jnpf/UserSelect/index.vue

@@ -267,6 +267,12 @@ export default {
             default: () => []
         },
         size: String,
+        filterType: {
+            type: String,
+            default: '1'
+            //1 不查看filterIds中的用户
+            //2 仅查看filterIds中的用户
+        }
     },
     data() {
         return {
@@ -560,13 +566,23 @@ export default {
         },
         getAllList() {
             this.loading = true
+
+            if (this.filterIds) {
+                this.pagination.pageSize = 100
+            }
+
             if (this.pagination.keyword) this.nodeId = '0'
             getImUserSelector(this.nodeId, this.pagination).then(res => {
-
+                this.pagination.pageSize = 20
                 let newData = []
                 //根据filterIds过滤掉res.data.list中id在filterIds中存在的数据
                 if (this.filterIds && this.filterIds.length) {
-                    newData = res.data.list.filter(item => !this.filterIds.includes(item.id))
+                    if (this.filterType == '1') {
+                        newData = res.data.list.filter(item => !this.filterIds.includes(item.id))
+                    } else if (this.filterType == '2') {
+                        newData = res.data.list.filter(item => (this.filterIds.includes(item.id) || item.hasChildren))
+                    }
+
                 } else {
                     newData = res.data.list
                 }
@@ -602,7 +618,11 @@ export default {
                 let newData = []
                 //根据filterIds过滤掉res.data.list中id在filterIds中存在的数据
                 if (this.filterIds && this.filterIds.length) {
-                    newData = res.data.list.filter(item => !this.filterIds.includes(item.id))
+                    if (this.filterType == '1') {
+                        newData = res.data.list.filter(item => !this.filterIds.includes(item.id))
+                    } else if (this.filterType == '2') {
+                        newData = res.data.list.filter(item => (this.filterIds.includes(item.id) || item.hasChildren))
+                    }
                 } else {
                     newData = res.data.list
                 }

+ 6 - 3
src/utils/apiUrl.js

@@ -1,16 +1,19 @@
 module.exports = {
   // 开发环境接口配置
-  // APIURl: "http://10.0.0.95:30000",
+  APIURl: "http://10.0.0.112:30000",
   // APIURl: "http://10.21.12.137:30000",
   // APIURl: "http://192.168.103.104:58080",
   // APIURl: "https://test.api.shidaiyun.net",
-  APIURl: "https://api.shidaiyun.net",
+  // APIURl: "https://api.shidaiyun.net",
+  // APIURl: "http://10.21.12.250:30000",
+
+
 
 
   //测试
   // minioPath: process.env.NODE_ENV === 'development' ? 'https://oss.shidaiyun.net/' : 'http://192.168.103.105:18000/'
 
-  //双活
+  //双活  
   minioPath: process.env.NODE_ENV === 'development' ? 'https://oss.shidaiyun.net/' : 'http://28.168.105.206:9000/'
 
   //正式

+ 688 - 0
src/views/governmentCloud/mdm/mdmuser/Detail.vue

@@ -0,0 +1,688 @@
+<template>
+    <el-dialog title="详情" :close-on-click-modal="false" append-to-body :visible.sync="visible"
+        :fullscreen="true" class="JNPF-dialog JNPF-dialog_center" lock-scroll>
+        <div class="JNPF-common-layout">
+            <div class="JNPF-common-layout-center">
+                <el-row class="JNPF-common-search-box" :gutter="16">
+                    <el-form @submit.native.prevent>
+                        <el-col :span="6">
+                            <el-form-item label="姓名">
+                                <el-input v-model="query.name" placeholder="请输入" clearable>
+                                </el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="6">
+                            <el-form-item label="联系电话">
+                                <el-input v-model="query.mobile" placeholder="请输入" clearable>
+                                </el-input>
+                            </el-form-item>
+                        </el-col>
+                        <template v-if="showAll">
+                            <el-col :span="6">
+                                <el-form-item label="人员编码">
+                                    <el-input v-model="query.code" placeholder="请输入" clearable>
+                                    </el-input>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6">
+                                <el-form-item label="响应状态">
+                                    <JnpfSelect v-model="query.resStatus" placeholder="请选择"
+                                        clearable :options="resStatusOptions"
+                                        :props="resStatusProps" multiple>
+                                    </JnpfSelect>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6">
+                                <el-form-item label="响应数据版本">
+                                    <el-input v-model="query.resVersion" placeholder="请输入"
+                                        clearable>
+                                    </el-input>
+                                </el-form-item>
+                            </el-col>
+                        </template>
+                        <el-col :span="6">
+                            <el-form-item>
+                                <el-button type="primary" icon="el-icon-search"
+                                    @click="search()">查询</el-button>
+                                <el-button icon="el-icon-refresh-right"
+                                    @click="reset()">重置</el-button>
+                                <el-button type="text" icon="el-icon-arrow-down"
+                                    @click="showAll=true" v-if="!showAll">
+                                    展开
+                                </el-button>
+                                <el-button type="text" icon="el-icon-arrow-up"
+                                    @click="showAll=false" v-else>
+                                    收起
+                                </el-button>
+                            </el-form-item>
+                        </el-col>
+                    </el-form>
+                </el-row>
+                <div class="JNPF-common-layout-main JNPF-flex-main">
+                    <div class="JNPF-common-head">
+                        <div>
+                        </div>
+                        <div class="JNPF-common-head-right">
+                            <!-- <el-tooltip content="高级查询" placement="top" v-if="true">
+                                <el-link icon="icon-ym icon-ym-filter JNPF-common-head-icon"
+                                    :underline="false" @click="openSuperQuery()" />
+                            </el-tooltip> -->
+                            <el-tooltip effect="dark" :content="$t('common.refresh')"
+                                placement="top">
+                                <el-link icon="icon-ym icon-ym-Refresh JNPF-common-head-icon"
+                                    :underline="false" @click="initData()" />
+                            </el-tooltip>
+                        </div>
+                    </div>
+                    <JNPF-table v-loading="listLoading" :data="list" @sort-change='handleTableSort'
+                        :header-cell-class-name="handleHeaderClass" :has-c="hasBatchBtn"
+                        :span-method="arraySpanMethod">
+                        <el-table-column prop="batchId" label="批次ID" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.batchId" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="code" label="人员编码" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.code" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="name" label="姓名" align="left" show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.name" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="namePinyin" label="账户" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.namePinyin" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="personnelType" label="人员类型" align="left"
+                            show-overflow-tooltip>
+                        </el-table-column>
+                        <el-table-column prop="gender" label="性别" align="left"
+                            show-overflow-tooltip>
+                        </el-table-column>
+                        <el-table-column prop="mobile" label="联系电话" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.mobile" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="email" label="邮箱" align="left" show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.email" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="jobStatus" label="岗位状态" align="left"
+                            show-overflow-tooltip>
+                        </el-table-column>
+                        <el-table-column prop="personStatus" label="人员状态" align="left"
+                            show-overflow-tooltip>
+                        </el-table-column>
+                        <el-table-column prop="unionid" label="微信unionid" align="left" width="100"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.unionid" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="organizationCode" label="所属组织编码" align="left"
+                            width="100" show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.organizationCode" detailed
+                                    showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="organizationName" label="所属组织名称" align="left"
+                            width="100" show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.organizationName" detailed
+                                    showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="departmentCode" label="部门编码" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.departmentCode" detailed
+                                    showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="departmentName" label="部门名称" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.departmentName" detailed
+                                    showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="itsmUserId" label="Itsm用户id" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.itsmUserId" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="itsmUserName" label="itsm用户姓名" align="left"
+                            width="100" show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.itsmUserName" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="itsmUserAlias" label="itsm用户别名" align="left"
+                            width="100" show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.itsmUserAlias" detailed
+                                    showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="enterpriseWechat" label="企微账号" align="left"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.enterpriseWechat" detailed
+                                    showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="resCode" label="响应数据编码" align="left" width="100"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.resCode" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="resStatus" label="响应状态" align="left"
+                            show-overflow-tooltip>
+                        </el-table-column>
+                        <el-table-column prop="resMessage" label="响应数据描述" align="left" width="100"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.resMessage" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                        <el-table-column prop="resVersion" label="响应数据版本" align="left" width="100"
+                            show-overflow-tooltip>
+                            <template slot-scope="scope">
+                                <JnpfInput v-model="scope.row.resVersion" detailed showOverflow />
+                            </template>
+                        </el-table-column>
+                    </JNPF-table>
+                    <pagination :total="total" :page.sync="listQuery.currentPage"
+                        :limit.sync="listQuery.pageSize" @pagination="initData" />
+                </div>
+            </div>
+            <JNPF-Form v-if="formVisible" ref="JNPFForm" @refresh="refresh" />
+            <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" />
+
+            <ImportBox v-if="uploadBoxVisible" ref="UploadBox" @refresh="initData" />
+            <ToFormDetail v-if="toFormDetailVisible" ref="toFormDetail"
+                @close="toFormDetailVisible = false" />
+            <SuperQuery v-if="superQueryVisible" ref="SuperQuery" :columnOptions="superQueryJson"
+                @superQuery="superQuery" />
+        </div>
+    </el-dialog>
+</template>
+<script>
+import request from '@/utils/request'
+import { mapGetters } from "vuex";
+import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
+import JNPFForm from '../mdmuserdetail/form'
+import ExportBox from '@/components/ExportBox'
+import ToFormDetail from '@/views/basic/dynamicModel/list/detail'
+import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
+import { getConfigData } from '@/api/onlineDev/visualDev'
+import { getDefaultCurrentValueUserIdAsync } from '@/api/permission/user'
+import { getDefaultCurrentValueDepartmentIdAsync } from '@/api/permission/organize'
+import columnList from './columnList'
+import { thousandsFormat } from "@/components/Generator/utils/index"
+import SuperQuery from '@/components/SuperQuery'
+import superQueryJson from './superQueryJson'
+import { noGroupList } from '@/components/Generator/generator/comConfig'
+
+export default {
+    components: {
+        JNPFForm,
+        ExportBox, ToFormDetail, SuperQuery
+    },
+    data() {
+        return {
+            visible: false,
+            keyword: '',
+            expandsTree: true,
+            refreshTree: true,
+            toFormDetailVisible: false,
+            hasBatchBtn: false,
+            expandObj: {},
+            columnOptions: [],
+            mergeList: [],
+            exportList: [],
+            columnList,
+
+            showAll: false,
+            superQueryVisible: false,
+            superQueryJson,
+            uploadBoxVisible: false,
+            query: {
+                batchId: undefined,
+                name: undefined,
+                mobile: undefined,
+                code: undefined,
+                resStatus: undefined,
+                resVersion: undefined,
+            },
+            defListQuery: {
+                sort: 'desc',
+                sidx: '',
+            },
+            //排序默认值
+            defaultSortConfig: [],
+            treeProps: {
+                children: 'children',
+                label: 'fullName',
+                value: 'id',
+                isLeaf: 'isLeaf'
+            },
+            list: [],
+            listLoading: true,
+            multipleSelection: [],
+            total: 0,
+            queryData: {},
+            listQuery: {
+                superQueryJson: '',
+                currentPage: 1,
+                pageSize: 20,
+                sort: "",
+                sidx: "",
+            },
+            //多列排序
+            ordersList: [],
+            formVisible: false,
+            flowVisible: false,
+            flowListVisible: false,
+            flowList: [],
+            exportBoxVisible: false,
+            personnelTypeOptions: [],
+            personnelTypeProps: { "label": "fullName", "value": "enCode" },
+            genderOptions: [],
+            genderProps: { "label": "fullName", "value": "enCode" },
+            jobStatusOptions: [],
+            jobStatusProps: { "label": "fullName", "value": "enCode" },
+            personStatusOptions: [],
+            personStatusProps: { "label": "fullName", "value": "enCode" },
+            resStatusOptions: [],
+            resStatusProps: { "label": "fullName", "value": "enCode" },
+            interfaceRes: {
+            },
+            //掩码配置
+            maskConfig: {
+                batchId: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                code: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                name: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                namePinyin: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                mobile: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                email: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                unionid: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                organizationCode: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                organizationName: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                departmentCode: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                departmentName: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                itsmUserId: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                itsmUserName: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                itsmUserAlias: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                enterpriseWechat: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                resCode: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                resMessage: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                resVersion: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+            },
+        }
+    },
+    computed: {
+        ...mapGetters(['userInfo']),
+        menuId() {
+            return this.$route.meta.modelId || ''
+        }
+    },
+    created() {
+        this.getColumnList(),
+            this.initSearchDataAndListData()
+        this.getresStatusOptions();
+        this.queryData = JSON.parse(JSON.stringify(this.query))
+        this.getHasBatchBtn();
+        //排序默认值
+        this.setDefaultQuery(this.defaultSortConfig);
+    },
+    methods: {
+        getHasBatchBtn() {
+            let btnsList = []
+            this.hasBatchBtn = btnsList.some(o => ['batchRemove', 'batchPrint', 'download'].includes(o))
+        },
+
+        treeRefresh() {
+            this.keyword = ''
+            this.treeActiveId = ''
+            this.leftTreeActiveInfo = {}
+            this.$refs.treeBox.setCurrentKey(null)
+            this.getTreeView()
+        },
+
+        toDetail(defaultValue, modelId) {
+            if (!defaultValue) return
+            getConfigData(modelId).then(res => {
+                if (!res.data || !res.data.formData) return
+                let formData = JSON.parse(res.data.formData)
+                formData.popupType = 'general'
+                this.toFormDetailVisible = true
+                this.$nextTick(() => {
+                    this.$refs.toFormDetail.init(formData, modelId, defaultValue)
+                })
+            })
+        },
+        toggleTreeExpand(expands) {
+            this.refreshTree = false
+            this.expandsTree = expands
+            this.$nextTick(() => {
+                this.refreshTree = true
+                this.$nextTick(() => {
+                    this.$refs.treeBox.setCurrentKey(null)
+                })
+            })
+        },
+        filterNode(value, data) {
+            if (!value) return true;
+            return data[this.treeProps.label].indexOf(value) !== -1;
+        },
+        loadNode(node, resolve) {
+            const nodeData = node.data
+            const config = {
+                treeInterfaceId: "",
+                treeTemplateJson: []
+            }
+            if (config.treeInterfaceId) {
+                //这里是为了拿到参数中关联的字段的值,后端自行拿
+                if (config.treeTemplateJson && config.treeTemplateJson.length) {
+                    for (let i = 0; i < config.treeTemplateJson.length; i++) {
+                        const element = config.treeTemplateJson[i];
+                        element.defaultValue = nodeData[element.relationField] || ''
+                    }
+                }
+                //参数
+                let query = {
+                    paramList: config.treeTemplateJson || [],
+                }
+                //接口
+                getDataInterfaceRes(config.treeInterfaceId, query).then(res => {
+                    let data = res.data
+                    if (Array.isArray(data)) {
+                        resolve(data);
+                    } else {
+                        resolve([]);
+                    }
+                })
+            }
+        },
+        getColumnList() {
+            // 没有开启权限
+            this.columnOptions = this.transformColumnList(this.columnList)
+        },
+        transformColumnList(columnList) {
+            let list = []
+            for (let i = 0; i < columnList.length; i++) {
+                const e = columnList[i];
+                if (!e.prop.includes('-')) {
+                    list.push(e)
+                } else {
+                    let prop = e.prop.split('-')[0]
+                    let label = e.label.split('-')[0]
+                    let vModel = e.prop.split('-')[1]
+                    let newItem = {
+                        align: "center",
+                        jnpfKey: "table",
+                        prop,
+                        label,
+                        children: []
+                    }
+                    e.vModel = vModel
+                    if (!this.expandObj.hasOwnProperty(`${prop}Expand`)) this.$set(this.expandObj, `${prop}Expand`, false)
+                    if (!list.some(o => o.prop === prop)) list.push(newItem)
+                    for (let i = 0; i < list.length; i++) {
+                        if (list[i].prop === prop) {
+                            list[i].children.push(e)
+                            break
+                        }
+                    }
+                }
+            }
+            this.getMergeList(list)
+            this.getExportList(list)
+            return list
+        },
+        arraySpanMethod({ column }) {
+            for (let i = 0; i < this.mergeList.length; i++) {
+                if (column.property == this.mergeList[i].prop) {
+                    return [this.mergeList[i].rowspan, this.mergeList[i].colspan]
+                }
+            }
+        },
+        getMergeList(list) {
+            let newList = JSON.parse(JSON.stringify(list))
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    let child = {
+                        prop: item.prop + '-child-first'
+                    }
+                    item.children.unshift(child)
+                }
+            })
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    item.children.forEach((child, index) => {
+                        if (index == 0) {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 1,
+                                colspan: item.children.length
+                            })
+                        } else {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 0,
+                                colspan: 0
+                            })
+                        }
+                    })
+                } else {
+                    this.mergeList.push({
+                        prop: item.prop,
+                        rowspan: 1,
+                        colspan: 1
+                    })
+                }
+            })
+        },
+        getExportList(list) {
+            let exportList = []
+            for (let i = 0; i < list.length; i++) {
+                if (list[i].jnpfKey === 'table') {
+                    for (let j = 0; j < list[i].children.length; j++) {
+                        exportList.push(list[i].children[j])
+                    }
+                } else {
+                    exportList.push(list[i])
+                }
+            }
+            this.exportList = exportList.filter(o => !noGroupList.includes(o.__config__.jnpfKey))
+        },
+        getresStatusOptions() {
+            getDictionaryDataSelector('607214598059202629').then(res => {
+                this.resStatusOptions = res.data.list
+            })
+        },
+
+        sortChange({ column, prop, order }) {
+            this.listQuery.sort = order == 'ascending' ? 'asc' : 'desc'
+            this.listQuery.sidx = !order ? '' : prop
+            this.initData()
+        },
+        async initSearchDataAndListData() {
+            await this.initSearchData()
+            this.initData()
+        },
+        //初始化查询的默认数据
+        async initSearchData() {
+        },
+        init(id) {
+            this.query.batchId = id
+            this.initData()
+        },
+        initData() {
+            // this.queryData = JSON.parse(JSON.stringify(this.query))导致重置失效
+            this.listLoading = true;
+            let _query = {
+                ...this.listQuery,
+                ...this.query,
+                ...this.defListQuery,
+                keyword: this.keyword,
+                dataType: 0,
+                menuId: this.menuId,
+                moduleId: '607243845716940933',
+                type: 1,
+            };
+            request({
+                url: `/api/jnpf/MdmUserDetail/getList`,
+                method: 'post',
+                data: _query
+            }).then(res => {
+                var _list = [];
+                for (let i = 0; i < res.data.list.length; i++) {
+                    let _data = res.data.list[i];
+                    _list.push(_data)
+                }
+                this.list = _list.map(o => ({
+                    ...o,
+                    ...this.expandObj,
+                }))
+                this.total = res.data.pagination.total
+                this.listLoading = false
+                this.visible = true
+            })
+        },
+        handleDel(id) {
+            this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+                type: 'warning'
+            }).then(() => {
+                request({
+                    url: `/api/jnpf/MdmUserDetail/${id}`,
+                    method: 'DELETE'
+                }).then(res => {
+                    this.$message({
+                        type: 'success',
+                        message: res.msg,
+                        onClose: () => {
+                            this.initData()
+                        }
+                    });
+                })
+            }).catch(() => {
+            });
+        },
+        handelUpload() {
+            this.uploadBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.UploadBox.init("", "jnpf/MdmUserDetail", 0, this.flowList)
+            })
+        },
+        openSuperQuery() {
+            this.superQueryVisible = true
+            this.$nextTick(() => {
+                this.$refs.SuperQuery.init()
+            })
+        },
+        superQuery(queryJson) {
+            this.listQuery.superQueryJson = queryJson
+            this.listQuery.currentPage = 1
+            this.initData()
+        },
+        addOrUpdateHandle(row, isDetail) {
+            let id = row ? row.id : ""
+            this.formVisible = true
+            if (!this.treeActiveId) {
+                this.leftTreeActiveInfo = {}
+            }
+            this.$nextTick(() => {
+                this.$refs.JNPFForm.init(id, isDetail, this.list, this.leftTreeActiveInfo)
+            })
+        },
+        exportData() {
+            this.exportBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.ExportBox.init(this.exportList, this.multipleSelection)
+            })
+        },
+        download(data) {
+            let query = { ...data, ...this.listQuery, ...this.query, menuId: this.menuId }
+            request({
+                url: `/api/jnpf/MdmUserDetail/Actions/Export`,
+                method: 'post',
+                data: query
+            }).then(res => {
+                if (!res.data.url) return
+                this.jnpf.downloadFile(res.data.url)
+                this.$refs.ExportBox.visible = false
+                this.exportBoxVisible = false
+            })
+        },
+        search() {
+            this.listQuery.currentPage = 1
+            this.listQuery.pageSize = 20
+            this.initData()
+        },
+        refresh(isrRefresh) {
+            this.formVisible = false
+            if (isrRefresh) this.reset()
+        },
+        reset() {
+            this.query = JSON.parse(JSON.stringify(this.queryData))
+            this.search()
+        },
+        colseFlow(isrRefresh) {
+            this.flowVisible = false
+            if (isrRefresh) this.reset()
+        },
+
+        //以下排序相关方法
+        setDefaultQuery(defaultSortList) {
+            const defaultSortConfig = (defaultSortList || []).map(o =>
+                (o.sort === 'desc' ? '-' : '') + o.field);
+            this.defListQuery.sidx = defaultSortConfig.join(',')
+        },
+        handleHeaderClass({ column }) {
+            column.order = column.multiOrder
+        },
+        handleTableSort({ column }) {
+            if (column.sortable !== 'custom') return
+            column.multiOrder = column.multiOrder === 'descending' ? 'ascending' : column.multiOrder ? '' : 'descending';
+            this.handleOrderChange(column.property, column.multiOrder)
+        },
+        handleOrderChange(orderColumn, orderState) {
+            let index = this.ordersList.findIndex(e => e.field === orderColumn);
+            let sort = orderState === 'ascending' ? 'asc' : orderState === 'descending' ? 'desc' : '';
+            if (index > -1) {
+                this.ordersList[index].sort = orderState;
+            } else {
+                this.ordersList.push({ field: orderColumn, sort });
+            }
+            this.ordersList = this.ordersList.filter(e => e.sort);
+            this.ordersList.length ? this.setDefaultQuery(this.ordersList) : this.setDefaultQuery(this.defaultSortConfig)
+            this.initData()
+        },
+        //以上排序相关方法
+    }
+}
+</script>
+
+<style scoped lang="scss">
+::v-deep .el-dialog__body {
+    padding: 20px;
+}
+.tableContainer {
+    flex: 1;
+}
+</style>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/views/governmentCloud/mdm/mdmuser/columnList.js


+ 499 - 0
src/views/governmentCloud/mdm/mdmuser/form.vue

@@ -0,0 +1,499 @@
+
+
+
+    <template>
+        <el-dialog :title="!dataForm.id ? '新建' :'编辑'"
+                   :close-on-click-modal="false" append-to-body
+                   :visible.sync="visible" class="JNPF-dialog JNPF-dialog_center" lock-scroll
+                   width="600px">
+        <el-row :gutter="15" class="">
+    <el-form ref="formRef" :model="dataForm" :rules="dataRule" size="small" label-width="150px" label-position="right" >
+    <template v-if="!loading">
+        <!-- 具体表单 -->
+
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="创建时间"              align="left"
+ prop="createTime" >
+        <JnpfDatePicker   v-model="dataForm.createTime" @change="changeData('createTime',-1)" 
+ :startTime="dateTime(false,1,1,'','')"  :endTime="dateTime(false,1,1,'','')"  placeholder="请选择"  clearable  :style='{"width":"100%"}' type="datetime"  format="yyyy-MM-dd HH:mm:ss" >
+    </JnpfDatePicker>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="模块"              align="left"
+ prop="module" >
+        <JnpfSelect   v-model="dataForm.module" @change="changeData('module',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="moduleOptions" :props="moduleProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="类型"              align="left"
+ prop="type" >
+        <JnpfSelect   v-model="dataForm.type" @change="changeData('type',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="typeOptions" :props="typeProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="请求时间"              align="left"
+ prop="reqTime" >
+        <JnpfDatePicker   v-model="dataForm.reqTime" @change="changeData('reqTime',-1)" 
+ :startTime="dateTime(false,1,1,'','')"  :endTime="dateTime(false,1,1,'','')"  placeholder="请选择"  clearable  :style='{"width":"100%"}' type="datetime"  format="yyyy-MM-dd HH:mm:ss" >
+    </JnpfDatePicker>
+    </jnpf-form-tip-item>
+        </el-col>
+
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="响应时间"              align="left"
+ prop="resTime" >
+        <JnpfDatePicker   v-model="dataForm.resTime" @change="changeData('resTime',-1)" 
+ :startTime="dateTime(false,1,1,'','')"  :endTime="dateTime(false,1,1,'','')"  placeholder="请选择"  clearable  :style='{"width":"100%"}' type="datetime"  format="yyyy-MM-dd HH:mm:ss" >
+    </JnpfDatePicker>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="时间间隔(ms)"              align="left"
+ prop="timeInterval" >
+        <JnpfInputNumber   v-model="dataForm.timeInterval" @change="changeData('timeInterval',-1)" 
+ placeholder="数字文本"  :step="1"  :controls="false" >
+    </JnpfInputNumber>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="状态"              align="left"
+ prop="status" >
+        <JnpfSelect   v-model="dataForm.status" @change="changeData('status',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="statusOptions" :props="statusProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+        <!-- 表单结束 -->
+    </template>
+    </el-form>
+    <SelectDialog v-if="selectDialogVisible" :config="currTableConf" :formData="dataForm"
+                  ref="selectDialog" @select="addForSelect" @close="closeForSelect"/>
+    </el-row>
+    <span slot="footer" class="dialog-footer">
+                    <div class="upAndDown-button" v-if="dataForm.id">
+                <el-button @click="prev" :disabled='prevDis'>
+                  {{'上一条'}}
+                </el-button>
+                <el-button @click="next" :disabled='nextDis'>
+                  {{'下一条'}}
+                </el-button>
+              </div>
+                <el-button type="primary" @click="dataFormSubmit(2)" :loading="continueBtnLoading">
+            {{!dataForm.id ?'确定并新增':'确定并继续'}}</el-button>
+              <el-button @click="visible = false"> 取 消</el-button>
+              <el-button type="primary" @click="dataFormSubmit()" :loading="btnLoading"> 确 定</el-button>
+        </span>
+    </el-dialog>
+    </template>
+
+
+<script>
+    import request from '@/utils/request'
+    import {mapGetters} from "vuex";
+    import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
+    import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
+    import { getDefaultCurrentValueUserId } from '@/api/permission/user'
+    import { getDefaultCurrentValueDepartmentId } from '@/api/permission/organize'
+    import { getDateDay, getLaterData, getBeforeData, getBeforeTime, getLaterTime } from '@/components/Generator/utils/index.js'
+    import { thousandsFormat } from "@/components/Generator/utils/index"
+    import SelectDialog from '@/components/SelectDialog'
+
+    export default {
+        components: { SelectDialog },
+        props: [],
+        data() {
+        return {
+            dataFormSubmitType: 0,
+            continueBtnLoading: false,
+            index: 0,
+            prevDis: false,
+            nextDis: false,
+            allList: [],
+            visible: false,
+            loading: false,
+            btnLoading: false,
+            formRef: 'formRef',
+            setting:{},
+            eventType: '',
+            userBoxVisible:false,
+            selectDialogVisible: false,
+            currTableConf:{},
+            dataValueAll:{},
+            addTableConf:{
+            },
+            //可选范围默认值
+            ableAll:{
+            },
+            tableRows:{
+        },
+            Vmodel:"",
+            currVmodel:"",
+            dataForm: {
+                                    createTime : undefined,
+                                    module : undefined,
+                                    type : undefined,
+                                reqTime : undefined,
+                                resTime : undefined,
+                                timeInterval : undefined,
+                                    status : undefined,
+            },
+            tableRequiredData: {},
+            dataRule:
+            {
+            },
+                    moduleOptions:[],
+                            moduleProps:{"label":"fullName","value":"enCode"  },
+                    typeOptions:[],
+                            typeProps:{"label":"fullName","value":"enCode"  },
+                    statusOptions:[],
+                            statusProps:{"label":"fullName","value":"enCode"  },
+            childIndex:-1,
+            isEdit:false,
+            interfaceRes: {
+                        createTime:[] ,
+                        module:[] ,
+                        type:[] ,
+                        reqTime:[] ,
+                        resTime:[] ,
+                        timeInterval:[] ,
+                        status:[] ,
+        },
+            //掩码配置
+            maskConfig: {
+                },
+            //定位属性
+            locationScope: {
+                },
+            }
+        },
+        computed: {
+            ...mapGetters(['userInfo']),
+
+
+        },
+        watch: {},
+        created() {
+            this.dataAll()
+            this.initDefaultData()
+            this.dataValueAll = JSON.parse(JSON.stringify(this.dataForm))
+        },
+        mounted() {},
+        methods: {
+            prev() {
+                this.index--
+                if (this.index === 0) {
+                    this.prevDis = true
+                }
+                this.nextDis = false
+                for (let index = 0; index < this.allList.length; index++) {
+                    const element = this.allList[index];
+                    if (this.index == index) {
+                        this.getInfo(element.id)
+                    }
+                }
+            },
+            next() {
+                this.index++
+                if (this.index === this.allList.length - 1) {
+                    this.nextDis = true
+                }
+                this.prevDis = false
+                for (let index = 0; index < this.allList.length; index++) {
+                    const element = this.allList[index];
+                    if (this.index == index) {
+                        this.getInfo(element.id)
+                    }
+                }
+            },
+            getInfo(id) {
+                request({
+                    url: '/api/jnpf/MdmUser/'+ id,
+                    method: 'get'
+                }).then(res => {
+                    this.dataInfo(res.data)
+                });
+            },
+            goBack() {
+                this.visible = false
+                this.$emit('refreshDataList', true)
+            },
+            changeData(model, index) {
+                this.isEdit = false
+                this.childIndex = index
+                let modelAll = model.split("-");
+                let faceMode = "";
+                for (let i = 0; i < modelAll.length; i++) {
+                    faceMode += modelAll[i];
+                }
+                for (let key in this.interfaceRes) {
+                    if (key != faceMode) {
+                        let faceReList = this.interfaceRes[key]
+                        for (let i = 0; i < faceReList.length; i++) {
+                            if (faceReList[i].relationField == model) {
+                                let options = 'get' + key + 'Options';
+                                if(this[options]){
+                                    this[options]()
+                                }
+                                this.changeData(key, index)
+                            }
+                        }
+                    }
+                }
+            },
+            changeDataFormData(type, data, model,index,defaultValue,edit) {
+                if(!edit) {
+                    if (type == 2) {
+                        for (let i = 0; i < this.dataForm[data].length; i++) {
+                            if (index == -1) {
+                                this.dataForm[data][i][model] = defaultValue
+                            } else if (index == i) {
+                                this.dataForm[data][i][model] = defaultValue
+                            }
+                        }
+                    } else {
+                        this.dataForm[data] = defaultValue
+                    }
+                }
+            },
+            dataAll(){
+                        this.getmoduleOptions();
+                        this.gettypeOptions();
+                        this.getstatusOptions();
+            },
+                    getmoduleOptions() {
+                    getDictionaryDataSelector('607211514000054341').then(res => {
+                        this.moduleOptions = res.data.list
+                    })
+                },
+                    gettypeOptions() {
+                    getDictionaryDataSelector('607211842762184773').then(res => {
+                        this.typeOptions = res.data.list
+                    })
+                },
+                    getstatusOptions() {
+                    getDictionaryDataSelector('607214598059202629').then(res => {
+                        this.statusOptions = res.data.list
+                    })
+                },
+            clearData(){
+                this.dataForm = JSON.parse(JSON.stringify(this.dataValueAll))
+            },
+            init(id,isDetail,allList,leftTreeActiveInfo) {
+                this.prevDis = false
+                this.nextDis = false
+                this.allList = allList || []
+                if (allList.length) {
+                    this.index = this.allList.findIndex(item => item.id === id)
+                    if (this.index == 0) {
+                        this.prevDis = true
+                    }
+                    if (this.index == this.allList.length - 1) {
+                        this.nextDis = true
+                    }
+                } else {
+                    this.prevDis = true
+                    this.nextDis = true
+                }
+                this.dataForm.id = id || 0;
+                this.visible = true;
+                this.$nextTick(() => {
+                    if(this.dataForm.id){
+                        this.loading = true
+                        request({
+                            url: '/api/jnpf/MdmUser/'+this.dataForm.id,
+                            method: 'get'
+                        }).then(res => {
+                            this.dataInfo(res.data)
+                            this.loading = false
+                        });
+                    }else{
+                        this.clearData()
+                        this.initDefaultData()
+                        this.dataForm = { ...this.dataForm, ...leftTreeActiveInfo }
+                    }
+                });
+                this.$store.commit('generator/UPDATE_RELATION_DATA', {})
+            },
+            //初始化默认数据
+            initDefaultData() {
+            this.dataForm.createTime = new Date().getTime()
+
+            },
+            // 表单提交
+            dataFormSubmit(type) {
+                this.dataFormSubmitType = type ? type : 0
+                this.$refs['formRef'].validate((valid) => {
+                    if (valid) {
+                        this.request()
+                    }
+                })
+            },
+            request() {
+                let _data =this.dataList()
+                if (this.dataFormSubmitType == 2) {
+                    this.continueBtnLoading = true
+                } else {
+                    this.btnLoading = true
+                }
+                if (!this.dataForm.id) {
+                    request({
+                        url: '/api/jnpf/MdmUser',
+                        method: 'post',
+                        data: _data
+                    }).then((res) => {
+                        this.$message({
+                            message: res.msg,
+                            type: 'success',
+                            duration: 1000,
+                            onClose: () => {
+                                if (this.dataFormSubmitType == 2) {
+                                    this.$nextTick(() => {
+                                        this.clearData()
+                                        this.initDefaultData()
+                                    })
+                                    this.continueBtnLoading = false
+                                    return
+                                }
+                                this.visible = false
+                                this.btnLoading = false
+                                this.$emit('refresh', true)
+                            }
+                        })
+                    }).catch(()=>{
+                        this.btnLoading = false
+                        this.continueBtnLoading = false
+                    })
+                }else{
+                    request({
+                        url: '/api/jnpf/MdmUser/'+this.dataForm.id,
+                        method: 'PUT',
+                        data: _data
+                    }).then((res) => {
+                        this.$message({
+                            message: res.msg,
+                            type: 'success',
+                            duration: 1000,
+                            onClose: () => {
+                                if (this.dataFormSubmitType == 2) return this.continueBtnLoading = false
+                                this.visible = false
+                                this.btnLoading = false
+                                this.$emit('refresh', true)
+                            }
+                        })
+                    }).catch(()=>{
+                        this.btnLoading = false
+                        this.continueBtnLoading = false
+                    })
+                }
+            },
+            openSelectDialog(key,value) {
+                this.currTableConf=this.addTableConf[key + value]
+                this.currVmodel=key
+                this.selectDialogVisible = true
+                this.$nextTick(() => {
+                    this.$refs.selectDialog.init()
+                })
+            },
+            addForSelect(data) {
+                this.closeForSelect()
+                for (let i = 0; i < data.length; i++) {
+                    let t = data[i]
+                    if(this['get'+this.currVmodel]){
+                        this['get'+this.currVmodel](t,true)
+                    }
+                }
+            },
+            closeForSelect() {
+                this.selectDialogVisible = false
+            },
+            dateTime(timeRule, timeType, timeTarget, timeValueData, dataValue) {
+                let timeDataValue = null;
+                let timeValue = Number(timeValueData)
+                if (timeRule) {
+                    if (timeType == 1) {
+                        timeDataValue = timeValue
+                    } else if (timeType == 2) {
+                        timeDataValue = dataValue
+                    } else if (timeType == 3) {
+                        timeDataValue = new Date().getTime()
+                    } else if (timeType == 4) {
+                        let previousDate = '';
+                        if (timeTarget == 1 || timeTarget == 2) {
+                            previousDate = getDateDay(timeTarget, timeType, timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else if (timeTarget == 3) {
+                            previousDate = getBeforeData(timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else {
+                            timeDataValue = getBeforeTime(timeTarget, timeValue).getTime()
+                        }
+                    } else if (timeType == 5) {
+                        let previousDate = '';
+                        if (timeTarget == 1 || timeTarget == 2) {
+                            previousDate = getDateDay(timeTarget, timeType, timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else if (timeTarget == 3) {
+                            previousDate = getLaterData(timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else {
+                            timeDataValue = getLaterTime(timeTarget, timeValue).getTime()
+                        }
+                    }
+                }
+                return timeDataValue;
+            },
+            time(timeRule, timeType, timeTarget, timeValue, formatType, dataValue) {
+                let format = formatType == 'HH:mm' ? 'HH:mm:00' : formatType
+                let timeDataValue = null
+                if (timeRule) {
+                    if (timeType == 1) {
+                        timeDataValue = timeValue || '00:00:00'
+                        if (timeDataValue.split(':').length == 3) {
+                            timeDataValue = timeDataValue
+                        } else {
+                            timeDataValue = timeDataValue + ':00'
+                        }
+                    } else if (timeType == 2) {
+                        timeDataValue = dataValue
+                    } else if (timeType == 3) {
+                        timeDataValue = this.jnpf.toDate(new Date(), format)
+                    } else if (timeType == 4) {
+                        let previousDate = '';
+                        previousDate = getBeforeTime(timeTarget, timeValue)
+                        timeDataValue = this.jnpf.toDate(previousDate, format)
+                    } else if (timeType == 5) {
+                        let previousDate = '';
+                        previousDate = getLaterTime(timeTarget, timeValue)
+                        timeDataValue = this.jnpf.toDate(previousDate, format)
+                    }
+                }
+                return timeDataValue;
+            },
+            dataList(){
+                var _data = this.dataForm;
+                return _data;
+            },
+            dataInfo(dataAll){
+                let _dataAll =dataAll
+                this.dataForm = _dataAll
+                this.isEdit = true
+                this.dataAll()
+                this.childIndex=-1
+            },
+        },
+    }
+
+</script>

+ 590 - 0
src/views/governmentCloud/mdm/mdmuser/index.vue

@@ -0,0 +1,590 @@
+<template>
+    <div class="JNPF-common-layout">
+        <div class="JNPF-common-layout-center">
+            <el-row class="JNPF-common-search-box" :gutter="16">
+                <el-form @submit.native.prevent>
+                    <el-col :span="6">
+                        <el-form-item label="创建时间">
+                            <JnpfDateRangePicker v-model="query.createTime"
+                                format="yyyy-MM-dd HH:mm:ss" startPlaceholder="开始日期"
+                                endPlaceholder="结束日期">
+                            </JnpfDateRangePicker>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="模块">
+                            <JnpfSelect v-model="query.module" placeholder="请选择" clearable
+                                :options="moduleOptions" :props="moduleProps" multiple>
+                            </JnpfSelect>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="类型">
+                            <JnpfSelect v-model="query.type" placeholder="请选择" clearable
+                                :options="typeOptions" :props="typeProps" multiple>
+                            </JnpfSelect>
+                        </el-form-item>
+                    </el-col>
+                    <template v-if="showAll">
+                        <el-col :span="6">
+                            <el-form-item label="时间间隔(ms)">
+                                <num-range v-model="query.timeInterval"></num-range>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="6">
+                            <el-form-item label="状态">
+                                <JnpfSelect v-model="query.status" placeholder="请选择" clearable
+                                    :options="statusOptions" :props="statusProps" multiple>
+                                </JnpfSelect>
+                            </el-form-item>
+                        </el-col>
+                    </template>
+                    <el-col :span="6">
+                        <el-form-item>
+                            <el-button type="primary" icon="el-icon-search"
+                                @click="search()">查询</el-button>
+                            <el-button icon="el-icon-refresh-right" @click="reset()">重置</el-button>
+                            <el-button type="text" icon="el-icon-arrow-down" @click="showAll=true"
+                                v-if="!showAll">
+                                展开
+                            </el-button>
+                            <el-button type="text" icon="el-icon-arrow-up" @click="showAll=false"
+                                v-else>
+                                收起
+                            </el-button>
+                        </el-form-item>
+                    </el-col>
+                </el-form>
+            </el-row>
+            <div class="JNPF-common-layout-main JNPF-flex-main">
+                <div class="JNPF-common-head">
+                    <div>
+                        <el-button type="primary" icon="el-icon-refresh"
+                            @click="initialization()">初始化
+                        </el-button>
+
+                    </div>
+                    <div class="JNPF-common-head-right">
+                        <el-tooltip content="高级查询" placement="top" v-if="true">
+                            <el-link icon="icon-ym icon-ym-filter JNPF-common-head-icon"
+                                :underline="false" @click="openSuperQuery()" />
+                        </el-tooltip>
+                        <el-tooltip effect="dark" :content="$t('common.refresh')" placement="top">
+                            <el-link icon="icon-ym icon-ym-Refresh JNPF-common-head-icon"
+                                :underline="false" @click="initData()" />
+                        </el-tooltip>
+                    </div>
+                </div>
+                <JNPF-table v-loading="listLoading" :data="list" @sort-change='handleTableSort'
+                    :header-cell-class-name="handleHeaderClass" :has-c="hasBatchBtn"
+                    :span-method="arraySpanMethod">
+                    <el-table-column prop="createTime" label="创建时间" align="left"
+                        show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="module" label="模块" align="left" show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="type" label="类型" align="left" show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="reqTime" label="请求时间" align="left" show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="resTime" label="响应时间" align="left" show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="timeInterval" label="时间间隔(ms)" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfNumber v-model="scope.row.timeInterval" :thousands="false" />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="status" label="状态" align="left" show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column label="操作" fixed="right" width="50">
+                        <template slot-scope="scope">
+                            <el-button type="text" @click="goDetail(scope.row.id)">详情
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </JNPF-table>
+                <pagination :total="total" :page.sync="listQuery.currentPage"
+                    :limit.sync="listQuery.pageSize" @pagination="initData" />
+            </div>
+        </div>
+        <JNPF-Form v-if="formVisible" ref="JNPFForm" @refresh="refresh" />
+        <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" />
+
+        <ImportBox v-if="uploadBoxVisible" ref="UploadBox" @refresh="initData" />
+        <Detail v-if="detailVisible" ref="Detail" @refresh="detailVisible=false" />
+        <ToFormDetail v-if="toFormDetailVisible" ref="toFormDetail"
+            @close="toFormDetailVisible = false" />
+        <SuperQuery v-if="superQueryVisible" ref="SuperQuery" :columnOptions="superQueryJson"
+            @superQuery="superQuery" />
+    </div>
+</template>
+
+<script>
+import request from '@/utils/request'
+import { mapGetters } from "vuex";
+import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
+import JNPFForm from './form'
+import Detail from './Detail'
+import ExportBox from '@/components/ExportBox'
+import ToFormDetail from '@/views/basic/dynamicModel/list/detail'
+import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
+import { getConfigData } from '@/api/onlineDev/visualDev'
+import { getDefaultCurrentValueUserIdAsync } from '@/api/permission/user'
+import { getDefaultCurrentValueDepartmentIdAsync } from '@/api/permission/organize'
+import columnList from './columnList'
+import { thousandsFormat } from "@/components/Generator/utils/index"
+import SuperQuery from '@/components/SuperQuery'
+import superQueryJson from './superQueryJson'
+import { noGroupList } from '@/components/Generator/generator/comConfig'
+
+export default {
+    components: {
+        JNPFForm,
+        Detail,
+        ExportBox, ToFormDetail, SuperQuery
+    },
+    data() {
+        return {
+
+            keyword: '',
+            expandsTree: true,
+            refreshTree: true,
+            toFormDetailVisible: false,
+            hasBatchBtn: false,
+            expandObj: {},
+            columnOptions: [],
+            mergeList: [],
+            exportList: [],
+            columnList,
+
+            showAll: false,
+            superQueryVisible: false,
+            superQueryJson,
+            uploadBoxVisible: false,
+            detailVisible: false,
+            query: {
+                createTime: undefined,
+                module: undefined,
+                type: undefined,
+                timeInterval: undefined,
+                status: undefined,
+            },
+            defListQuery: {
+                sort: 'desc',
+                sidx: '',
+            },
+            //排序默认值
+            defaultSortConfig: [],
+            treeProps: {
+                children: 'children',
+                label: 'fullName',
+                value: 'id',
+                isLeaf: 'isLeaf'
+            },
+            list: [],
+            listLoading: true,
+            multipleSelection: [],
+            total: 0,
+            queryData: {},
+            listQuery: {
+                superQueryJson: '',
+                currentPage: 1,
+                pageSize: 20,
+                sort: "",
+                sidx: "",
+            },
+            //多列排序
+            ordersList: [],
+            formVisible: false,
+            flowVisible: false,
+            flowListVisible: false,
+            flowList: [],
+            exportBoxVisible: false,
+            moduleOptions: [],
+            moduleProps: { "label": "fullName", "value": "enCode" },
+            typeOptions: [],
+            typeProps: { "label": "fullName", "value": "enCode" },
+            statusOptions: [],
+            statusProps: { "label": "fullName", "value": "enCode" },
+            interfaceRes: {
+            },
+            //掩码配置
+            maskConfig: {
+            },
+        }
+    },
+    computed: {
+        ...mapGetters(['userInfo']),
+        menuId() {
+            return this.$route.meta.modelId || ''
+        }
+    },
+    created() {
+        this.getColumnList(),
+            this.initSearchDataAndListData()
+        this.getmoduleOptions();
+        this.gettypeOptions();
+        this.getstatusOptions();
+        this.queryData = JSON.parse(JSON.stringify(this.query))
+        this.getHasBatchBtn();
+        //排序默认值
+        this.setDefaultQuery(this.defaultSortConfig);
+    },
+    methods: {
+        getHasBatchBtn() {
+            let btnsList = []
+            this.hasBatchBtn = btnsList.some(o => ['batchRemove', 'batchPrint', 'download'].includes(o))
+        },
+
+        treeRefresh() {
+            this.keyword = ''
+            this.treeActiveId = ''
+            this.leftTreeActiveInfo = {}
+            this.$refs.treeBox.setCurrentKey(null)
+            this.getTreeView()
+        },
+
+        toDetail(defaultValue, modelId) {
+            if (!defaultValue) return
+            getConfigData(modelId).then(res => {
+                if (!res.data || !res.data.formData) return
+                let formData = JSON.parse(res.data.formData)
+                formData.popupType = 'general'
+                this.toFormDetailVisible = true
+                this.$nextTick(() => {
+                    this.$refs.toFormDetail.init(formData, modelId, defaultValue)
+                })
+            })
+        },
+        toggleTreeExpand(expands) {
+            this.refreshTree = false
+            this.expandsTree = expands
+            this.$nextTick(() => {
+                this.refreshTree = true
+                this.$nextTick(() => {
+                    this.$refs.treeBox.setCurrentKey(null)
+                })
+            })
+        },
+        filterNode(value, data) {
+            if (!value) return true;
+            return data[this.treeProps.label].indexOf(value) !== -1;
+        },
+        loadNode(node, resolve) {
+            const nodeData = node.data
+            const config = {
+                treeInterfaceId: "",
+                treeTemplateJson: []
+            }
+            if (config.treeInterfaceId) {
+                //这里是为了拿到参数中关联的字段的值,后端自行拿
+                if (config.treeTemplateJson && config.treeTemplateJson.length) {
+                    for (let i = 0; i < config.treeTemplateJson.length; i++) {
+                        const element = config.treeTemplateJson[i];
+                        element.defaultValue = nodeData[element.relationField] || ''
+                    }
+                }
+                //参数
+                let query = {
+                    paramList: config.treeTemplateJson || [],
+                }
+                //接口
+                getDataInterfaceRes(config.treeInterfaceId, query).then(res => {
+                    let data = res.data
+                    if (Array.isArray(data)) {
+                        resolve(data);
+                    } else {
+                        resolve([]);
+                    }
+                })
+            }
+        },
+        getColumnList() {
+            // 没有开启权限
+            this.columnOptions = this.transformColumnList(this.columnList)
+        },
+
+        //初始化
+        initialization() {
+            this.listLoading = true
+
+            request({
+                url: `/api/jnpf/MdmUser/init`,
+                method: 'post',
+                data: null
+            }).then(res => {
+                if (res.code == 200) {
+                    this.$message.success(res.msg)
+                    this.initData()
+                } else {
+                    this.$message.error(res.msg)
+                    this.listLoading = false
+
+                }
+            })
+        },
+        transformColumnList(columnList) {
+            let list = []
+            for (let i = 0; i < columnList.length; i++) {
+                const e = columnList[i];
+                if (!e.prop.includes('-')) {
+                    list.push(e)
+                } else {
+                    let prop = e.prop.split('-')[0]
+                    let label = e.label.split('-')[0]
+                    let vModel = e.prop.split('-')[1]
+                    let newItem = {
+                        align: "center",
+                        jnpfKey: "table",
+                        prop,
+                        label,
+                        children: []
+                    }
+                    e.vModel = vModel
+                    if (!this.expandObj.hasOwnProperty(`${prop}Expand`)) this.$set(this.expandObj, `${prop}Expand`, false)
+                    if (!list.some(o => o.prop === prop)) list.push(newItem)
+                    for (let i = 0; i < list.length; i++) {
+                        if (list[i].prop === prop) {
+                            list[i].children.push(e)
+                            break
+                        }
+                    }
+                }
+            }
+            this.getMergeList(list)
+            this.getExportList(list)
+            return list
+        },
+        arraySpanMethod({ column }) {
+            for (let i = 0; i < this.mergeList.length; i++) {
+                if (column.property == this.mergeList[i].prop) {
+                    return [this.mergeList[i].rowspan, this.mergeList[i].colspan]
+                }
+            }
+        },
+        getMergeList(list) {
+            let newList = JSON.parse(JSON.stringify(list))
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    let child = {
+                        prop: item.prop + '-child-first'
+                    }
+                    item.children.unshift(child)
+                }
+            })
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    item.children.forEach((child, index) => {
+                        if (index == 0) {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 1,
+                                colspan: item.children.length
+                            })
+                        } else {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 0,
+                                colspan: 0
+                            })
+                        }
+                    })
+                } else {
+                    this.mergeList.push({
+                        prop: item.prop,
+                        rowspan: 1,
+                        colspan: 1
+                    })
+                }
+            })
+        },
+        getExportList(list) {
+            let exportList = []
+            for (let i = 0; i < list.length; i++) {
+                if (list[i].jnpfKey === 'table') {
+                    for (let j = 0; j < list[i].children.length; j++) {
+                        exportList.push(list[i].children[j])
+                    }
+                } else {
+                    exportList.push(list[i])
+                }
+            }
+            this.exportList = exportList.filter(o => !noGroupList.includes(o.__config__.jnpfKey))
+        },
+        getmoduleOptions() {
+            getDictionaryDataSelector('607211514000054341').then(res => {
+                this.moduleOptions = res.data.list
+            })
+        },
+        gettypeOptions() {
+            getDictionaryDataSelector('607211842762184773').then(res => {
+                this.typeOptions = res.data.list
+            })
+        },
+        getstatusOptions() {
+            getDictionaryDataSelector('607214598059202629').then(res => {
+                this.statusOptions = res.data.list
+            })
+        },
+        goDetail(id) {
+            this.detailVisible = true
+            this.$nextTick(() => {
+                this.$refs.Detail.init(id)
+            })
+        },
+        sortChange({ column, prop, order }) {
+            this.listQuery.sort = order == 'ascending' ? 'asc' : 'desc'
+            this.listQuery.sidx = !order ? '' : prop
+            this.initData()
+        },
+        async initSearchDataAndListData() {
+            await this.initSearchData()
+            this.initData()
+        },
+        //初始化查询的默认数据
+        async initSearchData() {
+        },
+        initData() {
+            // this.queryData = JSON.parse(JSON.stringify(this.query))导致重置失效
+            this.listLoading = true;
+            let _query = {
+                ...this.listQuery,
+                ...this.query,
+                ...this.defListQuery,
+                keyword: this.keyword,
+                dataType: 0,
+                menuId: this.menuId,
+                moduleId: '607236760644098117',
+            };
+            request({
+                url: `/api/jnpf/MdmUser/getList`,
+                method: 'post',
+                data: _query
+            }).then(res => {
+                var _list = [];
+                for (let i = 0; i < res.data.list.length; i++) {
+                    let _data = res.data.list[i];
+                    _list.push(_data)
+                }
+                this.list = _list.map(o => ({
+                    ...o,
+                    ...this.expandObj,
+                }))
+                this.total = res.data.pagination.total
+                this.listLoading = false
+            })
+        },
+        handleDel(id) {
+            this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+                type: 'warning'
+            }).then(() => {
+                request({
+                    url: `/api/jnpf/MdmUser/${id}`,
+                    method: 'DELETE'
+                }).then(res => {
+                    this.$message({
+                        type: 'success',
+                        message: res.msg,
+                        onClose: () => {
+                            this.initData()
+                        }
+                    });
+                })
+            }).catch(() => {
+            });
+        },
+        handelUpload() {
+            this.uploadBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.UploadBox.init("", "jnpf/MdmUser", 0, this.flowList)
+            })
+        },
+        openSuperQuery() {
+            this.superQueryVisible = true
+            this.$nextTick(() => {
+                this.$refs.SuperQuery.init()
+            })
+        },
+        superQuery(queryJson) {
+            this.listQuery.superQueryJson = queryJson
+            this.listQuery.currentPage = 1
+            this.initData()
+        },
+        addOrUpdateHandle(row, isDetail) {
+            let id = row ? row.id : ""
+            this.formVisible = true
+            if (!this.treeActiveId) {
+                this.leftTreeActiveInfo = {}
+            }
+            this.$nextTick(() => {
+                this.$refs.JNPFForm.init(id, isDetail, this.list, this.leftTreeActiveInfo)
+            })
+        },
+        exportData() {
+            this.exportBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.ExportBox.init(this.exportList, this.multipleSelection)
+            })
+        },
+        download(data) {
+            let query = { ...data, ...this.listQuery, ...this.query, menuId: this.menuId }
+            request({
+                url: `/api/jnpf/MdmUser/Actions/Export`,
+                method: 'post',
+                data: query
+            }).then(res => {
+                if (!res.data.url) return
+                this.jnpf.downloadFile(res.data.url)
+                this.$refs.ExportBox.visible = false
+                this.exportBoxVisible = false
+            })
+        },
+        search() {
+            this.listQuery.currentPage = 1
+            this.listQuery.pageSize = 20
+            this.initData()
+        },
+        refresh(isrRefresh) {
+            this.formVisible = false
+            if (isrRefresh) this.reset()
+        },
+        reset() {
+            this.query = JSON.parse(JSON.stringify(this.queryData))
+            this.search()
+        },
+        colseFlow(isrRefresh) {
+            this.flowVisible = false
+            if (isrRefresh) this.reset()
+        },
+
+        //以下排序相关方法
+        setDefaultQuery(defaultSortList) {
+            const defaultSortConfig = (defaultSortList || []).map(o =>
+                (o.sort === 'desc' ? '-' : '') + o.field);
+            this.defListQuery.sidx = defaultSortConfig.join(',')
+        },
+        handleHeaderClass({ column }) {
+            column.order = column.multiOrder
+        },
+        handleTableSort({ column }) {
+            if (column.sortable !== 'custom') return
+            column.multiOrder = column.multiOrder === 'descending' ? 'ascending' : column.multiOrder ? '' : 'descending';
+            this.handleOrderChange(column.property, column.multiOrder)
+        },
+        handleOrderChange(orderColumn, orderState) {
+            let index = this.ordersList.findIndex(e => e.field === orderColumn);
+            let sort = orderState === 'ascending' ? 'asc' : orderState === 'descending' ? 'desc' : '';
+            if (index > -1) {
+                this.ordersList[index].sort = orderState;
+            } else {
+                this.ordersList.push({ field: orderColumn, sort });
+            }
+            this.ordersList = this.ordersList.filter(e => e.sort);
+            this.ordersList.length ? this.setDefaultQuery(this.ordersList) : this.setDefaultQuery(this.defaultSortConfig)
+            this.initData()
+        },
+        //以上排序相关方法
+    }
+}
+</script>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/views/governmentCloud/mdm/mdmuser/superQueryJson.js


+ 306 - 0
src/views/governmentCloud/mdm/mdmuserdetail/Detail.vue

@@ -0,0 +1,306 @@
+<template>
+<el-dialog title="详情"
+           :close-on-click-modal="false" append-to-body
+           :visible.sync="visible" class="JNPF-dialog JNPF-dialog_center" lock-scroll
+           width="600px">
+<el-row :gutter="15" class="">
+<el-form ref="formRef" :model="dataForm" size="small" label-width="150px" label-position="right" >
+    <template v-if="!loading">
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="批次ID"  
+ prop="batchId"  >
+                    <JnpfInput    v-model="dataForm.batchId"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.batchId">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="人员编码"  
+ prop="code"  >
+                    <JnpfInput    v-model="dataForm.code"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.code">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="姓名"  
+ prop="name"  >
+                    <JnpfInput    v-model="dataForm.name"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.name">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="账户"  
+ prop="namePinyin"  >
+                    <JnpfInput    v-model="dataForm.namePinyin"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.namePinyin">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="人员类型"  
+ prop="personnelType"  >
+                        <p>{{dataForm.personnelType}}</p>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="性别"  
+ prop="gender"  >
+                        <p>{{dataForm.gender}}</p>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="联系电话"  
+ prop="mobile"  >
+                    <JnpfInput    v-model="dataForm.mobile"
+ placeholder="请输入"  :maxlength="11"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.mobile">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="邮箱"  
+ prop="email"  >
+                    <JnpfInput    v-model="dataForm.email"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.email">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="岗位状态"  
+ prop="jobStatus"  >
+                        <p>{{dataForm.jobStatus}}</p>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="人员状态"  
+ prop="personStatus"  >
+                        <p>{{dataForm.personStatus}}</p>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="微信unionid"  
+ prop="unionid"  >
+                    <JnpfInput    v-model="dataForm.unionid"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.unionid">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="所属组织编码"  
+ prop="organizationCode"  >
+                    <JnpfInput    v-model="dataForm.organizationCode"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.organizationCode">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="所属组织名称"  
+ prop="organizationName"  >
+                    <JnpfInput    v-model="dataForm.organizationName"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.organizationName">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="部门编码"  
+ prop="departmentCode"  >
+                    <JnpfInput    v-model="dataForm.departmentCode"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.departmentCode">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="部门名称"  
+ prop="departmentName"  >
+                    <JnpfInput    v-model="dataForm.departmentName"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.departmentName">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="Itsm用户id"  
+ prop="itsmUserId"  >
+                    <JnpfInput    v-model="dataForm.itsmUserId"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.itsmUserId">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="itsm用户姓名"  
+ prop="itsmUserName"  >
+                    <JnpfInput    v-model="dataForm.itsmUserName"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.itsmUserName">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="itsm用户别名"  
+ prop="itsmUserAlias"  >
+                    <JnpfInput    v-model="dataForm.itsmUserAlias"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.itsmUserAlias">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="企微账号"  
+ prop="enterpriseWechat"  >
+                    <JnpfInput    v-model="dataForm.enterpriseWechat"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.enterpriseWechat">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="响应数据编码"  
+ prop="resCode"  >
+                    <JnpfInput    v-model="dataForm.resCode"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.resCode">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="响应状态"  
+ prop="resStatus"  >
+                        <p>{{dataForm.resStatus}}</p>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="响应数据描述"  
+ prop="resMessage"  >
+                    <JnpfInput    v-model="dataForm.resMessage"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.resMessage">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+            <el-col :span="24"  >
+                <jnpf-form-tip-item  label="响应数据版本"  
+ prop="resVersion"  >
+                    <JnpfInput    v-model="dataForm.resVersion"
+ placeholder="请输入"  disabled
+ detailed  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.resVersion">
+                </JnpfInput>
+                </jnpf-form-tip-item>
+            </el-col>
+    </template>
+</el-form>
+    </el-row>
+    <span slot="footer" class="dialog-footer">
+        <el-button @click="visible = false"> 取 消</el-button>
+    </span>
+    <Detail v-if="detailVisible" ref="Detail" @close="detailVisible = false" />
+    </el-dialog>
+</template>
+<script>
+    import request from '@/utils/request'
+
+    import { getConfigData } from '@/api/onlineDev/visualDev'
+    import jnpf from '@/utils/jnpf'
+    import Detail from '@/views/basic/dynamicModel/list/detail'
+    import { thousandsFormat } from "@/components/Generator/utils/index"
+    export default {
+        components: { Detail},
+        props: [],
+        data() {
+            return {
+                visible: false,
+                detailVisible: false,
+                loading: false,
+
+                //掩码配置
+                maskConfig: {
+                            batchId: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            code: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            name: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            namePinyin: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            mobile: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            email: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            unionid: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            organizationCode: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            organizationName: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            departmentCode: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            departmentName: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            itsmUserId: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            itsmUserName: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            itsmUserAlias: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            enterpriseWechat: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            resCode: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            resMessage: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            resVersion: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                },
+                //定位属性
+                locationScope: {
+                },
+
+            dataForm: {
+
+            },
+                        personnelTypeProps:{"label":"fullName","value":"enCode"  },
+                        genderProps:{"label":"fullName","value":"enCode"  },
+                        jobStatusProps:{"label":"fullName","value":"enCode"  },
+                        personStatusProps:{"label":"fullName","value":"enCode"  },
+                        resStatusProps:{"label":"fullName","value":"enCode"  },
+
+        }
+        },
+        computed: {},
+        watch: {},
+        created() {
+
+        },
+        mounted() {},
+        methods: {
+            toDetail(defaultValue, modelId) {
+                if (!defaultValue) return
+                getConfigData(modelId).then(res => {
+                    if (!res.data || !res.data.formData) return
+                    let formData = JSON.parse(res.data.formData)
+                    formData.popupType = 'general'
+                    this.detailVisible = true
+                    this.$nextTick(() => {
+                        this.$refs.Detail.init(formData, modelId, defaultValue)
+                    })
+                })
+            },
+            dataInfo(dataAll){
+                let _dataAll =dataAll
+                this.dataForm = _dataAll
+            },
+
+            init(id) {
+                this.dataForm.id = id || 0;
+                this.visible = true;
+                this.$nextTick(() => {
+                    if(this.dataForm.id){
+                        this.loading = true
+                        request({
+                            url: '/api/jnpf/MdmUserDetail/detail/'+this.dataForm.id,
+                            method: 'get'
+                        }).then(res => {
+                            this.dataInfo(res.data)
+                            this.loading = false
+                        })
+                    }
+
+                })
+            },
+        },
+    }
+
+</script>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/views/governmentCloud/mdm/mdmuserdetail/columnList.js


+ 719 - 0
src/views/governmentCloud/mdm/mdmuserdetail/form.vue

@@ -0,0 +1,719 @@
+
+
+
+    <template>
+        <el-dialog :title="!dataForm.id ? '新建' :'编辑'"
+                   :close-on-click-modal="false" append-to-body
+                   :visible.sync="visible" class="JNPF-dialog JNPF-dialog_center" lock-scroll
+                   width="600px">
+        <el-row :gutter="15" class="">
+    <el-form ref="formRef" :model="dataForm" :rules="dataRule" size="small" label-width="150px" label-position="right" >
+    <template v-if="!loading">
+        <!-- 具体表单 -->
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="批次ID"              align="left"
+ prop="batchId" >
+        <JnpfInput   v-model="dataForm.batchId" @change="changeData('batchId',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.batchId">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="人员编码"              align="left"
+ prop="code" >
+        <JnpfInput   v-model="dataForm.code" @change="changeData('code',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.code">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="姓名"              align="left"
+ prop="name" >
+        <JnpfInput   v-model="dataForm.name" @change="changeData('name',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.name">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="账户"              align="left"
+ prop="namePinyin" >
+        <JnpfInput   v-model="dataForm.namePinyin" @change="changeData('namePinyin',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.namePinyin">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="人员类型"              align="left"
+ prop="personnelType" >
+        <JnpfSelect   v-model="dataForm.personnelType" @change="changeData('personnelType',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="personnelTypeOptions" :props="personnelTypeProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="性别"              align="left"
+ prop="gender" >
+        <JnpfSelect   v-model="dataForm.gender" @change="changeData('gender',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="genderOptions" :props="genderProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="联系电话"              align="left"
+ prop="mobile" >
+        <JnpfInput   v-model="dataForm.mobile" @change="changeData('mobile',-1)" 
+ placeholder="请输入"  :maxlength="11"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.mobile">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="邮箱"              align="left"
+ prop="email" >
+        <JnpfInput   v-model="dataForm.email" @change="changeData('email',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.email">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="岗位状态"              align="left"
+ prop="jobStatus" >
+        <JnpfSelect   v-model="dataForm.jobStatus" @change="changeData('jobStatus',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="jobStatusOptions" :props="jobStatusProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="人员状态"              align="left"
+ prop="personStatus" >
+        <JnpfSelect   v-model="dataForm.personStatus" @change="changeData('personStatus',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="personStatusOptions" :props="personStatusProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="微信unionid"              align="left"
+ prop="unionid" >
+        <JnpfInput   v-model="dataForm.unionid" @change="changeData('unionid',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.unionid">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="所属组织编码"              align="left"
+ prop="organizationCode" >
+        <JnpfInput   v-model="dataForm.organizationCode" @change="changeData('organizationCode',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.organizationCode">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="所属组织名称"              align="left"
+ prop="organizationName" >
+        <JnpfInput   v-model="dataForm.organizationName" @change="changeData('organizationName',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.organizationName">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="部门编码"              align="left"
+ prop="departmentCode" >
+        <JnpfInput   v-model="dataForm.departmentCode" @change="changeData('departmentCode',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.departmentCode">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="部门名称"              align="left"
+ prop="departmentName" >
+        <JnpfInput   v-model="dataForm.departmentName" @change="changeData('departmentName',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.departmentName">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="Itsm用户id"              align="left"
+ prop="itsmUserId" >
+        <JnpfInput   v-model="dataForm.itsmUserId" @change="changeData('itsmUserId',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.itsmUserId">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="itsm用户姓名"              align="left"
+ prop="itsmUserName" >
+        <JnpfInput   v-model="dataForm.itsmUserName" @change="changeData('itsmUserName',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.itsmUserName">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="itsm用户别名"              align="left"
+ prop="itsmUserAlias" >
+        <JnpfInput   v-model="dataForm.itsmUserAlias" @change="changeData('itsmUserAlias',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.itsmUserAlias">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="企微账号"              align="left"
+ prop="enterpriseWechat" >
+        <JnpfInput   v-model="dataForm.enterpriseWechat" @change="changeData('enterpriseWechat',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.enterpriseWechat">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="响应数据编码"              align="left"
+ prop="resCode" >
+        <JnpfInput   v-model="dataForm.resCode" @change="changeData('resCode',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.resCode">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="响应状态"              align="left"
+ prop="resStatus" >
+        <JnpfSelect   v-model="dataForm.resStatus" @change="changeData('resStatus',-1)" 
+ placeholder="请选择"  clearable  :style='{"width":"100%"}' :options="resStatusOptions" :props="resStatusProps" >
+    </JnpfSelect>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="响应数据描述"              align="left"
+ prop="resMessage" >
+        <JnpfInput   v-model="dataForm.resMessage" @change="changeData('resMessage',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.resMessage">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <el-col :span="24" >
+        <jnpf-form-tip-item
+ label="响应数据版本"              align="left"
+ prop="resVersion" >
+        <JnpfInput   v-model="dataForm.resVersion" @change="changeData('resVersion',-1)" 
+ placeholder="请输入"  clearable  :style='{"width":"100%"}' :maskConfig = "maskConfig.resVersion">
+    </JnpfInput>
+    </jnpf-form-tip-item>
+        </el-col>
+        <!-- 表单结束 -->
+    </template>
+    </el-form>
+    <SelectDialog v-if="selectDialogVisible" :config="currTableConf" :formData="dataForm"
+                  ref="selectDialog" @select="addForSelect" @close="closeForSelect"/>
+    </el-row>
+    <span slot="footer" class="dialog-footer">
+                    <div class="upAndDown-button" v-if="dataForm.id">
+                <el-button @click="prev" :disabled='prevDis'>
+                  {{'上一条'}}
+                </el-button>
+                <el-button @click="next" :disabled='nextDis'>
+                  {{'下一条'}}
+                </el-button>
+              </div>
+                <el-button type="primary" @click="dataFormSubmit(2)" :loading="continueBtnLoading">
+            {{!dataForm.id ?'确定并新增':'确定并继续'}}</el-button>
+              <el-button @click="visible = false"> 取 消</el-button>
+              <el-button type="primary" @click="dataFormSubmit()" :loading="btnLoading"> 确 定</el-button>
+        </span>
+    </el-dialog>
+    </template>
+
+
+<script>
+    import request from '@/utils/request'
+    import {mapGetters} from "vuex";
+    import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
+    import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
+    import { getDefaultCurrentValueUserId } from '@/api/permission/user'
+    import { getDefaultCurrentValueDepartmentId } from '@/api/permission/organize'
+    import { getDateDay, getLaterData, getBeforeData, getBeforeTime, getLaterTime } from '@/components/Generator/utils/index.js'
+    import { thousandsFormat } from "@/components/Generator/utils/index"
+    import SelectDialog from '@/components/SelectDialog'
+
+    export default {
+        components: { SelectDialog },
+        props: [],
+        data() {
+        return {
+            dataFormSubmitType: 0,
+            continueBtnLoading: false,
+            index: 0,
+            prevDis: false,
+            nextDis: false,
+            allList: [],
+            visible: false,
+            loading: false,
+            btnLoading: false,
+            formRef: 'formRef',
+            setting:{},
+            eventType: '',
+            userBoxVisible:false,
+            selectDialogVisible: false,
+            currTableConf:{},
+            dataValueAll:{},
+            addTableConf:{
+            },
+            //可选范围默认值
+            ableAll:{
+            },
+            tableRows:{
+        },
+            Vmodel:"",
+            currVmodel:"",
+            dataForm: {
+                                batchId : undefined,
+                                code : undefined,
+                                name : undefined,
+                                namePinyin : undefined,
+                                    personnelType : '0',
+                                    gender : undefined,
+                                mobile : undefined,
+                                email : undefined,
+                                    jobStatus : '1',
+                                    personStatus : '1',
+                                unionid : undefined,
+                                organizationCode : undefined,
+                                organizationName : undefined,
+                                departmentCode : undefined,
+                                departmentName : undefined,
+                                itsmUserId : undefined,
+                                itsmUserName : undefined,
+                                itsmUserAlias : undefined,
+                                enterpriseWechat : undefined,
+                                resCode : undefined,
+                                    resStatus : undefined,
+                                resMessage : undefined,
+                                resVersion : undefined,
+            },
+            tableRequiredData: {},
+            dataRule:
+            {
+                            mobile: [
+                                    {
+                                        pattern: /^1[3456789]\d{9}$/,
+                                        message: '请输入正确的手机号码',
+                                        trigger: 'blur'
+                                    },
+                        ],
+                            email: [
+                                    {
+                                        pattern: /^[a-z0-9]+([._\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/,
+                                        message: '请输入正确的邮箱',
+                                        trigger: 'blur'
+                                    },
+                        ],
+            },
+                    personnelTypeOptions:[],
+                            personnelTypeProps:{"label":"fullName","value":"enCode"  },
+                    genderOptions:[],
+                            genderProps:{"label":"fullName","value":"enCode"  },
+                    jobStatusOptions:[],
+                            jobStatusProps:{"label":"fullName","value":"enCode"  },
+                    personStatusOptions:[],
+                            personStatusProps:{"label":"fullName","value":"enCode"  },
+                    resStatusOptions:[],
+                            resStatusProps:{"label":"fullName","value":"enCode"  },
+            childIndex:-1,
+            isEdit:false,
+            interfaceRes: {
+                        batchId:[] ,
+                        code:[] ,
+                        name:[] ,
+                        namePinyin:[] ,
+                        personnelType:[] ,
+                        gender:[] ,
+                        mobile:[] ,
+                        email:[] ,
+                        jobStatus:[] ,
+                        personStatus:[] ,
+                        unionid:[] ,
+                        organizationCode:[] ,
+                        organizationName:[] ,
+                        departmentCode:[] ,
+                        departmentName:[] ,
+                        itsmUserId:[] ,
+                        itsmUserName:[] ,
+                        itsmUserAlias:[] ,
+                        enterpriseWechat:[] ,
+                        resCode:[] ,
+                        resStatus:[] ,
+                        resMessage:[] ,
+                        resVersion:[] ,
+        },
+            //掩码配置
+            maskConfig: {
+                            batchId: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            code: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            name: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            namePinyin: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            mobile: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            email: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            unionid: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            organizationCode: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            organizationName: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            departmentCode: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            departmentName: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            itsmUserId: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            itsmUserName: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            itsmUserAlias: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            enterpriseWechat: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            resCode: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            resMessage: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                            resVersion: {"prefixType":1,"useUnrealMask":false,"maskType":1,"unrealMaskLength":1,"prefixLimit":0,"suffixLimit":0,"filler":"*","prefixSpecifyChar":"","suffixType":1,"ignoreChar":"","suffixSpecifyChar":""} ,
+                },
+            //定位属性
+            locationScope: {
+                },
+            }
+        },
+        computed: {
+            ...mapGetters(['userInfo']),
+
+
+        },
+        watch: {},
+        created() {
+            this.dataAll()
+            this.initDefaultData()
+            this.dataValueAll = JSON.parse(JSON.stringify(this.dataForm))
+        },
+        mounted() {},
+        methods: {
+            prev() {
+                this.index--
+                if (this.index === 0) {
+                    this.prevDis = true
+                }
+                this.nextDis = false
+                for (let index = 0; index < this.allList.length; index++) {
+                    const element = this.allList[index];
+                    if (this.index == index) {
+                        this.getInfo(element.id)
+                    }
+                }
+            },
+            next() {
+                this.index++
+                if (this.index === this.allList.length - 1) {
+                    this.nextDis = true
+                }
+                this.prevDis = false
+                for (let index = 0; index < this.allList.length; index++) {
+                    const element = this.allList[index];
+                    if (this.index == index) {
+                        this.getInfo(element.id)
+                    }
+                }
+            },
+            getInfo(id) {
+                request({
+                    url: '/api/jnpf/MdmUserDetail/'+ id,
+                    method: 'get'
+                }).then(res => {
+                    this.dataInfo(res.data)
+                });
+            },
+            goBack() {
+                this.visible = false
+                this.$emit('refreshDataList', true)
+            },
+            changeData(model, index) {
+                this.isEdit = false
+                this.childIndex = index
+                let modelAll = model.split("-");
+                let faceMode = "";
+                for (let i = 0; i < modelAll.length; i++) {
+                    faceMode += modelAll[i];
+                }
+                for (let key in this.interfaceRes) {
+                    if (key != faceMode) {
+                        let faceReList = this.interfaceRes[key]
+                        for (let i = 0; i < faceReList.length; i++) {
+                            if (faceReList[i].relationField == model) {
+                                let options = 'get' + key + 'Options';
+                                if(this[options]){
+                                    this[options]()
+                                }
+                                this.changeData(key, index)
+                            }
+                        }
+                    }
+                }
+            },
+            changeDataFormData(type, data, model,index,defaultValue,edit) {
+                if(!edit) {
+                    if (type == 2) {
+                        for (let i = 0; i < this.dataForm[data].length; i++) {
+                            if (index == -1) {
+                                this.dataForm[data][i][model] = defaultValue
+                            } else if (index == i) {
+                                this.dataForm[data][i][model] = defaultValue
+                            }
+                        }
+                    } else {
+                        this.dataForm[data] = defaultValue
+                    }
+                }
+            },
+            dataAll(){
+                        this.getpersonnelTypeOptions();
+                        this.getgenderOptions();
+                        this.getjobStatusOptions();
+                        this.getpersonStatusOptions();
+                        this.getresStatusOptions();
+            },
+                    getpersonnelTypeOptions() {
+                    getDictionaryDataSelector('607212063659399237').then(res => {
+                        this.personnelTypeOptions = res.data.list
+                    })
+                },
+                    getgenderOptions() {
+                    getDictionaryDataSelector('607213122666633285').then(res => {
+                        this.genderOptions = res.data.list
+                    })
+                },
+                    getjobStatusOptions() {
+                    getDictionaryDataSelector('607213299192305733').then(res => {
+                        this.jobStatusOptions = res.data.list
+                    })
+                },
+                    getpersonStatusOptions() {
+                    getDictionaryDataSelector('607213463801960517').then(res => {
+                        this.personStatusOptions = res.data.list
+                    })
+                },
+                    getresStatusOptions() {
+                    getDictionaryDataSelector('607214598059202629').then(res => {
+                        this.resStatusOptions = res.data.list
+                    })
+                },
+            clearData(){
+                this.dataForm = JSON.parse(JSON.stringify(this.dataValueAll))
+            },
+            init(id,isDetail,allList,leftTreeActiveInfo) {
+                this.prevDis = false
+                this.nextDis = false
+                this.allList = allList || []
+                if (allList.length) {
+                    this.index = this.allList.findIndex(item => item.id === id)
+                    if (this.index == 0) {
+                        this.prevDis = true
+                    }
+                    if (this.index == this.allList.length - 1) {
+                        this.nextDis = true
+                    }
+                } else {
+                    this.prevDis = true
+                    this.nextDis = true
+                }
+                this.dataForm.id = id || 0;
+                this.visible = true;
+                this.$nextTick(() => {
+                    if(this.dataForm.id){
+                        this.loading = true
+                        request({
+                            url: '/api/jnpf/MdmUserDetail/'+this.dataForm.id,
+                            method: 'get'
+                        }).then(res => {
+                            this.dataInfo(res.data)
+                            this.loading = false
+                        });
+                    }else{
+                        this.clearData()
+                        this.initDefaultData()
+                        this.dataForm = { ...this.dataForm, ...leftTreeActiveInfo }
+                    }
+                });
+                this.$store.commit('generator/UPDATE_RELATION_DATA', {})
+            },
+            //初始化默认数据
+            initDefaultData() {
+
+            },
+            // 表单提交
+            dataFormSubmit(type) {
+                this.dataFormSubmitType = type ? type : 0
+                this.$refs['formRef'].validate((valid) => {
+                    if (valid) {
+                        this.request()
+                    }
+                })
+            },
+            request() {
+                let _data =this.dataList()
+                if (this.dataFormSubmitType == 2) {
+                    this.continueBtnLoading = true
+                } else {
+                    this.btnLoading = true
+                }
+                if (!this.dataForm.id) {
+                    request({
+                        url: '/api/jnpf/MdmUserDetail',
+                        method: 'post',
+                        data: _data
+                    }).then((res) => {
+                        this.$message({
+                            message: res.msg,
+                            type: 'success',
+                            duration: 1000,
+                            onClose: () => {
+                                if (this.dataFormSubmitType == 2) {
+                                    this.$nextTick(() => {
+                                        this.clearData()
+                                        this.initDefaultData()
+                                    })
+                                    this.continueBtnLoading = false
+                                    return
+                                }
+                                this.visible = false
+                                this.btnLoading = false
+                                this.$emit('refresh', true)
+                            }
+                        })
+                    }).catch(()=>{
+                        this.btnLoading = false
+                        this.continueBtnLoading = false
+                    })
+                }else{
+                    request({
+                        url: '/api/jnpf/MdmUserDetail/'+this.dataForm.id,
+                        method: 'PUT',
+                        data: _data
+                    }).then((res) => {
+                        this.$message({
+                            message: res.msg,
+                            type: 'success',
+                            duration: 1000,
+                            onClose: () => {
+                                if (this.dataFormSubmitType == 2) return this.continueBtnLoading = false
+                                this.visible = false
+                                this.btnLoading = false
+                                this.$emit('refresh', true)
+                            }
+                        })
+                    }).catch(()=>{
+                        this.btnLoading = false
+                        this.continueBtnLoading = false
+                    })
+                }
+            },
+            openSelectDialog(key,value) {
+                this.currTableConf=this.addTableConf[key + value]
+                this.currVmodel=key
+                this.selectDialogVisible = true
+                this.$nextTick(() => {
+                    this.$refs.selectDialog.init()
+                })
+            },
+            addForSelect(data) {
+                this.closeForSelect()
+                for (let i = 0; i < data.length; i++) {
+                    let t = data[i]
+                    if(this['get'+this.currVmodel]){
+                        this['get'+this.currVmodel](t,true)
+                    }
+                }
+            },
+            closeForSelect() {
+                this.selectDialogVisible = false
+            },
+            dateTime(timeRule, timeType, timeTarget, timeValueData, dataValue) {
+                let timeDataValue = null;
+                let timeValue = Number(timeValueData)
+                if (timeRule) {
+                    if (timeType == 1) {
+                        timeDataValue = timeValue
+                    } else if (timeType == 2) {
+                        timeDataValue = dataValue
+                    } else if (timeType == 3) {
+                        timeDataValue = new Date().getTime()
+                    } else if (timeType == 4) {
+                        let previousDate = '';
+                        if (timeTarget == 1 || timeTarget == 2) {
+                            previousDate = getDateDay(timeTarget, timeType, timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else if (timeTarget == 3) {
+                            previousDate = getBeforeData(timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else {
+                            timeDataValue = getBeforeTime(timeTarget, timeValue).getTime()
+                        }
+                    } else if (timeType == 5) {
+                        let previousDate = '';
+                        if (timeTarget == 1 || timeTarget == 2) {
+                            previousDate = getDateDay(timeTarget, timeType, timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else if (timeTarget == 3) {
+                            previousDate = getLaterData(timeValue)
+                            timeDataValue = new Date(previousDate).getTime()
+                        } else {
+                            timeDataValue = getLaterTime(timeTarget, timeValue).getTime()
+                        }
+                    }
+                }
+                return timeDataValue;
+            },
+            time(timeRule, timeType, timeTarget, timeValue, formatType, dataValue) {
+                let format = formatType == 'HH:mm' ? 'HH:mm:00' : formatType
+                let timeDataValue = null
+                if (timeRule) {
+                    if (timeType == 1) {
+                        timeDataValue = timeValue || '00:00:00'
+                        if (timeDataValue.split(':').length == 3) {
+                            timeDataValue = timeDataValue
+                        } else {
+                            timeDataValue = timeDataValue + ':00'
+                        }
+                    } else if (timeType == 2) {
+                        timeDataValue = dataValue
+                    } else if (timeType == 3) {
+                        timeDataValue = this.jnpf.toDate(new Date(), format)
+                    } else if (timeType == 4) {
+                        let previousDate = '';
+                        previousDate = getBeforeTime(timeTarget, timeValue)
+                        timeDataValue = this.jnpf.toDate(previousDate, format)
+                    } else if (timeType == 5) {
+                        let previousDate = '';
+                        previousDate = getLaterTime(timeTarget, timeValue)
+                        timeDataValue = this.jnpf.toDate(previousDate, format)
+                    }
+                }
+                return timeDataValue;
+            },
+            dataList(){
+                var _data = this.dataForm;
+                return _data;
+            },
+            dataInfo(dataAll){
+                let _dataAll =dataAll
+                this.dataForm = _dataAll
+                this.isEdit = true
+                this.dataAll()
+                this.childIndex=-1
+            },
+        },
+    }
+
+</script>

+ 672 - 0
src/views/governmentCloud/mdm/mdmuserdetail/index.vue

@@ -0,0 +1,672 @@
+<template>
+    <div class="JNPF-common-layout">
+        <div class="JNPF-common-layout-center">
+            <el-row class="JNPF-common-search-box" :gutter="16">
+                <el-form @submit.native.prevent>
+                    <el-col :span="6">
+                        <el-form-item label="批次ID">
+                            <el-input v-model="query.batchId" placeholder="请输入" clearable>
+                            </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="姓名">
+                            <el-input v-model="query.name" placeholder="请输入" clearable> </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="联系电话">
+                            <el-input v-model="query.mobile" placeholder="请输入" clearable>
+                            </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <template v-if="showAll">
+                        <el-col :span="6">
+                            <el-form-item label="人员编码">
+                                <el-input v-model="query.code" placeholder="请输入" clearable>
+                                </el-input>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="6">
+                            <el-form-item label="响应状态">
+                                <JnpfSelect v-model="query.resStatus" placeholder="请选择" clearable
+                                    :options="resStatusOptions" :props="resStatusProps" multiple>
+                                </JnpfSelect>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="6">
+                            <el-form-item label="响应数据版本">
+                                <el-input v-model="query.resVersion" placeholder="请输入" clearable>
+                                </el-input>
+                            </el-form-item>
+                        </el-col>
+                    </template>
+                    <el-col :span="6">
+                        <el-form-item>
+                            <el-button type="primary" icon="el-icon-search"
+                                @click="search()">查询</el-button>
+                            <el-button icon="el-icon-refresh-right" @click="reset()">重置</el-button>
+                            <el-button type="text" icon="el-icon-arrow-down" @click="showAll=true"
+                                v-if="!showAll">
+                                展开
+                            </el-button>
+                            <el-button type="text" icon="el-icon-arrow-up" @click="showAll=false"
+                                v-else>
+                                收起
+                            </el-button>
+                        </el-form-item>
+                    </el-col>
+                </el-form>
+            </el-row>
+            <div class="JNPF-common-layout-main JNPF-flex-main">
+                <div class="JNPF-common-head">
+                    <div>
+                    </div>
+                    <div class="JNPF-common-head-right">
+                        <el-tooltip content="高级查询" placement="top" v-if="true">
+                            <el-link icon="icon-ym icon-ym-filter JNPF-common-head-icon"
+                                :underline="false" @click="openSuperQuery()" />
+                        </el-tooltip>
+                        <el-tooltip effect="dark" :content="$t('common.refresh')" placement="top">
+                            <el-link icon="icon-ym icon-ym-Refresh JNPF-common-head-icon"
+                                :underline="false" @click="initData()" />
+                        </el-tooltip>
+                    </div>
+                </div>
+                <JNPF-table v-loading="listLoading" :data="list" @sort-change='handleTableSort'
+                    :header-cell-class-name="handleHeaderClass" :has-c="hasBatchBtn"
+                    :span-method="arraySpanMethod">
+                    <el-table-column prop="batchId" label="批次ID" align="left" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.batchId" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="code" label="人员编码" align="left" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.code" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="name" label="姓名" align="left" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.name" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="namePinyin" label="账户" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.namePinyin" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="personnelType" label="人员类型" align="left"
+                        show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="gender" label="性别" align="left" show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="mobile" label="联系电话" align="left" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.mobile" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="email" label="邮箱" align="left" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.email" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="jobStatus" label="岗位状态" align="left"
+                        show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="personStatus" label="人员状态" align="left"
+                        show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="unionid" label="微信unionid" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.unionid" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="organizationCode" label="所属组织编码" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.organizationCode" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="organizationName" label="所属组织名称" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.organizationName" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="departmentCode" label="部门编码" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.departmentCode" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="departmentName" label="部门名称" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.departmentName" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="itsmUserId" label="Itsm用户id" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.itsmUserId" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="itsmUserName" label="itsm用户姓名" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.itsmUserName" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="itsmUserAlias" label="itsm用户别名" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.itsmUserAlias" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="enterpriseWechat" label="企微账号" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.enterpriseWechat" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="resCode" label="响应数据编码" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.resCode" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="resStatus" label="响应状态" align="left"
+                        show-overflow-tooltip>
+                    </el-table-column>
+                    <el-table-column prop="resMessage" label="响应数据描述" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.resMessage" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="resVersion" label="响应数据版本" align="left"
+                        show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.resVersion" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                </JNPF-table>
+                <pagination :total="total" :page.sync="listQuery.currentPage"
+                    :limit.sync="listQuery.pageSize" @pagination="initData" />
+            </div>
+        </div>
+        <JNPF-Form v-if="formVisible" ref="JNPFForm" @refresh="refresh" />
+        <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" />
+
+        <ImportBox v-if="uploadBoxVisible" ref="UploadBox" @refresh="initData" />
+        <Detail v-if="detailVisible" ref="Detail" @refresh="detailVisible=false" />
+        <ToFormDetail v-if="toFormDetailVisible" ref="toFormDetail"
+            @close="toFormDetailVisible = false" />
+        <SuperQuery v-if="superQueryVisible" ref="SuperQuery" :columnOptions="superQueryJson"
+            @superQuery="superQuery" />
+    </div>
+</template>
+
+<script>
+import request from '@/utils/request'
+import { mapGetters } from "vuex";
+import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
+import JNPFForm from './form'
+import Detail from './Detail'
+import ExportBox from '@/components/ExportBox'
+import ToFormDetail from '@/views/basic/dynamicModel/list/detail'
+import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
+import { getConfigData } from '@/api/onlineDev/visualDev'
+import { getDefaultCurrentValueUserIdAsync } from '@/api/permission/user'
+import { getDefaultCurrentValueDepartmentIdAsync } from '@/api/permission/organize'
+import columnList from './columnList'
+import { thousandsFormat } from "@/components/Generator/utils/index"
+import SuperQuery from '@/components/SuperQuery'
+import superQueryJson from './superQueryJson'
+import { noGroupList } from '@/components/Generator/generator/comConfig'
+
+export default {
+    components: {
+        JNPFForm,
+        Detail,
+        ExportBox, ToFormDetail, SuperQuery
+    },
+    data() {
+        return {
+
+            keyword: '',
+            expandsTree: true,
+            refreshTree: true,
+            toFormDetailVisible: false,
+            hasBatchBtn: false,
+            expandObj: {},
+            columnOptions: [],
+            mergeList: [],
+            exportList: [],
+            columnList,
+
+            showAll: false,
+            superQueryVisible: false,
+            superQueryJson,
+            uploadBoxVisible: false,
+            detailVisible: false,
+            query: {
+                batchId: undefined,
+                name: undefined,
+                mobile: undefined,
+                code: undefined,
+                resStatus: undefined,
+                resVersion: undefined,
+            },
+            defListQuery: {
+                sort: 'desc',
+                sidx: '',
+            },
+            //排序默认值
+            defaultSortConfig: [],
+            treeProps: {
+                children: 'children',
+                label: 'fullName',
+                value: 'id',
+                isLeaf: 'isLeaf'
+            },
+            list: [],
+            listLoading: true,
+            multipleSelection: [],
+            total: 0,
+            queryData: {},
+            listQuery: {
+                superQueryJson: '',
+                currentPage: 1,
+                pageSize: 20,
+                sort: "",
+                sidx: "",
+            },
+            //多列排序
+            ordersList: [],
+            formVisible: false,
+            flowVisible: false,
+            flowListVisible: false,
+            flowList: [],
+            exportBoxVisible: false,
+            personnelTypeOptions: [],
+            personnelTypeProps: { "label": "fullName", "value": "enCode" },
+            genderOptions: [],
+            genderProps: { "label": "fullName", "value": "enCode" },
+            jobStatusOptions: [],
+            jobStatusProps: { "label": "fullName", "value": "enCode" },
+            personStatusOptions: [],
+            personStatusProps: { "label": "fullName", "value": "enCode" },
+            resStatusOptions: [],
+            resStatusProps: { "label": "fullName", "value": "enCode" },
+            interfaceRes: {
+            },
+            //掩码配置
+            maskConfig: {
+                batchId: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                code: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                name: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                namePinyin: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                mobile: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                email: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                unionid: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                organizationCode: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                organizationName: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                departmentCode: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                departmentName: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                itsmUserId: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                itsmUserName: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                itsmUserAlias: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                enterpriseWechat: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                resCode: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                resMessage: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                resVersion: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+            },
+        }
+    },
+    computed: {
+        ...mapGetters(['userInfo']),
+        menuId() {
+            return this.$route.meta.modelId || ''
+        }
+    },
+    created() {
+        this.getColumnList(),
+            this.initSearchDataAndListData()
+        this.getresStatusOptions();
+        this.queryData = JSON.parse(JSON.stringify(this.query))
+        this.getHasBatchBtn();
+        //排序默认值
+        this.setDefaultQuery(this.defaultSortConfig);
+    },
+    methods: {
+        getHasBatchBtn() {
+            let btnsList = []
+            this.hasBatchBtn = btnsList.some(o => ['batchRemove', 'batchPrint', 'download'].includes(o))
+        },
+
+        treeRefresh() {
+            this.keyword = ''
+            this.treeActiveId = ''
+            this.leftTreeActiveInfo = {}
+            this.$refs.treeBox.setCurrentKey(null)
+            this.getTreeView()
+        },
+
+        toDetail(defaultValue, modelId) {
+            if (!defaultValue) return
+            getConfigData(modelId).then(res => {
+                if (!res.data || !res.data.formData) return
+                let formData = JSON.parse(res.data.formData)
+                formData.popupType = 'general'
+                this.toFormDetailVisible = true
+                this.$nextTick(() => {
+                    this.$refs.toFormDetail.init(formData, modelId, defaultValue)
+                })
+            })
+        },
+        toggleTreeExpand(expands) {
+            this.refreshTree = false
+            this.expandsTree = expands
+            this.$nextTick(() => {
+                this.refreshTree = true
+                this.$nextTick(() => {
+                    this.$refs.treeBox.setCurrentKey(null)
+                })
+            })
+        },
+        filterNode(value, data) {
+            if (!value) return true;
+            return data[this.treeProps.label].indexOf(value) !== -1;
+        },
+        loadNode(node, resolve) {
+            const nodeData = node.data
+            const config = {
+                treeInterfaceId: "",
+                treeTemplateJson: []
+            }
+            if (config.treeInterfaceId) {
+                //这里是为了拿到参数中关联的字段的值,后端自行拿
+                if (config.treeTemplateJson && config.treeTemplateJson.length) {
+                    for (let i = 0; i < config.treeTemplateJson.length; i++) {
+                        const element = config.treeTemplateJson[i];
+                        element.defaultValue = nodeData[element.relationField] || ''
+                    }
+                }
+                //参数
+                let query = {
+                    paramList: config.treeTemplateJson || [],
+                }
+                //接口
+                getDataInterfaceRes(config.treeInterfaceId, query).then(res => {
+                    let data = res.data
+                    if (Array.isArray(data)) {
+                        resolve(data);
+                    } else {
+                        resolve([]);
+                    }
+                })
+            }
+        },
+        getColumnList() {
+            // 没有开启权限
+            this.columnOptions = this.transformColumnList(this.columnList)
+        },
+        transformColumnList(columnList) {
+            let list = []
+            for (let i = 0; i < columnList.length; i++) {
+                const e = columnList[i];
+                if (!e.prop.includes('-')) {
+                    list.push(e)
+                } else {
+                    let prop = e.prop.split('-')[0]
+                    let label = e.label.split('-')[0]
+                    let vModel = e.prop.split('-')[1]
+                    let newItem = {
+                        align: "center",
+                        jnpfKey: "table",
+                        prop,
+                        label,
+                        children: []
+                    }
+                    e.vModel = vModel
+                    if (!this.expandObj.hasOwnProperty(`${prop}Expand`)) this.$set(this.expandObj, `${prop}Expand`, false)
+                    if (!list.some(o => o.prop === prop)) list.push(newItem)
+                    for (let i = 0; i < list.length; i++) {
+                        if (list[i].prop === prop) {
+                            list[i].children.push(e)
+                            break
+                        }
+                    }
+                }
+            }
+            this.getMergeList(list)
+            this.getExportList(list)
+            return list
+        },
+        arraySpanMethod({ column }) {
+            for (let i = 0; i < this.mergeList.length; i++) {
+                if (column.property == this.mergeList[i].prop) {
+                    return [this.mergeList[i].rowspan, this.mergeList[i].colspan]
+                }
+            }
+        },
+        getMergeList(list) {
+            let newList = JSON.parse(JSON.stringify(list))
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    let child = {
+                        prop: item.prop + '-child-first'
+                    }
+                    item.children.unshift(child)
+                }
+            })
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    item.children.forEach((child, index) => {
+                        if (index == 0) {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 1,
+                                colspan: item.children.length
+                            })
+                        } else {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 0,
+                                colspan: 0
+                            })
+                        }
+                    })
+                } else {
+                    this.mergeList.push({
+                        prop: item.prop,
+                        rowspan: 1,
+                        colspan: 1
+                    })
+                }
+            })
+        },
+        getExportList(list) {
+            let exportList = []
+            for (let i = 0; i < list.length; i++) {
+                if (list[i].jnpfKey === 'table') {
+                    for (let j = 0; j < list[i].children.length; j++) {
+                        exportList.push(list[i].children[j])
+                    }
+                } else {
+                    exportList.push(list[i])
+                }
+            }
+            this.exportList = exportList.filter(o => !noGroupList.includes(o.__config__.jnpfKey))
+        },
+        getresStatusOptions() {
+            getDictionaryDataSelector('607214598059202629').then(res => {
+                this.resStatusOptions = res.data.list
+            })
+        },
+        goDetail(id) {
+            this.detailVisible = true
+            this.$nextTick(() => {
+                this.$refs.Detail.init(id)
+            })
+        },
+        sortChange({ column, prop, order }) {
+            this.listQuery.sort = order == 'ascending' ? 'asc' : 'desc'
+            this.listQuery.sidx = !order ? '' : prop
+            this.initData()
+        },
+        async initSearchDataAndListData() {
+            await this.initSearchData()
+            this.initData()
+        },
+        //初始化查询的默认数据
+        async initSearchData() {
+        },
+        initData() {
+            // this.queryData = JSON.parse(JSON.stringify(this.query))导致重置失效
+            this.listLoading = true;
+            let _query = {
+                ...this.listQuery,
+                ...this.query,
+                ...this.defListQuery,
+                keyword: this.keyword,
+                dataType: 0,
+                menuId: this.menuId,
+                moduleId: '607243845716940933',
+                type: 1,
+            };
+            request({
+                url: `/api/jnpf/MdmUserDetail/getList`,
+                method: 'post',
+                data: _query
+            }).then(res => {
+                var _list = [];
+                for (let i = 0; i < res.data.list.length; i++) {
+                    let _data = res.data.list[i];
+                    _list.push(_data)
+                }
+                this.list = _list.map(o => ({
+                    ...o,
+                    ...this.expandObj,
+                }))
+                this.total = res.data.pagination.total
+                this.listLoading = false
+            })
+        },
+        handleDel(id) {
+            this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+                type: 'warning'
+            }).then(() => {
+                request({
+                    url: `/api/jnpf/MdmUserDetail/${id}`,
+                    method: 'DELETE'
+                }).then(res => {
+                    this.$message({
+                        type: 'success',
+                        message: res.msg,
+                        onClose: () => {
+                            this.initData()
+                        }
+                    });
+                })
+            }).catch(() => {
+            });
+        },
+        handelUpload() {
+            this.uploadBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.UploadBox.init("", "jnpf/MdmUserDetail", 0, this.flowList)
+            })
+        },
+        openSuperQuery() {
+            this.superQueryVisible = true
+            this.$nextTick(() => {
+                this.$refs.SuperQuery.init()
+            })
+        },
+        superQuery(queryJson) {
+            this.listQuery.superQueryJson = queryJson
+            this.listQuery.currentPage = 1
+            this.initData()
+        },
+        addOrUpdateHandle(row, isDetail) {
+            let id = row ? row.id : ""
+            this.formVisible = true
+            if (!this.treeActiveId) {
+                this.leftTreeActiveInfo = {}
+            }
+            this.$nextTick(() => {
+                this.$refs.JNPFForm.init(id, isDetail, this.list, this.leftTreeActiveInfo)
+            })
+        },
+        exportData() {
+            this.exportBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.ExportBox.init(this.exportList, this.multipleSelection)
+            })
+        },
+        download(data) {
+            let query = { ...data, ...this.listQuery, ...this.query, menuId: this.menuId }
+            request({
+                url: `/api/jnpf/MdmUserDetail/Actions/Export`,
+                method: 'post',
+                data: query
+            }).then(res => {
+                if (!res.data.url) return
+                this.jnpf.downloadFile(res.data.url)
+                this.$refs.ExportBox.visible = false
+                this.exportBoxVisible = false
+            })
+        },
+        search() {
+            this.listQuery.currentPage = 1
+            this.listQuery.pageSize = 20
+            this.initData()
+        },
+        refresh(isrRefresh) {
+            this.formVisible = false
+            if (isrRefresh) this.reset()
+        },
+        reset() {
+            this.query = JSON.parse(JSON.stringify(this.queryData))
+            this.search()
+        },
+        colseFlow(isrRefresh) {
+            this.flowVisible = false
+            if (isrRefresh) this.reset()
+        },
+
+        //以下排序相关方法
+        setDefaultQuery(defaultSortList) {
+            const defaultSortConfig = (defaultSortList || []).map(o =>
+                (o.sort === 'desc' ? '-' : '') + o.field);
+            this.defListQuery.sidx = defaultSortConfig.join(',')
+        },
+        handleHeaderClass({ column }) {
+            column.order = column.multiOrder
+        },
+        handleTableSort({ column }) {
+            if (column.sortable !== 'custom') return
+            column.multiOrder = column.multiOrder === 'descending' ? 'ascending' : column.multiOrder ? '' : 'descending';
+            this.handleOrderChange(column.property, column.multiOrder)
+        },
+        handleOrderChange(orderColumn, orderState) {
+            let index = this.ordersList.findIndex(e => e.field === orderColumn);
+            let sort = orderState === 'ascending' ? 'asc' : orderState === 'descending' ? 'desc' : '';
+            if (index > -1) {
+                this.ordersList[index].sort = orderState;
+            } else {
+                this.ordersList.push({ field: orderColumn, sort });
+            }
+            this.ordersList = this.ordersList.filter(e => e.sort);
+            this.ordersList.length ? this.setDefaultQuery(this.ordersList) : this.setDefaultQuery(this.defaultSortConfig)
+            this.initData()
+        },
+        //以上排序相关方法
+    }
+}
+</script>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/views/governmentCloud/mdm/mdmuserdetail/superQueryJson.js


+ 104 - 0
src/views/governmentCloud/officialAccount/mpActivityApi/Detail.vue

@@ -0,0 +1,104 @@
+<template>
+    <el-dialog title="详情" :close-on-click-modal="false" append-to-body :visible.sync="visible"
+        class="JNPF-dialog JNPF-dialog_center" lock-scroll width="600px">
+        <el-row :gutter="15" class="">
+            <el-form ref="formRef" :model="dataForm" size="small" label-width="100px"
+                label-position="right">
+                <template v-if="!loading">
+                    <el-col :span="24">
+                        <jnpf-form-tip-item label="名称" prop="name">
+                            <JnpfInput v-model="dataForm.name" placeholder="请输入" disabled detailed
+                                clearable :style='{"width":"100%"}' :maskConfig="maskConfig.name">
+                            </JnpfInput>
+                        </jnpf-form-tip-item>
+                    </el-col>
+                    <el-col :span="24">
+                        <jnpf-form-tip-item label="API" prop="api">
+                            <JnpfInput v-model="dataForm.api" placeholder="请输入" disabled detailed
+                                clearable :style='{"width":"100%"}' :maskConfig="maskConfig.api">
+                            </JnpfInput>
+                        </jnpf-form-tip-item>
+                    </el-col>
+                </template>
+            </el-form>
+        </el-row>
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="visible = false"> 取 消</el-button>
+        </span>
+        <Detail v-if="detailVisible" ref="Detail" @close="detailVisible = false" />
+    </el-dialog>
+</template>
+<script>
+import request from '@/utils/request'
+
+import { getConfigData } from '@/api/onlineDev/visualDev'
+import jnpf from '@/utils/jnpf'
+import Detail from '@/views/basic/dynamicModel/list/detail'
+import { thousandsFormat } from "@/components/Generator/utils/index"
+export default {
+    components: { Detail },
+    props: [],
+    data() {
+        return {
+            visible: false,
+            detailVisible: false,
+            loading: false,
+
+            //掩码配置
+            maskConfig: {
+                name: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                api: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+            },
+            //定位属性
+            locationScope: {
+            },
+
+            dataForm: {
+
+            },
+
+        }
+    },
+    computed: {},
+    watch: {},
+    created() {
+
+    },
+    mounted() { },
+    methods: {
+        toDetail(defaultValue, modelId) {
+            if (!defaultValue) return
+            getConfigData(modelId).then(res => {
+                if (!res.data || !res.data.formData) return
+                let formData = JSON.parse(res.data.formData)
+                formData.popupType = 'general'
+                this.detailVisible = true
+                this.$nextTick(() => {
+                    this.$refs.Detail.init(formData, modelId, defaultValue)
+                })
+            })
+        },
+        dataInfo(dataAll) {
+            let _dataAll = dataAll
+            this.dataForm = _dataAll
+        },
+        init(id) {
+            this.dataForm.id = id || 0;
+            this.visible = true;
+            this.$nextTick(() => {
+                if (this.dataForm.id) {
+                    this.loading = true
+                    request({
+                        url: '/api/jnpf/MpActivityApi/detail/' + this.dataForm.id,
+                        method: 'get'
+                    }).then(res => {
+                        this.dataInfo(res.data)
+                        this.loading = false
+                    })
+                }
+            })
+        },
+    },
+}
+
+</script>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/views/governmentCloud/officialAccount/mpActivityApi/columnList.js


+ 413 - 0
src/views/governmentCloud/officialAccount/mpActivityApi/form.vue

@@ -0,0 +1,413 @@
+<template>
+    <el-dialog :title="!dataForm.id ? '新建' :'编辑'" :close-on-click-modal="false" append-to-body
+        :visible.sync="visible" class="JNPF-dialog JNPF-dialog_center" lock-scroll width="600px">
+        <el-row :gutter="15" class="">
+            <el-form ref="formRef" :model="dataForm" :rules="dataRule" size="small"
+                label-width="100px" label-position="right">
+                <template v-if="!loading">
+                    <!-- 具体表单 -->
+                    <el-col :span="24">
+                        <jnpf-form-tip-item label="名称" align="left" prop="name">
+                            <JnpfInput v-model="dataForm.name" @change="changeData('name',-1)"
+                                placeholder="请输入" clearable :style='{"width":"100%"}'
+                                :maskConfig="maskConfig.name">
+                            </JnpfInput>
+                        </jnpf-form-tip-item>
+                    </el-col>
+                    <el-col :span="24">
+                        <jnpf-form-tip-item label="API" align="left" prop="api">
+                            <JnpfInput v-model="dataForm.api" @change="changeData('api',-1)"
+                                placeholder="请输入" clearable :style='{"width":"100%"}'
+                                :maskConfig="maskConfig.api">
+                            </JnpfInput>
+                        </jnpf-form-tip-item>
+                    </el-col>
+                    <!-- 表单结束 -->
+                </template>
+            </el-form>
+            <SelectDialog v-if="selectDialogVisible" :config="currTableConf" :formData="dataForm"
+                ref="selectDialog" @select="addForSelect" @close="closeForSelect" />
+        </el-row>
+        <span slot="footer" class="dialog-footer">
+            <div class="upAndDown-button" v-if="dataForm.id">
+                <el-button @click="prev" :disabled='prevDis'>
+                    {{'上一条'}}
+                </el-button>
+                <el-button @click="next" :disabled='nextDis'>
+                    {{'下一条'}}
+                </el-button>
+            </div>
+            <el-button type="primary" @click="dataFormSubmit(2)" :loading="continueBtnLoading">
+                {{!dataForm.id ?'确定并新增':'确定并继续'}}</el-button>
+            <el-button @click="visible = false"> 取 消</el-button>
+            <el-button type="primary" @click="dataFormSubmit()" :loading="btnLoading"> 确
+                定</el-button>
+        </span>
+    </el-dialog>
+</template>
+
+
+<script>
+import request from '@/utils/request'
+import { mapGetters } from "vuex";
+import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
+import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
+import { getDefaultCurrentValueUserId } from '@/api/permission/user'
+import { getDefaultCurrentValueDepartmentId } from '@/api/permission/organize'
+import { getDateDay, getLaterData, getBeforeData, getBeforeTime, getLaterTime } from '@/components/Generator/utils/index.js'
+import { thousandsFormat } from "@/components/Generator/utils/index"
+import SelectDialog from '@/components/SelectDialog'
+
+export default {
+    components: { SelectDialog },
+    props: [],
+    data() {
+        return {
+            dataFormSubmitType: 0,
+            continueBtnLoading: false,
+            index: 0,
+            prevDis: false,
+            nextDis: false,
+            allList: [],
+            visible: false,
+            loading: false,
+            btnLoading: false,
+            formRef: 'formRef',
+            setting: {},
+            eventType: '',
+            userBoxVisible: false,
+            selectDialogVisible: false,
+            currTableConf: {},
+            dataValueAll: {},
+            addTableConf: {
+            },
+            //可选范围默认值
+            ableAll: {
+            },
+            tableRows: {
+            },
+            Vmodel: "",
+            currVmodel: "",
+            dataForm: {
+                name: undefined,
+                api: undefined,
+            },
+            tableRequiredData: {},
+            dataRule:
+            {
+            },
+            childIndex: -1,
+            isEdit: false,
+            interfaceRes: {
+                name: [],
+                api: [],
+            },
+            //掩码配置
+            maskConfig: {
+                name: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                api: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+            },
+            //定位属性
+            locationScope: {
+            },
+        }
+    },
+    computed: {
+        ...mapGetters(['userInfo']),
+
+
+    },
+    watch: {},
+    created() {
+        this.dataAll()
+        this.initDefaultData()
+        this.dataValueAll = JSON.parse(JSON.stringify(this.dataForm))
+    },
+    mounted() { },
+    methods: {
+        prev() {
+            this.index--
+            if (this.index === 0) {
+                this.prevDis = true
+            }
+            this.nextDis = false
+            for (let index = 0; index < this.allList.length; index++) {
+                const element = this.allList[index];
+                if (this.index == index) {
+                    this.getInfo(element.id)
+                }
+            }
+        },
+        next() {
+            this.index++
+            if (this.index === this.allList.length - 1) {
+                this.nextDis = true
+            }
+            this.prevDis = false
+            for (let index = 0; index < this.allList.length; index++) {
+                const element = this.allList[index];
+                if (this.index == index) {
+                    this.getInfo(element.id)
+                }
+            }
+        },
+        getInfo(id) {
+            request({
+                url: '/api/jnpf/MpActivityApi/' + id,
+                method: 'get'
+            }).then(res => {
+                this.dataInfo(res.data)
+            });
+        },
+        goBack() {
+            this.visible = false
+            this.$emit('refreshDataList', true)
+        },
+        changeData(model, index) {
+            this.isEdit = false
+            this.childIndex = index
+            let modelAll = model.split("-");
+            let faceMode = "";
+            for (let i = 0; i < modelAll.length; i++) {
+                faceMode += modelAll[i];
+            }
+            for (let key in this.interfaceRes) {
+                if (key != faceMode) {
+                    let faceReList = this.interfaceRes[key]
+                    for (let i = 0; i < faceReList.length; i++) {
+                        if (faceReList[i].relationField == model) {
+                            let options = 'get' + key + 'Options';
+                            if (this[options]) {
+                                this[options]()
+                            }
+                            this.changeData(key, index)
+                        }
+                    }
+                }
+            }
+        },
+        changeDataFormData(type, data, model, index, defaultValue, edit) {
+            if (!edit) {
+                if (type == 2) {
+                    for (let i = 0; i < this.dataForm[data].length; i++) {
+                        if (index == -1) {
+                            this.dataForm[data][i][model] = defaultValue
+                        } else if (index == i) {
+                            this.dataForm[data][i][model] = defaultValue
+                        }
+                    }
+                } else {
+                    this.dataForm[data] = defaultValue
+                }
+            }
+        },
+        dataAll() {
+        },
+        clearData() {
+            this.dataForm = JSON.parse(JSON.stringify(this.dataValueAll))
+        },
+        init(id, isDetail, allList, leftTreeActiveInfo) {
+            this.prevDis = false
+            this.nextDis = false
+            this.allList = allList || []
+            if (allList.length) {
+                this.index = this.allList.findIndex(item => item.id === id)
+                if (this.index == 0) {
+                    this.prevDis = true
+                }
+                if (this.index == this.allList.length - 1) {
+                    this.nextDis = true
+                }
+            } else {
+                this.prevDis = true
+                this.nextDis = true
+            }
+            this.dataForm.id = id || 0;
+            this.visible = true;
+            this.$nextTick(() => {
+                if (this.dataForm.id) {
+                    this.loading = true
+                    request({
+                        url: '/api/jnpf/MpActivityApi/' + this.dataForm.id,
+                        method: 'get'
+                    }).then(res => {
+                        this.dataInfo(res.data)
+                        this.loading = false
+                    });
+                } else {
+                    this.clearData()
+                    this.initDefaultData()
+                    this.dataForm = { ...this.dataForm, ...leftTreeActiveInfo }
+                }
+            });
+            this.$store.commit('generator/UPDATE_RELATION_DATA', {})
+        },
+        //初始化默认数据
+        initDefaultData() {
+
+        },
+        // 表单提交
+        dataFormSubmit(type) {
+            this.dataFormSubmitType = type ? type : 0
+            this.$refs['formRef'].validate((valid) => {
+                if (valid) {
+                    this.request()
+                }
+            })
+        },
+        request() {
+            let _data = this.dataList()
+            if (this.dataFormSubmitType == 2) {
+                this.continueBtnLoading = true
+            } else {
+                this.btnLoading = true
+            }
+            if (!this.dataForm.id) {
+                request({
+                    url: '/api/jnpf/MpActivityApi',
+                    method: 'post',
+                    data: _data
+                }).then((res) => {
+                    this.$message({
+                        message: res.msg,
+                        type: 'success',
+                        duration: 1000,
+                        onClose: () => {
+                            if (this.dataFormSubmitType == 2) {
+                                this.$nextTick(() => {
+                                    this.clearData()
+                                    this.initDefaultData()
+                                })
+                                this.continueBtnLoading = false
+                                return
+                            }
+                            this.visible = false
+                            this.btnLoading = false
+                            this.$emit('refresh', true)
+                        }
+                    })
+                }).catch(() => {
+                    this.btnLoading = false
+                    this.continueBtnLoading = false
+                })
+            } else {
+                request({
+                    url: '/api/jnpf/MpActivityApi/' + this.dataForm.id,
+                    method: 'PUT',
+                    data: _data
+                }).then((res) => {
+                    this.$message({
+                        message: res.msg,
+                        type: 'success',
+                        duration: 1000,
+                        onClose: () => {
+                            if (this.dataFormSubmitType == 2) return this.continueBtnLoading = false
+                            this.visible = false
+                            this.btnLoading = false
+                            this.$emit('refresh', true)
+                        }
+                    })
+                }).catch(() => {
+                    this.btnLoading = false
+                    this.continueBtnLoading = false
+                })
+            }
+        },
+        openSelectDialog(key, value) {
+            this.currTableConf = this.addTableConf[key + value]
+            this.currVmodel = key
+            this.selectDialogVisible = true
+            this.$nextTick(() => {
+                this.$refs.selectDialog.init()
+            })
+        },
+        addForSelect(data) {
+            this.closeForSelect()
+            for (let i = 0; i < data.length; i++) {
+                let t = data[i]
+                if (this['get' + this.currVmodel]) {
+                    this['get' + this.currVmodel](t, true)
+                }
+            }
+        },
+        closeForSelect() {
+            this.selectDialogVisible = false
+        },
+        dateTime(timeRule, timeType, timeTarget, timeValueData, dataValue) {
+            let timeDataValue = null;
+            let timeValue = Number(timeValueData)
+            if (timeRule) {
+                if (timeType == 1) {
+                    timeDataValue = timeValue
+                } else if (timeType == 2) {
+                    timeDataValue = dataValue
+                } else if (timeType == 3) {
+                    timeDataValue = new Date().getTime()
+                } else if (timeType == 4) {
+                    let previousDate = '';
+                    if (timeTarget == 1 || timeTarget == 2) {
+                        previousDate = getDateDay(timeTarget, timeType, timeValue)
+                        timeDataValue = new Date(previousDate).getTime()
+                    } else if (timeTarget == 3) {
+                        previousDate = getBeforeData(timeValue)
+                        timeDataValue = new Date(previousDate).getTime()
+                    } else {
+                        timeDataValue = getBeforeTime(timeTarget, timeValue).getTime()
+                    }
+                } else if (timeType == 5) {
+                    let previousDate = '';
+                    if (timeTarget == 1 || timeTarget == 2) {
+                        previousDate = getDateDay(timeTarget, timeType, timeValue)
+                        timeDataValue = new Date(previousDate).getTime()
+                    } else if (timeTarget == 3) {
+                        previousDate = getLaterData(timeValue)
+                        timeDataValue = new Date(previousDate).getTime()
+                    } else {
+                        timeDataValue = getLaterTime(timeTarget, timeValue).getTime()
+                    }
+                }
+            }
+            return timeDataValue;
+        },
+        time(timeRule, timeType, timeTarget, timeValue, formatType, dataValue) {
+            let format = formatType == 'HH:mm' ? 'HH:mm:00' : formatType
+            let timeDataValue = null
+            if (timeRule) {
+                if (timeType == 1) {
+                    timeDataValue = timeValue || '00:00:00'
+                    if (timeDataValue.split(':').length == 3) {
+                        timeDataValue = timeDataValue
+                    } else {
+                        timeDataValue = timeDataValue + ':00'
+                    }
+                } else if (timeType == 2) {
+                    timeDataValue = dataValue
+                } else if (timeType == 3) {
+                    timeDataValue = this.jnpf.toDate(new Date(), format)
+                } else if (timeType == 4) {
+                    let previousDate = '';
+                    previousDate = getBeforeTime(timeTarget, timeValue)
+                    timeDataValue = this.jnpf.toDate(previousDate, format)
+                } else if (timeType == 5) {
+                    let previousDate = '';
+                    previousDate = getLaterTime(timeTarget, timeValue)
+                    timeDataValue = this.jnpf.toDate(previousDate, format)
+                }
+            }
+            return timeDataValue;
+        },
+        dataList() {
+            var _data = this.dataForm;
+            return _data;
+        },
+        dataInfo(dataAll) {
+            let _dataAll = dataAll
+            this.dataForm = _dataAll
+            this.isEdit = true
+            this.dataAll()
+            this.childIndex = -1
+        },
+    },
+}
+
+</script>

+ 509 - 0
src/views/governmentCloud/officialAccount/mpActivityApi/index.vue

@@ -0,0 +1,509 @@
+<template>
+    <div class="JNPF-common-layout">
+        <div class="JNPF-common-layout-center">
+            <el-row class="JNPF-common-search-box" :gutter="16">
+                <el-form @submit.native.prevent>
+                    <el-col :span="6">
+                        <el-form-item label="名称">
+                            <el-input v-model="query.name" placeholder="请输入" clearable> </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="API">
+                            <el-input v-model="query.api" placeholder="请输入" clearable> </el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item>
+                            <el-button type="primary" icon="el-icon-search"
+                                @click="search()">查询</el-button>
+                            <el-button icon="el-icon-refresh-right" @click="reset()">重置</el-button>
+                        </el-form-item>
+                    </el-col>
+                </el-form>
+            </el-row>
+            <div class="JNPF-common-layout-main JNPF-flex-main">
+                <div class="JNPF-common-head">
+                    <div>
+                        <el-button type="primary" icon="icon-ym icon-ym-btn-add"
+                            @click="addOrUpdateHandle()">新增
+                        </el-button>
+                    </div>
+                    <div class="JNPF-common-head-right">
+                        <el-tooltip content="高级查询" placement="top" v-if="true">
+                            <el-link icon="icon-ym icon-ym-filter JNPF-common-head-icon"
+                                :underline="false" @click="openSuperQuery()" />
+                        </el-tooltip>
+                        <el-tooltip effect="dark" :content="$t('common.refresh')" placement="top">
+                            <el-link icon="icon-ym icon-ym-Refresh JNPF-common-head-icon"
+                                :underline="false" @click="initData()" />
+                        </el-tooltip>
+                    </div>
+                </div>
+                <JNPF-table v-loading="listLoading" :data="list" @sort-change='handleTableSort'
+                    :header-cell-class-name="handleHeaderClass" :has-c="hasBatchBtn"
+                    @selection-change="handleSelectionChange" :span-method="arraySpanMethod">
+                    <el-table-column prop="name" label="名称" align="left" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.name" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column prop="api" label="API" align="left" show-overflow-tooltip>
+                        <template slot-scope="scope">
+                            <JnpfInput v-model="scope.row.api" detailed showOverflow />
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="操作" fixed="right" width="150">
+                        <template slot-scope="scope">
+                            <el-button type="text" @click="addOrUpdateHandle(scope.row)">编辑
+                            </el-button>
+                            <el-button type="text" class="JNPF-table-delBtn"
+                                @click="handleDel(scope.row.id)">删除
+                            </el-button>
+                            <el-button type="text" @click="goDetail(scope.row.id)">详情
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </JNPF-table>
+                <pagination :total="total" :page.sync="listQuery.currentPage"
+                    :limit.sync="listQuery.pageSize" @pagination="initData" />
+            </div>
+        </div>
+        <JNPF-Form v-if="formVisible" ref="JNPFForm" @refresh="refresh" />
+        <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" />
+
+        <ImportBox v-if="uploadBoxVisible" ref="UploadBox" @refresh="initData" />
+        <Detail v-if="detailVisible" ref="Detail" @refresh="detailVisible=false" />
+        <ToFormDetail v-if="toFormDetailVisible" ref="toFormDetail"
+            @close="toFormDetailVisible = false" />
+        <SuperQuery v-if="superQueryVisible" ref="SuperQuery" :columnOptions="superQueryJson"
+            @superQuery="superQuery" />
+    </div>
+</template>
+
+<script>
+import request from '@/utils/request'
+import { mapGetters } from "vuex";
+import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
+import JNPFForm from './form'
+import Detail from './Detail'
+import ExportBox from '@/components/ExportBox'
+import ToFormDetail from '@/views/basic/dynamicModel/list/detail'
+import { getDataInterfaceRes } from '@/api/systemData/dataInterface'
+import { getConfigData } from '@/api/onlineDev/visualDev'
+import { getDefaultCurrentValueUserIdAsync } from '@/api/permission/user'
+import { getDefaultCurrentValueDepartmentIdAsync } from '@/api/permission/organize'
+import columnList from './columnList'
+import { thousandsFormat } from "@/components/Generator/utils/index"
+import SuperQuery from '@/components/SuperQuery'
+import superQueryJson from './superQueryJson'
+import { noGroupList } from '@/components/Generator/generator/comConfig'
+
+export default {
+    components: {
+        JNPFForm,
+        Detail,
+        ExportBox, ToFormDetail, SuperQuery
+    },
+    data() {
+        return {
+            keyword: '',
+            expandsTree: true,
+            refreshTree: true,
+            toFormDetailVisible: false,
+            hasBatchBtn: false,
+            expandObj: {},
+            columnOptions: [],
+            mergeList: [],
+            exportList: [],
+            columnList,
+
+            superQueryVisible: false,
+            superQueryJson,
+            uploadBoxVisible: false,
+            detailVisible: false,
+            query: {
+                name: undefined,
+                api: undefined,
+            },
+            defListQuery: {
+                sort: 'desc',
+                sidx: '',
+            },
+            //排序默认值
+            defaultSortConfig: [],
+            treeProps: {
+                children: 'children',
+                label: 'fullName',
+                value: 'id',
+                isLeaf: 'isLeaf'
+            },
+            list: [],
+            listLoading: true,
+            multipleSelection: [],
+            total: 0,
+            queryData: {},
+            listQuery: {
+                superQueryJson: '',
+                currentPage: 1,
+                pageSize: 20,
+                sort: "",
+                sidx: "",
+            },
+            //多列排序
+            ordersList: [],
+            formVisible: false,
+            flowVisible: false,
+            flowListVisible: false,
+            flowList: [],
+            exportBoxVisible: false,
+            interfaceRes: {
+            },
+            //掩码配置
+            maskConfig: {
+                name: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+                api: { "prefixType": 1, "useUnrealMask": false, "maskType": 1, "unrealMaskLength": 1, "prefixLimit": 0, "suffixLimit": 0, "filler": "*", "prefixSpecifyChar": "", "suffixType": 1, "ignoreChar": "", "suffixSpecifyChar": "" },
+            },
+        }
+    },
+    computed: {
+        ...mapGetters(['userInfo']),
+        menuId() {
+            return this.$route.meta.modelId || ''
+        }
+    },
+    created() {
+        this.getColumnList(),
+            this.initSearchDataAndListData()
+        this.queryData = JSON.parse(JSON.stringify(this.query))
+        this.getHasBatchBtn();
+        //排序默认值
+        this.setDefaultQuery(this.defaultSortConfig);
+    },
+    methods: {
+        getHasBatchBtn() {
+            let btnsList = []
+            this.hasBatchBtn = btnsList.some(o => ['batchRemove', 'batchPrint', 'download'].includes(o))
+        },
+
+        treeRefresh() {
+            this.keyword = ''
+            this.treeActiveId = ''
+            this.leftTreeActiveInfo = {}
+            this.$refs.treeBox.setCurrentKey(null)
+            this.getTreeView()
+        },
+
+        toDetail(defaultValue, modelId) {
+            if (!defaultValue) return
+            getConfigData(modelId).then(res => {
+                if (!res.data || !res.data.formData) return
+                let formData = JSON.parse(res.data.formData)
+                formData.popupType = 'general'
+                this.toFormDetailVisible = true
+                this.$nextTick(() => {
+                    this.$refs.toFormDetail.init(formData, modelId, defaultValue)
+                })
+            })
+        },
+        toggleTreeExpand(expands) {
+            this.refreshTree = false
+            this.expandsTree = expands
+            this.$nextTick(() => {
+                this.refreshTree = true
+                this.$nextTick(() => {
+                    this.$refs.treeBox.setCurrentKey(null)
+                })
+            })
+        },
+        filterNode(value, data) {
+            if (!value) return true;
+            return data[this.treeProps.label].indexOf(value) !== -1;
+        },
+        loadNode(node, resolve) {
+            const nodeData = node.data
+            const config = {
+                treeInterfaceId: "",
+                treeTemplateJson: []
+            }
+            if (config.treeInterfaceId) {
+                //这里是为了拿到参数中关联的字段的值,后端自行拿
+                if (config.treeTemplateJson && config.treeTemplateJson.length) {
+                    for (let i = 0; i < config.treeTemplateJson.length; i++) {
+                        const element = config.treeTemplateJson[i];
+                        element.defaultValue = nodeData[element.relationField] || ''
+                    }
+                }
+                //参数
+                let query = {
+                    paramList: config.treeTemplateJson || [],
+                }
+                //接口
+                getDataInterfaceRes(config.treeInterfaceId, query).then(res => {
+                    let data = res.data
+                    if (Array.isArray(data)) {
+                        resolve(data);
+                    } else {
+                        resolve([]);
+                    }
+                })
+            }
+        },
+        getColumnList() {
+            // 没有开启权限
+            this.columnOptions = this.transformColumnList(this.columnList)
+        },
+        transformColumnList(columnList) {
+            let list = []
+            for (let i = 0; i < columnList.length; i++) {
+                const e = columnList[i];
+                if (!e.prop.includes('-')) {
+                    list.push(e)
+                } else {
+                    let prop = e.prop.split('-')[0]
+                    let label = e.label.split('-')[0]
+                    let vModel = e.prop.split('-')[1]
+                    let newItem = {
+                        align: "center",
+                        jnpfKey: "table",
+                        prop,
+                        label,
+                        children: []
+                    }
+                    e.vModel = vModel
+                    if (!this.expandObj.hasOwnProperty(`${prop}Expand`)) this.$set(this.expandObj, `${prop}Expand`, false)
+                    if (!list.some(o => o.prop === prop)) list.push(newItem)
+                    for (let i = 0; i < list.length; i++) {
+                        if (list[i].prop === prop) {
+                            list[i].children.push(e)
+                            break
+                        }
+                    }
+                }
+            }
+            this.getMergeList(list)
+            this.getExportList(list)
+            return list
+        },
+        arraySpanMethod({ column }) {
+            for (let i = 0; i < this.mergeList.length; i++) {
+                if (column.property == this.mergeList[i].prop) {
+                    return [this.mergeList[i].rowspan, this.mergeList[i].colspan]
+                }
+            }
+        },
+        getMergeList(list) {
+            let newList = JSON.parse(JSON.stringify(list))
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    let child = {
+                        prop: item.prop + '-child-first'
+                    }
+                    item.children.unshift(child)
+                }
+            })
+            newList.forEach(item => {
+                if (item.children && item.children.length) {
+                    item.children.forEach((child, index) => {
+                        if (index == 0) {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 1,
+                                colspan: item.children.length
+                            })
+                        } else {
+                            this.mergeList.push({
+                                prop: child.prop,
+                                rowspan: 0,
+                                colspan: 0
+                            })
+                        }
+                    })
+                } else {
+                    this.mergeList.push({
+                        prop: item.prop,
+                        rowspan: 1,
+                        colspan: 1
+                    })
+                }
+            })
+        },
+        getExportList(list) {
+            let exportList = []
+            for (let i = 0; i < list.length; i++) {
+                if (list[i].jnpfKey === 'table') {
+                    for (let j = 0; j < list[i].children.length; j++) {
+                        exportList.push(list[i].children[j])
+                    }
+                } else {
+                    exportList.push(list[i])
+                }
+            }
+            this.exportList = exportList.filter(o => !noGroupList.includes(o.__config__.jnpfKey))
+        },
+        goDetail(id) {
+            this.detailVisible = true
+            this.$nextTick(() => {
+                this.$refs.Detail.init(id)
+            })
+        },
+        sortChange({ column, prop, order }) {
+            this.listQuery.sort = order == 'ascending' ? 'asc' : 'desc'
+            this.listQuery.sidx = !order ? '' : prop
+            this.initData()
+        },
+        async initSearchDataAndListData() {
+            await this.initSearchData()
+            this.initData()
+        },
+        //初始化查询的默认数据
+        async initSearchData() {
+        },
+        initData() {
+            // this.queryData = JSON.parse(JSON.stringify(this.query))导致重置失效
+            this.listLoading = true;
+            let _query = {
+                ...this.listQuery,
+                ...this.query,
+                ...this.defListQuery,
+                keyword: this.keyword,
+                dataType: 0,
+                menuId: this.menuId,
+                moduleId: '606844141636163205',
+                type: 1,
+            };
+            request({
+                url: `/api/jnpf/MpActivityApi/getList`,
+                method: 'post',
+                data: _query
+            }).then(res => {
+                if (res.code == 200) {
+                    var _list = [];
+                    for (let i = 0; i < res.data.list.length; i++) {
+                        let _data = res.data.list[i];
+                        _list.push(_data)
+                    }
+                    this.list = _list.map(o => ({
+                        ...o,
+                        ...this.expandObj,
+                    }))
+                    this.total = res.data.pagination.total
+                    this.listLoading = false
+                } else {
+                    this.$message.error(res.msg)
+                }
+            })
+        },
+        handleDel(id) {
+            this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+                type: 'warning'
+            }).then(() => {
+                request({
+                    url: `/api/jnpf/MpActivityApi/${id}`,
+                    method: 'DELETE'
+                }).then(res => {
+                    this.$message({
+                        type: 'success',
+                        message: res.msg,
+                        onClose: () => {
+                            this.initData()
+                        }
+                    });
+                })
+            }).catch(() => {
+            });
+        },
+        handelUpload() {
+            this.uploadBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.UploadBox.init("", "jnpf/MpActivityApi", 0, this.flowList)
+            })
+        },
+        openSuperQuery() {
+            this.superQueryVisible = true
+            this.$nextTick(() => {
+                this.$refs.SuperQuery.init()
+            })
+        },
+        superQuery(queryJson) {
+            this.listQuery.superQueryJson = queryJson
+            this.listQuery.currentPage = 1
+            this.initData()
+        },
+        addOrUpdateHandle(row, isDetail) {
+            let id = row ? row.id : ""
+            this.formVisible = true
+            if (!this.treeActiveId) {
+                this.leftTreeActiveInfo = {}
+            }
+            this.$nextTick(() => {
+                this.$refs.JNPFForm.init(id, isDetail, this.list, this.leftTreeActiveInfo)
+            })
+        },
+        exportData() {
+            this.exportBoxVisible = true
+            this.$nextTick(() => {
+                this.$refs.ExportBox.init(this.exportList, this.multipleSelection)
+            })
+        },
+        download(data) {
+            let query = { ...data, ...this.listQuery, ...this.query, menuId: this.menuId }
+            request({
+                url: `/api/jnpf/MpActivityApi/Actions/Export`,
+                method: 'post',
+                data: query
+            }).then(res => {
+                if (!res.data.url) return
+                this.jnpf.downloadFile(res.data.url)
+                this.$refs.ExportBox.visible = false
+                this.exportBoxVisible = false
+            })
+        },
+        search() {
+            this.listQuery.currentPage = 1
+            this.listQuery.pageSize = 20
+            this.initData()
+        },
+        refresh(isrRefresh) {
+            this.formVisible = false
+            if (isrRefresh) this.reset()
+        },
+        reset() {
+            this.query = JSON.parse(JSON.stringify(this.queryData))
+            this.search()
+        },
+        colseFlow(isrRefresh) {
+            this.flowVisible = false
+            if (isrRefresh) this.reset()
+        },
+
+        //以下排序相关方法
+        setDefaultQuery(defaultSortList) {
+            const defaultSortConfig = (defaultSortList || []).map(o =>
+                (o.sort === 'desc' ? '-' : '') + o.field);
+            this.defListQuery.sidx = defaultSortConfig.join(',')
+        },
+        handleHeaderClass({ column }) {
+            column.order = column.multiOrder
+        },
+        handleTableSort({ column }) {
+            if (column.sortable !== 'custom') return
+            column.multiOrder = column.multiOrder === 'descending' ? 'ascending' : column.multiOrder ? '' : 'descending';
+            this.handleOrderChange(column.property, column.multiOrder)
+        },
+        handleOrderChange(orderColumn, orderState) {
+            let index = this.ordersList.findIndex(e => e.field === orderColumn);
+            let sort = orderState === 'ascending' ? 'asc' : orderState === 'descending' ? 'desc' : '';
+            if (index > -1) {
+                this.ordersList[index].sort = orderState;
+            } else {
+                this.ordersList.push({ field: orderColumn, sort });
+            }
+            this.ordersList = this.ordersList.filter(e => e.sort);
+            this.ordersList.length ? this.setDefaultQuery(this.ordersList) : this.setDefaultQuery(this.defaultSortConfig)
+            this.initData()
+        },
+        //以上排序相关方法
+    }
+}
+</script>

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/views/governmentCloud/officialAccount/mpActivityApi/superQueryJson.js


+ 108 - 12
src/views/governmentCloud/officialAccount/userActivityLevel/index.vue

@@ -2,6 +2,9 @@
     <div class="JNPF-common-layout">
         <div class="JNPF-common-layout-center">
             <div class="JNPF-common-layout-main">
+                <div class="search-button">
+                    <el-button type="primary" @click="search()">查询</el-button>
+                </div>
                 <div class="form">
                     <div class="form-item">
                         <div class="item-title">数据时间</div>
@@ -11,6 +14,17 @@
                                 v-for="(item,index) in timeList" :key="index"
                                 @click="timeNum = item.value">
                                 {{ item.label }}</div>
+
+                            <el-date-picker style="margin-left: 20px;" v-if="timeNum == 1"
+                                v-model="query.timeRange" type="daterange" range-separator="至"
+                                start-placeholder="开始日期" end-placeholder="结束日期"
+                                value-format="yyyy-MM-dd">
+                            </el-date-picker>
+                            <el-date-picker style="margin-left: 20px;" v-if="timeNum == 2"
+                                v-model="query.timeRange" type="monthrange" range-separator="至"
+                                start-placeholder="开始月份" end-placeholder="结束月份"
+                                value-format="yyyy-MM-dd" @change="(value) => changeMonth(value)">
+                            </el-date-picker>
                         </div>
                     </div>
                     <div class="form-item">
@@ -22,30 +36,38 @@
                                 @click="peopleNum = item.value">
                                 {{ item.label }}</div>
                             <JnpfUserSelect style="margin-left: 20px;" v-if="peopleNum == 1"
-                                v-model="query.user" placeholder="请选择用户" />
+                                v-model="query.user" placeholder="请选择用户"
+                                :filterIds="hasIssuedUsersList" :filterType="'2'" />
                         </div>
                     </div>
                 </div>
-                <div class="chart">
-                    <div id="echarts1" style="width: 100%;height: 100%;"></div>
+                <div class="chart" v-loading="loading" element-loading-text="加载中">
+                    <div v-if="chartData" id="echarts1" style="width: 100%;height: 100%;"></div>
+                    <el-empty style="height: 100%;" v-else description="暂无数据"></el-empty>
                 </div>
             </div>
         </div>
     </div>
 </template>
 
+
+
 <script>
+
+import {
+    activity, getUserList
+} from "@/api/governmentCloud/officialAccount/userActivityLevel/userActivityLevel";
 export default {
     data() {
         return {
-            timeNum: 0,
+            timeNum: '1',
             timeList: [
                 {
-                    value: 0,
+                    value: '1',
                     label: '按日查询',
                 },
                 {
-                    value: 1,
+                    value: '2',
                     label: '按月查询',
                 }
             ],
@@ -61,21 +83,90 @@ export default {
                 }
             ],
             query: {
-                user: ''
+                user: '',
+                timeRange: ''
+            },
+            chartData: null,
+            loading: false,
+            hasIssuedUsersList: []
+        }
+    },
+    watch: {
+        timeNum() {
+            this.query.timeRange = ''
+        },
+        chartData(newValue, oldValue) {
+            if (newValue) {
+                this.$nextTick(() => {
+                    this.initEchart1()
+                })
             }
         }
     },
     mounted() {
-        this.initEcharts1()
+        getUserList().then(res => {
+            console.log(res)
+            if (res.code == 200) {
+                res.data.forEach(item => {
+                    this.hasIssuedUsersList.push(item.id)
+                })
+                console.log(this.hasIssuedUsersList)
+            } else { }
+        })
     },
     methods: {
-        initEcharts1(item) {
+        changeMonth(value) {
+            //查询当前月份月初到月末
+            let myDate = new Date(value[1]);
+            let month = myDate.getMonth() + 1;
+            month = month < 10 ? "0" + month : month;   //格式化月份,补0
+            let dayEnd = new Date(myDate.getFullYear(), month, 0).getDate(); //获取当月一共有多少天
+            value[1] = value[1].split('-')[0] + '-' + value[1].split('-')[1] + '-' + dayEnd
+            this.query.timeRange = [value[0], value[1]]
+        },
+        search() {
+            let str = null
+            if (!this.query.timeRange) {
+                str = '请选择时间'
+            } else if (this.peopleNum == 1 && !this.query.user) {
+                str = '请选择用户'
+            }
+            if (!str) {
+                let params = {
+                    type: this.timeNum,
+                    startDate: this.query.timeRange[0],
+                    endDate: this.query.timeRange[1],
+                    userId: this.peopleNum == 0 ? '' : this.query.user
+                }
+                this.chartData = null
+                this.loading = true
+                activity(params).then(res => {
+                    if (res.code == 200) {
+                        this.chartData = res.data
+                        this.loading = false
+                    } else {
+                        this.$message({ message: res.msg, type: 'error', duration: 1000 })
+                        this.chartData = null
+                        this.loading = false
+                    }
+
+                })
+            } else {
+                this.$message({ message: str, type: 'error', duration: 1000 })
+
+            }
+        },
+        initEchart1() {
             var chartDom = document.getElementById('echarts1');
             var myChart = this.$echarts.init(chartDom);
+
+
+            let xData = this.chartData.xlist
+            let data = this.chartData.ylist
             var option = {
                 xAxis: {
                     type: 'category',
-                    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+                    data: xData
                 },
                 yAxis: {
                     type: 'value'
@@ -91,9 +182,9 @@ export default {
                 },
                 series: [
                     {
-                        data: [150, 230, 224, 218, 135, 147, 260],
+                        data: data,
                         type: 'line',
-                        name: '活跃'
+                        name: '活跃指数'
                     }
                 ]
             };
@@ -108,6 +199,11 @@ export default {
 .JNPF-common-layout-main {
     display: flex;
     flex-direction: column;
+    .search-button {
+        position: absolute;
+        right: 20px;
+        top: 10px;
+    }
     .form {
         width: 100%;
         padding: 10px 20px;

+ 50 - 7
src/views/governmentCloud/questionnaireInvestigation/Statistics.vue

@@ -98,8 +98,8 @@
                             </template>
                         </el-table-column>
                     </JNPF-table>
-                    <pagination :total="total" :page.sync="query.currentPage"
-                        :limit.sync="query.pageSize" @pagination="getList" />
+                    <pagination :total="total" :page.sync="query.current" :limit.sync="query.szie"
+                        @pagination="getList" />
                 </div>
             </div>
         </div>
@@ -138,8 +138,8 @@ export default {
             tableData: [],
             total: 0,
             query: {
-                currentPage: 1,
-                pageSize: 20,
+                current: 1,
+                size: 20,
                 dataType: "0",
                 sidx: "-createTime",
                 title: null
@@ -206,10 +206,51 @@ export default {
             };
             myChart.setOption(option);
         },
+        basic_dashboard_type2(item) {
+            var chartDom = document.getElementById('basic_dashboard');
+            var myChart = this.$echarts.init(chartDom);
+
+            let xData = item.questionnaireOption.map(element => {
+                return element.optionContent
+            })
+            let yData = item.questionnaireOption.map(element => {
+                return element.questionnaireOptionSubCount
+            })
+
+            var option = {
+                title: {
+                    text: item.title,
+                    subtext: '选项比例',
+                    left: 'center'
+                },
+                tooltip: {
+                    trigger: 'item'
+                },
+                legend: {
+                    orient: 'horizontal',
+                    right: 'center',
+                    bottom: '5%'
+                },
+                xAxis: {
+                    type: 'category',
+                    data: xData
+                },
+                yAxis: {
+                    type: 'value'
+                },
+                series: [
+                    {
+                        data: yData,
+                        type: 'bar'
+                    }
+                ]
+            };
+            myChart.setOption(option);
+        },
         reset() {
             this.query = {
-                currentPage: 1,
-                pageSize: 20,
+                current: 1,
+                size: 20,
                 dataType: "0",
                 sidx: "-createTime",
                 title: null
@@ -319,8 +360,10 @@ export default {
         },
         openChart(questionnaire) {
             this.dialogChartVisible = true
+            console.log(questionnaire)
             this.$nextTick(() => {
-                this.basic_dashboard_type(questionnaire)
+                if (questionnaire.type == "RADIO") this.basic_dashboard_type(questionnaire)
+                if (questionnaire.type == "CHECKBOX") this.basic_dashboard_type2(questionnaire)
             })
         }
     },

+ 2 - 0
src/views/governmentCloud/questionnaireInvestigation/index.vue

@@ -189,6 +189,8 @@ export default {
             return new Promise((resolve, reject) => {
                 getDictionaryDataSelector('603485116668316293').then(res => {
                     this.typeList = res.data.list
+
+                    console.log(this.typeList)
                     resolve(true)
                 })
             })

+ 82 - 0
src/views/permission/user/TagForm.vue

@@ -0,0 +1,82 @@
+<template>
+    <el-dialog :title="'分配标签'" :close-on-click-modal="false" :close-on-press-escape="false"
+        :visible.sync="visible" lock-scroll class="JNPF-dialog JNPF-dialog_center" width="600px">
+        <el-form ref="dataForm" v-loading="formLoading" :model="dataForm" :rules="dataRule"
+            label-width="90px">
+            <el-form-item label="标签" prop="type">
+                <el-select v-model="dataForm.type" placeholder="请选择标签" filterable>
+                    <el-option v-for="item in typeOptions" :key="item.enCode" :label="item.fullName"
+                        :value="item.enCode">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="visible = false">{{$t('common.cancelButton')}}</el-button>
+            <el-button type="primary" :loading="btnLoading" @click="dataFormSubmit()">
+                {{$t('common.confirmButton')}}</el-button>
+        </span>
+    </el-dialog>
+</template>
+
+<script>
+import { createPosition, updatePosition, getPositionInfo } from '@/api/permission/position'
+
+export default {
+    data() {
+        return {
+            visible: false,
+            formLoading: false,
+            btnLoading: false,
+            typeOptions: [],
+            dataForm: {
+                type: '',
+            },
+            organizeIdTree: [],
+            dataRule: {
+                type: [
+                    { required: true, message: '岗位类型不能为空', trigger: 'blur' }
+                ]
+            }
+        }
+    },
+    methods: {
+        init(row) {
+            this.visible = true
+            this.organizeIdTree = []
+            this.formLoading = true
+            this.$nextTick(() => {
+                this.$refs['dataForm'].resetFields()
+                // 获取岗位类型
+                this.$store.dispatch('base/getDictionaryData', { sort: 'PositionType' }).then(res => {
+                    this.typeOptions = res
+                })
+
+                this.formLoading = false
+            })
+        },
+        dataFormSubmit() {
+            this.$refs['dataForm'].validate((valid) => {
+                if (valid) {
+                    this.btnLoading = true
+                    const formMethod = this.dataForm.id ? updatePosition : createPosition
+                    formMethod(this.dataForm).then(res => {
+                        this.$message({
+                            message: res.msg,
+                            type: 'success',
+                            duration: 1500,
+                            onClose: () => {
+                                this.visible = false
+                                this.btnLoading = false
+                                this.$emit('refreshDataList')
+                            }
+                        })
+                    }).catch(() => {
+                        this.btnLoading = false
+                    })
+                }
+            })
+        }
+    }
+}
+</script>

+ 21 - 2
src/views/permission/user/index.vue

@@ -153,6 +153,8 @@
                                             v-if="scope.row.mobilePhone && !scope.row.syncItsm"
                                             @click.native="generateITSMAccount(scope.row)">
                                             ITSM账号同步</el-dropdown-item>
+                                        <el-dropdown-item @click.native="assignTags(scope.row)">
+                                            分配标签</el-dropdown-item>
                                     </el-dropdown-menu>
                                 </el-dropdown>
                             </tableOpts>
@@ -170,6 +172,10 @@
         <ImportForm v-if="importFormVisible" ref="importForm" @refresh="reset()" />
         <SocialsBind v-if="socialsVisible" ref="SocialsBind" @close="socialsVisible=false" />
         <WorkHandoverForm v-if="workHandoverVisible" ref="WorkHandoverForm" @complete="initData" />
+
+        <!--分配标签弹框  -->
+        <TagForm v-if="tagFormVisible" ref="TagForm" />
+
         <CheckPermissions v-if="checkPermissionsVisible" ref="checkPermissions"
             @close="checkPermissionsVisible=false" />
     </div>
@@ -182,6 +188,7 @@ import Diagram from './Diagram'
 import ResetPwdForm from './ResetPassword'
 import ImportForm from './ImportForm'
 import ExportForm from './ExportForm'
+import TagForm from './TagForm'
 import SocialsBind from './SocialsBind'
 import WorkHandoverForm from './WorkHandoverForm.vue'
 import { mapGetters } from "vuex"
@@ -196,7 +203,8 @@ export default {
         ImportForm,
         SocialsBind,
         WorkHandoverForm,
-        CheckPermissions
+        CheckPermissions,
+        TagForm
     },
     data() {
         return {
@@ -232,7 +240,10 @@ export default {
             socialsVisible: false,
             workHandoverVisible: false,
             organizeIdTree: [],
-            checkPermissionsVisible: false
+            checkPermissionsVisible: false,
+
+            // 是否展示分配标签弹框
+            tagFormVisible: false
         }
     },
     watch: {
@@ -250,6 +261,14 @@ export default {
         this.getOrganizeList(true)
     },
     methods: {
+
+        // 打开分配标签弹框
+        assignTags(row) {
+            this.tagFormVisible = true
+            this.$nextTick(() => {
+                this.$refs.TagForm.init(row)
+            })
+        },
         workHandover(data) {
             this.workHandoverVisible = true
             this.$nextTick(() => {

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است