widget.qw 1.0.98 → 1.1.0
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/.env.development +1 -1
- package/build/style.css +20 -88
- package/build/widget.qw.es.js +268 -785
- package/build/widget.qw.umd.js +268 -785
- package/package.json +1 -1
- package/src/components/CascaderPicker.vue +49 -31
- package/src/components/CascaderPop.vue +189 -72
- package/src/components/index.js +0 -10
- package/src/router/index.ts +0 -5
- package/src/views/cascaderpicker/userpicker.vue +2 -2
- package/src/views/userpicker/index.vue +2 -2
- package/src/components/UserPicker.vue +0 -107
- package/src/components/UsersPicker.vue +0 -118
- package/src/components/widget/UserPop.vue +0 -346
- package/src/views/userspicker/index.vue +0 -43
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<van-field v-if="!isGone" :label="props.label" :modelValue="modelValue" readonly :required="isRequired"
|
|
3
|
-
:disabled="isDisabled" :placeholder="props.placeholder" :is-link="isReadonly ? false : true"
|
|
2
|
+
<van-field v-if="!isGone" :label="props.label" :modelValue="modelValue" readonly :required="isRequired"
|
|
3
|
+
:rules="rules" :disabled="isDisabled" :placeholder="props.placeholder" :is-link="isReadonly ? false : true"
|
|
4
4
|
@click="data.isShowPop = !isReadonly" label-class="label">
|
|
5
5
|
<template #input v-if="modelValue">
|
|
6
6
|
<div style="display: flex; align-items: center; flex-wrap: wrap;">
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
</template>
|
|
17
17
|
</van-field>
|
|
18
18
|
|
|
19
|
-
<CascaderPop v-model:show="data.isShowPop" v-model="data.
|
|
19
|
+
<CascaderPop :multiple="props.multiple" v-model:show="data.isShowPop" v-model="data.selectedNodeIds" :placeholder="props.placeholder"
|
|
20
20
|
@select="onSelect" :keywordQueryNode="props.keywordQueryNode" :idQueryNode="props.idQueryNode" />
|
|
21
21
|
</template>
|
|
22
22
|
|
|
@@ -73,7 +73,7 @@ const props = defineProps({
|
|
|
73
73
|
const data = reactive({
|
|
74
74
|
isShowPop: false,
|
|
75
75
|
selectedNodes: [],
|
|
76
|
-
|
|
76
|
+
selectedNodeIds: null
|
|
77
77
|
})
|
|
78
78
|
|
|
79
79
|
// 定义emit
|
|
@@ -85,23 +85,29 @@ const { isRequired, isReadonly, isGone, isDisabled, rules } = util.props2auth(pr
|
|
|
85
85
|
onMounted(() => {
|
|
86
86
|
})
|
|
87
87
|
|
|
88
|
-
const onSelect = (
|
|
89
|
-
if(!
|
|
88
|
+
const onSelect = (nodes) => {
|
|
89
|
+
if (!nodes) {
|
|
90
90
|
emit('select', null)
|
|
91
91
|
return
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
//单选
|
|
94
95
|
if (!props.multiple) {
|
|
95
|
-
data.selectedNodes =
|
|
96
|
+
data.selectedNodes = nodes
|
|
96
97
|
emit('select', data.selectedNodes[0])
|
|
97
|
-
modelValue.value =
|
|
98
|
+
modelValue.value = data.selectedNodes[0].id
|
|
98
99
|
}
|
|
100
|
+
//多选
|
|
99
101
|
else {
|
|
100
|
-
|
|
101
|
-
if (!one)
|
|
102
|
-
data.selectedNodes = [...data.selectedNodes, node]
|
|
102
|
+
data.selectedNodes = nodes
|
|
103
103
|
emit('select', data.selectedNodes)
|
|
104
104
|
modelValue.value = data.selectedNodes.map(item => item.id)
|
|
105
|
+
|
|
106
|
+
// let one = data.selectedNodes.find(item => item.id === node.id)
|
|
107
|
+
// if (!one)
|
|
108
|
+
// data.selectedNodes = [...data.selectedNodes, node]
|
|
109
|
+
// emit('select', data.selectedNodes)
|
|
110
|
+
// modelValue.value = data.selectedNodes.map(item => item.id)
|
|
105
111
|
}
|
|
106
112
|
}
|
|
107
113
|
|
|
@@ -113,29 +119,41 @@ const onDelete = (idx) => {
|
|
|
113
119
|
}
|
|
114
120
|
}
|
|
115
121
|
|
|
116
|
-
|
|
117
|
-
|
|
122
|
+
const ids2nodes = async() => {
|
|
123
|
+
if(!data.selectedNodeIds || data.selectedNodeIds.length<1)
|
|
124
|
+
return []
|
|
125
|
+
|
|
126
|
+
let promises = data.selectedNodeIds.map(async(nodeId) => {
|
|
127
|
+
let params = {}
|
|
128
|
+
params.id = nodeId
|
|
129
|
+
params.isReturnParent = true
|
|
130
|
+
params.hasChildren = false
|
|
131
|
+
params.hasPaths = true
|
|
132
|
+
|
|
133
|
+
let selectNode = null
|
|
134
|
+
await props.idQueryNode(params, (node) => {
|
|
135
|
+
data.parentNode = node
|
|
136
|
+
selectNode = util.findNode(nodeId, data.parentNode.children)
|
|
137
|
+
})
|
|
138
|
+
return selectNode
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
let selectNodes = await Promise.all(promises)
|
|
142
|
+
|
|
143
|
+
return selectNodes
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
watch(() => JSON.stringify(modelValue.value), async(n, o) => {
|
|
147
|
+
data.selectedNodeIds = modelValue.value
|
|
148
|
+
data.selectedNodes = await ids2nodes()
|
|
149
|
+
|
|
150
|
+
//单用户选择时,将用户id记录在selectedNodeIds,用户对象存入selectedNodes的第一个元素
|
|
118
151
|
if (!props.multiple) {
|
|
119
|
-
data.
|
|
120
|
-
}
|
|
152
|
+
data.selectedNodeIds = modelValue.value
|
|
153
|
+
}
|
|
121
154
|
//多用户选择时,遍历回调接口获取多用户对象列表,记录在selectedNodes
|
|
122
155
|
else {
|
|
123
|
-
data.
|
|
124
|
-
let ids = modelValue.value || []
|
|
125
|
-
ids.forEach(async (id) => {
|
|
126
|
-
let params = {}
|
|
127
|
-
params.id = id
|
|
128
|
-
params.isReturnParent = false
|
|
129
|
-
params.hasChildren = false
|
|
130
|
-
params.hasPaths= true
|
|
131
|
-
await props.idQueryNode(params, (node) => {
|
|
132
|
-
//在部门的children中查找id对应的用户
|
|
133
|
-
//部门的children中既有子部门又有部门的员工
|
|
134
|
-
let selectNode = util.findNode(id, node.children)
|
|
135
|
-
//将用户对象放入选中用户列表中
|
|
136
|
-
data.selectedNodes = [...data.selectedNodes, selectNode]
|
|
137
|
-
})
|
|
138
|
-
})
|
|
156
|
+
data.selectedNodeIds = modelValue.value
|
|
139
157
|
}
|
|
140
158
|
}, {
|
|
141
159
|
immediate: true
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
<template #title>
|
|
32
32
|
<div class="cell-content">
|
|
33
33
|
<div class="circle-selector" v-if="item.canCheck" @click.stop="onToggle(item)">
|
|
34
|
-
<van-icon v-if="data.
|
|
34
|
+
<van-icon v-if="data.selectedNodeIds.includes(item.id)" name="success" size="20"
|
|
35
35
|
color="#409eff" />
|
|
36
|
-
<van-icon v-if="data.
|
|
36
|
+
<van-icon v-if="!data.selectedNodeIds.includes(item.id)" name="circle" size="20"
|
|
37
37
|
color="#e0e0e0" />
|
|
38
38
|
</div>
|
|
39
39
|
<span class="name">{{ item.label }}</span>
|
|
@@ -56,8 +56,12 @@ import { useVModel } from '@vueuse/core'
|
|
|
56
56
|
|
|
57
57
|
const props = defineProps({
|
|
58
58
|
modelValue: {
|
|
59
|
-
type: String,
|
|
60
|
-
default:
|
|
59
|
+
type: [String, Array, Number],
|
|
60
|
+
default: null,
|
|
61
|
+
},
|
|
62
|
+
multiple: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
default: false
|
|
61
65
|
},
|
|
62
66
|
show: {
|
|
63
67
|
type: Boolean,
|
|
@@ -86,8 +90,8 @@ const data = reactive({
|
|
|
86
90
|
parentNode: null,
|
|
87
91
|
// 搜索关键字
|
|
88
92
|
keyword: "",
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
//记录临时勾选的子节点id
|
|
94
|
+
selectedNodeIds: []
|
|
91
95
|
})
|
|
92
96
|
|
|
93
97
|
onMounted(() => {
|
|
@@ -141,16 +145,50 @@ const onClear = () => {
|
|
|
141
145
|
const reset = () => {
|
|
142
146
|
// 搜索关键字
|
|
143
147
|
data.keyword = ""
|
|
148
|
+
data.selectedNodeIds = []
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const ids2nodes = async() => {
|
|
152
|
+
if(!data.selectedNodeIds || data.selectedNodeIds.length<1)
|
|
153
|
+
return []
|
|
154
|
+
|
|
155
|
+
let promises = data.selectedNodeIds.map(async(nodeId) => {
|
|
156
|
+
let params = {}
|
|
157
|
+
params.id = nodeId
|
|
158
|
+
params.isReturnParent = true
|
|
159
|
+
params.hasChildren = false
|
|
160
|
+
params.hasPaths = true
|
|
161
|
+
|
|
162
|
+
let selectNode = null
|
|
163
|
+
await props.idQueryNode(params, (node) => {
|
|
164
|
+
data.parentNode = node
|
|
165
|
+
selectNode = util.findNode(nodeId, data.parentNode.children)
|
|
166
|
+
})
|
|
167
|
+
return selectNode
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
let selectNodes = await Promise.all(promises)
|
|
171
|
+
|
|
172
|
+
return selectNodes
|
|
144
173
|
}
|
|
145
174
|
|
|
146
175
|
// 确认按钮
|
|
147
|
-
const onSubmit = () => {
|
|
148
|
-
if (!data.
|
|
176
|
+
const onSubmit = async() => {
|
|
177
|
+
if (!data.selectedNodeIds || data.selectedNodeIds.length < 1) {
|
|
149
178
|
util.warnToast("请选择")
|
|
150
179
|
return
|
|
151
180
|
}
|
|
152
181
|
|
|
153
|
-
|
|
182
|
+
let selectNodes = await ids2nodes()
|
|
183
|
+
emit('select', selectNodes)
|
|
184
|
+
|
|
185
|
+
if (!props.multiple) {
|
|
186
|
+
modelValue.value = data.selectedNodeIds[0]
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
modelValue.value = data.selectedNodeIds
|
|
190
|
+
}
|
|
191
|
+
|
|
154
192
|
show.value = false
|
|
155
193
|
|
|
156
194
|
reset()
|
|
@@ -163,10 +201,10 @@ const onCancel = () => {
|
|
|
163
201
|
}
|
|
164
202
|
|
|
165
203
|
const onToggle = (node) => {
|
|
166
|
-
if (data.
|
|
167
|
-
data.
|
|
204
|
+
if (data.selectedNodeIds.includes(node.id))
|
|
205
|
+
data.selectedNodeIds = data.selectedNodeIds.filter(item => item != node.id)
|
|
168
206
|
else
|
|
169
|
-
data.
|
|
207
|
+
data.selectedNodeIds.push(node.id)
|
|
170
208
|
}
|
|
171
209
|
|
|
172
210
|
const onNextLevel = (node) => {
|
|
@@ -176,74 +214,153 @@ const onNextLevel = (node) => {
|
|
|
176
214
|
}
|
|
177
215
|
|
|
178
216
|
const query = async () => {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
data.
|
|
217
|
+
if (!props.multiple)
|
|
218
|
+
if (modelValue.value)
|
|
219
|
+
data.selectedNodeIds = [modelValue.value]
|
|
220
|
+
else
|
|
221
|
+
data.selectedNodeIds = []
|
|
222
|
+
else
|
|
223
|
+
if (modelValue.value && modelValue.value.length > 0)
|
|
224
|
+
data.selectedNodeIds = modelValue.value
|
|
225
|
+
else
|
|
226
|
+
data.selectedNodeIds = []
|
|
227
|
+
|
|
228
|
+
let params = {}
|
|
229
|
+
if (data.selectedNodeIds.length > 0)
|
|
230
|
+
params.id = data.selectedNodeIds[0]
|
|
231
|
+
params.isReturnParent = true
|
|
232
|
+
params.hasChildren = true
|
|
233
|
+
params.hasPaths = true
|
|
234
|
+
|
|
235
|
+
await props.idQueryNode(params, (node) => {
|
|
236
|
+
data.parentNode = node
|
|
237
|
+
})
|
|
189
238
|
|
|
190
|
-
if (!modelValue.value)
|
|
191
|
-
return
|
|
192
239
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
240
|
+
// if (!props.multiple) {
|
|
241
|
+
// //空id时,查带子节点的虚拟根节点
|
|
242
|
+
// if (!data.selectedNodeIds) {
|
|
243
|
+
// let params = {}
|
|
244
|
+
// params.isReturnParent = true
|
|
245
|
+
// params.hasChildren = true
|
|
246
|
+
// params.hasPaths = true
|
|
247
|
+
|
|
248
|
+
// await props.idQueryNode(params, (node) => {
|
|
249
|
+
// data.parentNode = node
|
|
250
|
+
|
|
251
|
+
// // if (!data.selectedNodeIds)
|
|
252
|
+
// // return
|
|
253
|
+
|
|
254
|
+
// // let childNode = util.findNode(modelValue.value, data.parentNode.children)
|
|
255
|
+
// // emit('select', childNode)
|
|
256
|
+
// })
|
|
257
|
+
// }
|
|
258
|
+
// //选中节点时
|
|
259
|
+
// else {
|
|
260
|
+
// //未显示底部弹窗时,只查节点本身
|
|
261
|
+
// if (!props.show) {
|
|
262
|
+
// let params = {}
|
|
263
|
+
// params.id = modelValue.value
|
|
264
|
+
// params.isReturnParent = true
|
|
265
|
+
// params.hasChildren = false
|
|
266
|
+
// params.hasPaths = true
|
|
267
|
+
|
|
268
|
+
// await props.idQueryNode(params, (node) => {
|
|
269
|
+
// data.parentNode = node
|
|
270
|
+
// let childNode = util.findNode(modelValue.value, data.parentNode.children)
|
|
271
|
+
// emit('select', childNode)
|
|
272
|
+
// })
|
|
273
|
+
// }
|
|
274
|
+
// //显示底部弹窗时,查询带子节点的父节点
|
|
275
|
+
// else {
|
|
276
|
+
// let params = {}
|
|
277
|
+
// params.id = modelValue.value
|
|
278
|
+
// params.isReturnParent = true
|
|
279
|
+
// params.hasChildren = true
|
|
280
|
+
// params.hasPaths = true
|
|
281
|
+
|
|
282
|
+
// await props.idQueryNode(params, (node) => {
|
|
283
|
+
// data.parentNode = node
|
|
284
|
+
// if (!modelValue.value)
|
|
285
|
+
// return
|
|
286
|
+
// let childNode = util.findNode(modelValue.value, data.parentNode.children)
|
|
287
|
+
// emit('select', childNode)
|
|
288
|
+
// })
|
|
289
|
+
// }
|
|
290
|
+
// }
|
|
291
|
+
// } else {
|
|
292
|
+
// //空数组时,查带子节点的虚拟根节点
|
|
293
|
+
// if (!data.selectedNodeIds || data.selectedNodeIds.length < 1) {
|
|
294
|
+
// let params = {}
|
|
295
|
+
// params.isReturnParent = true
|
|
296
|
+
// params.hasChildren = true
|
|
297
|
+
// params.hasPaths = true
|
|
298
|
+
|
|
299
|
+
// await props.idQueryNode(params, (node) => {
|
|
300
|
+
// data.parentNode = node
|
|
301
|
+
|
|
302
|
+
// if (!modelValue.value)
|
|
303
|
+
// return
|
|
304
|
+
|
|
305
|
+
// let childNode = util.findNode(modelValue.value, data.parentNode.children)
|
|
306
|
+
// emit('select', childNode)
|
|
307
|
+
// })
|
|
308
|
+
// }
|
|
309
|
+
// //选中节点时
|
|
310
|
+
// else {
|
|
311
|
+
// //未显示底部弹窗时,只查节点本身
|
|
312
|
+
// if (!props.show) {
|
|
313
|
+
// let selectNodes = data.selectedNodeIds.map(async(nodeId) => {
|
|
314
|
+
// let params = {}
|
|
315
|
+
// params.id = nodeId
|
|
316
|
+
// params.isReturnParent = true
|
|
317
|
+
// params.hasChildren = false
|
|
318
|
+
// params.hasPaths = true
|
|
319
|
+
|
|
320
|
+
// let selectNode = await props.idQueryNode(params, (node) => {
|
|
321
|
+
// data.parentNode = node
|
|
322
|
+
// let childNode = util.findNode(nodeId, data.parentNode.children)
|
|
323
|
+
// return childNode
|
|
324
|
+
// })
|
|
325
|
+
// return selectNode
|
|
326
|
+
// })
|
|
327
|
+
// // emit('select', selectNodes)
|
|
328
|
+
// }
|
|
329
|
+
// //显示底部弹窗时,查询第一个选中节点的的父节点
|
|
330
|
+
// else {
|
|
331
|
+
// let params = {}
|
|
332
|
+
// params.id = data.selectedNodeIds[0]
|
|
333
|
+
// params.isReturnParent = true
|
|
334
|
+
// params.hasChildren = true
|
|
335
|
+
// params.hasPaths = true
|
|
336
|
+
|
|
337
|
+
// await props.idQueryNode(params, (node) => {
|
|
338
|
+
// data.parentNode = node
|
|
339
|
+
// if (!data.selectedNodeIds[0])
|
|
340
|
+
// return
|
|
341
|
+
// let childNode = util.findNode(data.selectedNodeIds[0], data.parentNode.children)
|
|
342
|
+
// // emit('select', childNode)
|
|
343
|
+
// })
|
|
344
|
+
// }
|
|
345
|
+
// }
|
|
346
|
+
// }
|
|
230
347
|
}
|
|
231
348
|
|
|
232
|
-
watch(() => props.show, () => {
|
|
233
|
-
if (!props.show)
|
|
234
|
-
return
|
|
235
|
-
|
|
236
|
-
query()
|
|
237
|
-
}, {
|
|
238
|
-
immediate: true
|
|
239
|
-
})
|
|
240
|
-
|
|
241
349
|
//根据id查询详情对象
|
|
242
|
-
watch(() => modelValue.value, async (n, o) => {
|
|
350
|
+
watch(() => [modelValue.value, props.show], async (n, o) => {
|
|
243
351
|
query()
|
|
244
352
|
}, {
|
|
245
353
|
immediate: true
|
|
246
354
|
})
|
|
355
|
+
|
|
356
|
+
// watch(() => props.show, () => {
|
|
357
|
+
// if (!props.show)
|
|
358
|
+
// return
|
|
359
|
+
|
|
360
|
+
// query()
|
|
361
|
+
// }, {
|
|
362
|
+
// immediate: true
|
|
363
|
+
// })
|
|
247
364
|
</script>
|
|
248
365
|
|
|
249
366
|
<style scoped>
|
|
@@ -295,7 +412,7 @@ watch(() => modelValue.value, async (n, o) => {
|
|
|
295
412
|
.current-path {
|
|
296
413
|
flex: 1;
|
|
297
414
|
font-size: 14px;
|
|
298
|
-
margin-left:5px;
|
|
415
|
+
margin-left: 5px;
|
|
299
416
|
color: #323233;
|
|
300
417
|
white-space: nowrap;
|
|
301
418
|
overflow: hidden;
|
package/src/components/index.js
CHANGED
|
@@ -16,8 +16,6 @@ import ImagePicker from "./image_picker.vue";
|
|
|
16
16
|
import ImagesPicker from "./images_picker.vue";
|
|
17
17
|
import FilePicker from "./FilePicker.vue";
|
|
18
18
|
import SingleUserSelector from "./SingleUserSelector.vue";
|
|
19
|
-
import UsersPicker from "./UsersPicker.vue"
|
|
20
|
-
import UserPicker from "./UserPicker.vue"
|
|
21
19
|
import UserProfile from "./UserProfile.vue"
|
|
22
20
|
import BillCard from './BillCard.vue'
|
|
23
21
|
import YearDropdown from "./YearDropdown.vue";
|
|
@@ -100,14 +98,6 @@ const components = [
|
|
|
100
98
|
name: 'WidgetQwUserSelector',
|
|
101
99
|
widget: UserSelector
|
|
102
100
|
},
|
|
103
|
-
{
|
|
104
|
-
name: 'WidgetQwUsersPicker',
|
|
105
|
-
widget: UsersPicker
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
name: 'WidgetQwUserPicker',
|
|
109
|
-
widget: UserPicker
|
|
110
|
-
},
|
|
111
101
|
{
|
|
112
102
|
name: 'WidgetQwUserProfile',
|
|
113
103
|
widget: UserProfile
|
package/src/router/index.ts
CHANGED
|
@@ -100,11 +100,6 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
100
100
|
name: "billcard",
|
|
101
101
|
component: () => import("../views/billcard/index.vue"),
|
|
102
102
|
},
|
|
103
|
-
{
|
|
104
|
-
path: "/userspicker",
|
|
105
|
-
name: "userspicker",
|
|
106
|
-
component: () => import("../views/userspicker/index.vue"),
|
|
107
|
-
},
|
|
108
103
|
{
|
|
109
104
|
path: "/userpicker",
|
|
110
105
|
name: "userpicker",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="page">
|
|
3
|
-
<UserPicker label="项目经理" multiple v-model="data.userids" />
|
|
3
|
+
<UserPicker label="项目经理" multiple v-model="data.userids" :auth="data.auth" />
|
|
4
4
|
</div>
|
|
5
5
|
</template>
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ import { reactive, onMounted } from "vue";
|
|
|
9
9
|
import UserPicker from '../cascaderpicker/userpicker.vue'
|
|
10
10
|
|
|
11
11
|
const data = reactive({
|
|
12
|
-
auth: '
|
|
12
|
+
auth: 'readonly',
|
|
13
13
|
userids: ["HouMu"]
|
|
14
14
|
})
|
|
15
15
|
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<van-field v-if="!isGone" :label="props.label" :required="isRequired" :rules="rules" :disabled="isDisabled"
|
|
3
|
-
:placeholder="props.placeholder" :is-link="isReadonly ? false : true" @click="data.isShowPop = !isReadonly"
|
|
4
|
-
label-class="label" :modelValue="modelValue">
|
|
5
|
-
<template #input>
|
|
6
|
-
<van-tag class="user" v-if="modelValue" :closeable="!isDisabled" type="primary" plain
|
|
7
|
-
@close.stop="onDelete">
|
|
8
|
-
{{ data.user.name }}
|
|
9
|
-
</van-tag>
|
|
10
|
-
</template>
|
|
11
|
-
</van-field>
|
|
12
|
-
|
|
13
|
-
<UserPop v-model:show="data.isShowPop" :rootDeptId="props.rootDeptId" :deptRangeId="props.deptRangeId"
|
|
14
|
-
@select="onSelectUser" />
|
|
15
|
-
|
|
16
|
-
</template>
|
|
17
|
-
<script setup>
|
|
18
|
-
import { reactive, onMounted, watch } from "vue";
|
|
19
|
-
import util from "../util"
|
|
20
|
-
import { useVModel } from '@vueuse/core'
|
|
21
|
-
import UserPop from './widget/UserPop.vue'
|
|
22
|
-
|
|
23
|
-
const props = defineProps({
|
|
24
|
-
modelValue: {
|
|
25
|
-
type: String,
|
|
26
|
-
default: '',
|
|
27
|
-
},
|
|
28
|
-
label: {
|
|
29
|
-
type: String,
|
|
30
|
-
default: "选择人员",
|
|
31
|
-
},
|
|
32
|
-
placeholder: {
|
|
33
|
-
type: String,
|
|
34
|
-
default: "请选择人员",
|
|
35
|
-
},
|
|
36
|
-
required: {
|
|
37
|
-
type: Boolean,
|
|
38
|
-
default: false,
|
|
39
|
-
},
|
|
40
|
-
readonly: {
|
|
41
|
-
type: Boolean,
|
|
42
|
-
default: false,
|
|
43
|
-
},
|
|
44
|
-
rules: {
|
|
45
|
-
type: Array,
|
|
46
|
-
default: [],
|
|
47
|
-
},
|
|
48
|
-
// 默认查询所有组织机构
|
|
49
|
-
rootDeptId: {
|
|
50
|
-
type: String,
|
|
51
|
-
default: "1", //组织机构id
|
|
52
|
-
},
|
|
53
|
-
// 二级部门取值范围字典id
|
|
54
|
-
// 取dictionary库.dict的配置id
|
|
55
|
-
deptRangeId: {
|
|
56
|
-
type: String,
|
|
57
|
-
default: ''
|
|
58
|
-
},
|
|
59
|
-
auth: {
|
|
60
|
-
type: String,
|
|
61
|
-
default: "",
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// 弹出层
|
|
66
|
-
const data = reactive({
|
|
67
|
-
isShowPop: false,
|
|
68
|
-
user: {}
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
// 定义emit
|
|
72
|
-
const emit = defineEmits(["update:modelValue", "select"]);
|
|
73
|
-
const modelValue = useVModel(props, 'modelValue', emit)
|
|
74
|
-
const { isRequired, isReadonly, isGone, isDisabled, rules } = util.props2auth(props);
|
|
75
|
-
|
|
76
|
-
//首页加载
|
|
77
|
-
onMounted(() => {
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
const onSelectUser = (userId) => {
|
|
81
|
-
modelValue.value = userId
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const onDelete=()=>{
|
|
85
|
-
data.user={}
|
|
86
|
-
modelValue.value = null
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
watch(() => modelValue.value, async (n, o) => {
|
|
90
|
-
if (!n) {
|
|
91
|
-
data.user = {}
|
|
92
|
-
return
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
let res = await util.get_wxuser_by_id({ userId: n })
|
|
96
|
-
data.user = res.data
|
|
97
|
-
emit('select', data.user)
|
|
98
|
-
}, {
|
|
99
|
-
immediate: true
|
|
100
|
-
})
|
|
101
|
-
</script>
|
|
102
|
-
|
|
103
|
-
<style scoped>
|
|
104
|
-
.user{
|
|
105
|
-
padding:4px 8px;
|
|
106
|
-
}
|
|
107
|
-
</style>
|