sasp-admin 0.2.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/index.js +227 -0
  2. package/package.json +19 -0
  3. package/router.js +83 -0
  4. package/src/assets/font/iconfont.css +1346 -0
  5. package/src/assets/font/iconfont.eot +0 -0
  6. package/src/assets/font/iconfont.js +1 -0
  7. package/src/assets/font/iconfont.svg +827 -0
  8. package/src/assets/font/iconfont.ttf +0 -0
  9. package/src/assets/font/iconfont.woff +0 -0
  10. package/src/assets/images/loading-bar.gif +0 -0
  11. package/src/assets/js/adminInstall.js +36 -0
  12. package/src/assets/js/api/apiAdmin.js +613 -0
  13. package/src/assets/js/global/dataGlobal.js +260 -0
  14. package/src/assets/js/global/logGlobal.js +22 -0
  15. package/src/assets/js/global/paramGlobal.js +67 -0
  16. package/src/assets/js/global/resGlobal.js +91 -0
  17. package/src/assets/js/global/userGlobal.js +283 -0
  18. package/src/components/complexViewRendering.vue +601 -0
  19. package/src/components/ifmLink.vue +71 -0
  20. package/src/components/public/data/plDataCascader.vue +85 -0
  21. package/src/components/public/data/plDataRadio.vue +73 -0
  22. package/src/components/public/data/plDataRadioGroup.vue +70 -0
  23. package/src/components/public/data/plDataSelect.vue +856 -0
  24. package/src/components/public/data/plDatePicker.vue +159 -0
  25. package/src/components/public/org/bg.png +0 -0
  26. package/src/components/public/org/sysOrgPosUserSelect.vue +1237 -0
  27. package/src/components/public/org/sysOrgPosUserSelectDark.vue +1402 -0
  28. package/src/components/public/org/sysOrgPosUserSelectNew.vue +1527 -0
  29. package/src/components/public/upload/images/compress.png +0 -0
  30. package/src/components/public/upload/images/emipty.png +0 -0
  31. package/src/components/public/upload/images/excel.png +0 -0
  32. package/src/components/public/upload/images/file.png +0 -0
  33. package/src/components/public/upload/images/pdf.png +0 -0
  34. package/src/components/public/upload/images/powerpoint.png +0 -0
  35. package/src/components/public/upload/images/project.png +0 -0
  36. package/src/components/public/upload/images/sound.png +0 -0
  37. package/src/components/public/upload/images/txt.png +0 -0
  38. package/src/components/public/upload/images/video.png +0 -0
  39. package/src/components/public/upload/images/visio.png +0 -0
  40. package/src/components/public/upload/images/word.png +0 -0
  41. package/src/components/public/upload/plImage.vue +287 -0
  42. package/src/components/public/upload/plImgUpload.vue +137 -0
  43. package/src/components/public/upload/plUpload.vue +1124 -0
  44. package/src/components/public/upload/uploadImg.js +8 -0
  45. package/src/main.js +0 -0
  46. package/src/views/VueMenuView.vue +143 -0
  47. package/src/views/cloudMenuView.vue +125 -0
  48. package/src/views/complex/config/complex.vue +501 -0
  49. package/src/views/complex/config/complexSetting.vue +1250 -0
  50. package/src/views/complex/rendering/complexShow.vue +16 -0
  51. package/src/views/data/dataManage.vue +560 -0
  52. package/src/views/data/sysData.vue +292 -0
  53. package/src/views/event/eventManager/vueEventDiy.vue +1184 -0
  54. package/src/views/event/eventManager/vueEventMain.vue +108 -0
  55. package/src/views/event/eventManager/vueEventSys.vue +296 -0
  56. package/src/views/event/js/apiEvent.js +22 -0
  57. package/src/views/fileLog/fileDownloadLog.vue +437 -0
  58. package/src/views/initData/initData.vue +4316 -0
  59. package/src/views/log/dblog/logdbDevelop.vue +306 -0
  60. package/src/views/log/dblog/logdbEnt.vue +331 -0
  61. package/src/views/log/dblog/logdbGov.vue +395 -0
  62. package/src/views/log/error/logError.vue +553 -0
  63. package/src/views/log/loginlog/logManageDevOrSup.vue +357 -0
  64. package/src/views/log/loginlog/logManageEnt.vue +343 -0
  65. package/src/views/log/loginlog/logManageGov.vue +328 -0
  66. package/src/views/log/sms/logSms.vue +308 -0
  67. package/src/views/menu/component/menuManageComponent.vue +2402 -0
  68. package/src/views/menu/component/menuModule.vue +449 -0
  69. package/src/views/menu/menuLocal.vue +223 -0
  70. package/src/views/menu/menuManage.vue +1135 -0
  71. package/src/views/menu/tenantMenuManage.vue +1132 -0
  72. package/src/views/menuRouter/cview/cviewShow.vue +18 -0
  73. package/src/views/menuRouter/cviewMenuRouter.vue +183 -0
  74. package/src/views/menuRouter/menuView.vue +132 -0
  75. package/src/views/menuRouter/urlMenuRouter.vue +160 -0
  76. package/src/views/org/entOrgTree.vue +1050 -0
  77. package/src/views/org/ownerMenu/ownerMenuTree.vue +269 -0
  78. package/src/views/org/safeValidate/safeValidate.vue +469 -0
  79. package/src/views/org/sysEntOrgUserDetail.vue +3390 -0
  80. package/src/views/org/sysOrgDimension.vue +832 -0
  81. package/src/views/org/sysOrgPosUserDetail.vue +1648 -0
  82. package/src/views/org/sysOrgPosUserTree.vue +1101 -0
  83. package/src/views/org/sysOrgTree.vue +864 -0
  84. package/src/views/param/sysParam.vue +987 -0
  85. package/src/views/preview/pdfViewer.vue +82 -0
  86. package/src/views/resources/js/resourcesCommon.js +137 -0
  87. package/src/views/resources/resRouter/resView.vue +161 -0
  88. package/src/views/resources/resourcesTabs.vue +82 -0
  89. package/src/views/resources/tabs/comp/pageResPreview.vue +309 -0
  90. package/src/views/resources/tabs/comp/pageResRegister.vue +1120 -0
  91. package/src/views/resources/tabs/dataResources.vue +843 -0
  92. package/src/views/resources/tabs/pageResources.vue +970 -0
  93. package/src/views/role/allowMenu.vue +148 -0
  94. package/src/views/role/authRole/authRole.vue +427 -0
  95. package/src/views/role/authRole/component/allocateSetting.vue +1056 -0
  96. package/src/views/role/authRole/component/authSetting.vue +1196 -0
  97. package/src/views/role/commonRole/commonRole.vue +677 -0
  98. package/src/views/role/commonRole/compoment/allocateRoleMenuSetting.vue +335 -0
  99. package/src/views/role/commonRole/compoment/authLinkMenuTree.vue +55 -0
  100. package/src/views/role/commonRole/compoment/authSettingNew.vue +190 -0
  101. package/src/views/role/commonRole/compoment/commonSetting.vue +1576 -0
  102. package/src/views/role/commonRole/compoment/commonSettingAdjust.vue +584 -0
  103. package/src/views/role/commonRole/compoment/commonSettingNew.vue +572 -0
  104. package/src/views/role/commonRole/compoment/roleMenuPower.vue +226 -0
  105. package/src/views/role/commonRole/compoment/roleMenuPowerSetting.vue +69 -0
  106. package/src/views/role/commonRole/compoment/roleMenuSetting.vue +365 -0
  107. package/src/views/role/commonRole/compoment/roleSourceSetting.vue +229 -0
  108. package/src/views/role/commonRole/tenantCommonRole.vue +768 -0
  109. package/src/views/role/role.vue +135 -0
  110. package/src/views/role/roleMenuOption.vue +898 -0
  111. package/src/views/role/roleSynchroRemind.vue +399 -0
  112. package/src/views/role/sysRole.vue +1525 -0
  113. package/src/views/role/viewMenuOptDetail.vue +182 -0
  114. package/src/views/sms/sendSms.vue +164 -0
  115. package/src/views/station/orgStation.vue +561 -0
  116. package/src/views/tenant/appContentManager.vue +938 -0
  117. package/src/views/tenant/appManager.vue +642 -0
  118. package/src/views/tenant/tenantRoleManager.vue +670 -0
  119. package/src/views/tenant/tenantUserManager.vue +615 -0
  120. package/src/views/threeinone/compoment/safeCascadeSelect.vue +327 -0
  121. package/src/views/threeinone/init/safeInitRegion.vue +203 -0
  122. package/src/views/threeinone/safeManager.vue +927 -0
  123. package/src/views/threeinone/safeMenuManage.vue +565 -0
  124. package/src/views/threeinone/safeOrgSpv.vue +364 -0
  125. package/src/views/threeinone/safeSpv/safeSpvLeftTree.vue +109 -0
  126. package/src/views/threeinone/safeSpv/safeSpvMain.vue +335 -0
  127. package/src/views/threeinone/safeSpvEconView.vue +569 -0
  128. package/src/views/threeinone/safeValidateRegion.vue +328 -0
  129. package/src/views/urlResource/urlResource.vue +856 -0
  130. package/src/views/user/empowerUser/empowerEntUserManage.vue +415 -0
  131. package/src/views/user/empowerUser/empowerOrgTree.vue +167 -0
  132. package/src/views/user/empowerUser/empowerUserList.vue +633 -0
  133. package/src/views/user/empowerUser/empowerUserListMenuDeatil.vue +656 -0
  134. package/src/views/user/empowerUser/empowerUserListViewMenuTree.vue +257 -0
  135. package/src/views/user/empowerUser/empowerUserManage.vue +99 -0
  136. package/src/views/user/stationUserManage.vue +934 -0
  137. package/src/views/user/userManage.vue +737 -0
  138. package/src/views/user/userMangement.vue +938 -0
  139. package/src/views/user/viewMenu/viewMenu.vue +113 -0
  140. package/src/views/versionupdatetool/versionUpdateTool.vue +225 -0
  141. package/src/views/versionupdatetool/versioninfomation/verisonInfomationManagement.vue +68 -0
