n20-common-lib 2.5.0-beta.6 → 2.5.0-beta.7

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.0-beta.6",
3
+ "version": "2.5.0-beta.7",
4
4
  "private": false,
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -54,6 +54,7 @@
54
54
  "lz-string": "^1.4.4",
55
55
  "normalize.css": "^8.0.1",
56
56
  "numerify": "*",
57
+ "ofd.js": "^1.4.1",
57
58
  "panzoom": "*",
58
59
  "qrcode": "*",
59
60
  "resize-detector": "*",
@@ -62,7 +63,6 @@
62
63
  "vuedraggable": "*"
63
64
  },
64
65
  "devDependencies": {
65
- "element-ui": "^2.15.14",
66
66
  "@babel/plugin-proposal-optional-chaining": "^7.14.5",
67
67
  "@babel/plugin-transform-flow-comments": "^7.14.5",
68
68
  "@vue/cli-plugin-babel": "~4.5.0",
@@ -76,6 +76,7 @@
76
76
  "copy-webpack-plugin": "^6.4.1",
77
77
  "core-js": "^3.6.5",
78
78
  "echarts": "^5.3.3",
79
+ "element-ui": "^2.15.14",
79
80
  "eslint": "^6.7.2",
80
81
  "eslint-plugin-vue": "^6.2.2",
81
82
  "exceljs": "^4.3.0",
@@ -23,7 +23,7 @@
23
23
  @import './cl-empty.scss';
24
24
  @import './cl-file-upload-table.scss';
25
25
  @import './cl-footer-box.scss';
26
- @import './cl-filter.scss';
26
+ @import './filter.scss';
27
27
  @import './cl-worn-pagination.scss';
28
28
  @import './cl-dialog.scss';
29
29
  @import './cl-layout.scss';
@@ -41,7 +41,7 @@
41
41
  @import './select.scss';
42
42
  @import './plain-text.scss';
43
43
  @import './cl-date-quarter.scss';
44
- @import './cl-advanced-filter.scss';
44
+
45
45
  /* 临时引入 */
46
46
  @import '../../components/ChildRange/style.scss';
47
47
  @import '../../components/PageHeader/style.scss';
@@ -1,7 +1,7 @@
1
1
  $--s: 1024px;
2
2
  $--m: 1600px;
3
3
  $--l: 1920px;
4
- $--input-max: 224px;
4
+ $--input-max: 300px;
5
5
 
6
6
  .el-form-item[span],
7
7
  .el-form-item[span-s],
@@ -0,0 +1,121 @@
1
+ .n20-filter {
2
+ max-height: 380px;
3
+ overflow-y: auto;
4
+ }
5
+
6
+ .n20-advanced-filter {
7
+ position: relative;
8
+ display: flex;
9
+ align-items: center;
10
+ flex: 1;
11
+ padding: 8px;
12
+ &-item.n20-advanced-filter-active {
13
+ border-color: #b3d0ff;
14
+ background: #e9f2ff !important;
15
+ }
16
+ &-body {
17
+ .el-form-item,
18
+ .el-form-item--small.el-form-item {
19
+ margin-bottom: 10px;
20
+ }
21
+ .el-form-item__content {
22
+ display: inline-block;
23
+ vertical-align: middle;
24
+ width: auto;
25
+ }
26
+ }
27
+
28
+ &-item {
29
+ box-sizing: border-box;
30
+ position: relative;
31
+ display: inline-block;
32
+ vertical-align: middle;
33
+ max-width: 442px !important;
34
+ min-width: 120px;
35
+ margin-right: 8px;
36
+ border: 1px solid $--border-color-base;
37
+ padding: 0 4px 0 8px;
38
+ border-radius: 4px;
39
+ white-space: nowrap;
40
+ cursor: pointer;
41
+ .el-form-item__label {
42
+ padding: 0;
43
+ display: inline-block;
44
+ vertical-align: middle;
45
+ white-space: nowrap;
46
+ overflow: hidden;
47
+ text-overflow: ellipsis;
48
+ margin-right: 4px;
49
+ }
50
+
51
+ .n20-date-editor.el-input--prefix {
52
+ max-width: 166px;
53
+ }
54
+ .el-range-editor.el-input__inner {
55
+ min-width: 168px;
56
+ max-width: 224px;
57
+ .el-range-input {
58
+ background-color: transparent;
59
+ }
60
+ }
61
+
62
+ .el-input,
63
+ .el-input__inner {
64
+ border: none;
65
+ width: 100%;
66
+ background-color: transparent;
67
+ }
68
+ .el-input__inner:active,
69
+ .el-input__inner:focus {
70
+ box-shadow: none;
71
+ border: none;
72
+ border-color: #fff;
73
+ }
74
+
75
+ .el-checkbox-group {
76
+ height: 32px;
77
+ line-height: 32px;
78
+ vertical-align: middle;
79
+ padding: 0 10px;
80
+ }
81
+ .el-radio-group {
82
+ padding: 0 10px;
83
+ }
84
+
85
+ .n20-num-w {
86
+ .el-input,
87
+ .el-input__inner {
88
+ padding-left: 0;
89
+ }
90
+ }
91
+ &-close {
92
+ display: none;
93
+ position: absolute;
94
+ top: -6px;
95
+ right: -10px;
96
+ }
97
+ &:hover {
98
+ .n20-advanced-filter-item-close {
99
+ display: inline-block;
100
+ }
101
+ }
102
+ }
103
+ &-content {
104
+ display: inline-block;
105
+ white-space: nowrap;
106
+ text-overflow: ellipsis;
107
+ }
108
+ :hover {
109
+ border-color: $--color-primary;
110
+ cursor: pointer;
111
+ }
112
+ &-add {
113
+ display: inline-block;
114
+ vertical-align: middle;
115
+ }
116
+ }
117
+
118
+ .popover-check-box {
119
+ max-height: 300px;
120
+ overflow-y: auto;
121
+ }
@@ -1,11 +1,19 @@
1
1
  <template>
2
- <el-form inline class="cl-advanced_filter_list">
3
- <el-form-item v-for="(item, i) in dataC" :key="i" class="cl-advanced_filter_list-item" :label="item.label">
4
- <slot v-if="item.slotName" :name="item.slotName"></slot>
5
- <formItemInput v-else :form="form" :item="item" />
6
- <i class="cl-advanced_filter-close n20-icon-yichu" @click="handleClose(item)"></i>
2
+ <el-form :class="prefixCls + '-body'">
3
+ <el-form-item
4
+ v-for="(item, i) in dataC"
5
+ :key="i"
6
+ :class="[prefixCls + '-item', activeClass(item)]"
7
+ :label="item.label"
8
+ >
9
+ <div :class="prefixCls + '-content'">
10
+ <slot v-if="item.slotName" :name="item.slotName"></slot>
11
+ <formItemInput :form="form" :item="item" @change="$emit('change')" />
12
+ </div>
13
+ <i :key="i" :class="[prefixCls + '-item-close', 'n20-icon-yichu']" @click="handleClose(item)"></i>
7
14
  </el-form-item>
8
- <el-form-item>
15
+
16
+ <el-form-item :class="prefixCls + '-add'">
9
17
  <el-button v-popover:advanced_popover onlyicon plain icon="el-icon-plus" />
10
18
  <el-popover ref="advanced_popover" placement="bottom-start" trigger="click">
11
19
  <el-form>
@@ -29,6 +37,7 @@ import formItemInput from './form-item-input.vue'
29
37
  import InputSearch from '../InputSearch/index.vue'
30
38
  import filterItem from './filterItem.vue'
31
39
  import mixins from './mixins/index.js'
40
+
32
41
  export default {
33
42
  name: 'FilterList',
34
43
  components: {
@@ -57,6 +66,10 @@ export default {
57
66
  filterId: {
58
67
  type: String,
59
68
  default: ''
69
+ },
70
+ prefixCls: {
71
+ type: String,
72
+ default: ''
60
73
  }
61
74
  },
62
75
  data() {
@@ -96,7 +109,6 @@ export default {
96
109
  })
97
110
  },
98
111
  searchFn() {
99
- console.log(this.search)
100
112
  this.filterListC = this.cloneDeepFList.filter((r) => {
101
113
  return r.label.includes(this.search)
102
114
  })
@@ -115,6 +127,33 @@ export default {
115
127
  }
116
128
  })
117
129
  },
