n20-common-lib 1.3.65 → 1.3.68
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.
- package/package.json +4 -2
- package/src/assets/css/cl-approve-card.scss +0 -1
- package/src/assets/css/title-pop.scss +1 -0
- package/src/components/ApprovalButtons/index.vue +37 -3
- package/src/components/ApprovalButtons/setCarboncopyProp.vue +117 -0
- package/src/components/ApprovalCard/index.vue +5 -3
- package/src/components/ApprovalRecord/approvalImgPro/index.vue +43 -12
- package/src/components/Diff/index.vue +68 -0
- package/src/components/FileUploadTable/index.vue +92 -77
- package/src/index.js +4 -1
- package/style/index.css +1 -1
- package/style/index.css.map +1 -1
- package/theme/blue.css +1 -1
- package/theme/green.css +1 -1
- package/theme/lightBlue.css +1 -1
- package/theme/orange.css +1 -1
- package/theme/purple.css +1 -1
- package/theme/red.css +1 -1
- package/theme/yellow.css +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "n20-common-lib",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.68",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"build:gzip": "vue-cli-service build --gzip",
|
|
14
14
|
"build:report": "vue-cli-service build --analy",
|
|
15
15
|
"build:css": "node build_css",
|
|
16
|
-
"build:js": "vue-cli-service build --formats umd-min --target lib src/index.js --name index --dest lib --analy"
|
|
16
|
+
"build:js": "vue-cli-service build --formats umd-min --target lib src/index.js --name index --dest lib --analy",
|
|
17
|
+
"getI18n": "node ./node_modules/nstc-get-i18n"
|
|
17
18
|
},
|
|
18
19
|
"files": [
|
|
19
20
|
"src/_qiankun",
|
|
@@ -74,6 +75,7 @@
|
|
|
74
75
|
"md2vue-loader": "git+https://gitee.com/bable2000/md2vue-loader.git",
|
|
75
76
|
"mockjs": "^1.1.0",
|
|
76
77
|
"node-sass": "6.0.0",
|
|
78
|
+
"nstc-get-i18n": "^0.0.3",
|
|
77
79
|
"qiankun": "^2.5.1",
|
|
78
80
|
"sass-loader": "^10.2.0",
|
|
79
81
|
"screenfull": "^5.1.0",
|
|
@@ -1,7 +1,24 @@
|
|
|
1
1
|
/* 审批按钮组 */
|
|
2
2
|
<template>
|
|
3
3
|
<div>
|
|
4
|
-
<el-form label-position="
|
|
4
|
+
<el-form label-position="right" label-width="5em">
|
|
5
|
+
<div class="flex-box">
|
|
6
|
+
<div v-if="authList.includes('isCarboncopy')" class="flex-1">
|
|
7
|
+
<el-form-item label="抄送">
|
|
8
|
+
<el-input
|
|
9
|
+
:value="carbonCopyList.map((c) => c.uname).join(', ')"
|
|
10
|
+
type="textarea"
|
|
11
|
+
:autosize="{ minRows: 1 }"
|
|
12
|
+
@focus="setCarboncopyV = true"
|
|
13
|
+
/>
|
|
14
|
+
</el-form-item>
|
|
15
|
+
</div>
|
|
16
|
+
<div v-if="authList.includes('加签')" class="flex-1">
|
|
17
|
+
<el-form-item label="加签">
|
|
18
|
+
<el-input type="textarea" :autosize="{ minRows: 1 }" />
|
|
19
|
+
</el-form-item>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
5
22
|
<el-form-item label="审批意见" :error="errMsg">
|
|
6
23
|
<el-input
|
|
7
24
|
ref="msg-input"
|
|
@@ -22,6 +39,9 @@
|
|
|
22
39
|
<el-button v-if="authList.includes('discard')" type="danger" plain @click="discardFn">作 废</el-button>
|
|
23
40
|
<el-button plain @click="goFrom">返 回</el-button>
|
|
24
41
|
</div>
|
|
42
|
+
<cl-dialog v-drag :visible.sync="setCarboncopyV" title="设置抄送用户" width="900px" append-to-body top="7.5vh">
|
|
43
|
+
<carboncopy-prop :carbon-copy-list="carbonCopyList" @close="setCarboncopyV = false" @confirm="setCarboncopyOk" />
|
|
44
|
+
</cl-dialog>
|
|
25
45
|
</div>
|
|
26
46
|
</template>
|
|
27
47
|
|
|
@@ -29,9 +49,15 @@
|
|
|
29
49
|
import axios from '../../utils/axios'
|
|
30
50
|
import { linkGo } from '../../utils/urlToGo'
|
|
31
51
|
import { closeTagsForBackPage } from '../../plugins/CompatibleOld'
|
|
52
|
+
import ClDialog from '../Dialog'
|
|
53
|
+
import CarboncopyProp from './setCarboncopyProp.vue'
|
|
32
54
|
|
|
33
55
|
export default {
|
|
34
56
|
name: 'ApprovalButtons',
|
|
57
|
+
components: {
|
|
58
|
+
ClDialog,
|
|
59
|
+
CarboncopyProp
|
|
60
|
+
},
|
|
35
61
|
props: {
|
|
36
62
|
message: {
|
|
37
63
|
type: String,
|
|
@@ -59,7 +85,9 @@ export default {
|
|
|
59
85
|
errMsg: undefined,
|
|
60
86
|
taskId: '',
|
|
61
87
|
taskDefKey: '',
|
|
62
|
-
authList: []
|
|
88
|
+
authList: [],
|
|
89
|
+
setCarboncopyV: false,
|
|
90
|
+
carbonCopyList: []
|
|
63
91
|
}
|
|
64
92
|
},
|
|
65
93
|
computed: {
|
|
@@ -125,7 +153,8 @@ export default {
|
|
|
125
153
|
message: this.messageC,
|
|
126
154
|
formData: JSON.stringify(this.formData),
|
|
127
155
|
signText: this.signText,
|
|
128
|
-
isAgentcy: isAgentcy
|
|
156
|
+
isAgentcy: isAgentcy,
|
|
157
|
+
carbonCopyUserDtoList: this.carbonCopyList.map((c) => ({ userNo: c.uno, userName: c.uname }))
|
|
129
158
|
}
|
|
130
159
|
]
|
|
131
160
|
},
|
|
@@ -208,6 +237,11 @@ export default {
|
|
|
208
237
|
this.thenMsg(data, '作废')
|
|
209
238
|
})
|
|
210
239
|
})
|
|
240
|
+
},
|
|
241
|
+
setCarboncopyOk(list) {
|
|
242
|
+
this.carbonCopyList = list
|
|
243
|
+
|
|
244
|
+
this.setCarboncopyV = false
|
|
211
245
|
}
|
|
212
246
|
}
|
|
213
247
|
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<cl-page style="height: 75vh">
|
|
3
|
+
<div slot="header" class="flex-box flex-v m-b">
|
|
4
|
+
<span class="m-r-ss">单位名称</span>
|
|
5
|
+
<span>
|
|
6
|
+
<el-input v-model="searchObj.cltName" size="mini" />
|
|
7
|
+
</span>
|
|
8
|
+
<span class="m-l m-r-ss">姓名</span>
|
|
9
|
+
<span>
|
|
10
|
+
<el-input v-model="searchObj.uname" size="mini" />
|
|
11
|
+
</span>
|
|
12
|
+
<span class="m-l m-r-ss">用户编号</span>
|
|
13
|
+
<span>
|
|
14
|
+
<el-input v-model="searchObj.uno" size="mini" />
|
|
15
|
+
</span>
|
|
16
|
+
<el-button class="m-l-auto" plain size="mini" @click="searchFn">查询</el-button>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<el-table
|
|
20
|
+
ref="elTable"
|
|
21
|
+
:key="elTableKey"
|
|
22
|
+
:data="nodeTable"
|
|
23
|
+
row-key="uno"
|
|
24
|
+
border
|
|
25
|
+
height="100%"
|
|
26
|
+
@select="sltChange"
|
|
27
|
+
@select-all="sltChange"
|
|
28
|
+
>
|
|
29
|
+
<el-table-column :reserve-selection="true" type="selection" width="46" header-align="center" align="center" />
|
|
30
|
+
<el-table-column prop="uno" label="编号" header-align="center" align="center" />
|
|
31
|
+
<el-table-column prop="uname" label="姓名" header-align="center" align="center" />
|
|
32
|
+
<el-table-column prop="cltName" label="单位" header-align="center" align="center" />
|
|
33
|
+
</el-table>
|
|
34
|
+
<template slot="footer">
|
|
35
|
+
<div class="flex-box flex-r m-t m-b">
|
|
36
|
+
<cl-pagination
|
|
37
|
+
:page-obj="pageObj"
|
|
38
|
+
:page-key="{ no: 'pageNum', size: 'pageSize', total: 'totalSize' }"
|
|
39
|
+
@change="getList"
|
|
40
|
+
/>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="text-c">
|
|
43
|
+
<el-button type="primary" @click="confirmFn">确 定</el-button>
|
|
44
|
+
<el-button @click="$emit('close')">取 消</el-button>
|
|
45
|
+
</div>
|
|
46
|
+
</template>
|
|
47
|
+
</cl-page>
|
|
48
|
+
</template>
|
|
49
|
+
|
|
50
|
+
<script>
|
|
51
|
+
import ClPage from '../PageLayout/page.vue'
|
|
52
|
+
import ClPagination from '../Pagination/index.vue'
|
|
53
|
+
export default {
|
|
54
|
+
components: {
|
|
55
|
+
ClPage,
|
|
56
|
+
ClPagination
|
|
57
|
+
},
|
|
58
|
+
props: {
|
|
59
|
+
carbonCopyList: {
|
|
60
|
+
type: Array,
|
|
61
|
+
default: () => []
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
data() {
|
|
65
|
+
return {
|
|
66
|
+
nodeTable: [],
|
|
67
|
+
searchObj: {
|
|
68
|
+
uno: undefined,
|
|
69
|
+
uname: undefined,
|
|
70
|
+
cltName: undefined,
|
|
71
|
+
roleName: undefined
|
|
72
|
+
},
|
|
73
|
+
pageObj: {
|
|
74
|
+
pageNum: 1,
|
|
75
|
+
pageSize: 10,
|
|
76
|
+
totalSize: 0
|
|
77
|
+
},
|
|
78
|
+
selectArr: [],
|
|
79
|
+
elTableKey: 0
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
mounted() {
|
|
83
|
+
this.$refs.elTable.clearSelection()
|
|
84
|
+
this.carbonCopyList.forEach((item) => {
|
|
85
|
+
this.$refs.elTable.toggleRowSelection(item, true)
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
this.pageObj = { pageNum: 1, pageSize: 10, totalSize: 0 }
|
|
89
|
+
this.getList()
|
|
90
|
+
},
|
|
91
|
+
methods: {
|
|
92
|
+
getList() {
|
|
93
|
+
this.$axios
|
|
94
|
+
.post('/bems/activiti/online/chdUserInfo', {
|
|
95
|
+
data: this.searchObj,
|
|
96
|
+
...this.pageObj
|
|
97
|
+
})
|
|
98
|
+
.then(({ data }) => {
|
|
99
|
+
this.nodeTable = data.list
|
|
100
|
+
this.pageObj.totalSize = data.totalSize
|
|
101
|
+
})
|
|
102
|
+
},
|
|
103
|
+
searchFn() {
|
|
104
|
+
this.pageObj.pageNum = 1
|
|
105
|
+
this.getList()
|
|
106
|
+
},
|
|
107
|
+
sltChange(list) {
|
|
108
|
+
this.selectArr = list || []
|
|
109
|
+
},
|
|
110
|
+
confirmFn() {
|
|
111
|
+
this.$emit('confirm', this.selectArr)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
</script>
|
|
116
|
+
|
|
117
|
+
<style></style>
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</div>
|
|
10
10
|
<div>
|
|
11
11
|
<div class="flex-box">
|
|
12
|
-
<div class="n20-worker flex-item m-r-s">
|
|
12
|
+
<div v-title="item.assignee" class="n20-worker flex-item m-r-s text-ellipsis" :show-overflow-tooltip="true">
|
|
13
13
|
<span class="worker-icon cl-icon-user"></span>
|
|
14
14
|
<span>{{ item.assignee }}</span>
|
|
15
15
|
</div>
|
|
@@ -27,9 +27,10 @@
|
|
|
27
27
|
>
|
|
28
28
|
</div>
|
|
29
29
|
</div>
|
|
30
|
-
<div v-if="item.suggestion" class="n20-description-c">
|
|
30
|
+
<div v-if="item.suggestion" class="n20-description-c m-t">
|
|
31
31
|
{{ item.suggestion }}
|
|
32
32
|
</div>
|
|
33
|
+
<div v-if="item.ccUserName" class="n20-description-c m-t">抄送人:{{ item.ccUserName }}</div>
|
|
33
34
|
</div>
|
|
34
35
|
</el-timeline-item>
|
|
35
36
|
</el-timeline>
|
|
@@ -102,7 +103,8 @@ export default {
|
|
|
102
103
|
let _item = {
|
|
103
104
|
endTime: item.endTime || '',
|
|
104
105
|
assignee: item.assignee,
|
|
105
|
-
suggestion: item.suggestion
|
|
106
|
+
suggestion: item.suggestion,
|
|
107
|
+
ccUserName: item.ccUserName // 抄送人
|
|
106
108
|
}
|
|
107
109
|
|
|
108
110
|
if (item.taskName === '开始') {
|
|
@@ -36,7 +36,23 @@
|
|
|
36
36
|
</div>
|
|
37
37
|
<span v-title></span>
|
|
38
38
|
<div ref="msgEl" class="activiti-msg">
|
|
39
|
-
<div>{{ assignee }}</div>
|
|
39
|
+
<div v-if="assignee" :class="{ 'm-b': assigneeEnd }">{{ assignee }}</div>
|
|
40
|
+
<div v-if="assigneeEnd">
|
|
41
|
+
<table cellspacing="0" class="m-t-ss m-b-ss" style="border-collapse: collapse; min-width: 460px">
|
|
42
|
+
<tr>
|
|
43
|
+
<td class="text-c">已审批人</td>
|
|
44
|
+
<td class="text-c">审批类型</td>
|
|
45
|
+
<td class="text-c">审批意见</td>
|
|
46
|
+
<td class="text-c">审批时间</td>
|
|
47
|
+
</tr>
|
|
48
|
+
<tr v-for="(item, i) in assigneeEnd" :key="i">
|
|
49
|
+
<td>{{ item.assignee }}</td>
|
|
50
|
+
<td class="text-c">{{ item.optResult }}</td>
|
|
51
|
+
<td>{{ item.suggestion }}</td>
|
|
52
|
+
<td>{{ item.endTime }}</td>
|
|
53
|
+
</tr>
|
|
54
|
+
</table>
|
|
55
|
+
</div>
|
|
40
56
|
</div>
|
|
41
57
|
</div>
|
|
42
58
|
</template>
|
|
@@ -60,7 +76,8 @@ export default {
|
|
|
60
76
|
this.svgW = undefined
|
|
61
77
|
this.svgC = undefined
|
|
62
78
|
return {
|
|
63
|
-
assignee:
|
|
79
|
+
assignee: undefined,
|
|
80
|
+
assigneeEnd: undefined,
|
|
64
81
|
min: 0.4,
|
|
65
82
|
max: 2,
|
|
66
83
|
step: 0.1,
|
|
@@ -75,7 +92,7 @@ export default {
|
|
|
75
92
|
async mounted() {
|
|
76
93
|
this.svgW = this.$refs['activiti-svg-wrap']
|
|
77
94
|
|
|
78
|
-
let { flowString, seqRecords, taskDefIdMap,
|
|
95
|
+
let { flowString, seqRecords, taskDefIdMap = {}, currAssMap = {}, currentActivityIdList = [] } = this.dataPro
|
|
79
96
|
let flowSvg = flowString
|
|
80
97
|
if (flowString.includes('bpmn2:definitions')) {
|
|
81
98
|
let { default: bpmn2svg } = await importG('bpmn2svg', () =>
|
|
@@ -88,12 +105,17 @@ export default {
|
|
|
88
105
|
seqRecords.forEach((obj) => {
|
|
89
106
|
this.setTaskRecord(obj)
|
|
90
107
|
})
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
108
|
+
currentActivityIdList.forEach((currentActivityId) => {
|
|
109
|
+
let assignee = currAssMap[currentActivityId]
|
|
110
|
+
let assigneeEnd = taskDefIdMap[currentActivityId]
|
|
111
|
+
taskDefIdMap[currentActivityId] = undefined
|
|
112
|
+
|
|
113
|
+
this.addEvent(currentActivityId, { assignee, assigneeEnd }, 'pending')
|
|
114
|
+
|
|
96
115
|
this.svgW.querySelector(`[data-element-id="${currentActivityId}"]`).classList.add('activiti-node-at')
|
|
116
|
+
})
|
|
117
|
+
for (let k in taskDefIdMap) {
|
|
118
|
+
taskDefIdMap[k] && this.addEvent(k, taskDefIdMap[k])
|
|
97
119
|
}
|
|
98
120
|
} catch (error) {
|
|
99
121
|
console.log('setTaskErr:', error)
|
|
@@ -201,16 +223,20 @@ export default {
|
|
|
201
223
|
}
|
|
202
224
|
return rect
|
|
203
225
|
},
|
|
204
|
-
addEvent(id, list
|
|
226
|
+
addEvent(id, list, type) {
|
|
205
227
|
let task = this.svgW.querySelector(`[data-element-id="${id}"]`)
|
|
206
228
|
task.addEventListener('mouseenter', () => {
|
|
207
229
|
if (type === 'pending') {
|
|
208
|
-
this.assignee = list
|
|
230
|
+
this.assignee = list.assignee
|
|
231
|
+
this.assigneeEnd = list.assigneeEnd
|
|
209
232
|
} else {
|
|
210
|
-
this.assignee =
|
|
233
|
+
this.assignee = undefined
|
|
234
|
+
this.assigneeEnd = list
|
|
211
235
|
}
|
|
212
236
|
this.$nextTick(() => {
|
|
213
|
-
|
|
237
|
+
setTimeout(() => {
|
|
238
|
+
tipShow(task, this.$refs['msgEl'])
|
|
239
|
+
}, 100)
|
|
214
240
|
})
|
|
215
241
|
})
|
|
216
242
|
task.addEventListener('mouseleave', () => {
|
|
@@ -350,6 +376,11 @@ setRejectLink(from, to) {
|
|
|
350
376
|
.n20-approval-img-por .activiti-msg {
|
|
351
377
|
display: none;
|
|
352
378
|
}
|
|
379
|
+
.activiti-msg th,
|
|
380
|
+
.activiti-msg td {
|
|
381
|
+
padding: 6px 8px;
|
|
382
|
+
border: 1px solid var(--border-color-light);
|
|
383
|
+
}
|
|
353
384
|
.activiti-svg-zoom {
|
|
354
385
|
position: absolute;
|
|
355
386
|
z-index: 9;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div v-if="isEqual">
|
|
3
|
+
{{ value }}
|
|
4
|
+
</div>
|
|
5
|
+
<div v-else class="n20-descriptions">
|
|
6
|
+
<div class="m-b-ss">
|
|
7
|
+
<span class="after-color">{{ value }}</span>
|
|
8
|
+
</div>
|
|
9
|
+
<div>
|
|
10
|
+
<span class="before-color">{{ oldValue }}</span>
|
|
11
|
+
<el-tooltip v-if="tooltip" :content="tooltipContent" placement="top">
|
|
12
|
+
<i class="n20-icon-xinxitishi m-l-ss color-placeholder"></i>
|
|
13
|
+
</el-tooltip>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
export default {
|
|
20
|
+
name: 'Diff',
|
|
21
|
+
props: {
|
|
22
|
+
value: {
|
|
23
|
+
type: [String, Boolean, Array],
|
|
24
|
+
default: undefined
|
|
25
|
+
},
|
|
26
|
+
oldValue: {
|
|
27
|
+
type: [String, Boolean, Array],
|
|
28
|
+
default: undefined
|
|
29
|
+
},
|
|
30
|
+
tooltip: {
|
|
31
|
+
type: [String, Boolean],
|
|
32
|
+
default: undefined
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
computed: {
|
|
36
|
+
isEqual() {
|
|
37
|
+
if (this.value === this.oldValue) {
|
|
38
|
+
return true
|
|
39
|
+
}
|
|
40
|
+
if ((this.value === 0 || this.value === '0') && (this.oldValue === 0 || this.oldValue === '0')) {
|
|
41
|
+
return true
|
|
42
|
+
} else if (!this.value && !this.oldValue) {
|
|
43
|
+
return true
|
|
44
|
+
}
|
|
45
|
+
if (
|
|
46
|
+
Array.isArray(this.value) &&
|
|
47
|
+
Array.isArray(this.oldValue) &&
|
|
48
|
+
this.value.toString() === this.oldValue.toString()
|
|
49
|
+
) {
|
|
50
|
+
return true
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return false
|
|
54
|
+
},
|
|
55
|
+
tooltipContent() {
|
|
56
|
+
if (!this.tooltip) {
|
|
57
|
+
return undefined
|
|
58
|
+
} else {
|
|
59
|
+
if (this.tooltip === true) {
|
|
60
|
+
return '修改前数据内容'
|
|
61
|
+
} else {
|
|
62
|
+
return this.tooltip
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
</script>
|
|
@@ -96,83 +96,98 @@
|
|
|
96
96
|
</div>
|
|
97
97
|
|
|
98
98
|
<el-table :data="tableData" :row-key="keys.rowKey" @selection-change="(selection) => (selectionList = selection)">
|
|
99
|
-
<slot name="selection-column"
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
99
|
+
<slot name="selection-column">
|
|
100
|
+
<el-table-column type="selection" width="50" align="center" />
|
|
101
|
+
</slot>
|
|
102
|
+
<template v-if="dataPorp.slotHeader">
|
|
103
|
+
<el-table-column
|
|
104
|
+
v-for="item in dataPorp.slotHeader"
|
|
105
|
+
:key="item.prop"
|
|
106
|
+
:label="item.label"
|
|
107
|
+
:prop="item.prop"
|
|
108
|
+
:align="item.align || 'center'"
|
|
109
|
+
:width="item.width || 'auto'"
|
|
110
|
+
:show-overflow-tooltip="item['show-overflow-tooltip']"
|
|
111
|
+
/>
|
|
112
|
+
</template>
|
|
113
|
+
<template v-else>
|
|
114
|
+
<el-table-column label="附件类型" min-width="160">
|
|
115
|
+
<template slot="header" slot-scope="scope">
|
|
116
|
+
<slot name="type-header" :column="scope.column">附件类型</slot>
|
|
117
|
+
</template>
|
|
118
|
+
<template slot-scope="{ row }">
|
|
119
|
+
<slot name="type" :row="row">
|
|
120
|
+
<el-select
|
|
121
|
+
v-model="row[keys.type]"
|
|
122
|
+
:disabled="row['_typeDisabled']"
|
|
123
|
+
placeholder="请选择"
|
|
124
|
+
style="width: 100%"
|
|
125
|
+
>
|
|
126
|
+
<el-option
|
|
127
|
+
v-for="item in typeOptions"
|
|
128
|
+
:key="item.type"
|
|
129
|
+
:disabled="item.disabled"
|
|
130
|
+
:value="item.type"
|
|
131
|
+
:label="item.label"
|
|
132
|
+
/>
|
|
133
|
+
</el-select>
|
|
134
|
+
</slot>
|
|
135
|
+
</template>
|
|
136
|
+
</el-table-column>
|
|
137
|
+
<el-table-column label="附件名称" min-width="160">
|
|
138
|
+
<template slot="header" slot-scope="scope">
|
|
139
|
+
<slot name="name-header" :column="scope.column">附件名称</slot>
|
|
140
|
+
</template>
|
|
141
|
+
<template slot-scope="{ row }">
|
|
142
|
+
<slot name="name" :row="row">
|
|
143
|
+
<el-input v-model="row[keys.name]" placeholder="请输入" />
|
|
144
|
+
</slot>
|
|
145
|
+
</template>
|
|
146
|
+
</el-table-column>
|
|
147
|
+
<el-table-column label="附件上传" min-width="160">
|
|
148
|
+
<template slot="header" slot-scope="scope">
|
|
149
|
+
<slot name="upload-header" :column="scope.column">附件上传</slot>
|
|
150
|
+
</template>
|
|
151
|
+
<template slot-scope="{ row, $index }">
|
|
152
|
+
<slot name="upload" :row="row" :$index="$index">
|
|
153
|
+
<clUpload
|
|
154
|
+
:ref="'upload' + $index"
|
|
155
|
+
class="n20-upload-table-up"
|
|
156
|
+
:file-name="row | fileName(keys.url)"
|
|
157
|
+
:data="row['_fileData'] || fileData"
|
|
158
|
+
:msg-type="null"
|
|
159
|
+
:show-clear="false"
|
|
160
|
+
:action="action"
|
|
161
|
+
:headers="headers"
|
|
162
|
+
:disabled="!row[keys.type]"
|
|
163
|
+
:accept="row[keys.type] | acceptFilter(typeOptions, fileAccept)"
|
|
164
|
+
:size="row[keys.type] | sizeFilter(typeOptions, fileSize)"
|
|
165
|
+
:http-request="uploadHttpRequest ? (options) => uploadHttpRequest(options, row) : undefined"
|
|
166
|
+
:before-upload="(file) => beforeUploadFn(file, row)"
|
|
167
|
+
:on-progress="(event) => onProgressFn(event, row)"
|
|
168
|
+
:on-success="(response, file, fileList) => onSuccessFn(response, file, fileList, row)"
|
|
169
|
+
:on-error="(err, file, fileList) => errorFn(err, file, fileList, row, $index)"
|
|
118
170
|
/>
|
|
119
|
-
</
|
|
120
|
-
</
|
|
121
|
-
</
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
<clUpload
|
|
140
|
-
:ref="'upload' + $index"
|
|
141
|
-
class="n20-upload-table-up"
|
|
142
|
-
:file-name="row | fileName(keys.url)"
|
|
143
|
-
:data="row['_fileData'] || fileData"
|
|
144
|
-
:msg-type="null"
|
|
145
|
-
:show-clear="false"
|
|
146
|
-
:action="action"
|
|
147
|
-
:headers="headers"
|
|
148
|
-
:disabled="!row[keys.type]"
|
|
149
|
-
:accept="row[keys.type] | acceptFilter(typeOptions, fileAccept)"
|
|
150
|
-
:size="row[keys.type] | sizeFilter(typeOptions, fileSize)"
|
|
151
|
-
:http-request="uploadHttpRequest ? (options) => uploadHttpRequest(options, row) : undefined"
|
|
152
|
-
:before-upload="(file) => beforeUploadFn(file, row)"
|
|
153
|
-
:on-progress="(event) => onProgressFn(event, row)"
|
|
154
|
-
:on-success="(response, file, fileList) => onSuccessFn(response, file, fileList, row)"
|
|
155
|
-
:on-error="(err, file, fileList) => errorFn(err, file, fileList, row, $index)"
|
|
156
|
-
/>
|
|
157
|
-
</slot>
|
|
158
|
-
</template>
|
|
159
|
-
</el-table-column>
|
|
160
|
-
<el-table-column label="上传时间" :prop="keys.time" width="170" align="left">
|
|
161
|
-
<template slot="header" slot-scope="scope">
|
|
162
|
-
<slot name="time-header" :column="scope.column">上传时间</slot>
|
|
163
|
-
</template>
|
|
164
|
-
<template slot-scope="{ row }">
|
|
165
|
-
<slot name="time" :row="row">{{ row[keys.time] }}</slot>
|
|
166
|
-
</template>
|
|
167
|
-
</el-table-column>
|
|
168
|
-
<el-table-column label="上传人" :prop="keys.user" width="100">
|
|
169
|
-
<template slot="header" slot-scope="scope">
|
|
170
|
-
<slot name="user-header" :column="scope.column">上传人</slot>
|
|
171
|
-
</template>
|
|
172
|
-
<template slot-scope="{ row }">
|
|
173
|
-
<slot name="user" :row="row">{{ row[keys.user] }}</slot>
|
|
174
|
-
</template>
|
|
175
|
-
</el-table-column>
|
|
171
|
+
</slot>
|
|
172
|
+
</template>
|
|
173
|
+
</el-table-column>
|
|
174
|
+
<el-table-column label="上传时间" :prop="keys.time" width="170" align="left">
|
|
175
|
+
<template slot="header" slot-scope="scope">
|
|
176
|
+
<slot name="time-header" :column="scope.column">上传时间</slot>
|
|
177
|
+
</template>
|
|
178
|
+
<template slot-scope="{ row }">
|
|
179
|
+
<slot name="time" :row="row">{{ row[keys.time] }}</slot>
|
|
180
|
+
</template>
|
|
181
|
+
</el-table-column>
|
|
182
|
+
<el-table-column label="上传人" :prop="keys.user" width="100">
|
|
183
|
+
<template slot="header" slot-scope="scope">
|
|
184
|
+
<slot name="user-header" :column="scope.column">上传人</slot>
|
|
185
|
+
</template>
|
|
186
|
+
<template slot-scope="{ row }">
|
|
187
|
+
<slot name="user" :row="row">{{ row[keys.user] }}</slot>
|
|
188
|
+
</template>
|
|
189
|
+
</el-table-column>
|
|
190
|
+
</template>
|
|
176
191
|
<el-table-column label="上传进度" width="220">
|
|
177
192
|
<template slot="header" slot-scope="scope">
|
|
178
193
|
<slot name="percent-header" :column="scope.column">上传进度</slot>
|
|
@@ -250,7 +265,7 @@
|
|
|
250
265
|
</component>
|
|
251
266
|
</div>
|
|
252
267
|
</el-dialog>
|
|
253
|
-
<Dialog title="附件批量上传" :visible.sync="visibleBatch" top="5vh" width="692px">
|
|
268
|
+
<Dialog title="附件批量上传" :visible.sync="visibleBatch" top="5vh" width="692px" :destroy-on-open="true">
|
|
254
269
|
<clUpload
|
|
255
270
|
ref="upload-batch"
|
|
256
271
|
class="n20-upload-drag"
|
package/src/index.js
CHANGED
|
@@ -57,6 +57,7 @@ import Descriptions from './components/Descriptions/index.vue'
|
|
|
57
57
|
import EventBubble from './components/EventBubble/index.vue'
|
|
58
58
|
// ECharts 不要打包进来
|
|
59
59
|
import Stamp from './components/Stamp/index.vue'
|
|
60
|
+
import Diff from './components/Diff/index.vue'
|
|
60
61
|
/* old */
|
|
61
62
|
import TableO from './components/Table/indexO.vue'
|
|
62
63
|
import FiltersO from './components/Filters/indexO.vue'
|
|
@@ -150,6 +151,7 @@ const components = [
|
|
|
150
151
|
EventBubble,
|
|
151
152
|
ApprovalImg,
|
|
152
153
|
Stamp,
|
|
154
|
+
Diff,
|
|
153
155
|
/* old */
|
|
154
156
|
TableO,
|
|
155
157
|
FiltersO,
|
|
@@ -264,5 +266,6 @@ export {
|
|
|
264
266
|
Descriptions,
|
|
265
267
|
EventBubble,
|
|
266
268
|
ApprovalImg,
|
|
267
|
-
Stamp
|
|
269
|
+
Stamp,
|
|
270
|
+
Diff
|
|
268
271
|
}
|