sasp-admin 0.2.62 → 0.2.64

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 (63) hide show
  1. package/index.js +38 -31
  2. package/package.json +1 -1
  3. package/router.js +5 -1
  4. package/src/assets/font/iconfont.css +1902 -1846
  5. package/src/assets/font/iconfont.eot +0 -0
  6. package/src/assets/font/iconfont.js +1 -1
  7. package/src/assets/font/iconfont.svg +959 -825
  8. package/src/assets/font/iconfont.ttf +0 -0
  9. package/src/assets/font/iconfont.woff +0 -0
  10. package/src/assets/js/api/apiAdmin.js +10 -0
  11. package/src/assets/js/global/dataGlobal.js +7 -3
  12. package/src/assets/js/global/userGlobal.js +9 -3
  13. package/src/components/complexViewRendering.vue +214 -198
  14. package/src/components/ifmLink.vue +20 -3
  15. package/src/components/public/data/plDataSelect.vue +8 -6
  16. package/src/components/public/org/sysOrgPosUserSelect.vue +61 -22
  17. package/src/components/public/upload/images/ofd.png +0 -0
  18. package/src/components/public/upload/plImage.vue +3 -1
  19. package/src/components/public/upload/plUpload.vue +167 -40
  20. package/src/components/public/upload/preview/OfdPreview.vue +223 -0
  21. package/src/components/public/upload/preview/officeViewer.vue +116 -0
  22. package/src/components/public/upload/preview/pdfPreview.vue +91 -0
  23. package/src/{views → components/public/upload}/preview/pdfViewer.vue +1 -1
  24. package/src/views/VueMenuView.vue +11 -13
  25. package/src/views/data/dataManage.vue +51 -5
  26. package/src/views/event/eventManager/vueEventDiy.vue +4 -6
  27. package/src/views/log/loginlog/logManageDevOrSup.vue +8 -5
  28. package/src/views/log/loginlog/logManageEnt.vue +96 -55
  29. package/src/views/log/loginlog/logManageGov.vue +8 -5
  30. package/src/views/menu/component/menuManageComponent.vue +3 -5
  31. package/src/views/menuRouter/menuView.vue +226 -117
  32. package/src/views/menuRouter/urlMenuRouter.vue +13 -16
  33. package/src/views/org/entOrgTree.vue +1 -3
  34. package/src/views/org/js/sysOrgUserDetailMixins.js +646 -0
  35. package/src/views/org/sysEntOrgUserDetail.vue +10 -632
  36. package/src/views/org/sysOrgDimension.vue +4 -8
  37. package/src/views/org/sysOrgPosUserDetail.vue +4 -619
  38. package/src/views/org/sysOrgTree.vue +7 -9
  39. package/src/views/param/sysParam.vue +2 -0
  40. package/src/views/resources/resRouter/resView.vue +9 -11
  41. package/src/views/resources/tabs/comp/pageResRegister.vue +3 -5
  42. package/src/views/resources/tabs/dataResources.vue +3 -1
  43. package/src/views/resources/tabs/pageResources.vue +3 -1
  44. package/src/views/role/authRole/component/allocateSetting.vue +2 -589
  45. package/src/views/role/authRole/component/authSetting.vue +2 -597
  46. package/src/views/role/authRole/component/js/authMixins.js +622 -0
  47. package/src/views/role/commonRole/commonRole.vue +122 -3
  48. package/src/views/role/commonRole/compoment/commonSetting.vue +4 -6
  49. package/src/views/role/commonRole/compoment/commonSettingAdjust.vue +2 -89
  50. package/src/views/role/commonRole/compoment/commonSettingNew.vue +13 -97
  51. package/src/views/role/commonRole/compoment/js/commonSettingMixins.js +90 -0
  52. package/src/views/role/commonRole/compoment/roleMenuPower.vue +17 -2
  53. package/src/views/role/commonRole/compoment/roleMenuSetting.vue +12 -5
  54. package/src/views/sms/sendSms.vue +1 -1
  55. package/src/views/threeinone/init/safeInitRegion.vue +2 -4
  56. package/src/views/threeinone/safeManager.vue +1 -0
  57. package/src/views/threeinone/safeOrgSpv.vue +360 -337
  58. package/src/views/threeinone/safeSpvEconView.vue +37 -17
  59. package/src/views/uploadManage/uploadManage.vue +133 -0
  60. package/src/views/user/empowerUser/empowerUserListViewMenuTree.vue +6 -2
  61. package/src/views/user/stationUserManage.vue +3 -5
  62. package/src/views/user/userManage.vue +99 -3
  63. package/src/views/user/userMangement.vue +4 -6