@@ -0,0 +1,987 @@
1
+ <template>
2
+ <el-container class="top_contain" v-loading="initLoading" element-loading-text="加载中" element-loading-background="rgba(0, 0, 0, 0.8)">
3
+ <el-header size="medium" class="button_header">
4
+ <el-button type="primary" size="small" round icon="el-icon-circle-plus" @click="add()">新增
5
+ </el-button>
6
+ <el-button type="primary" size="small" round icon="el-icon-success" @click="formSave()">保存
7
+ </el-button>
8
+ <el-button type="primary" size="small" round icon="el-icon-refresh" @click="transParamKeyVal()">一键转化参数名/键
9
+ </el-button>
10
+ </el-header>
11
+ <el-main style="height:100%;padding: 0 0 60px;box-sizing:border-box;overflow-y: hidden;">
12
+ <el-tabs v-model="activeNames" accordion type="border-card" class="el-tabs-rel" style="height:100%;">
13
+ <el-tab-pane :label="tabOption.label" v-for="(tabOption,tabindex) in tabparamOptions" :key="tabindex" :name="''+tabindex">
14
+ <el-row style="width: 100%">
15
+ <el-col :span="24" v-for="(typeitem,optIndex) in tabOption.value" :key="optIndex">
16
+ <el-card shadow="always" style="margin-bottom: 10px">
17
+ <fieldset style="padding: 0 5px 0 0;border: 1px solid #DCDFE6;">
18
+ <legend style="font-size: 15px;color: gray;margin-left: 10px">{{typeitem.label}}</legend>
19
+ <el-form label-width="100%" :ref="crud.tableRef">
20
+ <el-row :gutter="0">
21
+ <el-col :md="24" :lg="item.paramType == 'textarea'?24:12" :xl="item.paramType == 'textarea'?24:8" :key="index" v-for = "(item,index) in paramFormData">
22
+ <div v-if="item.sysParamType == typeitem.value">
23
+ <el-form-item :label="item.paramRealName" :class="isEqual(originData[index].paramVal,paramFormData[index].paramVal)?'black':'green'" label-position="left" label-width="230px">
24
+ <div v-if="item.paramType == 'multiSelect'" class="control_box">
25
+ <el-select v-model="item.paramVal" placeholder="请选择" multiple style="width: 100%">
26
+ <el-option
27
+ v-for="option in item.paramBackup"
28
+ :key="option.key"
29
+ :label="option.value"
30
+ :value="option">
31
+ </el-option>
32
+ </el-select>
33
+ </div>
34
+ <div v-else-if="item.paramType == 'select'" class="control_box">
35
+ <el-select v-model="item.paramVal" placeholder="请选择" style="width: 100%">
36
+ <el-option
37
+ v-for="option in item.paramBackup"
38
+ :key="option.key"
39
+ :label="option.value"
40
+ :value="option">
41
+ </el-option>
42
+ </el-select>
43
+ </div>
44
+ <div v-else-if="item.paramType == 'checkbox'" class="control_box">
45
+ <el-checkbox-group v-model="item.paramVal" size="medium" style="width: 100%">
46
+ <el-checkbox-button v-for="boxOption in item.paramBackup" :label="boxOption" :key="boxOption">
47
+ {{boxOption}}
48
+ </el-checkbox-button>
49
+ </el-checkbox-group>
50
+ </div>
51
+ <div v-else-if="item.paramType == 'radio'" class="control_box">
52
+ <div v-if="item.paramBackup.length==2 && item.paramVal==item.paramBackup[1]">
53
+ <el-radio-group v-model="item.paramVal" size="medium" style="width: 100%" fill="gray">
54
+ <el-radio-button :label="option" :key="option" v-for = "option in item.paramBackup"></el-radio-button>
55
+ </el-radio-group>
56
+ </div>
57
+ <div v-else>
58
+ <el-radio-group v-model="item.paramVal" size="medium" style="width: 100%">
59
+ <el-radio-button :label="option" :key="option" v-for = "option in item.paramBackup"></el-radio-button>
60
+ </el-radio-group>
61
+ </div>
62
+ </div>
63
+ <div v-else-if="item.paramType == 'textarea'" class="control_box">
64
+ <el-input v-model="item.paramVal" spellcheck="false" type="textarea" :autosize="{ maxRows: 2}" style="width: 100%"></el-input>
65
+ </div>
66
+ <div v-else class="control_box">
67
+ <el-input v-model="item.paramVal" spellcheck="false" style="width: 100%"></el-input>
68
+ </div>
69
+ <div class="operate_div">
70
+ <el-tooltip class="item" effect="dark" content="设置" placement="right">
71
+ <i class="el-icon-setting" size="medium" @click="updateForm(index)"></i>
72
+ </el-tooltip>
73
+ <div v-if="item.sysParamType.indexOf('serve') > -1">
74
+ <el-tooltip class="item" effect="dark" content="删除" placement="right">
75
+ <i class="el-icon-delete" size="medium" @click="doRemove(index)"></i>
76
+ </el-tooltip>
77
+ </div>
78
+ </div>
79
+ </el-form-item>
80
+ </div>
81
+ </el-col>
82
+ </el-row>
83
+ </el-form>
84
+ </fieldset>
85
+ </el-card>
86
+ </el-col>
87
+ </el-row>
88
+ </el-tab-pane>
89
+ </el-tabs>
90
+ </el-main>
91
+ <el-dialog :close-on-click-modal=false title="系统参数" :visible.sync="crud.dialogVisible" height="65%" top="18vh" width="60%" lock-scroll>
92
+ <el-form :model="crud.formData" :ref="crud.addFormRef" label-width="100%" style="width: 90%;margin: 5vh auto">
93
+ <el-row>
94
+ <el-col :span="12">
95
+ <div>
96
+ <el-form-item label="参数名" prop="paramName" label-width="150px" :rules="[
97
+ { required: true, message: '请输入参数名称', trigger: 'blur' }
98
+ ]">
99
+ <el-input v-model="crud.formData.paramName" :readonly="caseRead"></el-input>
100
+ </el-form-item>
101
+ </div>
102
+ </el-col>
103
+ <el-col :span="12">
104
+ <div>
105
+ <el-form-item label="参数键值" label-width="150px" prop="paramKey" :rules="[
106
+ { required: true, message: '请输入参数键值', trigger: 'blur' }
107
+ ]">
108
+ <el-input v-model="crud.formData.paramKey" :readonly = "caseUpdate"></el-input>
109
+ </el-form-item>
110
+ </div>
111
+ </el-col>
112
+ </el-row>
113
+ <el-row>
114
+ <el-col :span="12">
115
+ <el-form-item label="参数类型" label-width="150px" prop="sysParamType" :rules="[
116
+ { required: true, message: '请选择参数类型', trigger: 'blur' }
117
+ ]">
118
+ <el-cascader
119
+ :options="options"
120
+ v-model="crud.formData.sysParamType" :disabled="caseDisabled" style="width: 100%">
121
+ </el-cascader>
122
+ </el-form-item>
123
+ </el-col>
124
+ <el-col :span="12">
125
+ <el-form-item label="参数说明" label-width="150px">
126
+ <el-input v-model="crud.formData.mark"></el-input>
127
+ </el-form-item>
128
+ </el-col>
129
+ </el-row>
130
+ <el-row>
131
+ <el-col :span="12">
132
+ <el-form-item label="参数值类型" label-width="150px" prop="paramType" :rules="[
133
+ { required: true, message: '请输入参数值', trigger: 'blur' }
134
+ ]">
135
+ <el-row style="width: 100%;">
136
+ <el-col :span="19">
137
+ <el-select v-model="crud.formData['paramType']" placeholder="请选择"
138
+ :disabled="caseRead" @change="paramValChange" style="width:100%">
139
+ <el-option
140
+ v-for="item in typeOptions"
141
+ :key="item.value"
142
+ :label="item.label"
143
+ :value="item.value">
144
+ </el-option>
145
+ </el-select>
146
+ </el-col>
147
+ <el-col :span="5">
148
+ <el-button @click="settingOption" class="settingClass" :disabled="caseRead">配置</el-button>
149
+ </el-col>
150
+ </el-row>
151
+ </el-form-item>
152
+ </el-col>
153
+ <el-col :span="12">
154
+ <el-form-item label="参数排序" label-width="150px" prop="sort" :rules="plValidate('numberInt')">
155
+ <el-input v-model="crud.formData.sort"></el-input>
156
+ </el-form-item>
157
+ </el-col>
158
+ </el-row>
159
+ <el-row>
160
+ <el-col :span="24">
161
+ <div>
162
+ <el-form-item label="参数值" label-width="150px" prop="paramBackup" :rules="[
163
+ { required: true, message: '请输入参数值', trigger: 'blur' }
164
+ ]">
165
+ <el-input type="textarea" spellcheck="false" :autosize="{ minRows: 2}" :readonly="paramvalRead" v-model="crud.formData.paramBackup"></el-input>
166
+ </el-form-item>
167
+ </div>
168
+ </el-col>
169
+ </el-row>
170
+ <el-row>
171
+ <el-col :span="24">
172
+ <el-form-item label="提示" label-width="150px">
173
+ <span style="color:red;font-size: 14px">
174
+ 一:除自定义外,参数值由参数值类型配置生成<span style="padding-left: 10px"></span>
175
+ 二:单选格式:是,否,或(选中:是)<span style="padding-left: 10px"></span> 三:复选格式:是,否,或(选中:是,否)<br/>
176
+ 四:下拉格式:{'yes':'是'},{'no':'否'}(选中:{'yes':'是'})
177
+ <span style="padding-left: 10px"></span>五:下拉多选格式:{'yes':'是','no':'否','or':'或'}(选中:{'yes':'是','no':'否'})</span>
178
+ </el-form-item>
179
+ </el-col>
180
+ </el-row>
181
+
182
+ </el-form>
183
+ <div slot="footer" class="dialog-footer">
184
+ <el-button type="primary" @click="submit()" size="small" icon="el-icon-success">确定</el-button>
185
+ <el-button @click="crud.dialogVisible = false" size="small" icon="el-icon-error">取 消</el-button>
186
+ </div>
187
+ </el-dialog>
188
+ <el-dialog :close-on-click-modal=false :visible.sync="settingshow" title="配置" height="50%" top="25vh" width="40%" lock-scroll>
189
+ <el-form v-for="(item,index) in settingOptions" :key="index" :model="item" ref="settingForm">
190
+ <div v-if="caseSelect">
191
+ <el-row>
192
+ <el-col :span="10">
193
+ <el-form-item :label="'选项'+(index+1)+'键'" label-width="100px" prop="key" :rules="[
194
+ { required: true, message: '请填写内容', trigger: 'blur' }
195
+ ]">
196
+ <el-input v-model="item.key" style="width: 100%"></el-input>
197
+ </el-form-item>
198
+ </el-col>
199
+ <el-col :span="10">
200
+ <el-form-item :label="'选项'+(index+1)+'值'" label-width="100px" prop="value" :rules="[
201
+ { required: true, message: '请填写内容', trigger: 'blur' }
202
+ ]">
203
+ <el-input v-model="item.value" style="width: 100%"></el-input>
204
+ </el-form-item>
205
+ </el-col>
206
+ <el-col :span="4" style="text-align: center">
207
+ <el-button @click="removeOption(index)">删除选项</el-button>
208
+ </el-col>
209
+ </el-row>
210
+ </div>
211
+ <div v-else>
212
+ <el-row>
213
+ <el-col :span="24">
214
+ <el-form-item :label="'选项'+(index+1)" label-width="180px" prop="value" :rules="[
215
+ { required: true, message: '请填写内容', trigger: 'blur' }
216
+ ]">
217
+ <el-input v-model="item.value" style="width: 60%"></el-input>
218
+ <el-button @click="removeOption(index)">删除选项</el-button>
219
+ </el-form-item>
220
+ </el-col>
221
+ </el-row>
222
+ </div>
223
+ </el-form>
224
+ <div style="text-align: center"><el-button @click="appendOption">添加选项</el-button></div>
225
+ <div slot="footer" class="dialog-footer">
226
+ <el-button type="primary" @click="sure()" size="small" icon="el-icon-success">确定</el-button>
227
+ <el-button @click="settingshow = false" size="small" icon="el-icon-error">取 消</el-button>
228
+ </div>
229
+ </el-dialog>
230
+ </el-container>
231
+ </template>
232
+
233
+ <script>
234
+ export default {
235
+ name:"sys-param",
236
+ data(){
237
+ return {
238
+ crud: new this.CrudUtil({
239
+ vue: this,
240
+ entityName: "sysParam",
241
+ url: this.api.param.url,
242
+ initNoSearch:true,
243
+ }),
244
+ loginUser:{},
245
+ activeNames: '0',//初始化选中tab页
246
+ paramFormData:[],//页面表单数据
247
+ removeIds:[],//删除的数据ids
248
+ originData:[],//初始化请求数据,与修改后比对值,确定是否修改
249
+ editFormId:"",//当前编辑的数据Id
250
+ updateIds:[],//修改的参数ids
251
+ editIndex:'',//当前编辑的数据index
252
+ settingshow:false,//控制设置页面显示
253
+ caseSelect:true,//根据下拉框类型生成配置选项
254
+ caseDisabled:false,//是否禁用对应控件
255
+ caseUpdate:true,//参数键值只能添加时能修改
256
+ tabparamOptions:[{"label":"系统参数","value":[]}],//tab页表单数据类型
257
+ allKind:[],//所有分类
258
+ options:[],//级联下拉数据
259
+ settingOptions:[],//参数值类型下拉选项配置
260
+ caseRead:false,//输入框等是否能够编辑
261
+ paramvalRead:true,//参数配置值是否能够编辑
262
+ typeOptions:[{value: 'radio',label: '单选'},{value: 'checkbox',label: '复选'},{value: 'select',label: '下拉选'},
263
+ {value: 'multiSelect',label: '下拉多选'},{value: 'diy',label: '自定义文本'},{value: 'textarea',label: '自定义长文本'}],
264
+ clickType:false,//控制编辑类型
265
+ initLoading:true,
266
+ showKey:false, // 到底是展示参数名还是参数键值(默认参数名)
267
+ };
268
+ },
269
+ created(){
270
+ this.loginUser = this.USER_GLOBAL.getLoginUser();
271
+ this.initoriginData(); // 初始化仅加载一次的数据
272
+ },
273
+ watch: {
274
+ loginUser(){
275
+ let vm = this;
276
+ if(vm.loginUser){
277
+ if(vm.loginUser.userType != 'sup'){
278
+ vm.caseDisabled = true;
279
+ for(let elem of vm.options){
280
+ if(elem.value == 'system'){
281
+ elem.disabled = true;
282
+ }
283
+ }
284
+ }else{
285
+ vm.caseDisabled = false;
286
+ for(let elem of vm.options){
287
+ if(elem.value == 'system'){
288
+ elem.disabled = false;
289
+ }
290
+ }
291
+ }
292
+ }
293
+ }
294
+ },
295
+ methods: {
296
+ init(){
297
+ let vm = this;
298
+ vm.initLoading = true;
299
+ vm.axios.post(vm.api.param.find).then(function (res) {
300
+ res.data = res.data.sort(vm.sort);
301
+ let countnokind = 0;//计算未分类数据
302
+ for(let elem of res.data.values()){
303
+ // 替换旧数据
304
+ if(elem.sysParamType){
305
+ elem.sysParamType = elem.sysParamType.replace("3a87acf3d7f844c2bc429e701bc00538","业务参数");
306
+ elem.sysParamType = elem.sysParamType.replace("dc556d76182c4f518ce12742c26cafce","初始化参数");
307
+ elem.sysParamType = elem.sysParamType.replace("07c22fa7807e4ea68490365448c98aa0","权限参数");
308
+ elem.sysParamType = elem.sysParamType.replace("81afdb1e4ee344f4844a404a013130cf","地图参数");
309
+ elem.sysParamType = elem.sysParamType.replace("a762007266924556be3acd5bf5cedfe4","日志参数");
310
+ elem.sysParamType = elem.sysParamType.replace("5b8322428527409cb7a8304e4bbfb82d","其他参数");
311
+ elem.sysParamType = elem.sysParamType.replace("6598","附件参数");
312
+ }
313
+
314
+ if(vm.showKey){ // 储存参数名称,如果转换后就使用paramKey
315
+ elem.paramRealName = elem.paramKey;
316
+ }else{
317
+ elem.paramRealName = elem.paramName;
318
+ }
319
+ elem.ifUpdate = false;//修改标记
320
+ if(vm.allKind.indexOf(elem.sysParamType) == -1){
321
+ countnokind++;
322
+ elem.sysParamType = 'serve,nokind';
323
+ }
324
+ vm.preDeal(elem);
325
+ vm.dealData(elem);
326
+ }
327
+ if(countnokind == 0){
328
+ for(let index in vm.tabparamOptions){
329
+ if(vm.tabparamOptions[index].label == '未分类'){
330
+ vm.tabparamOptions.splice(index,1);
331
+ }
332
+ }
333
+ }
334
+
335
+ vm.originData = JSON.parse(JSON.stringify(res.data));
336
+ vm.paramFormData = res.data;
337
+ vm.initLoading = false;
338
+ })
339
+ },
340
+ initoriginData(){
341
+ let vm =this;
342
+ vm.axios.post(vm.api.param.getSysParams,{key:'sysParamKind'}).then(res => {
343
+ let kind = res.data;
344
+ if(!kind){
345
+ kind = "{'system':'初始化参数,权限参数,地图参数,日志参数,其他参数','serve':'业务参数','upload':'附件参数'}";
346
+ }
347
+ kind = vm.platStringUtil.replaceAll(kind,",",",");
348
+ let sysParamKind = JSON.parse(vm.platStringUtil.replaceAll(kind,"'","\""));
349
+ let resData = {};
350
+ resData["system"] = [];
351
+ resData["serve"] = [];
352
+ resData["upload"] = [];
353
+ (sysParamKind["system"] || "").split(",").forEach(name => {
354
+ if(name){
355
+ resData["system"].push({
356
+ id:name,
357
+ dataName:name,
358
+ })
359
+ }
360
+ });
361
+ (sysParamKind["serve"] || "").split(",").forEach(name => {
362
+ if(name){
363
+ resData["serve"].push({
364
+ id:name,
365
+ dataName:name,
366
+ })
367
+ }
368
+ });
369
+ (sysParamKind["upload"] || "").split(",").forEach(name => {
370
+ if(name){
371
+ resData["upload"].push({
372
+ id:name,
373
+ dataName:name,
374
+ })
375
+ }
376
+ });
377
+
378
+ vm.tabparamOptions = [];
379
+ let systemOption = {"label":"系统参数","value":[]};
380
+ let serveOption = {"label":"业务参数","value":[]};
381
+ let uploadOption = {"label":"附件参数","value":[]};
382
+ let noKindOption = {"label":"未分类","value":[]};
383
+ if(resData && resData.system.length > 0){
384
+ let result = resData.system;
385
+ let option = {value: 'system', label: '系统参数',children:[]};
386
+ for(let item of result){//子数据
387
+ if(vm.allKind.indexOf('system,'+item.id) == -1){//确定所有参数类型
388
+ vm.allKind.push('system,'+item.id);
389
+ }
390
+ systemOption.value.push({"value":'system,'+item.id,"label":item.dataName});
391
+ option.children.push({"value":item.id,"label":item.dataName});
392
+ }
393
+ vm.options.push(option);
394
+ }
395
+ if(resData && resData.serve.length > 0){
396
+ let result = resData.serve;
397
+ let option = {value: 'serve', label: '业务参数',children:[]};
398
+ for(let item of result){//子数据
399
+ if(vm.allKind.indexOf('serve,'+item.id) == -1){//确定所有参数类型
400
+ vm.allKind.push('serve,'+item.id);
401
+ }
402
+ serveOption.value.push({"value":'serve,'+item.id,"label":item.dataName});
403
+ option.children.push({"value":item.id,"label":item.dataName});
404
+ }
405
+ vm.options.push(option);
406
+ }
407
+ if(resData && resData.upload.length > 0){
408
+ let result = resData.upload;
409
+ let option = {value: 'upload', label: '附件参数',children:[]};
410
+ for(let item of result){//子数据
411
+ if(vm.allKind.indexOf('upload,'+item.id) == -1){//确定所有参数类型
412
+ vm.allKind.push('upload,'+item.id);
413
+ }
414
+ uploadOption.value.push({"value":'upload,'+item.id,"label":item.dataName});
415
+ option.children.push({"value":item.id,"label":item.dataName});
416
+ }
417
+ vm.options.push(option);
418
+ }
419
+ noKindOption.value.push({"value":'serve,nokind',"label":"未分类"});//有些元数据删除后数据无归属将不显示
420
+ vm.tabparamOptions.push(systemOption);
421
+ vm.tabparamOptions.push(serveOption);
422
+ vm.tabparamOptions.push(uploadOption);
423
+ vm.tabparamOptions.push(noKindOption);
424
+ if(vm.loginUser.userType != 'sup'){
425
+ vm.caseDisabled = true;
426
+ for(let elem of vm.options){
427
+ if(elem.value == 'system'){
428
+ elem.disabled = true;
429
+ }
430
+ }
431
+ }else{
432
+ vm.caseDisabled = false;
433
+ for(let elem of vm.options){
434
+ if(elem.value == 'system'){
435
+ elem.disabled = false;
436
+ }
437
+ }
438
+ }
439
+ vm.init();
440
+ })
441
+ },
442
+ preDeal(elem){//预处理数据,将部分系统参数转化显示方式
443
+ let temArr = [{'logOperationLog':'1'},{'errorJavaLog':'1'},{'errorFrontLog':'1'},{'logLoginLog':'1'},
444
+ {'SysOperation':'是'},{'SysDataOperation':'是'},{'rememberUserName':'Y'} ];
445
+ for(let tempElem of temArr){
446
+ if(tempElem[elem.paramKey]){
447
+ elem.paramBackup = '是,否';
448
+ if(elem.paramVal.indexOf(tempElem[elem.paramKey]) > -1){
449
+ elem.paramVal = '是';
450
+ }else{
451
+ elem.paramVal = '否';
452
+ }
453
+ }
454
+ }
455
+ if(elem.paramKey == 'uploadPath'){
456
+ elem.paramVal = JSON.parse(elem.paramVal.replace(/\'/g,"\"")).url;
457
+ }
458
+ return elem;
459
+ },
460
+ afterDeal(elem){//保存时转回数据至数据库
461
+ let temArr = [{'logOperationLog':{'是':'1','否':'0',}},{'errorJavaLog':{'是':'1','否':'0'}},{'errorFrontLog':{'是':'1','否':'0'}},
462
+ {'logLoginLog':{'是':'1','否':'0',}}, {'SysOperation':{'是':'{\'opt\':\'是\'}','否':'{\'opt\':\'否\'}'}},
463
+ {'SysDataOperation':{'是':'{\'opt\':\'是\'}','否':'{\'opt\':\'否\'}'}},{'rememberUserName':{'是':'Y','否':'N'}}];
464
+ let result = elem.paramVal;
465
+ for(let tempElem of temArr){
466
+ if(tempElem[elem.paramKey]){
467
+ result = tempElem[elem.paramKey][elem.paramVal];
468
+ }
469
+ }
470
+ if(elem.paramKey == 'uploadPath'){
471
+ let obj = {};
472
+ obj['url'] = elem.paramVal;
473
+ return JSON.stringify(obj);
474
+ }
475
+ return result;
476
+ },
477
+ dealData(elem){//处理数据库中String数据,转化为JSON,将控件展示于页面
478
+ let arr = [];
479
+ let arrval = [];
480
+ switch (elem.paramType) {
481
+ case 'multiSelect':
482
+ case 'select':
483
+ elem.paramBackup = elem.paramBackup && JSON.parse(elem.paramBackup.replace(/\'/g,"\""));
484
+ try{
485
+ elem.paramVal = elem.paramVal && JSON.parse(elem.paramVal.replace(/\'/g,"\""));//由于填写的值不合select规范
486
+ }catch (e) {
487
+ elem.paramVal = '';//设置为''
488
+ }
489
+ elem.paramBackup && Object.keys(elem.paramBackup).forEach(function (key) {
490
+ let tempObj = {};
491
+ tempObj["key"] = key;
492
+ tempObj["value"] = elem.paramBackup[key];
493
+ arr.push(tempObj);
494
+ });
495
+ elem.paramVal && Object.keys(elem.paramVal).forEach(function (key) {
496
+ let tempvalObj = {};
497
+ tempvalObj["key"] = key;
498
+ tempvalObj["value"] = elem.paramVal[key];
499
+ if(elem.paramType == 'select'){
500
+ elem.paramVal = tempvalObj;
501
+ }
502
+ arrval.push(tempvalObj);
503
+ });
504
+ elem.paramBackup = arr;
505
+ if(elem.paramType == 'multiSelect'){
506
+ elem.paramVal = arrval;
507
+ }
508
+ break;
509
+ case 'radio':
510
+ elem.paramBackup = elem.paramBackup && elem.paramBackup.split(',');
511
+ break;
512
+ case 'checkbox':
513
+ elem.paramBackup = elem.paramBackup && elem.paramBackup.split(',');
514
+ elem.paramVal = elem.paramVal && elem.paramVal.split(',');
515
+ break;
516
+ }
517
+ return elem;
518
+ },
519
+ sort(a,b){
520
+ let obj = {"radio":0,"checkbox":1,"select":2,"multiSelect":3,"diy":4,"textarea":5};
521
+ if(a.paramType == b.paramType){
522
+ return a.sort - b.sort;
523
+ }else{
524
+ return obj[a.paramType] - obj[b.paramType];
525
+ }
526
+ },
527
+ paramValChange(newValue){//值类型变化时,如果是自定义则参数值可以自定义修改,否则设置为只读,并清空数据
528
+ let vm = this;
529
+ vm.paramvalRead = !(newValue == 'diy' || newValue == 'textarea');
530
+ vm.$set(vm.crud.formData,"paramBackup","");
531
+ },
532
+ endEdit() {
533
+ let vm = this;
534
+ //先执行删除,再执行数据更新
535
+ if(vm.removeIds.length>0){
536
+ vm.axios.post(vm.api.param.delete,{'ids':vm.removeIds.join(",")}).then(function () {
537
+ vm.removeIds = [];
538
+ vm.init();
539
+ });
540
+ }
541
+ if(vm.updateIds.length>0){
542
+ let submitArr = [];
543
+ for(let elem of vm.paramFormData){
544
+ if(vm.updateIds.indexOf(elem.id) > -1){//如果在更新ids中。执行update
545
+ elem.sysParamType = elem.sysParamType.join(',');
546
+ let submitData = {};
547
+ let tempObj = {};
548
+ let tempvalObj = {};
549
+ let tempElem = JSON.parse(JSON.stringify(elem));
550
+ switch (tempElem.paramType) {
551
+ case 'multiSelect':
552
+ for(let arrVal of tempElem.paramBackup){
553
+ tempObj[arrVal['key']] = arrVal['value'];
554
+ }
555
+ for(let arrVal of tempElem.paramVal){
556
+ tempvalObj[arrVal['key']] = arrVal['value'];
557
+ }
558
+ tempElem.paramBackup = JSON.stringify(tempObj);
559
+ tempElem.paramVal = JSON.stringify(tempvalObj);
560
+ break;
561
+ case 'select':
562
+ for(let arrVal of tempElem.paramBackup){
563
+ tempObj[arrVal['key']] = arrVal['value'];
564
+ }
565
+ tempvalObj[tempElem.paramVal.key] = tempElem.paramVal.value;
566
+ tempElem.paramBackup = JSON.stringify(tempObj);
567
+ tempElem.paramVal = JSON.stringify(tempvalObj);
568
+ break;
569
+ case 'radio':
570
+ tempElem.paramBackup = tempElem.paramBackup && tempElem.paramBackup.join(',');
571
+ tempElem.paramVal = vm.afterDeal(tempElem);
572
+ break;
573
+ case 'checkbox':
574
+ tempElem.paramBackup = tempElem.paramBackup && tempElem.paramBackup.join(',');
575
+ tempElem.paramVal = tempElem.paramVal && tempElem.paramVal.join(',');
576
+ break;
577
+ default:
578
+ tempElem.paramVal = vm.afterDeal(tempElem);
579
+ break;
580
+ }
581
+ Object.keys(tempElem).forEach(function (key) {
582
+ if(key != "paramRealName"){
583
+ submitData[key] = tempElem[key];
584
+ }
585
+ });
586
+ submitArr.push(submitData);
587
+ }
588
+ }
589
+ vm.axios.post(vm.api.param.batchUpdate,{'updateObj':JSON.stringify(submitArr)}).then(res => {
590
+ if(res.data.operateSuccess){
591
+ vm.$message({
592
+ duration: 1000,
593
+ type: 'success',
594
+ message: res.data.operateMessage
595
+ });
596
+ vm.updateIds = [];
597
+ vm.init();
598
+ }else{
599
+ vm.$message({
600
+ duration: 1000,
601
+ type: 'error',
602
+ message: res.data.operateMessage
603
+ });
604
+ }
605
+ });
606
+ }
607
+ },
608
+ add(){
609
+ let vm = this;
610
+ vm.caseRead = false;//输入框等是否能够编辑
611
+ vm.caseDisabled = false;//是否禁用控件
612
+ vm.caseUpdate = false;
613
+ vm.paramvalRead = false;
614
+ vm.crud.formData = {
615
+ paramType:'diy'
616
+ };
617
+ vm.crud.dialogVisible = true;
618
+ vm.crud.optCode = "add";
619
+ vm.crud.clearFormValidate();
620
+ },
621
+ formSave(){//表单保存,只保存修改的,未修改的不更新
622
+ let vm = this;
623
+ let submitArr = [];
624
+ for(let i = 0 ; i < vm.originData.length ; i++){
625
+ if(!vm.isEqual(vm.originData[i].paramVal,vm.paramFormData[i].paramVal)){//数据变化了
626
+ let result = '';
627
+ let temValObj = {};
628
+ let tempObj = {};
629
+ switch (vm.paramFormData[i].paramType) {
630
+ case 'multiSelect':
631
+ for(let elem of vm.paramFormData[i].paramVal.values()){
632
+ tempObj[elem.key] = elem.value;
633
+ }
634
+ result = JSON.stringify(tempObj);
635
+ break;
636
+ case 'select':
637
+ tempObj[vm.paramFormData[i].paramVal.key] = vm.paramFormData[i].paramVal.value;
638
+ result = JSON.stringify(tempObj);
639
+ break;
640
+ case 'checkbox':
641
+ result = vm.paramFormData[i].paramVal && vm.paramFormData[i].paramVal.join(',');
642
+ break;
643
+ case 'radio':
644
+ result = vm.afterDeal(vm.paramFormData[i]);
645
+ break;
646
+ default:
647
+ result = vm.paramFormData[i].paramVal;
648
+ if(vm.paramFormData[i].paramKey == 'uploadPath'){
649
+ result = vm.afterDeal(vm.paramFormData[i]);
650
+ }
651
+ break;
652
+ }
653
+ temValObj['paramVal'] = result;
654
+ temValObj['paramKey'] = vm.paramFormData[i].paramKey;
655
+ temValObj['id'] = vm.paramFormData[i].id;
656
+ temValObj['sort'] = vm.paramFormData[i].sort; // 后台排序是Int不传会变成0
657
+ submitArr.push(temValObj);
658
+ }
659
+ }
660
+ vm.axios.post(vm.api.param.batchUpdate,{'updateObj':JSON.stringify(submitArr)}).then(function (res) {
661
+ vm.crud.vue.$message({
662
+ duration: 1000,
663
+ type: 'success',
664
+ message: res.data.operateMessage
665
+ });
666
+ vm.init();
667
+ });
668
+ },
669
+ submit(){//表单提交,新增直接提交,update假提交,完成编辑则提交
670
+ let vm = this;
671
+ vm.$refs[vm.crud.setting.addFormRef].validate(function (valid) {
672
+ if(valid){
673
+ if(vm.editFormId){
674
+ if(JSON.stringify(vm.crud.formData) == '{}'){
675
+ vm.$message('请等待数据加载完成!');
676
+ return;
677
+ }
678
+ vm.crud.optCode = 'update';
679
+ if(vm.showKey){
680
+ vm.crud.formData.paramRealName = vm.crud.formData.paramKey;
681
+ }else{
682
+ vm.crud.formData.paramRealName = vm.crud.formData.paramName;
683
+ }
684
+
685
+ vm.crud.formData = vm.preDeal(vm.crud.formData);
686
+ //将数据使用JSON.parse,stringify转化,这样相当于新对象,不会转换后影响表单数据产生报错
687
+ vm.paramFormData[vm.editIndex] = vm.dealData(JSON.parse(JSON.stringify(vm.crud.formData)));
688
+ if(vm.updateIds.indexOf(vm.editFormId) == -1){
689
+ vm.updateIds.push(vm.editFormId);//置入更新数据的id
690
+ }
691
+ vm.endEdit();
692
+ vm.crud.dialogVisible = false;
693
+ vm.editFormId = '';
694
+ }else{
695
+ vm.crud.optCode = 'add';
696
+ let tempObj = {};
697
+ let formObj = JSON.parse(JSON.stringify(vm.crud.formData));
698
+ formObj.sysParamType = formObj.sysParamType.join(',');
699
+ if(formObj.paramType == 'diy' || formObj.paramType == 'textarea'){// 如果是自定义,我们新增的时候将数据设置为参数值
700
+ formObj.paramVal = formObj.paramBackup;
701
+ }
702
+ for(let elem in formObj){
703
+ tempObj[elem] = formObj[elem];
704
+ }
705
+ vm.axios.post(vm.api.param.add,tempObj).then(function (res) {
706
+ vm.crud.vue.$message({
707
+ duration: 1000,
708
+ type: 'success',
709
+ message: res.data.operateMessage
710
+ });
711
+ vm.endEdit();
712
+ vm.crud.dialogVisible = false;
713
+ vm.init();
714
+ });
715
+ }
716
+ }
717
+ })
718
+ },
719
+ updateForm(index){//修改指定参数
720
+ let vm = this;
721
+ vm.caseUpdate = true;
722
+ vm.editFormId = vm.paramFormData[index].id;
723
+ vm.caseRead = false;
724
+ vm.caseDisabled = false;
725
+ if(vm.loginUser.userType != 'sup'){
726
+ vm.caseRead = true;
727
+ }
728
+ vm.editIndex = index;
729
+ vm.initsysParamForm();
730
+ vm.crud.dialogVisible = true;
731
+ },
732
+ initsysParamForm(){//获取表单数据
733
+ let vm = this;
734
+ vm.crud.formData = {};//进入之前先修改数据值,抛弃页面原数据
735
+ if(!vm.editFormId){
736
+ vm.crud.formData = {};
737
+ return;
738
+ }
739
+ vm.axios.post(vm.api.param.getById,{"id":vm.editFormId}).then(function (res) {
740
+ let data = res.data;
741
+ if(vm.loginUser.userType != 'sup' && data.sysParamType && data.sysParamType.indexOf('system') > -1){
742
+ vm.caseDisabled = true;
743
+ }
744
+
745
+ if(data.sysParamType){
746
+ data.sysParamType = data.sysParamType.replace("3a87acf3d7f844c2bc429e701bc00538","业务参数");
747
+ data.sysParamType = data.sysParamType.replace("dc556d76182c4f518ce12742c26cafce","初始化参数");
748
+ data.sysParamType = data.sysParamType.replace("07c22fa7807e4ea68490365448c98aa0","权限参数");
749
+ data.sysParamType = data.sysParamType.replace("81afdb1e4ee344f4844a404a013130cf","地图参数");
750
+ data.sysParamType = data.sysParamType.replace("a762007266924556be3acd5bf5cedfe4","日志参数");
751
+ data.sysParamType = data.sysParamType.replace("5b8322428527409cb7a8304e4bbfb82d","其他参数");
752
+ data.sysParamType = data.sysParamType.replace("6598","附件参数");
753
+ }
754
+
755
+ if(data.paramType == 'diy' || data.paramType == 'textarea' || !data.paramType){
756
+ vm.paramvalRead = false;
757
+ data.paramBackup = data.paramVal;
758
+ }else{
759
+ vm.paramvalRead = true;
760
+ }
761
+ data.sysParamType = (data.sysParamType || "").split(',');
762
+ vm.crud.formData = res.data;
763
+ })
764
+ },
765
+ doRemove(index){//移除参数,假移除,完成编辑则真移除
766
+ let vm = this;
767
+ let removeId = vm.paramFormData[index].id;
768
+ if(removeId){
769
+ vm.$confirm('确定要删除吗?', '警告', {
770
+ confirmButtonText: '确定',
771
+ cancelButtonText: '取消',
772
+ }).then(function () {
773
+ vm.paramFormData.splice(index,1);//移除dom
774
+ vm.originData.splice(index,1);//移除原始数据中的数据,比对的时候index不会错乱
775
+ if(vm.removeIds.indexOf(removeId) == -1){
776
+ vm.removeIds.push(removeId);
777
+ }
778
+ });
779
+ }
780
+ },
781
+ settingOption(){//编辑表单配置参数
782
+ let vm = this;
783
+ if(!vm.crud.formData.paramType || vm.crud.formData.paramType == 'diy' || vm.crud.formData.paramType == 'textarea'){
784
+ vm.$message('当前类型不需要配置!');
785
+ return;
786
+ }
787
+
788
+ vm.caseSelect = vm.crud.formData.paramType == 'select' || vm.crud.formData.paramType == 'multiSelect';
789
+
790
+ //初始化settingOptions
791
+ vm.settingOptions = [];
792
+ if(vm.crud.formData.paramBackup){
793
+ if(vm.caseSelect){
794
+ let data;
795
+ try{
796
+ data = JSON.parse(vm.crud.formData.paramBackup);
797
+ }catch (e) {
798
+ data = {};
799
+ vm.settingOptions.push({});vm.settingOptions.push({});
800
+ }
801
+ Object.keys(data).forEach(function (key) {
802
+ let obj = {};
803
+ obj["key"] = key;
804
+ obj["value"] = data[key];
805
+ vm.settingOptions.push(obj);
806
+ })
807
+ }else{
808
+ for(let elem of vm.crud.formData.paramBackup.split(",")){
809
+ let obj = {};
810
+ obj['value'] = elem;
811
+ vm.settingOptions.push(obj);
812
+ }
813
+ }
814
+ }else{
815
+ vm.settingOptions.push({});vm.settingOptions.push({});
816
+ }
817
+
818
+ vm.settingshow = true;
819
+ },
820
+ sure(){//完成后更新表单备选参数
821
+ let vm = this;
822
+ vm.$refs.settingForm[0].validate(function (valid) {
823
+ if(valid){
824
+ if(vm.caseSelect){
825
+ let obj = {};
826
+ for(let elem of vm.settingOptions){
827
+ obj[elem['key']] = elem['value'];
828
+ }
829
+ vm.$set(vm.crud.formData,"paramBackup",JSON.stringify(obj));
830
+ }else{
831
+ let arr = [];
832
+ for(let elem of vm.settingOptions){
833
+ arr.push(elem['value']);
834
+ }
835
+ vm.$set(vm.crud.formData,"paramBackup",arr.join(','));
836
+ }
837
+ }
838
+ vm.settingshow = false;
839
+ })
840
+ },
841
+ removeOption(index){//移除选项
842
+ if(this.settingOptions.length <= 2){
843
+ this.$message('配置不可低于两个选项!');
844
+ return;
845
+ }
846
+ this.settingOptions.splice(index,1);
847
+ },
848
+ appendOption(){//添加选项
849
+ this.settingOptions.push({});
850
+ },
851
+ isEqual(obj1,obj2){
852
+ let vm = this;
853
+ let o1 = obj1 instanceof Object;
854
+ let o2 = obj2 instanceof Object;
855
+ if(!o1 || !o2){/* 判断不是对象 */
856
+ return obj1 === obj2;
857
+ }
858
+
859
+ if(Array.isArray(obj1) && Array.isArray(obj2)){
860
+ return vm.compareArray(obj1,obj2);
861
+ }
862
+
863
+ if(Object.keys(obj1).length !== Object.keys(obj2).length){
864
+ return false;
865
+ }
866
+
867
+ for(let attr in obj1){
868
+ if (obj1.hasOwnProperty(attr)) {
869
+ let t1 = obj1[attr] instanceof Object;
870
+ let t2 = obj2[attr] instanceof Object;
871
+ if(t1 && t2){
872
+ return this.isEqual(obj1[attr],obj2[attr]);
873
+ }else if(obj1[attr] !== obj2[attr]){
874
+ return false;
875
+ }
876
+ }
877
+ }
878
+ return true;
879
+ },
880
+ compareArray(array1,array2){
881
+ let vm = this;
882
+ if(array1.length != array2.length){
883
+ return false;
884
+ }
885
+ let obj = {}; // 记录已经比对过的数组序号
886
+ for(let i = 0 ; i < array1.length ; i++){
887
+ let caculate = true;
888
+ for(let j = 0; j < array2.length ; j++){
889
+ if(obj[j]){ // 已经比对过,跳过
890
+ continue;
891
+ }
892
+ caculate = vm.isEqual(array1[i],array2[j]);
893
+ if(caculate){
894
+ obj[j] = i;
895
+ break;
896
+ }
897
+ }
898
+ if(!caculate){
899
+ break;
900
+ }
901
+ }
902
+ return Object.keys(obj).length == array1.length;
903
+ },
904
+ transParamKeyVal(){
905
+ let vm = this;
906
+ vm.showKey = !vm.showKey;
907
+ (vm.paramFormData || []).forEach(item=>{
908
+ if(vm.showKey){
909
+ item.paramRealName = item.paramKey;
910
+ }else{
911
+ item.paramRealName = item.paramName;
912
+ }
913
+ })
914
+ }
915
+ }
916
+ }
917
+ </script>
918
+
919
+ <style scoped>
920
+ fieldset{
921
+ margin-top: 10px;
922
+ }
923
+ legend{
924
+ font-size: 14px;
925
+ }
926
+ .button_header{
927
+ position: absolute;
928
+ height: 60px!important;
929
+ text-align: center;
930
+ line-height: 60px;
931
+ bottom: 0;
932
+ border-top: 1px solid #f2f2f2;
933
+ background-color: white;
934
+ margin: auto;
935
+ width: 100%;
936
+ right: 0;
937
+ z-index: 99;
938
+ }
939
+ .control_box{
940
+ padding-right: 100px;
941
+ position: relative;
942
+ }
943
+ .operate_div{
944
+ position: absolute;
945
+ right: 0;
946
+ top: 0;
947
+ bottom: 0;
948
+ margin: auto;
949
+ width: 100px;
950
+ }
951
+ .operate_div i{
952
+ /*margin-right: 20px;*/
953
+ cursor: pointer;
954
+ width: 30px;
955
+ height: 30px;
956
+ padding-top: 15px;
957
+ padding-left: 15px;
958
+ float: left;
959
+ }
960
+ .top_contain{
961
+ height: 100%;
962
+ /*border-radius:8px;*/
963
+ overflow-y: hidden;
964
+ }
965
+ .top_contain::-webkit-scrollbar{
966
+ width: 0;
967
+ }
968
+ </style>
969
+ <style>
970
+ .black .el-form-item__label{
971
+ color: black;
972
+ }
973
+ .green .el-form-item__label{
974
+ color: #27B5C3;
975
+ }
976
+ .settingClass{
977
+ width: 100%;
978
+ height: 40px;
979
+ position: relative;
980
+ }
981
+ .settingClass span{
982
+ position: absolute;
983
+ top:0;left:0;
984
+ right: 0;bottom: 0;
985
+ margin: auto;line-height: 40px;
986
+ }
987
+ </style>