130
+ activeClass(item) {
131
+ let flag = ''
132
+ switch (item.type) {
133
+ case 'text':
134
+ case 'search':
135
+ case 'select':
136
+ case 'number':
137
+ case 'date':
138
+ case 'datetime':
139
+ case 'year':
140
+ case 'month':
141
+ case 'week':
142
+ case 'checkbox':
143
+ case 'radio':
144
+ flag = this.form[item.value] && this.form[item.value].length > 0 ? this.prefixCls + '-active' : ''
145
+ break
146
+ case 'numberrange':
147
+ flag = this.form[item.startValue] && this.form[item.endValue] ? this.prefixCls + '-active' : ''
148
+ break
149
+ case 'daterange':
150
+ case 'datetimerange':
151
+ case ' monthrange':
152
+ flag = this.form[item.startDate] && this.form[item.endDate] ? this.prefixCls + '-active' : ''
153
+ break
154
+ }
155
+ return flag
156
+ },
118
157
  cleared() {
119
158
  this.$emit('clear')
120
159
  }
@@ -2,16 +2,31 @@
2
2
  <el-input
3
3
  v-if="item.type === 'text' || item.type === undefined"
4
4
  v-model="form[item.value]"
5
- :clearable="item | clearableF"
5
+ :clearable="(item.props && item.props.clearable) || false"
6
+ :style="{
7
+ width:
8
+ form[item.value] && form[item.value].length > 0
9
+ ? (context.measureText(form[item.value]).width * 1.4 < 75
10
+ ? 75
11
+ : context.measureText(form[item.value]).width * 1.4 > 396
12
+ ? 396
13
+ : context.measureText(form[item.value]).width * 1.4 + 35) + 'px'
14
+ : 120 - 18 - context.measureText(item.label).width * 1.4 + 'px'
15
+ }"
6
16
  v-bind="item.props"