@@ -1,6 +1,11 @@
1
1
  <!--外部超链接-->
2
2
  <template>
3
- <div id="ifmLinkContrainer">
3
+ <div v-if="davpUrl" ref="wujiedavpRef" style="width: 100%;height: 100%">
4
+ <wujie-davp-view :url="davpUrl" degrade>
5
+
6
+ </wujie-davp-view>
7
+ </div>
8
+ <div id="ifmLinkContrainer" v-else>
4
9
  <div style="position: absolute;top:0;bottom:0;left:0;right:0;box-sizing: border-box;"
5
10
  v-loading="loading"
6
11
  element-loading-text="正在加载,请稍后..."
@@ -25,16 +30,28 @@
25
30
  url : this.linkUrl ? this.linkUrl : '',
26
31
  loading: true,
27
32
  showIframe: false,
33
+ davpUrl:""
28
34
  }
29
35
  },
30
36
  watch: {
31
37
  linkUrl() {
32
38
  this.url = this.linkUrl ? this.linkUrl : '';
39
+ this.loadWujieDavpUrl();
33
40
  },
34
-
35
-
41
+ },
42
+ created() {
43
+ this.loadWujieDavpUrl();
36
44
  },
37
45
  methods: {
46
+ loadWujieDavpUrl(){
47
+ if(this.url && (this.url.indexOf('/dashbarodPreview') > -1 || this.url.indexOf('/reportPreview') > -1)){
48
+ if (this.url.indexOf('/dashbarodPreview') > -1) {
49
+ this.davpUrl = this.url.substring(this.url.indexOf('dashbarodPreview'));
50
+ } else {
51
+ this.davpUrl = this.url.substring(this.url.indexOf('reportPreview'));
52
+ }
53
+ }
54
+ },
38
55
  onLoad() {
39
56
  this.loading = false;
40
57
  this.showIframe = true;
@@ -832,14 +832,16 @@
832
832
  */
833
833
  changeData(label,val){
834
834
  this.dataValue = val;
835
- if(this.saveType == "text"){
836
- this.changeField(this.field,label);
837
- this.$set(this.formData, this.backfillField, label);
838
- }else{
839
- this.changeField(this.field,val);
835
+ const value = this.saveType == "text" ? label : val;
836
+ this.$emit('input', value);
837
+ this.$emit('change', value);
838
+ this.change && this.change(value, label);
839
+ if(this.changeField){
840
+ this.changeField(this.field, value);
841
+ }
842
+ if(this.formData && this.backfillField){
840
843
  this.$set(this.formData, this.backfillField, label);
841
844
  }
842
-
843
845
  },
844
846
  /**
845
847
  * 远程连接树数据回调
@@ -48,6 +48,13 @@
48
48
  <el-form-item label="用户名称">
49
49
  <el-input v-model="crud.searchForm.userNamePinYin" placeholder="中文、拼音全拼、简拼"></el-input>
50
50
  </el-form-item>
51
+ <el-form-item label="查看已选择用户">
52
+ <el-radio-group v-model="crud.searchForm.showCheckedUser" :disabled="checkedUser.length === 0"
53
+ style="margin-right: 10px">
54
+ <el-radio label="1">是</el-radio>
55
+ <el-radio label="0">否</el-radio>
56
+ </el-radio-group>
57
+ </el-form-item>
51
58
  <el-form-item>
52
59
  <el-button type="primary" icon="el-icon-search" @click="doSearch()">查询</el-button>
53
60
  <el-button icon="el-icon-close" @click="resetSearch()">清空</el-button>
@@ -61,9 +68,10 @@
61
68
  @selection-change="selectChange" style="width: 100%;height: 100%" @row-click="rowClick">
62
69
  <el-table-column type="selection" width="40" align="center"></el-table-column>
63
70
  <el-table-column type="index" label="序号" align="center" width="60"></el-table-column>
64
- <el-table-column prop="userName" label="用户名称" align="center"></el-table-column>
65
- <el-table-column prop="orgName" label="所属组织" align="center"></el-table-column>
66
- <el-table-column prop="posName" label="所属岗位" align="center"></el-table-column>
71
+ <el-table-column prop="userName" label="用户名称" align="center" min-width="60"></el-table-column>
72
+ <el-table-column prop="userAccount" label="用户账号" align="center" min-width="60"></el-table-column>
73
+ <el-table-column prop="orgName" label="所属组织" :formatter="formatterOrgName" align="center" min-width="200"></el-table-column>
74
+ <el-table-column prop="posName" label="所属岗位" align="center" min-width="100"></el-table-column>
67
75
  </el-table>
68
76
  </el-main>
69
77
  <el-footer style="height: 40px">
@@ -145,6 +153,7 @@
145
153
  orgDims:{type:String,default:""}, // 逗号分隔的维度字符串,也就是roleType
146
154
  orgTreeIds:{type:String,default:""}, // 过滤组织的条件
147
155
  defaultChooseIds:{type:String,default:""}, // 已选择的人员信息
156
+ parentChooseDataIds:{type:String,default:""}, // 已选择的父级级联ID
148
157
  defaultOrgIds:{type:String,default:""},
149
158
  defaultPosIds:{type:String,default:""},
150
159
  defaultUserIds:{type:String,default:""},
@@ -170,9 +179,9 @@
170
179
  vue: this,
171
180
  entityName: "sysOrgPosUser",
172
181
  searchUrl: this.api.sysOrgPosUser.findPageParam,
173
- noClearSearchColumns:["orgTreeId","posTreeId","noneUserId","authUserType",
182
+ noClearSearchColumns:["orgTreeId","posTreeId","noneUserId","authUserType","showCheckedUser",
174
183
  "created","empowerId","commonUserType","filterUserSource","userLinkIdPam",'filterLoginUser','tenantId'],
175
- searchForm:{"orgTreeId":"$$$$$","tenantId":this.tenantId}, // 初始化时虽然不会产生数据因为nosearch,但是输入跳转会触发搜索,当前没条件就会生成所有数据,加上这个不查数据,树节点点击时清空它了
184
+ searchForm:{"orgTreeId":"$$$$$","tenantId":this.tenantId,showCheckedUser:"0"}, // 初始化时虽然不会产生数据因为nosearch,但是输入跳转会触发搜索,当前没条件就会生成所有数据,加上这个不查数据,树节点点击时清空它了
176
185
  initNoSearch:true,
177
186
  }),
178
187
  defaultProps:{children: 'children', label: 'name'}, // 树组件的配置信息
@@ -236,15 +245,15 @@
236
245
  let loginDept = vm.USER_GLOBAL.getLoginDept() || {};
237
246
  if(loginDept && loginDept.id){
238
247
  if(loginDept.community){
239
- vm.$set(vm.orgSearchParam,"community",loginDept.community);
248
+ vm.$set(vm.orgSearchParam,"communityLike",loginDept.community);
240
249
  }else if(loginDept.street){
241
- vm.$set(vm.orgSearchParam,"street",loginDept.street);
250
+ vm.$set(vm.orgSearchParam,"streetLike",loginDept.street);
242
251
  }else if(loginDept.area){
243
- vm.$set(vm.orgSearchParam,"area",loginDept.area);
252
+ vm.$set(vm.orgSearchParam,"areaLike",loginDept.area);
244
253
  }else if(loginDept.city){
245
- vm.$set(vm.orgSearchParam,"city",loginDept.city);
254
+ vm.$set(vm.orgSearchParam,"cityLike",loginDept.city);
246
255
  }else if(loginDept.province){
247
- vm.$set(vm.orgSearchParam,"province",loginDept.province);
256
+ vm.$set(vm.orgSearchParam,"provinceLike",loginDept.province);
248
257
  }
249
258
  }
250
259
  }
@@ -368,6 +377,7 @@
368
377
  vm.initChooseInfo(); // 初始化已选择的内容
369
378
  });
370
379
  }else{
380
+ vm.chooseCascadeParentDataIds = vm.parentChooseDataIds || "";
371
381
  vm.initChooseInfo();
372
382
  }
373
383
  },
@@ -502,22 +512,20 @@
502
512
  let vm = this;
503
513
  vm.posArr.forEach(elem =>{ //先比较额外数据岗位
504
514
  if(vm.openLowLevelCheckbox){
505
- if(vm.openLowLevelCheckbox){
506
- if(vm.expandOrignArr.join(",").indexOf(elem.id)!=-1){
507
- //设置一级节点为可选中状态
515
+ if(vm.expandOrignArr.join(",").indexOf(elem.id)!=-1){
516
+ //设置一级节点为可选中状态
517
+ vm.$set(elem,'disabled',false);
518
+ }else {
519
+ if(vm.chooseCascadeDataIds.indexOf(elem["id"])!= -1 ){
520
+ //则设置其子节点也
521
+ vm.$set(elem,'disabled',true);
522
+ }else{
508
523
  vm.$set(elem,'disabled',false);
509
- }else {
510
- if(vm.chooseCascadeDataIds.indexOf(elem["id"])!= -1 ){
511
- //则设置其子节点也
512
- vm.$set(elem,'disabled',true);
513
- }else{
514
- vm.$set(elem,'disabled',false);
515
- }
516
524
  }
525
+ }
517
526
 
518
- vm.$set(vm.isChecked, elem.id, (vm.chooseCascadeParentDataIds.indexOf(elem.id)!= -1)); //设置默认选中状态
527
+ vm.$set(vm.isChecked, elem.id, (vm.chooseCascadeParentDataIds.indexOf(elem.id)!= -1)); //设置默认选中状态
519
528
 
520
- }
521
529
  }
522
530
  });
523
531
  data.forEach(function (elem) {
@@ -779,6 +787,11 @@
779
787
  </el-tooltip>
780
788
  </span>
781
789
  );
790
+ if(vm.isChecked[data.id]){
791
+ this.$nextTick(() => {
792
+ vm.dChange(data,true);
793
+ })
794
+ }
782
795
  }
783
796
  return MyComempte;
784
797
  },
@@ -938,6 +951,13 @@
938
951
  return item["id"] != id;
939
952
  });
940
953
  vm.$refs.orgSelectTree.setTreeCheckedKeys(id,false,false);
954
+ let temple = vm.$refs.orgSelectTree;
955
+ if(vm.isChecked[id]){
956
+ vm.isChecked[id] = false;
957
+ let nodesMap = temple.getAllNode(); // 节点集合
958
+ let currentData = nodesMap[id].data;
959
+ this.dChange(currentData,false);
960
+ }
941
961
  }
942
962
  },
943
963
  removePos(id){
@@ -987,6 +1007,8 @@
987
1007
  let crud = vm.crud;
988
1008
  let objData = {};
989
1009
  let searchForm = crud.searchForm;
1010
+ vm.crud.searchForm["checkedUserIds"] = "";
1011
+ vm.crud.searchForm["showCheckedUser"] = "0";
990
1012
  crud.noClearSearchColumns && crud.noClearSearchColumns.forEach(function (key) {
991
1013
  objData[key] = searchForm[key];
992
1014
  });
@@ -999,6 +1021,15 @@
999
1021
  if(vm.tenantId){
1000
1022
  vm.crud.searchForm["tenantId"] = vm.tenantId;
1001
1023
  }
1024
+ if(this.crud.searchForm.showCheckedUser === "1"){
1025
+ let checkedUserIds = [];
1026
+ (vm.checkedUser || []).forEach(item => {
1027
+ checkedUserIds.push(item["userId"]);
1028
+ })
1029
+ vm.crud.searchForm["checkedUserIds"] = checkedUserIds.join(",");
1030
+ }else{
1031
+ vm.crud.searchForm["checkedUserIds"] = "";
1032
+ }
1002
1033
  vm.crud.search(vm.checkSelectedMsg);
1003
1034
  },
1004
1035
  rowClick(row){ // table行点击事件
@@ -1186,6 +1217,14 @@
1186
1217
  }
1187
1218
  })
1188
1219
 
1220
+ },
1221
+
1222
+ formatterOrgName(row, column, cellValue){
1223
+ if(row["orgParentTreeName"]){
1224
+ return row["orgParentTreeName"] + "->" + row["orgName"];
1225
+ }else{
1226
+ return row["orgName"];
1227
+ }
1189
1228
  }
1190
1229
 
1191
1230
  }
@@ -33,7 +33,9 @@
33
33
  },
34
34
  async getImgInfo(vm){
35
35
  const res = await vm.axios.post(vm.api.baseUploadUrl+'viewFile', {fkId: vm.fkid});
36
- if(!res || !res.data || res.data.constructor !== Array || res.data.length <= 0) return [];
36
+ if(!res || !res.data || res.data.constructor !== Array || res.data.length <= 0) {
37
+ return [];
38
+ }
37
39
  return res.data;
38
40
  }
39
41
  };
@@ -30,6 +30,12 @@
30
30
  <div class="pl-file-list-item-text">
31
31
  {{ file.name }}
32
32
  </div>
33
+ <div class="pl-file-list-bottom item-text-other" style="margin-top: -8px;" v-if="file.fileName2">
34
+ <div class="file-list-bottom-box">
35
+ <span class="date-badge" v-if="file.isThisYearFile">{{ file.isThisYearFile ? 'new' : '' }}</span>
36
+ <div class="file-list-bottom-cont">{{ file.fileName2 }}</div>
37
+ </div>
38
+ </div>
33
39
  <div class="pl-file-list-item-btn pos-abs-full">
34
40
  <div class="top-btn" @click.stop="tempRemove(file)" v-if="!isDisabled && !isView">
35
41
  <i class="el-icon-close btn-close" title="删除"></i>
@@ -52,6 +58,9 @@
52
58
  </div>
53
59
  </div>
54
60
  </div>
61
+ <div style='width: 135px'></div>
62
+ <div style='width: 135px'></div>
63
+ <div style='width: 135px'></div>
55
64
  </div>
56
65
 
57
66
  <el-dialog class="pl-upload-temp-dialog" :visible.sync="tempDialogVisible"
@@ -74,7 +83,9 @@
74
83
  title="水印选择" append-to-body
75
84
  :visible.sync="waterdialogVisible"
76
85
  width="300px">
77
- <el-select v-model="checkWaterMarkText" placeholder="请选择" >
86
+ <el-select v-model="checkWaterMarkText" placeholder="请选择"
87
+ :allow-create="waterMakeConfig.isDiyWater==true" :filterable="waterMakeConfig.isDiyWater==true"
88
+ >
78
89
  <el-option
79
90
  v-for="item in (waterMakeConfig.waterArr||[])"
80
91
  :key="item"
@@ -87,6 +98,21 @@
87
98
  <el-button type="primary" @click="downLoadWaterMarkFile">确 定</el-button>
88
99
  </span>
89
100
  </el-dialog>
101
+ <!-- <el-dialog-->
102
+ <!-- title="附件预览" append-to-body top="0"-->
103
+ <!-- :visible.sync="ofddialogVisible" custom-class="pl-upload-preview-dialog"-->
104
+ <!-- width="100%" height="100%">-->
105
+ <!-- <ofd-preview :file-url="filePreview.fileUrl" :title="filePreview.fileTitle" v-if="ofddialogVisible"></ofd-preview>-->
106
+ <!-- </el-dialog>-->
107
+ <el-dialog
108
+ title="附件预览" append-to-body top="0" ref="docxRef" @close="closeDocxDialog()"
109
+ :visible.sync="docxDialogVisible" custom-class="pl-upload-web-preview-dialog"
110
+ width="100%" height="100%">
111
+ <ofd-preview :file-url="filePreview.fileUrl" :title="filePreview.fileTitle" v-if="ofddialogVisible"></ofd-preview>
112
+ <div style="position: absolute;top: -40px;right: -40px;width: 80px;height: 80px;border-radius: 0 0 0 40px;z-index: 9999;background-color: rgba(0, 0, 0, 70%);cursor: pointer;line-height: 80px;overflow: hidden" @click="closeDocxDialog()">
113
+ <i class="el-icon-close" style="position: absolute;bottom: 13px;left: 13px;font-size: 20px;color: #7f7e7e"></i>
114
+ </div>
115
+ </el-dialog>
90
116
  </div>
91
117
  </template>
92
118
 
@@ -99,8 +125,7 @@
99
125
  import APlayer from 'aplayer';
100
126
  import 'aplayer/dist/APlayer.min.css';
101
127
  import uploadImg from "./uploadImg";
102
- import html2canvas from 'html2canvas'
103
-
128
+ import OfdPreview from "./preview/OfdPreview.vue";
104
129
  Vue.use(Viewer, {
105
130
  defaultOptions: {
106
131
  zIndex: 9999
@@ -110,6 +135,7 @@
110
135
  export default {
111
136
  name: "pl-upload",
112
137
  components: {
138
+ OfdPreview,
113
139
  'd-player': VueDPlayer,
114
140
  },
115
141
  props: {
@@ -148,7 +174,7 @@
148
174
  },
149
175
  ifTempRemove: {
150
176
  type: Boolean,
151
- default: false
177
+ default: true
152
178
  },
153
179
  tempRemoveFile: {
154
180
  type: Array,
@@ -196,7 +222,8 @@
196
222
  pdf: ["pdf"],
197
223
  txt: ["txt"],
198
224
  project: ["mpp"],
199
- visio: ["vsdx", "vsd"]
225
+ visio: ["vsdx", "vsd"],
226
+ ofd:["ofd"]
200
227
  },
201
228
  loading: false,
202
229
  objExtensionToImgType: {},
@@ -219,14 +246,22 @@
219
246
  type: "success",
220
247
  disableFileArr: [], // 不可以上传的文件类型
221
248
  hasWater: false,
249
+ ofddialogVisible:false,
250
+ docxDialogVisible:false,
251
+ filePreview:{
252
+ fileUrl:"",
253
+ fileTitle:"",
254
+ },
222
255
  waterdialogVisible:false,
223
256
  checkWaterMarkText:"",
224
257
  downloadWaterMake:{
225
258
  waterMakeText: "我是水印",
226
259
  fileName:"水印下载",
227
260
  fileType:"png",
228
- fileUrl:""
229
- }
261
+ fileUrl:"",
262
+ waterMakeType:"true"
263
+ },
264
+ docxLoading:'',
230
265
  }
231
266
  },
232
267
 
@@ -249,6 +284,10 @@
249
284
  },
250
285
 
251
286
  methods: {
287
+ closeDocxDialog(){
288
+ this.ofddialogVisible = false;
289
+ this.docxDialogVisible = false;
290
+ },
252
291
  /*
253
292
  ** 初始化配置
254
293
  */
@@ -318,18 +357,19 @@
318
357
  return;
319
358
  }
320
359
  file.downloadUrl = vm.api.baseUploadUrl + "downloadFile?id=" + file.id;
360
+ file.viewUrl = vm.api.baseUploadUrl + "previewFile?id=" + file.id;
321
361
  // file.downloadUrl = file.downloadUrl.replace("uploadController/downloadFile?id", "wepUploadAction!downloadFile?fjid");
322
362
  // 获取小写文件扩展名
323
363
  let extension = (file.extension || "").toLowerCase();
324
364
  if (extension === "jpg" || extension === "jpeg" || extension === "png") {
325
- file.url = file.downloadUrl;
365
+ file.url = file.viewUrl;
326
366
  file.isPreview = true;
327
367
  } else if (vm.objExtensionToImgType[extension]) {
328
368
  file.url = uploadImg[vm.objExtensionToImgType[extension] + ".png"];
329
369
  const dtype = vm.objExtensionToImgType[extension].toLowerCase();
330
370
  if (dtype === 'word' || dtype === 'excel' ||
331
371
  dtype === 'powerpoint' || dtype === 'pdf' ||
332
- dtype === 'video'
372
+ dtype === 'video'||dtype === 'ofd'
333
373
  ) {
334
374
  file.isPreview = true;
335
375
  } else if (dtype === 'sound') {
@@ -354,7 +394,8 @@
354
394
  let waterMake = {
355
395
  waterMakeText: vm.waterMakeConfig.defaultWaterMake,
356
396
  fileName:file.name,
357
- fileType:extension
397
+ fileType:extension,
398
+ repeat:vm.waterMakeConfig.waterMakeType
358
399
  }
359
400
  vm.base64AddWaterMaker(imgResult, waterMake,"view").then((res) => {
360
401
  // 这里可以把添加水印后的文件传给后端,我这里只是举例并没有做
@@ -423,11 +464,13 @@
423
464
 
424
465
  // 保留this指向 后面会用到的
425
466
  let vm = this;
467
+ console.log(waterMakeConfig);
426
468
  return new Promise((resolve, reject) => {
427
- let waterMaketext = waterMakeConfig.waterMakeText || "我是水印";
428
- // let waterMaketext = "仅限投标使用,盖章有效"
429
- let repeat = waterMakeConfig.repeat || true;
430
- let fontSize = 30;
469
+ let waterMaketext = waterMakeConfig.waterMakeText || "中通服和信科技有限公司";
470
+ //let waterMaketext = "中国申信安徽公司法院云平台云计算安全评估能力补齐项目"
471
+ let repeat = waterMakeConfig.repeat=="false"?false:true;
472
+ //let repeat = true;
473
+ let fontSize = 50;
431
474
  const canvas = document.createElement('canvas');
432
475
  const ctx = canvas.getContext('2d');
433
476
  const img = new Image();
@@ -444,26 +487,29 @@
444
487
  // 以左上角为坐标原点 进行绘制图像
445
488
  ctx.drawImage(img, 0, 0, img.width, img.height);
446
489
  ctx.save();
447
-
448
- let strWidth = 50;
449
- let strHeight = 40;
450
- strWidth = ctx.measureText(waterMaketext).width + 40;
490
+ let strWidth = 100;
491
+ let strHeight = 1000;
492
+ strWidth = ctx.measureText(waterMaketext).width + 600;
451
493
  strHeight = strHeight + 30;
452
- ctx.fillStyle = "rgba(232,232,238,.8)";//设置文字颜色及透明度
453
- ctx.rotate(-0.5); // 水印初始偏转角度
494
+ ctx.fillStyle = "rgba(5,5,5,0.3)";//设置文字颜色及透明度
454
495
  if (repeat) {
455
- let moveX = strWidth * 3;
456
- let moveY = 200;
457
- ctx.font = fontSize + 'px 黑体';
458
- for (let i = strWidth * 0.65 * -1; i < img.width; i += moveX) {
459
- for (let j = strHeight; j < img.height * 2; j += moveY) {
496
+ ctx.translate(-(img.width/3),0);
497
+ ctx.rotate(-Math.PI/5); // 水印初始偏转角度
498
+ let repeatfontsize = ((img.width/2)/waterMaketext.length);
499
+ ctx.font = repeatfontsize + 'px 宋体';
500
+ for (let i = 0; i < img.width; i += (waterMaketext.length*repeatfontsize+80)) {
501
+ for (let j = 0; j < img.height * 2; j += (repeatfontsize+100)) {
460
502
  ctx.fillText(waterMaketext, i, j);
461
503
  ctx.save();
462
504
  }
463
505
  }
464
506
  } else {
465
- ctx.font = fontSize * 2 + 'px 黑体';
466
- ctx.fillText(waterMaketext, img.width * 0.1, img.height * 0.85); //在图片上添加字体
507
+ let norepeatfontsize = ((img.width*2/3)/waterMaketext.length);
508
+ ctx.translate(((img.width/2)-(waterMaketext.length*2/5*(norepeatfontsize))),((img.height*4/5)));
509
+ ctx.rotate(-Math.PI/5);
510
+ ctx.font = norepeatfontsize + 'px 宋体';
511
+ // ctx.fillText(waterMaketext, (img.width/2)-(waterMaketext.length*(norepeatfontsize)/2), (img.height/2)); //在图片上添加字体
512
+ ctx.fillText(waterMaketext, 0, 0); //在图片上添加字体
467
513
  ctx.save();
468
514
  }
469
515
  if(type=="view"){
@@ -506,7 +552,7 @@
506
552
  let formData = new FormData();
507
553
  formData.append("file", item.file);
508
554
  formData.append("fkId", vm.fileFkId);
509
- formData.append("extraPath", this.extraPath);
555
+ formData.append("extraPath", "");
510
556
  //创建axios实例
511
557
  vm.axios.defaults.headers = null;
512
558
  const axiosInstance = vm.axios.create({
@@ -672,27 +718,49 @@
672
718
  this.previewImg(file, index);
673
719
  } else {
674
720
  const dtype = this.objExtensionToImgType[type].toLowerCase();
675
- if (dtype === 'word' || dtype === 'excel' ||
676
- dtype === 'powerpoint' || dtype === 'pdf') {
677
- this.previewDoc(type, file.id);
678
- } else if (dtype === 'video') {
721
+ if (dtype === 'pdf' || dtype === 'powerpoint'|| (dtype === 'word' && window.isLocal)) {
722
+ const routeData = this.$router.resolve({
723
+ path: '/pdfpreview',
724
+ query: {fjid: file.id}
725
+ });
726
+ window.open(routeData.href, '_blank');
727
+ } else if (dtype === 'video') {
679
728
  this.previewAudiovisual(type, file);
680
729
  } else if (dtype === 'sound') {
681
730
  this.previewPlaySound(type, file);
731
+ }else if(dtype === "ofd"){
732
+ this.filePreview.fileUrl = file.viewUrl;
733
+ this.filePreview.fileTitle = file.name;
734
+ this.ofddialogVisible = true;
735
+ this.docxDialogVisible = true;
736
+ } else if(dtype === 'excel' || (dtype === 'word' && !window.isLocal)){
737
+ this.previewOffice(dtype, file.id);
682
738
  }
683
739
  }
684
740
  },
741
+ previewOffice(type,fjid){
742
+ const routeData = this.$router.resolve({
743
+ path: '/officeViewer',
744
+ query: {fjType: type, fjid: fjid}
745
+ });
746
+ window.open(routeData.href, '_blank');
747
+ },
685
748
  /*
686
749
  ** 预览图片
687
750
  */
688
751
  previewImg(file, index) {
689
752
  const viewer = this.$el.querySelector('#viewer-selection').$viewer;
690
- viewer.images = viewer.images.filter(data => {
691
- if (data.currentSrc.indexOf("static/images/upload") == -1) {
692
- return data;
753
+ let delNum = 0;
754
+ viewer.images = viewer.images.filter((data,num) => {
755
+ if (data.currentSrc.indexOf("static/images/upload") == -1&&data.currentSrc.indexOf("static/img/") == -1) {
756
+ return data;
757
+ }else{
758
+ if(num<index){
759
+ delNum++;
760
+ }
693
761
  }
694
762
  });
695
- viewer.index = index;
763
+ viewer.index = index-delNum;
696
764
  viewer.options.hide = () => {
697
765
  // 不延时关闭的话会影响原dialog隐藏显示
698
766
  setTimeout(() => {
@@ -724,6 +792,8 @@
724
792
  case 'pdf':
725
793
  fjType = 'pdf';
726
794
  break;
795
+ default:
796
+ break;
727
797
  }
728
798
  const routeData = this.$router.resolve({
729
799
  path: '/pdfViewer',
@@ -808,7 +878,8 @@
808
878
  let waterMake = {
809
879
  waterMakeText: this.checkWaterMarkText||this.downloadWaterMake.waterMakeText,
810
880
  fileName:this.downloadWaterMake.fileName,
811
- fileType:this.downloadWaterMake.fileType
881
+ fileType:this.downloadWaterMake.fileType,
882
+ repeat:this.downloadWaterMake.repeat
812
883
  }
813
884
  this.base64AddWaterMaker(imgResult, waterMake,"download").then((res) => {
814
885
  // 这里可以把添加水印后的文件传给后端,我这里只是举例并没有做
@@ -816,7 +887,8 @@
816
887
  waterMakeText: this.waterMakeConfig.defaultWaterMake,
817
888
  fileName:"",
818
889
  fileType:"png",
819
- fileUrl:""
890
+ fileUrl:"",
891
+ repeat:this.downloadWaterMake.repeat
820
892
  }
821
893
  this.waterdialogVisible = false;
822
894
  });
@@ -841,7 +913,8 @@
841
913
  waterMakeText: this.waterMakeConfig.defaultWaterMake,
842
914
  fileName:fileName,
843
915
  fileType:type,
844
- fileUrl:url
916
+ fileUrl:url,
917
+ repeat:this.waterMakeConfig.waterMakeType
845
918
  }
846
919
  //获取系统参数
847
920
  if (this.downInstructions) {
@@ -1013,6 +1086,36 @@
1013
1086
  white-space: nowrap;
1014
1087
  overflow: hidden;
1015
1088
  }
1089
+
1090
+ .pl-file-list-bottom {
1091
+ color: #666666;
1092
+ text-align: center;
1093
+ margin: 0 4px;
1094
+
1095
+ .file-list-bottom-box {
1096
+ height: 24px;
1097
+ display: flex;
1098
+ align-items: center;
1099
+ justify-content: center;
1100
+
1101
+ .date-badge {
1102
+ display: inline-block;
1103
+ color: #fff;
1104
+ //position: absolute;
1105
+ //left: -37px;
1106
+ //top: 2px;
1107
+ background-color: rgba(250,0,0,.8);
1108
+ border-radius: 10px;
1109
+ font-size: 12px;
1110
+ height: 16px;
1111
+ line-height: 16px;
1112
+ padding: 0 6px;
1113
+ text-align: center;
1114
+ white-space: nowrap;
1115
+ border: 1px solid #fff;
1116
+ }
1117
+ }
1118
+ }
1016
1119
  }
1017
1120
  }
1018
1121
 
@@ -1117,8 +1220,32 @@
1117
1220
  }
1118
1221
  </style>
1119
1222
 
1120
- <style>
1223
+ <style lang="scss">
1121
1224
  .pl-upload-container .el-upload, .pl-upload-container .el-upload-dragger {
1122
1225
  width: 100%;
1123
1226
  }
1227
+ .pl-upload-preview-dialog .el-dialog__body{
1228
+ bottom: 0!important;
1229
+ }
1230
+ .pl-upload-web-preview-dialog {
1231
+ background: rgba(0, 0, 0, 0.5)!important;
1232
+ .el-dialog__body{
1233
+ top: 0!important;
1234
+ bottom: 0!important;
1235
+ padding: 0;
1236
+ overflow: hidden!important;
1237
+ //overflow-y: auto;
1238
+
1239
+ .modal-box{
1240
+ height: calc(100% - 60px)!important;
1241
+ margin-top: 30px;
1242
+ .background-shadow{
1243
+ background: transparent!important;
1244
+ }
1245
+ }
1246
+ }
1247
+ }
1248
+ .pl-upload-web-preview-dialog .el-dialog__header{
1249
+ display: none;
1250
+ }
1124
1251
  </style>