n20-common-lib 2.5.39 → 2.5.41

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n20-common-lib",
3
- "version": "2.5.39",
3
+ "version": "2.5.41",
4
4
  "private": false,
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -116,4 +116,4 @@
116
116
  "last 2 versions",
117
117
  "not dead"
118
118
  ]
119
- }
119
+ }
@@ -53,14 +53,31 @@ export default {
53
53
  getData() {
54
54
  if (this.andUser) {
55
55
  axios.post('/bems/activiti/actAppOpi/queryAppOpiAndUser', null, { loading: false }).then(({ data }) => {
56
- this.approveMsgList = data || []
56
+ this.approveMsgList = this.getOnlyData(data || [])
57
57
  })
58
58
  } else {
59
59
  axios.post('/bems/activiti/actAppOpi/queryAppOpi', null, { loading: false }).then(({ data }) => {
60
- this.approveMsgList = data.list || []
60
+ this.approveMsgList = this.getOnlyData(data.list || [])
61
61
  })
62
62
  }
63
63
  },
64
+ getOnlyData(data) {
65
+ const length = data.length
66
+ if (length === 0) {
67
+ return result
68
+ }
69
+ let result = []
70
+ const suggestionMap = {}
71
+ for (let i = 0; i < length; i++) {
72
+ let currentItem = data[i]
73
+ let suggestion = currentItem.suggestion
74
+ if (!suggestionMap[suggestion]) {
75
+ suggestionMap[suggestion] = true
76
+ result.push(currentItem)
77
+ }
78
+ }
79
+ return result
80
+ },
64
81
  changeFn() {
65
82
  // if (this.approveMsgSlt?.length) {
66
83
  this.$emit(
@@ -69,7 +69,9 @@
69
69
  <div class="right-tree flex-column p-t-m" v-else>
70
70
  <div class="m-b flex-box flex-lr flex-v">
71
71
  {{ '当前选定项' | $lc }}
72
- <el-link class="m-r-s" :underline="false" icon="n20-icon-xinzeng" @click="add">新增</el-link>
72
+ <el-link class="m-r-s" :underline="false" icon="n20-icon-xinzeng" @click="add">{{
73
+ '新增字段' | $lc
74
+ }}</el-link>
73
75
  </div>
74
76
  <el-tree
75
77
  ref="menu-tree"
@@ -79,43 +81,51 @@
79
81
  children: 'children',
80
82
  label: 'label'
81
83
  }"
82
- node-key="menuid"
84
+ node-key="prop"
83
85
  draggable
84
86
  style="width: 200px"
87
+ :allow-drop="allowDrop"
85
88
  @node-drop="dropMenu"
86
89
  >
87
90
  <span slot-scope="{ node, data }" class="menu-item flex-item flex-box flex-lr flex-v">
88
91
  <span>
89
92
  <i class="n20-drag-icon n20-icon-tuodong"></i>
90
- <span class="text-ellipsis pointer color-primary" @click="clickItem(data)" v-if="data.label">{{
91
- data.label
92
- }}</span>
93
- <span v-else>{{ '未命名...' }}</span>
93
+ <span class="text-ellipsis pointer color-primary" @click="clickItem(data)">{{ data.label }}</span>
94
94
  </span>
95
- <el-link
96
- v-if="!disabled"
97
- class="n20-icon-shanchu"
98
- :underline="false"
99
- :disabled="inSC && item.checked"
100
- @click.stop="() => removeMenu(node, data)"
101
- />
95
+ <el-link class="n20-icon-shanchu" :underline="false" @click.stop="() => removeMenu(node, data)" />
102
96
  </span>
103
97
  </el-tree>
104
98
  </div>
105
99
  </div>
106
100
  </div>
107
- <dialogWrap v-drag :visible.sync="configVisible" title="表头设置" width="350px" :close-on-click-modal="false">
101
+ <dialogWrap
102
+ v-drag
103
+ :visible.sync="configVisible"
104
+ :title="'表头设置' | $lc"
105
+ width="350px"
106
+ :close-on-click-modal="false"
107
+ >
108
108
  <el-form :model="configModel">
109
109
  <el-form-item>
110
110
  {{ configModel.label }}
111
111
  </el-form-item>
112
- <el-form-item label="表头宽度">
113
- <el-input v-model="configModel.width" style="width: 100px"></el-input>
112
+ <el-form-item
113
+ :label="'表头宽度' | $lc"
114
+ :rules="[
115
+ {
116
+ type: 'number',
117
+ trigger: ['change', 'blur'],
118
+ validator: validator
119
+ }
120
+ ]"
121
+ prop="width"
122
+ >
123
+ <el-input v-model="configModel.width" class="w-224"></el-input>
114
124
  </el-form-item>
115
- <el-form-item label="是否折行">
125
+ <el-form-item :label="'是否折行' | $lc">
116
126
  <el-radio-group v-model="configModel.wrap">
117
- <el-radio :label="true">是</el-radio>
118
- <el-radio :label="false">否</el-radio>
127
+ <el-radio :label="true">{{ $lc('是') }}</el-radio>
128
+ <el-radio :label="false">{{ $lc('否') }}</el-radio>
119
129
  </el-radio-group>
120
130
  </el-form-item>
121
131
  </el-form>
@@ -123,10 +133,10 @@
123
133
  <el-button type="primary" @click="configSave">{{ '确定' | $lc }}</el-button>
124
134
  </div>
125
135
  </dialogWrap>
126
- <dialogWrap v-drag :visible.sync="configVisibleN" title="新增" width="350px" :close-on-click-modal="false">
136
+ <dialogWrap v-drag :visible.sync="configVisibleN" :title="'新增' | $lc" width="350px" :close-on-click-modal="false">
127
137
  <el-form :model="configModelN">
128
- <el-form-item label="名称" required>
129
- <el-input v-model="configModelN.label" class="input-w" placeholder="请输入"></el-input>
138
+ <el-form-item :label="'名称' | $lc" required>
139
+ <el-input v-model="configModelN.label" class="input-w" :placeholder="'请输入' | $lc"></el-input>
130
140
  </el-form-item>
131
141
  </el-form>
132
142
  <div slot="footer">
@@ -245,23 +255,29 @@ export default {
245
255
  setState() {
246
256
  return this.columnsAs.length && this.columnsAs.length === this.dragListN.length
247
257
  },
248
- columnsAs() {
249
- return this.columns.filter((col) => !col.static)
258
+ columnsAs: {
259
+ get() {
260
+ return this.columns.filter((col) => !col.static)
261
+ },
262
+ set(val) {
263
+ return val
264
+ }
250
265
  }
251
266
  },
252
267
  watch: {
253
268
  dragList: {
254
269
  handler() {
255
- let obj = []
270
+ let arr = []
256
271
  forEachs(this.dragList, (item) => {
257
- obj.push(item)
272
+ arr.push(item)
258
273
  })
259
- this.dragListN = obj
260
- const isNew = obj.filter((item) => {
274
+ this.dragListN = arr
275
+ const newArr = arr.filter((item) => {
261
276
  return item.isNew
262
277
  })
263
- isNew.forEach((item) => {
264
- if (!this.columns.includes(item)) {
278
+ newArr.forEach((item) => {
279
+ const index = this.columns.findIndex((col) => col.prop === item.prop || col.label === item.label)
280
+ if (index === -1) {
265
281
  this.columns.push(item)
266
282
  }
267
283
  })
@@ -271,25 +287,33 @@ export default {
271
287
  }
272
288
  },
273
289
  methods: {
290
+ validator(rule, value, callback) {
291
+ if (value) {
292
+ if (value > 300) {
293
+ return callback(new Error($lc('输入最大宽度不能大于300')))
294
+ } else if (!/^[1-9]\d*$/.test(value)) {
295
+ return callback(new Error($lc('表头宽度只能输入正整数')))
296
+ }
297
+ }
298
+ callback()
299
+ },
274
300
  add() {
275
301
  this.configVisibleN = true
276
- this.configModelN.prop = 'prop' + this.configModelN.legnth
302
+ this.configModelN.prop = 'prop' + Date.now()
277
303
  },
278
304
  configSaveN() {
279
305
  if (!this.configModelN.label) {
280
- this.$message.warning('请填写名称')
281
- return false
306
+ return this.$message.warning($lc('请填写名称'))
282
307
  }
283
308
  const hasLabel = this.dragListN.find((item) => {
284
309
  return item.label === this.configModelN.label
285
310
  })
286
311
  if (hasLabel) {
287
- this.$message.warning('已有重名字段,请修改')
288
- return false
312
+ return this.$message.warning($lc('已有重名字段,请修改'))
289
313
  }
290
314
  this.dragList.push(this.configModelN)
291
- this.columns.push(this.configModelN)
292
- this.$message.success('添加成功')
315
+ this.columns = [...this.columns, this.configModelN]
316
+ this.$message.success($lc('添加成功'))
293
317
  this.configVisibleN = false
294
318
  this.configModelN = {
295
319
  label: '',
@@ -299,45 +323,40 @@ export default {
299
323
  }
300
324
  },
301
325
  removeMenu(node, data) {
302
- let children = node.parent.data.children || node.parent.data
303
- let index = children.findIndex((d) => d.prop === data.prop)
304
- index !== -1 && children.splice(index, 1)
305
- this.activeMenu = {}
306
- this.canApply = true
307
- /* this.dragListN = this.dragListN.filter((item) => {
308
- return item.label !== data
309
- }) */
326
+ const parent = node.parent
327
+ const children = parent.data.children || parent.data
328
+ const index = children.findIndex((d) => d.prop === data.prop)
329
+ children.splice(index, 1)
310
330
  },
311
- dropMenu(ingNode, toNode, type) {
312
- let toObj = undefined
313
- let toChild = undefined
314
- if (type === 'inner') {
315
- toObj = toNode.data
316
- toChild = toObj.children
331
+ allowDrop(draggingNode, dropNode, type) {
332
+ if (type === 'inner' && draggingNode.data.isNew) {
333
+ return !(draggingNode.level <= dropNode.level)
334
+ } else if (type === 'inner' && !draggingNode.data.isNew) {
335
+ return !(draggingNode.level <= dropNode.level && !dropNode.data.isNew)
317
336
  } else {
318
- if (Array.isArray(toNode.parent.data)) {
319
- toObj = {}
320
- toChild = toNode.parent.data
321
- } else {
322
- toObj = toNode.parent.data
323
- toChild = toObj.children
324
- }
337
+ return true
338
+ }
339
+ },
340
+ dropMenu({ data }, toNode, type) {
341
+ if (type === 'inner' && !data.isNew && toNode.data.isNew) {
342
+ data.isNew = true
343
+ } else if ((type === 'before' || type === 'after') && data.isNew) {
344
+ data.isNew = false
325
345
  }
326
- toChild?.forEach((item, i) => {
327
- item.status = 'U'
328
- item.sortnum = i + 1 + ''
329
- item.pmid = toObj.menuid || null
330
- item.parentTreeNo = toObj.treeno || null
331
- })
332
-
333
- this.canApply = true
334
346
  },
335
347
  clickItem(item) {
336
- this.configModel = item
348
+ this.configModel = Object.assign({}, item)
349
+ this.configModel.wrap = item.wrap ?? false
337
350
  this.configVisible = true
338
351
  },
339
352
  configSave() {
340
353
  this.configVisible = false
354
+ const index = this.dragList.findIndex(
355
+ (item) => item.prop === this.configModel.prop || item.label === this.configModel.label
356
+ )
357
+ if (index > -1) {
358
+ this.dragList[index] = this.configModel
359
+ }
341
360
  },
342
361
  popOpen() {
343
362
  this.dragList = this.checkColumns.filter((col) => !col.static)
@@ -380,7 +399,6 @@ export default {
380
399
  !this.isExport && this.autoSave && this.saveColumns(list)
381
400
 
382
401
  this.$emit('setColumns', list)
383
- this.visible = false
384
402
  },
385
403
  saveColumns(list) {
386
404
  let columns = saveTransform(list, this.labelKey, this.isFilter)
@@ -393,6 +411,7 @@ export default {
393
411
  },
394
412
  { loading: false }
395
413
  )
414
+ this.visible = false
396
415
  },
397
416
  getColumns(pageId) {
398
417
  return getColumns(pageId || this.pageId, this.userNo, this.columns, this.labelKey)
@@ -411,6 +430,9 @@ function saveTransform(list, labelKey, isFilter) {
411
430
  } else if (c.type && ['selection', 'index', 'expand'].includes(c.type)) {
412
431
  listN.push({ _colKey: 'type', _colVal: c.type })
413
432
  } else {
433
+ if (c.isNew && !c.children) {
434
+ return this.$message.warning($lc(`新增字段必须包含子级!`))
435
+ }
414
436
  let sFn = false
415
437
  for (let k in c) {
416
438
  if (typeof c[k] === 'function') sFn = true
@@ -483,7 +505,6 @@ export function getColumns(pageId, userNo, columnsT, labelKey = 'label') {
483
505
  .then(({ data }) => {
484
506
  if (data) {
485
507
  let _data = JSON.parse(data)
486
- console.log(_data)
487
508
  if (_data && _data.length > 0) {
488
509
  let columns = getTransform(_data, columnsT, labelKey)
489
510
  return resolve(columns)
@@ -63,7 +63,7 @@
63
63
  <vxe-column
64
64
  v-for="(subItem, i) in item.children"
65
65
  :key="'vxe-table-' + i"
66
- :className="item.wrap && 'vxe-table-custom-wrap'"
66
+ :className="item.wrap ? 'vxe-table-custom-wrap' : ''"
67
67
  :formatter="subItem.formatter ? subItem.formatter : 'formatName'"
68
68
  :filters="subItem.filters"
69
69
  :filter-render="subItem.filterRender"
@@ -74,7 +74,7 @@
74
74
  </vxe-colgroup>
75
75
  <vxe-column
76
76
  v-else
77
- :className="item.wrap && 'vxe-table-custom-wrap'"
77
+ :className="item.wrap ? 'vxe-table-custom-wrap' : ''"
78
78
  :key="'vxe-table-' + i"
79
79
  :formatter="item.formatter ? item.formatter : 'formatName'"
80
80
  :filters="item.filters"
package/src/i18n.json CHANGED
@@ -284,6 +284,36 @@
284
284
  "404,网络连接失败!": {
285
285
  "en": "404, network connection failed!"
286
286
  },
287
+ "新增字段": {
288
+ "en": "New field"
289
+ },
290
+ "请填写名称": {
291
+ "en": "Please fill in the name"
292
+ },
293
+ "添加成功": {
294
+ "en": "Added successfully"
295
+ },
296
+ "新增字段必须包含子级!": {
297
+ "en": "New field must contain sub-level!"
298
+ },
299
+ "已有重名字段,请修改": {
300
+ "en": "There is already a field with the same name, please modify"
301
+ },
302
+ "表头设置": {
303
+ "en": "Table header settings"
304
+ },
305
+ "是否折行": {
306
+ "en": "Whether to wrap"
307
+ },
308
+ "表头宽度只能输入正整数": {
309
+ "en": "Table header width can only input positive integers"
310
+ },
311
+ "输入最大宽度不能大于300": {
312
+ "en": "Input maximum width cannot exceed 300"
313
+ },
314
+ "表头宽度": {
315
+ "en": "Table header width"
316
+ },
287
317
  "条。": {
288
318
  "en": "Article."
289
319
  },