7
- :style="{ width: item.width || 'max-content' }"
8
17
  :placeholder="item.props && item.props.placeholder ? item.props.placeholder : $lc('请输入')"
9
18
  v-on="item.on"
10
19
  />
11
20
  <el-input
12
21
  v-else-if="item.type === 'search'"
13
22
  v-model="form[item.value]"
14
- :clearable="item | clearableF"
23
+ :clearable="(item.props && item.props.clearable) || false"
24
+ :style="{
25
+ width:
26
+ form[item.value] && form[item.value].length > 0
27
+ ? context.measureText(form[item.value]).width * 1.4 + 40 + 'px'
28
+ : 120 - 18 - context.measureText(item.label).width * 1.4 + 'px'
29
+ }"
15
30
  readonly
16
31
  v-bind="item.props"
17
32
  v-on="item.on"
@@ -29,8 +44,20 @@
29
44
  <el-select
30
45
  v-else-if="item.type === 'select'"
31
46
  v-model="form[item.value]"
32
- :clearable="item | clearableF"
47
+ :clearable="(item.props && item.props.clearable) || false"
33
48
  :multiple="item.multiple"
49
+ :style="{
50
+ width:
51
+ form[item.value] && form[item.value].length > 0
52
+ ? context.measureText(
53
+ item.options.find((r) => r.value === form[item.value] || r[item.props?.valueKey] === form[item.value])
54
+ .label
55
+ ).width *
56
+ 1.4 +
57
+ 48 +
58
+ 'px'
59
+ : 120 - 18 - context.measureText(item.label).width * 1.4 + 'px'
60
+ }"
34
61
  v-bind="item.props"
35
62
  v-on="item.on"
36
63
  >
@@ -53,11 +80,29 @@
53
80
  />
54
81
  </template>
55
82
  </el-select>
56
- <inputNumber v-else-if="item.type === 'number'" v-model="form[item.value]" v-bind="item.props" v-on="item.on" />
83
+ <inputNumber
84
+ v-else-if="item.type === 'number'"
85
+ v-model="form[item.value]"
86
+ :style="{
87
+ width:
88
+ form[item.value] && Math.floor(Math.log10(form[item.value])) + 1 > 0
89
+ ? (context.measureText(form[item.value]).width * 1.4 < 74
90
+ ? 74
91
+ : context.measureText(form[item.value]).width * 1.4 > 396
92
+ ? 396
93
+ : context.measureText(form[item.value]).width * 1.4 + 35) + 'px'
94
+ : 120 - 18 - context.measureText(item.label).width * 1.4 + 'px'
95
+ }"
96
+ v-bind="item.props"
97
+ v-on="item.on"
98
+ />
57
99
  <inputNumberRange
58
100
  v-else-if="item.type === 'numberrange'"
59
101
  :start-value.sync="form[item.startValue]"
60
102
  :end-value.sync="form[item.endValue]"
103
+ :style="{
104
+ width: (form[item.startValue] && Math.floor(Math.log10(form[item.startValue])) + 1 > 0 ? 202 : 166) + 'px'
105
+ }"
61
106
  v-bind="item.props"
