mali-applet-ui 1.0.41 → 1.0.43
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/README.md +6 -32
- package/lib/components/ml-amount-input/ml-amount-input.vue +3 -1
- package/lib/components/ml-approval-record/ml-approval-record.vue +157 -43
- package/lib/components/ml-approval-select/ml-approval-select.vue +97 -19
- package/lib/components/ml-chunk-item/ml-chunk-item.vue +7 -1
- package/lib/components/ml-drawer/ml-drawer.vue +1 -1
- package/lib/components/ml-number-input/ml-number-input.vue +6 -2
- package/lib/components/ml-rich-text/ml-rich-text.vue +3 -3
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Mali-Applet-UI 码里云小程序组件库
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 运行项目
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
npm run update
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
## 运行项目
|
|
12
|
-
|
|
13
|
-
### 本地环境
|
|
14
|
-
|
|
15
11
|
#### 运行(微信小程序)
|
|
16
12
|
|
|
17
13
|
```
|
|
@@ -24,6 +20,11 @@ npm run serve:mp-weixin
|
|
|
24
20
|
npm run serve:mp-dingtalk
|
|
25
21
|
```
|
|
26
22
|
|
|
23
|
+
### 打开开发者工具导入项目
|
|
24
|
+
|
|
25
|
+
例如微信开发者工具,导入本地项目/dist/dev/mp-weixin
|
|
26
|
+
取名规范:[项目名]-[平台]-[环境]
|
|
27
|
+
|
|
27
28
|
## 发布npm
|
|
28
29
|
|
|
29
30
|
需要先登陆NPM
|
|
@@ -32,31 +33,4 @@ npm run serve:mp-dingtalk
|
|
|
32
33
|
npm run release
|
|
33
34
|
```
|
|
34
35
|
|
|
35
|
-
## 安装
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
# npm方式安装
|
|
39
|
-
npm install mali-applet-ui
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## 按需引入
|
|
43
|
-
|
|
44
|
-
1. `pages.json`配置easycom规则(按需引入)
|
|
45
|
-
|
|
46
|
-
```js
|
|
47
|
-
// pages.json
|
|
48
|
-
{
|
|
49
|
-
"easycom": {
|
|
50
|
-
"autoscan": true,
|
|
51
|
-
"custom": {
|
|
52
|
-
"^ml-(.*)": "mali-applet-ui/lib/components/ml-$1/ml-$1.vue"
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
// 此为本身已有的内容
|
|
56
|
-
"pages": [
|
|
57
|
-
// ......
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
36
|
深圳叮当科技技术有限公司
|
|
@@ -144,14 +144,17 @@ export default {
|
|
|
144
144
|
const numVal = XEUtils.toNumber(this.inpVal)
|
|
145
145
|
if (this.minNum !== null && (numVal < this.minNum)) {
|
|
146
146
|
this.$emit('input', this.minNum)
|
|
147
|
+
this.updateModel = true
|
|
147
148
|
return { status: false, value: this.minNum }
|
|
148
149
|
}
|
|
149
150
|
if (this.maxNum !== null && (numVal > this.maxNum)) {
|
|
150
151
|
this.$emit('input', this.maxNum)
|
|
152
|
+
this.updateModel = true
|
|
151
153
|
return { status: false, value: this.maxNum }
|
|
152
154
|
}
|
|
153
155
|
const val = XEUtils.floor(numVal, 2)
|
|
154
156
|
if (`${val}` !== `${this.value}`) {
|
|
157
|
+
this.updateModel = true
|
|
155
158
|
this.$emit('input', val)
|
|
156
159
|
return { status: false, value: val }
|
|
157
160
|
}
|
|
@@ -159,7 +162,6 @@ export default {
|
|
|
159
162
|
},
|
|
160
163
|
blurEvent () {
|
|
161
164
|
const rest = this.checkValue()
|
|
162
|
-
this.updateModel = rest.status
|
|
163
165
|
if (rest.status) {
|
|
164
166
|
this.$nextTick(() => {
|
|
165
167
|
this.updateValue(rest.value)
|
|
@@ -4,21 +4,22 @@
|
|
|
4
4
|
<view class="ml-approval-record-header-title">审批记录</view>
|
|
5
5
|
</view>
|
|
6
6
|
<view class="ml-approval-record-body">
|
|
7
|
-
<view class="ml-approval-record-list" v-for="(group, gIndex) in
|
|
7
|
+
<view class="ml-approval-record-list" v-for="(group, gIndex) in flowConfigItems" :key="gIndex">
|
|
8
8
|
<view class="ml-approval-record-flow-line"></view>
|
|
9
9
|
<view class="ml-approval-record-item">
|
|
10
|
-
<view class="ml-approval-record-item-title">{{ group.
|
|
10
|
+
<view class="ml-approval-record-item-title">{{ group.nodeName }}</view>
|
|
11
11
|
</view>
|
|
12
12
|
<view class="ml-approval-record-users">
|
|
13
13
|
<view class="ml-approval-record-user-item" v-for="(item, uIndex) in group.userList" :key="uIndex">
|
|
14
14
|
<view class="ml-approval-record-user-item-info">
|
|
15
15
|
<view class="ml-approval-record-user-item-left">
|
|
16
|
-
<image class="ml-approval-record-user-picture" src="https://csgc.saas.ddqrcode.com/applet/business/image/portrait2.png"
|
|
16
|
+
<image class="ml-approval-record-user-picture" :src="item.faceImgUrl || 'https://csgc.saas.ddqrcode.com/applet/business/image/portrait2.png'" ></image>
|
|
17
17
|
</view>
|
|
18
18
|
<view class="ml-approval-record-user-item-content">
|
|
19
19
|
<view class="ml-approval-record-user-item-top">
|
|
20
|
-
<view class="ml-approval-record-user-name">{{ item.
|
|
21
|
-
<ml-approval-type :value="item.
|
|
20
|
+
<view class="ml-approval-record-user-name">{{ item.nickname }}</view>
|
|
21
|
+
<ml-approval-type :value="item.doneStatus !== 3 ? item.doneStatus : group.approveStatus"></ml-approval-type>
|
|
22
|
+
<view class="ml-approval-record-time">{{ (item.approveFlag || group.approveStatus === 3) ? (item.createTime || '') : '' }}</view>
|
|
22
23
|
</view>
|
|
23
24
|
<view class="ml-approval-record-user-role">{{ item.role }}</view>
|
|
24
25
|
</view>
|
|
@@ -26,13 +27,29 @@
|
|
|
26
27
|
<view class="ml-approval-record-user-date">{{ item.date }}</view>
|
|
27
28
|
</view>
|
|
28
29
|
</view>
|
|
29
|
-
<view class="ml-approval-record-user-item-comment">
|
|
30
|
-
<text>{{ item.
|
|
30
|
+
<view class="ml-approval-record-user-item-comment" v-if="item.doneFlag">
|
|
31
|
+
<text>{{ item.remark }}</text>
|
|
31
32
|
</view>
|
|
32
33
|
</view>
|
|
33
34
|
</view>
|
|
34
35
|
</view>
|
|
35
36
|
</view>
|
|
37
|
+
|
|
38
|
+
<FixedBottom v-if="showApproveBtn">
|
|
39
|
+
<ml-button @click="openApproval(false)">驳回</ml-button>
|
|
40
|
+
<ml-button status="primary" @click="openApproval(true)" >通过</ml-button>
|
|
41
|
+
</FixedBottom>
|
|
42
|
+
|
|
43
|
+
<ml-drawer v-model="showPopup" height="210rpx" :title="`审批状态:${isPass ? '通过' : '驳回'}`" showFooter>
|
|
44
|
+
<ml-textarea v-model="approveContent" border fontColor="#000" showVoice></ml-textarea>
|
|
45
|
+
<template #footer>
|
|
46
|
+
<ml-row>
|
|
47
|
+
<ml-button @click="() => this.showPopup = false">取消</ml-button>
|
|
48
|
+
<ml-button status="primary" @click="confirmEvent">确认</ml-button>
|
|
49
|
+
</ml-row>
|
|
50
|
+
</template>
|
|
51
|
+
</ml-drawer>
|
|
52
|
+
|
|
36
53
|
</view>
|
|
37
54
|
</template>
|
|
38
55
|
|
|
@@ -42,59 +59,147 @@ import globalStore from '../../../config/store'
|
|
|
42
59
|
export default {
|
|
43
60
|
name: 'MlApprovalRecord',
|
|
44
61
|
props: {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
62
|
+
sysApproveJobId: {
|
|
63
|
+
type: [Number, String],
|
|
64
|
+
default: 0
|
|
65
|
+
}
|
|
48
66
|
},
|
|
49
67
|
data () {
|
|
50
68
|
return {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
flowConfigItems: [], // 审批节点数据
|
|
70
|
+
specialAllFlowItems: [], // 已审批的记录
|
|
71
|
+
approveContent: '', // 审批描述
|
|
72
|
+
showPopup: false, // 审批弹出框
|
|
73
|
+
isPass: true // 通过, 驳回
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
computed: {
|
|
77
|
+
// 获取当前用户信息
|
|
78
|
+
userInfo () {
|
|
79
|
+
return globalStore.approval?.record?.getCurrentUserInfo() || {}
|
|
80
|
+
},
|
|
81
|
+
// 当前正在审批节点, 从头找到第一个没有审批过的节点, 或审批状态为 “审批中”的节点(approveStatus补后端approveFlag错误bug)
|
|
82
|
+
currFlowItem () {
|
|
83
|
+
return this.flowConfigItems.find(item => (item.approveFlag === false || item.approveStatus === 1))
|
|
84
|
+
},
|
|
85
|
+
showApproveBtn () {
|
|
86
|
+
// approveStatus: 3, 驳回状态
|
|
87
|
+
if (this.currFlowItem && this.currFlowItem.approveStatus !== 3) {
|
|
88
|
+
// 多人审批方式(0依次审批 1会签(需所有人同意) 2或签)
|
|
89
|
+
if (this.currFlowItem.approveMode === 0) {
|
|
90
|
+
// 依次审批: 找到第一个没有审批的节点,只有此节点的用户可审批, 其它排队
|
|
91
|
+
const currentApproveUser = this.currFlowItem.userList?.find(item => item.approveFlag === false)
|
|
92
|
+
currentApproveUser.doneStatus = 1
|
|
93
|
+
if (currentApproveUser.id === this.userInfo.userId) {
|
|
94
|
+
return true
|
|
95
|
+
}
|
|
96
|
+
} else {
|
|
97
|
+
// 会签、或签 当前用户在此节点审批人中并还未完成审批,可视为有审批按钮
|
|
98
|
+
return !!this.currFlowItem.userList?.find(item => item.approveFlag === false && item.id === this.userInfo.userId)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return false
|
|
59
102
|
}
|
|
60
103
|
},
|
|
61
104
|
watch: {
|
|
62
|
-
|
|
63
|
-
|
|
105
|
+
sysApproveJobId: {
|
|
106
|
+
immediate: true,
|
|
107
|
+
handler () {
|
|
108
|
+
this.loadFlow()
|
|
109
|
+
}
|
|
64
110
|
}
|
|
65
111
|
},
|
|
66
112
|
created () {
|
|
67
|
-
this.approvalData.module = this.code
|
|
68
|
-
this.approvalData.flowSettingCode = this.code
|
|
69
|
-
this.updateFlowItems(this.options)
|
|
70
113
|
this.loadFlow()
|
|
71
114
|
},
|
|
72
115
|
methods: {
|
|
73
|
-
|
|
74
|
-
this
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
this.flowItems = (list || []).map(item => {
|
|
78
|
-
item.f = []
|
|
79
|
-
return item
|
|
80
|
-
})
|
|
116
|
+
openApproval (isPass) {
|
|
117
|
+
this.isPass = isPass
|
|
118
|
+
this.approveContent = isPass ? '同意' : '不同意'
|
|
119
|
+
this.showPopup = true
|
|
81
120
|
},
|
|
82
121
|
async loadFlow () {
|
|
83
122
|
await this.$nextTick()
|
|
84
|
-
if (!this.
|
|
123
|
+
if (!this.sysApproveJobId) {
|
|
85
124
|
return
|
|
86
125
|
}
|
|
87
|
-
|
|
88
|
-
|
|
126
|
+
|
|
127
|
+
if (globalStore.approval && globalStore.approval.record) {
|
|
128
|
+
const loadFlowMethod = globalStore.approval.record.loadFlow
|
|
89
129
|
if (loadFlowMethod) {
|
|
90
130
|
Promise.resolve(loadFlowMethod({
|
|
91
|
-
|
|
131
|
+
sysApproveJobId: this.sysApproveJobId
|
|
132
|
+
})).then(res => {
|
|
133
|
+
this.flowConfigItems = res.flowConfigItems.map(item => {
|
|
134
|
+
item.specialItem = null
|
|
135
|
+
item.doneFlag = false
|
|
136
|
+
item.doneStatus = ''
|
|
137
|
+
return item
|
|
138
|
+
})
|
|
139
|
+
this.specialAllFlowItems = res.specialAllFlowItems.map(item => {
|
|
140
|
+
item.doneFlag = false
|
|
141
|
+
item.doneStatus = ''
|
|
142
|
+
return item
|
|
143
|
+
})
|
|
144
|
+
this.mergeFlowItemsData()
|
|
145
|
+
})
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
mergeFlowItemsData () {
|
|
150
|
+
// 已审批记录匹配到审批节点信息人员
|
|
151
|
+
this.flowConfigItems.forEach(configItem => {
|
|
152
|
+
// 匹配到当前节点
|
|
153
|
+
const specialItem = this.specialAllFlowItems.find(item => item.nodeIdCurrent === configItem.flowItemSettingId)
|
|
154
|
+
configItem.doneFlag = configItem.approveFlag
|
|
155
|
+
configItem.userList = configItem.userList.map(userItem => {
|
|
156
|
+
let doneFlag = false
|
|
157
|
+
let doneStatus = null
|
|
158
|
+
let remark = ''
|
|
159
|
+
let otherStatus = null
|
|
160
|
+
let createTime = null
|
|
161
|
+
if (specialItem) {
|
|
162
|
+
// 匹配到当前审批人--可能已有多次审批,选最后一次展示
|
|
163
|
+
const specialUserItems = specialItem.memberList.filter(item => item.createUser === userItem.id)
|
|
164
|
+
const specialUserItem = specialUserItems.length > 0 ? specialUserItems[specialUserItems.length - 1] : null
|
|
165
|
+
// userItem.approveFlag = false 当前节点未通过 或者 当前整个节点在驳回状态
|
|
166
|
+
if (specialUserItem && (userItem.approveFlag || configItem.approveStatus === 3)) {
|
|
167
|
+
doneFlag = true
|
|
168
|
+
// 审批过的状态, 1为通过, 2为驳回
|
|
169
|
+
doneStatus = specialUserItem.status === 1 ? 2 : 3
|
|
170
|
+
remark = specialUserItem.remark
|
|
171
|
+
otherStatus = specialUserItem.otherStatus
|
|
172
|
+
createTime = specialUserItem.createTime
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
...userItem,
|
|
177
|
+
doneFlag,
|
|
178
|
+
doneStatus,
|
|
179
|
+
remark,
|
|
180
|
+
otherStatus,
|
|
181
|
+
createTime
|
|
182
|
+
}
|
|
183
|
+
})
|
|
184
|
+
})
|
|
185
|
+
},
|
|
186
|
+
confirmEvent () {
|
|
187
|
+
if (globalStore.approval && globalStore.approval.record) {
|
|
188
|
+
const submitApprove = globalStore.approval.record.submitApprove
|
|
189
|
+
if (submitApprove) {
|
|
190
|
+
Promise.resolve(submitApprove({
|
|
191
|
+
applyUserId: this.userInfo.userId,
|
|
192
|
+
approveJobId: this.sysApproveJobId,
|
|
193
|
+
isPass: this.isPass,
|
|
194
|
+
otherStatus: this.isPass ? 1 : 2, // 1:同意, 2:不同意
|
|
195
|
+
remark: this.approveContent
|
|
92
196
|
})).then(res => {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
197
|
+
if (res.code === 200) {
|
|
198
|
+
this.$toast.success()
|
|
199
|
+
this.loadFlow()
|
|
200
|
+
this.$emit('back')
|
|
201
|
+
this.showPopup = false
|
|
202
|
+
}
|
|
98
203
|
})
|
|
99
204
|
}
|
|
100
205
|
}
|
|
@@ -116,6 +221,7 @@ export default {
|
|
|
116
221
|
}
|
|
117
222
|
.ml-approval-record-list {
|
|
118
223
|
position: relative;
|
|
224
|
+
padding-top: 20rpx;
|
|
119
225
|
padding-bottom: $ml-border-radius;
|
|
120
226
|
.ml-approval-record-flow-line {
|
|
121
227
|
position: absolute;
|
|
@@ -127,7 +233,7 @@ export default {
|
|
|
127
233
|
&::before {
|
|
128
234
|
content: "";
|
|
129
235
|
position: absolute;
|
|
130
|
-
top:
|
|
236
|
+
top: 32rpx;
|
|
131
237
|
left: -10rpx;
|
|
132
238
|
width: 24rpx;
|
|
133
239
|
height: 24rpx;
|
|
@@ -145,7 +251,7 @@ export default {
|
|
|
145
251
|
}
|
|
146
252
|
&:last-child {
|
|
147
253
|
.ml-approval-record-flow-line {
|
|
148
|
-
height:
|
|
254
|
+
height: 50rpx;
|
|
149
255
|
}
|
|
150
256
|
}
|
|
151
257
|
}
|
|
@@ -172,12 +278,17 @@ export default {
|
|
|
172
278
|
.ml-approval-record-user-item-content {
|
|
173
279
|
flex-grow: 1;
|
|
174
280
|
padding: 0 10rpx;
|
|
281
|
+
align-items: center;
|
|
282
|
+
display: flex;
|
|
175
283
|
}
|
|
176
284
|
.ml-approval-record-user-item-right {
|
|
177
285
|
flex-shrink: 0;
|
|
178
286
|
}
|
|
179
287
|
.ml-approval-record-user-item-top {
|
|
180
288
|
line-height: 40rpx;
|
|
289
|
+
display: flex;
|
|
290
|
+
align-items: center;
|
|
291
|
+
width: 100%;
|
|
181
292
|
}
|
|
182
293
|
.ml-approval-record-user-picture {
|
|
183
294
|
width: 100rpx;
|
|
@@ -194,6 +305,10 @@ export default {
|
|
|
194
305
|
margin-right: 10rpx;
|
|
195
306
|
color: rgba(0, 0, 0, 0.85);
|
|
196
307
|
}
|
|
308
|
+
.ml-approval-record-time {
|
|
309
|
+
flex: 1;
|
|
310
|
+
text-align: right;
|
|
311
|
+
}
|
|
197
312
|
.ml-approval-record-user-role {
|
|
198
313
|
font-size: 24rpx;
|
|
199
314
|
color: rgba(0, 0, 0, 0.86);
|
|
@@ -204,7 +319,6 @@ export default {
|
|
|
204
319
|
.ml-approval-record-user-item-comment{
|
|
205
320
|
padding: 20rpx;
|
|
206
321
|
background: #F0F2F5;
|
|
207
|
-
height: 160rpx;
|
|
208
322
|
border-radius: $ml-border-radius;
|
|
209
323
|
overflow: auto;
|
|
210
324
|
}
|
|
@@ -11,23 +11,40 @@
|
|
|
11
11
|
</view>
|
|
12
12
|
<view class="ml-approval-select-users">
|
|
13
13
|
<view class="ml-approval-select-user-item" v-for="(item, uIndex) in group.users" :key="uIndex">
|
|
14
|
-
<ml-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
</ml-checkbox>
|
|
14
|
+
<image class="ml-approval-select-user-picture" v-if="item.faceImgUrl" :src="item.faceImgUrl" mode="scaleToFill"></image>
|
|
15
|
+
<image class="ml-approval-select-user-picture" v-else src="https://csgc.saas.ddqrcode.com/applet/business/image/portrait2.png" mode="scaleToFill"></image>
|
|
16
|
+
<view class="ml-approval-select-user-name">{{ item.name }}</view>
|
|
18
17
|
</view>
|
|
19
|
-
<view class="ml-approval-select-user-add" @click="openAddUser(group)">
|
|
18
|
+
<view v-if="!rejectApproveJob" class="ml-approval-select-user-add" @click="openAddUser(group)">
|
|
20
19
|
<view class="ml-approval-select-user-add-icon">
|
|
21
20
|
<ml-icon name="add"></ml-icon>
|
|
22
21
|
</view>
|
|
23
22
|
</view>
|
|
24
23
|
</view>
|
|
24
|
+
<view v-if="group.copyRoles && group.copyRoles.length">
|
|
25
|
+
<view class="ml-approval-select-item-title" v-if="!rejectApproveJob || (group.copyUsers)">抄送</view>
|
|
26
|
+
<view class="ml-approval-select-users">
|
|
27
|
+
<view class="ml-approval-select-user-item" v-for="(item, uIndex) in group.copyUsers" :key="uIndex">
|
|
28
|
+
<image class="ml-approval-select-user-picture" src="https://csgc.saas.ddqrcode.com/applet/business/image/portrait2.png" mode="scaleToFill"></image>
|
|
29
|
+
<view class="ml-approval-select-user-name">{{ item.name }}</view>
|
|
30
|
+
</view>
|
|
31
|
+
<view v-if="!rejectApproveJob" class="ml-approval-select-user-add" @click="openAddUser(group, true)">
|
|
32
|
+
<view class="ml-approval-select-user-add-icon">
|
|
33
|
+
<ml-icon name="add"></ml-icon>
|
|
34
|
+
</view>
|
|
35
|
+
</view>
|
|
36
|
+
</view>
|
|
37
|
+
</view>
|
|
25
38
|
</view>
|
|
26
39
|
</view>
|
|
27
40
|
|
|
28
41
|
<ml-picker-drawer v-model="showPopup" height="600rpx" showFooter @confirm="confirmEvent">
|
|
29
|
-
<ml-list-menu-group
|
|
30
|
-
<
|
|
42
|
+
<ml-list-menu-group type="checkbox" :checked.sync="selectedUserIds">
|
|
43
|
+
<view v-for="(group, gIndex) in selectRoleGroups" :key="gIndex" :title="group.name">
|
|
44
|
+
<view>{{ group.name }}</view>
|
|
45
|
+
<ml-list-menu-item v-for="item in group.userList" :padding="false" :disabled="false" suffixIcon="none"
|
|
46
|
+
:key="item.id"
|
|
47
|
+
:value="item.id">
|
|
31
48
|
<ml-row>
|
|
32
49
|
<ml-col width="80rpx" shrink>
|
|
33
50
|
<image class="ml-approval-picker-drawer-user-picture" src="https://csgc.saas.ddqrcode.com/applet/business/image/portrait2.png" mode="scaleToFill"></image>
|
|
@@ -35,6 +52,7 @@
|
|
|
35
52
|
<ml-col verticalAlign="center">{{ item.name }}</ml-col>
|
|
36
53
|
</ml-row>
|
|
37
54
|
</ml-list-menu-item>
|
|
55
|
+
</view>
|
|
38
56
|
</ml-list-menu-group>
|
|
39
57
|
</ml-picker-drawer>
|
|
40
58
|
</view>
|
|
@@ -48,7 +66,7 @@ export default {
|
|
|
48
66
|
props: {
|
|
49
67
|
value: Array,
|
|
50
68
|
code: String,
|
|
51
|
-
|
|
69
|
+
rejectApproveJob: String
|
|
52
70
|
},
|
|
53
71
|
data () {
|
|
54
72
|
return {
|
|
@@ -64,15 +82,32 @@ export default {
|
|
|
64
82
|
isAllIndeterminate: false,
|
|
65
83
|
checkList: [],
|
|
66
84
|
dataList: [],
|
|
67
|
-
selectFlowItem: null
|
|
85
|
+
selectFlowItem: null,
|
|
86
|
+
selectedUserIds: [],
|
|
87
|
+
isCopyUser: false
|
|
68
88
|
}
|
|
69
89
|
},
|
|
70
90
|
computed: {
|
|
71
91
|
selectRoleGroups () {
|
|
72
92
|
if (this.selectFlowItem) {
|
|
73
|
-
return this.selectFlowItem.roleList || []
|
|
93
|
+
return (this.selectFlowItem.roleList || []).filter(item => item.id).map(item => {
|
|
94
|
+
const userList = (item.userList || []).map(user => ({ ...user, id: `${user.id}_${item.id}` }))
|
|
95
|
+
return {
|
|
96
|
+
...item,
|
|
97
|
+
userList
|
|
98
|
+
}
|
|
99
|
+
})
|
|
74
100
|
}
|
|
75
101
|
return []
|
|
102
|
+
},
|
|
103
|
+
selectedUserList () {
|
|
104
|
+
const allUser = []
|
|
105
|
+
this.selectRoleGroups.forEach(element => {
|
|
106
|
+
(element?.userList || []).forEach(ele => {
|
|
107
|
+
allUser.push(ele)
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
return allUser.filter(item => this.selectedUserIds.indexOf(item.id) > -1)
|
|
76
111
|
}
|
|
77
112
|
},
|
|
78
113
|
watch: {
|
|
@@ -83,18 +118,29 @@ export default {
|
|
|
83
118
|
created () {
|
|
84
119
|
this.approvalData.module = this.code
|
|
85
120
|
this.approvalData.flowSettingCode = this.code
|
|
86
|
-
this.updateFlowItems(this.options)
|
|
87
121
|
this.loadFlow()
|
|
88
122
|
},
|
|
89
123
|
methods: {
|
|
90
124
|
updateModel () {
|
|
91
125
|
this.$emit('input', this.approvalData)
|
|
92
126
|
},
|
|
93
|
-
updateFlowItems (
|
|
94
|
-
this
|
|
95
|
-
|
|
96
|
-
return
|
|
97
|
-
}
|
|
127
|
+
async updateFlowItems () {
|
|
128
|
+
await this.$nextTick()
|
|
129
|
+
if (!this.rejectApproveJob) {
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
if (globalStore.approval && globalStore.approval.select) {
|
|
133
|
+
const updateMethod = globalStore.approval.select.updateFlowItems
|
|
134
|
+
if (updateMethod) {
|
|
135
|
+
Promise.resolve(updateMethod({
|
|
136
|
+
sysApproveJobId: this.rejectApproveJob,
|
|
137
|
+
flowItems: [...this.flowItems]
|
|
138
|
+
})).then(res => {
|
|
139
|
+
this.flowItems = res
|
|
140
|
+
console.log('updateMethod====', res)
|
|
141
|
+
})
|
|
142
|
+
}
|
|
143
|
+
}
|
|
98
144
|
},
|
|
99
145
|
async loadFlow () {
|
|
100
146
|
await this.$nextTick()
|
|
@@ -110,18 +156,50 @@ export default {
|
|
|
110
156
|
this.approvalData.enableFlag = res.enableFlag
|
|
111
157
|
this.approvalData.flowSettingCode = res.flowSettingCode
|
|
112
158
|
this.approvalData.module = res.module
|
|
113
|
-
this.
|
|
159
|
+
this.flowItems = res.flowItems
|
|
160
|
+
this.updateFlowItems()
|
|
114
161
|
this.updateModel()
|
|
115
162
|
})
|
|
116
163
|
}
|
|
117
164
|
}
|
|
118
165
|
},
|
|
119
|
-
openAddUser (group) {
|
|
166
|
+
openAddUser (group, isCopy = false) {
|
|
167
|
+
this.isCopyUser = isCopy
|
|
120
168
|
this.selectFlowItem = group
|
|
169
|
+
// 返选已选中项
|
|
170
|
+
this.selectedUserIds = ((isCopy ? this.selectFlowItem?.copyUsers : this.selectFlowItem?.users) || []).map(item => item.id)
|
|
121
171
|
this.showPopup = true
|
|
122
172
|
},
|
|
173
|
+
updateFlowHandlers () {
|
|
174
|
+
const flowHandlers = this.flowItems.map(item => {
|
|
175
|
+
return {
|
|
176
|
+
copierList: (item.copyUsers || []).map(user => ({
|
|
177
|
+
memberIds: user.id?.split('_')[0],
|
|
178
|
+
memberNames: user.name,
|
|
179
|
+
roleId: user.id?.split('_')[1]
|
|
180
|
+
})),
|
|
181
|
+
flowItemSettingId: item.id,
|
|
182
|
+
userList: (item.users || []).map(user => ({
|
|
183
|
+
// approveFlag: false,
|
|
184
|
+
memberIds: user.id?.split('_')[0],
|
|
185
|
+
memberNames: user.name,
|
|
186
|
+
roleId: user.id?.split('_')[1]
|
|
187
|
+
}))
|
|
188
|
+
}
|
|
189
|
+
})
|
|
190
|
+
this.approvalData.flowHandlers = flowHandlers
|
|
191
|
+
},
|
|
123
192
|
confirmEvent () {
|
|
124
|
-
|
|
193
|
+
if (this.isCopyUser) {
|
|
194
|
+
this.selectFlowItem.copyUsers = this.selectedUserList
|
|
195
|
+
} else {
|
|
196
|
+
this.selectFlowItem.users = this.selectedUserList
|
|
197
|
+
}
|
|
198
|
+
console.log(this.flowItems)
|
|
199
|
+
this.showPopup = false
|
|
200
|
+
this.selectedUserIds = []
|
|
201
|
+
this.updateFlowHandlers()
|
|
202
|
+
this.updateModel()
|
|
125
203
|
}
|
|
126
204
|
}
|
|
127
205
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<view class="ml-chunk-item" :class="[className || '', span && !width ? `span-${span}` : '',
|
|
2
|
+
<view class="ml-chunk-item" :class="[className || '', span && !width ? `span-${span}` : '', itemAlign ? `align-${itemAlign}` : '', {'is-fixed': span || width, 'is-vertical': isVertical}]" :style="styles" @click="clickEvent" @tap="tapEvent">
|
|
3
3
|
<slot></slot>
|
|
4
4
|
</view>
|
|
5
5
|
</template>
|
|
@@ -28,6 +28,12 @@ export default {
|
|
|
28
28
|
isVertical () {
|
|
29
29
|
return this.chunk ? this.chunk.vertical : ''
|
|
30
30
|
},
|
|
31
|
+
itemAlign () {
|
|
32
|
+
if (this.align) {
|
|
33
|
+
return this.align
|
|
34
|
+
}
|
|
35
|
+
return this.isVertical ? '' : 'center'
|
|
36
|
+
},
|
|
31
37
|
styles () {
|
|
32
38
|
return this.width ? `width: ${this.width};` : ''
|
|
33
39
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="ml-drawer" :class="[className || '', `placement-${placement || 'bottom'}`, {'is-visible': visible, 'is-animate': isAnimate}]" @tap="tapMaskEvent">
|
|
3
3
|
<view v-if="visible" class="ml-drawer-warpper" @tap.stop.prevent>
|
|
4
|
-
<view v-if="showHeader" class="ml-drawer-header">
|
|
4
|
+
<view v-if="title || showHeader" class="ml-drawer-header">
|
|
5
5
|
<slot name="header">
|
|
6
6
|
<view v-if="title" class="ml-drawer-header-title">{{ title }}</view>
|
|
7
7
|
</slot>
|
|
@@ -132,23 +132,28 @@ export default {
|
|
|
132
132
|
}
|
|
133
133
|
const numVal = XEUtils.toNumber(XEUtils.toValueString(this.inpVal).slice(0, this.maxLength))
|
|
134
134
|
if (this.minNum !== null && (numVal < this.minNum)) {
|
|
135
|
+
this.updateModel = true
|
|
135
136
|
this.$emit('input', this.minNum)
|
|
136
137
|
return { status: false, value: this.minNum }
|
|
137
138
|
}
|
|
138
139
|
if (this.maxNum !== null && (numVal > this.maxNum)) {
|
|
140
|
+
this.updateModel = true
|
|
139
141
|
this.$emit('input', this.maxNum)
|
|
140
142
|
return { status: false, value: this.maxNum }
|
|
141
143
|
}
|
|
142
144
|
if (this.type === 'integer' && !/^-?[0-9]+$/.test(numVal)) {
|
|
143
145
|
const value = XEUtils.toInteger(numVal)
|
|
146
|
+
this.updateModel = true
|
|
144
147
|
this.$emit('input', value)
|
|
145
148
|
return { status: false, value: value }
|
|
146
149
|
}
|
|
147
150
|
if (`${numVal}` !== this.inpVal) {
|
|
151
|
+
this.updateModel = true
|
|
148
152
|
this.$emit('input', numVal)
|
|
149
153
|
return { status: false, value: numVal }
|
|
150
154
|
}
|
|
151
155
|
if (`${numVal}` !== `${this.value}`) {
|
|
156
|
+
this.updateModel = true
|
|
152
157
|
this.$emit('input', numVal)
|
|
153
158
|
return { status: false, value: numVal }
|
|
154
159
|
}
|
|
@@ -171,8 +176,7 @@ export default {
|
|
|
171
176
|
}
|
|
172
177
|
},
|
|
173
178
|
blurEvent () {
|
|
174
|
-
|
|
175
|
-
this.updateModel = rest.status
|
|
179
|
+
this.checkValue()
|
|
176
180
|
this.$emit('blur', { value: this.inpVal })
|
|
177
181
|
},
|
|
178
182
|
inputEvent () {
|
|
@@ -23,10 +23,10 @@ export default {
|
|
|
23
23
|
},
|
|
24
24
|
watch: {
|
|
25
25
|
value () {
|
|
26
|
-
this.
|
|
26
|
+
this.load()
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
|
-
|
|
29
|
+
mounted () {
|
|
30
30
|
this.load()
|
|
31
31
|
},
|
|
32
32
|
methods: {
|
|
@@ -42,4 +42,4 @@ export default {
|
|
|
42
42
|
display: block;
|
|
43
43
|
word-break: break-word;
|
|
44
44
|
}
|
|
45
|
-
</style>
|
|
45
|
+
</style>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mali-applet-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.43",
|
|
4
4
|
"description": "码里云小程序组件库",
|
|
5
5
|
"files": [
|
|
6
6
|
"lib",
|
|
@@ -19,13 +19,14 @@
|
|
|
19
19
|
"update": "npm install --legacy-peer-deps",
|
|
20
20
|
"eslint-fix": "eslint --fix --ext .vue,.js src",
|
|
21
21
|
"build:custom": "npm run run-before && cross-env NODE_ENV=production uniapp-cli custom",
|
|
22
|
+
"build:mp-alipay": "npm run run-before && cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build",
|
|
22
23
|
"build:mp-dingtalk": "npm run run-before && gulp load_build_dingtalk && cross-env NODE_ENV=production UNI_OUTPUT_DIR=dist/build/mp-dingtalk uniapp-cli custom mp-dingtalk",
|
|
23
24
|
"build:mp-weixin": "npm run run-before && cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
|
|
24
25
|
"serve:custom": "npm run run-before && cross-env NODE_ENV=development uniapp-cli custom",
|
|
25
26
|
"serve:mp-weixin": "npm run run-before && cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
|
|
27
|
+
"serve:mp-alipay": "npm run run-before && cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch",
|
|
26
28
|
"serve:mp-dingtalk": "npm run run-before && gulp load_dev_dingtalk && cross-env NODE_ENV=development UNI_OUTPUT_DIR=dist/dev/mp-dingtalk uniapp-cli custom mp-dingtalk",
|
|
27
|
-
"run-before": "node script/run-before.js"
|
|
28
|
-
"clear": "gulp clear_temp"
|
|
29
|
+
"run-before": "node script/run-before.js"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@dcloudio/uni-app-plus": "^2.0.1-36420220922003",
|