62
107
  v-on="item.on"
63
108
  />
@@ -65,7 +110,8 @@
65
110
  v-else-if="['date', 'datetime', 'year', 'month', 'week'].includes(item.type)"
66
111
  v-model="form[item.value]"
67
112
  :type="item.type"
68
- :clearable="item | clearableF"
113
+ :clearable="(item.props && item.props.clearable) || false"
114
+ :style="{ width: 166 + 'px' }"
69
115
  v-bind="item.props"
70
116
  v-on="item.on"
71
117
  />
@@ -74,7 +120,8 @@
74
120
  :type="item.type"
75
121
  :start-date.sync="form[item.startDate]"
76
122
  :end-date.sync="form[item.endDate]"
77
- :clearable="item | clearableF"
123
+ :clearable="(item.props && item.props.clearable) || false"
124
+ style="width: 100%"
78
125
  v-bind="item.props"
79
126
  v-on="item.on"
80
127
  />
@@ -93,36 +140,40 @@ import axios from '../../utils/axios'
93
140
  import inputNumber from '../InputNumber/index.vue'
94
141
  import inputNumberRange from '../InputNumber/numberRange.vue'
95
142
  import datePickerPor from '../DatePicker/por.vue'
143
+
144
+ const canvas = document.createElement('canvas')
145
+ const context = canvas.getContext('2d')
96
146
  export default {
97
147
  components: {
98
148
  inputNumber,
99
149
  inputNumberRange,
100
150
  datePickerPor
101
151
  },
102
- filters: {
103
- clearableF(item) {
104
- if (item.props && item.props.clearable === false) {
105
- return false
106
- } else {
107
- return true
108
- }
109
- }
110
- },
152
+
111
153
  props: {
112
154
  form: {
113
155
  type: Object,
114
156
  default: undefined
115
157
  },
158
+ data: {
159
+ type: Array,
160
+ default: undefined
161
+ },
116
162
  item: {
117
163
  type: Object,
118
164
  default: undefined
119
165
  }
120
166
  },
121
- created() {
122
- if (this.item.reqOptions) {
123
- this.getOptions()
167
+ data() {
168
+ return {
169
+ context
124
170
  }
125
171
  },
172
+ created() {
173
+ // if (this.item.reqOptions) {
174
+ // this.getOptions()
175
+ // }
176
+ },
126
177
  methods: {
127
178
  getOptions() {
128
179
  let reqOptions = this.item.reqOptions
@@ -4,8 +4,10 @@
4
4
  v-if="visible"
5
5
  :width="width"
6
6
  :form="model"
7
+ :prefix-cls="prefixCls"
7
8
  :filter-id="filterId"
8
9
  :filter-list="filterList"
10
+ @change="$emit('change', model)"
9
11
  @clear="$emit('clear')"
10
12
  >
11
13
  <template v-for="(item, i) in GroupData">
@@ -22,7 +24,7 @@
22
24
  import filterList from './filterList.vue'
23
25
 
24
26
  import mixins from './mixins/index.js'
25
- const prefixCls = 'cl-advanced_filter'
27
+ const prefixCls = 'n20-advanced-filter'
26
28
  export default {
27
29
  name: 'AdvancedFilter',
28
30
  components: {
@@ -69,7 +71,6 @@ export default {
69
71
  showPop: false,
70
72
  showPopC: false,
71
73
  prefixCls: prefixCls,
72
- // popover: undefined,
73
74
  remoteList: [],
74
75
  checkList: []
75
76
  }
@@ -1,4 +1,3 @@
1
- import { t } from 'element-ui/lib/locale/index.js'
2
1
  import axios from '../../../utils/axios.js'
3
2
  import cloneDeep from 'lodash/cloneDeep'
4
3
  export default {
@@ -11,10 +10,17 @@ export default {
11
10
  },
12
11
  immediate: true
13
12
  },
13
+ filterId: {
14
+ handler(val) {
15
+ this.filterIdC = val
16
+ },
17
+ immediate: true
18
+ },
14
19
  model: {
15
20
  handler(val) {
16
21
  this.$emit('change', val)
17
- }
22
+ },
23
+ deep: true
18
24
  }
19
25
  },
20
26
  data() {
@@ -26,14 +32,7 @@ export default {
26
32
  userNo: sessionStorage.getItem('userNo')
27
33
  }
28
34
  },
29
- watch: {
30
- filterId: {
31
- handler(val) {
32
- this.filterIdC = val
33
- },
34
- immediate: true
35
- }
36
- },
35
+
37
36
  methods: {
38
37
  /**
39
38
  * 保存筛选条件
@@ -127,6 +127,9 @@
127
127
  </div>
128
128
  <div v-else-if="!authList.includes('byAddTask')" class="text-c">
129
129
  <el-button v-if="authList.includes('approval')" type="primary" @click="approvalFn">{{ '批 准' | $lc }}</el-button>
130
+ <el-button v-if="authList.includes('approval')" type="primary" @click="approvalNext">{{
131
+ '批准并审批下一条' | $lc
132
+ }}</el-button>
130
133
  <el-button v-if="showApprovalTo" type="primary" @click="approvalToV = true">{{ '批准至' | $lc }}</el-button>
131
134
  <el-button v-if="authList.includes('rejectTo')" plain @click="rejectToB">{{ '驳回至' | $lc }}</el-button>
132
135
  <el-button v-if="authList.includes('reject')" plain @click="rejectFn">{{ '驳回至发起人' | $lc }}</el-button>
@@ -207,7 +210,7 @@ export default {
207
210
  },
208
211
  messageMax: {
209
212
  type: Number,
210
- default: 50
213
+ default: 500
211
214
  },
212
215
  formData: {
213
216
  type: Object,
@@ -331,6 +334,7 @@ export default {
331
334
  closeTagsForBackPage(pathname)
332
335
  })
333
336
  },
337
+
334
338
  // 动态获取按钮
335
339
  getBtns() {
336
340
  if (!this.taskId || !this.showBtn) return false
@@ -531,6 +535,26 @@ export default {
531
535
  })
532
536
  })
533
537
  },
538
+ approvalNext() {
539
+ if (this.required && !this.messageC) {
540
+ return this.errMsgFn(
541
+ this.authList.includes('byAddTask') && this.addTaskList.length > 0 ? $lc('加签') : $lc('批准')
542
+ )
543
+ }
544
+ if (this.addTaskList.length > 0 && !this.addTaskType) {
545
+ return this.addErrFn()
546
+ }
547
+
548
+ this.beforeFn(this.beforeRatify, () => {
549
+ axios.post('/bems/activiti/admin/todo/advance', this.getParam(), { loading: false }).then(({ data }) => {
550
+ sessionStorage.setItem('isNext', true)
551
+ this.thenMsg(
552
+ data,
553
+ this.authList.includes('byAddTask') && this.addTaskList.length > 0 ? $lc('加签') : $lc('批准')
554
+ )
555
+ })
556
+ })
557
+ },
534
558
  approvalToFn(taskId) {
535
559
  this.approvalToV = false
536
560
  let param = this.getParam()
@@ -119,10 +119,7 @@ export default {
119
119
  props: {
120
120
  type: {
121
121
  type: String,
122
- default: 'daterange',
123
- validator: (value) => {
124
- return ['daterange', 'datetimerange', 'monthrange'].includes(value)
125
- }
122
+ default: 'daterange'
126
123
  },
127
124
  value: {
128
125
  type: [String, Number, Date],
@@ -204,15 +201,21 @@ export default {
204
201
  if (this.valueFormat === 'yyyy-MM-dd HH:mm:ss') str = str + ' 23:59:59'
205
202
  this.$emit('update:start-date', val[0])
206
203
  this.$emit('update:end-date', str)
204
+ this.$emit('start', val[0])
205
+ this.$emit('end', str)
207
206
  this.$emit('change', [val[0], str])
208
207
  } else {
209
208
  this.$emit('update:start-date', val[0])
210
209
  this.$emit('update:end-date', val[1])
210
+ this.$emit('start', val[0])
211
+ this.$emit('end', val[1])
211
212
  this.$emit('change', val)
212
213
  }
213
214
  } else {
214
215
  this.$emit('update:start-date', null)
215
216
  this.$emit('update:end-date', null)
217
+ this.$emit('start', null)
218
+ this.$emit('end', null)
216
219
  this.$emit('change', val)
217
220
  }
218
221
  } else {
@@ -554,7 +554,7 @@ export default {
554
554
  MultipleSUccessFn(response, file, fileList, row) {
555
555
  if (fileList.length > 1) {
556
556
  let deepRow = cloneDeep(row)
557
- if (!this.tableData[0].beid) {
557
+ if (!this.tableData[0][this.keys.url]) {
558
558
  this.tableData.shift()
559
559
  }
560
560
  setTimeout(() => {