renusify 1.1.3 → 1.1.5

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.
Files changed (33) hide show
  1. package/components/avatar/index.vue +29 -23
  2. package/components/bar/bottomNavigationCircle.vue +7 -3
  3. package/components/form/address.vue +7 -2
  4. package/components/form/camInput.vue +8 -2
  5. package/components/form/check-input.vue +94 -93
  6. package/components/form/checkbox.vue +1 -1
  7. package/components/form/datePicker/index.vue +20 -20
  8. package/components/form/fileUploader/file.js +21 -3
  9. package/components/form/fileUploader/index.vue +12 -2
  10. package/components/form/fileUploader/single.vue +3 -2
  11. package/components/form/group-input.vue +45 -35
  12. package/components/form/input.vue +5 -4
  13. package/components/form/inputTel/index.vue +175 -161
  14. package/components/form/mask-input.vue +12 -11
  15. package/components/form/number.vue +24 -12
  16. package/components/form/range.vue +25 -1
  17. package/components/form/select.vue +17 -11
  18. package/components/form/text-editor/index.vue +13 -9
  19. package/components/form/unique/index.vue +2 -1
  20. package/components/formCreator/index.vue +60 -6
  21. package/components/img/index.vue +12 -2
  22. package/components/img/svgImg.vue +43 -0
  23. package/components/infinite/div.vue +2 -1
  24. package/components/infinite/page.vue +24 -23
  25. package/components/list/index.vue +32 -30
  26. package/components/map/index.vue +323 -306
  27. package/components/searchBox/index.vue +4 -2
  28. package/components/table/crud/footer.vue +2 -1
  29. package/components/table/crud/header.vue +2 -2
  30. package/components/table/crud/index.vue +462 -457
  31. package/components/tree/index.vue +13 -12
  32. package/components/tree/tree-element.vue +5 -2
  33. package/package.json +1 -1
@@ -117,6 +117,7 @@
117
117
  <r-file-input v-model="image"
118
118
  :label="$t('image','renusify')"
119
119
  :size="1"
120
+ :headers="headers"
120
121
  :upload-link="uploadLink"
121
122
  accept="image/*"></r-file-input>
122
123
  <r-text-input v-model="img_alt"
@@ -152,6 +153,7 @@
152
153
  <r-file-input v-model="video"
153
154
  :label="$t('video','renusify')"
154
155
  :size="1"
156
+ :headers="headers"
155
157
  :upload-link="uploadLink"
156
158
  accept="video/mp4,video/webm"></r-file-input>
157
159
  <r-number-input v-model="img_width" :label="$t('width','renusify')"
@@ -187,15 +189,16 @@
187
189
  name: 'r-text-editor',
188
190
  inheritAttrs: false,
189
191
  props: {
190
- uploadLink: {type: String, default: '/storage'},
191
- modelValue: {
192
- type: [Object, String], default: () => {
193
- return {
194
- text: '',
195
- files: []
196
- }
197
- }
192
+ uploadLink: {type: String, default: '/storage'},
193
+ modelValue: {
194
+ type: [Object, String], default: () => {
195
+ return {
196
+ text: '',
197
+ files: []
198
+ }
198
199
  }
200
+ },
201
+ headers: Object
199
202
  },
200
203
  data() {
201
204
  return {
@@ -393,7 +396,8 @@
393
396
  deleteImage(img, i) {
394
397
  this.$axios.delete(this.uploadLink,
395
398
  {
396
- data: {link: img}
399
+ data: {link: img},
400
+ headers: this.headers
397
401
  }
398
402
  ).then(() => {
399
403
  this.files.splice(i, 1)
@@ -22,6 +22,7 @@ export default {
22
22
  default: null,
23
23
  type: String
24
24
  },
25
+ headers: Object
25
26
  },
26
27
  data() {
27
28
  return {
@@ -40,7 +41,7 @@ export default {
40
41
  if (this.item) {
41
42
  this.$axios.post(this.link, {
42
43
  'unique_name': this.item
43
- })
44
+ }, {headers: this.headers})
44
45
  .then((res) => {
45
46
  if (res.data) {
46
47
  this.color = 'color-success-text'
@@ -6,10 +6,10 @@
6
6
  <r-form ref="form" v-model="valid" @submit.prevent="save">
7
7
  <r-row>
8
8
  <template :key="key" v-for="(item,key) in options">
9
- <r-col class="col-12" v-if="item['formInput']!==false">
9
+ <r-col class="col-12" v-if="item['formInput']!==false&&iff(options[key])">
10
10
  <component
11
11
  :is="'r-'+item['type']"
12
- :label="$t(key,'renusify')"
12
+ :label="$t(key)"
13
13
  v-model="editedItem[key]"
14
14
  v-bind="getAttr(options[key])"
15
15
  ></component>
@@ -64,7 +64,8 @@ export default {
64
64
  return {}
65
65
  },
66
66
  type: Object
67
- }
67
+ },
68
+ headers: Object
68
69
  },
69
70
  data() {
70
71
  return {
@@ -96,11 +97,64 @@ export default {
96
97
  }
97
98
  },
98
99
  methods: {
100
+ iff(data) {
101
+ const that = this
102
+
103
+ function get(item, key) {
104
+ if (key.toString().startsWith('$')) {
105
+ return that.$helper.ifHas(item, null, ...key.substring(1).split('.'))
106
+ }
107
+ return key
108
+ }
109
+
110
+ if ('$if' in data) {
111
+ for (let i = 0; i < data['$if'].length; i++) {
112
+ const item = data['$if'][i]
113
+ let can = true
114
+ const one = get(this.editedItem, item[0])
115
+ const op = item[1]
116
+ const two = get(this.editedItem, item[2])
117
+ if (op === '===' || op === '==') {
118
+ can = one === two
119
+ } else if (op === '>') {
120
+ can = one > two
121
+ } else if (op === '>=') {
122
+ can = one >= two
123
+ } else if (op === '<') {
124
+ can = one < two
125
+ } else if (op === '<=') {
126
+ can = one <= two
127
+ } else if (op === '!=') {
128
+ can = one !== two
129
+ } else if (op === 'in') {
130
+ if (two && typeof two === 'object') {
131
+ can = two.includes(one)
132
+ } else {
133
+ can = false
134
+ }
135
+ } else {
136
+ can = false
137
+ console.error(`operator '${op}' is not defined.(form creator)`)
138
+ }
139
+ if (can === false) {
140
+ return false
141
+ }
142
+ }
143
+ }
144
+ return true
145
+ },
99
146
  getAttr(data) {
100
147
  let res = {}
101
148
  for (let i in data) {
102
- if (this.$helper.hasKey(data, i) && !['formInput', 'sortable', 'type', 'tableShow', 'priority'].includes(i)) {
103
- res[i] = data[i]
149
+ if (this.$helper.hasKey(data, i) && !['formInput', 'sortable', 'type', 'tableShow', 'priority', '$if'].includes(i)) {
150
+ if (i === '$bind') {
151
+ data[i].forEach((item) => {
152
+ res[item[0]] = this.editedItem[item[1]]
153
+ })
154
+
155
+ } else {
156
+ res[i] = data[i]
157
+ }
104
158
  }
105
159
  }
106
160
  return res
@@ -127,7 +181,7 @@ export default {
127
181
  return
128
182
  }
129
183
  this.loading = true
130
- this.$axios[this.method](this.url, this.editedItem)
184
+ this.$axios[this.method](this.url, this.editedItem, {headers: this.headers})
131
185
  .then(() => {
132
186
  this.close()
133
187
  }, (error) => {
@@ -14,12 +14,17 @@
14
14
  }"
15
15
  >{{ alt }}
16
16
  </div>
17
- <img v-if="load" ref="img" :src="link" :alt="alt" draggable="false" :width="size.width" :height="size.height"/>
17
+ <img v-if="load &&!isSvg" ref="img" :src="link" :alt="alt" draggable="false" :width="size.width"
18
+ :height="size.height"/>
19
+ <svg-img v-else-if="load &&isSvg&&link" :link="link" :size="size">
20
+ </svg-img>
18
21
  </div>
19
22
  </template>
20
23
  <script>
24
+ import SvgImg from "./svgImg";
21
25
  export default {
22
26
  name: 'r-img',
27
+ components: {SvgImg},
23
28
  props: {
24
29
  src: {
25
30
  type: String,
@@ -53,6 +58,8 @@ export default {
53
58
  titleVs: Boolean,
54
59
  titleVc: Boolean,
55
60
  titleVe: Boolean,
61
+ isSvg: Boolean,
62
+ svgCache: {type: Number, default: 86400},
56
63
  wPH: {
57
64
  type: Number,
58
65
  default: 1
@@ -85,7 +92,10 @@ export default {
85
92
  if (this.query) {
86
93
  res += this.query
87
94
  }
88
- if ((this.autoSize && this.size.width > 0) || this.width) {
95
+ if (this.isSvg && this.svgCache) {
96
+ res += 'c=' + this.svgCache
97
+ }
98
+ if (!this.isSvg && ((this.autoSize && this.size.width > 0) || this.width)) {
89
99
  res += `&w=${this.size.width}&h=${this.size.height}`
90
100
  }
91
101
  return res
@@ -0,0 +1,43 @@
1
+ <template>
2
+ <span ref="img"></span>
3
+ </template>
4
+ <script>
5
+ export default {
6
+ name: "svgImg",
7
+ props: {
8
+ link: String,
9
+ size: Object
10
+ },
11
+ created() {
12
+ this.ImgToSvg()
13
+ },
14
+ methods: {
15
+ replace(svg) {
16
+ if (!this.$refs.img) {
17
+ setTimeout(() => {
18
+ this.replace(svg)
19
+ }, 10)
20
+ return
21
+ }
22
+ this.$refs.img.replaceWith(svg)
23
+ },
24
+ ImgToSvg() {
25
+ const that = this
26
+ fetch(this.link).then(x => {
27
+ x.text().then((d) => {
28
+ const el = document.createElement('div')
29
+ el.innerHTML = d
30
+ let svg = el.querySelector('svg')
31
+ svg.setAttribute('width', that.size.width + 'px')
32
+ svg.setAttribute('height', that.size.height + 'px')
33
+ that.replace(svg)
34
+ })
35
+ })
36
+ }
37
+ }
38
+ }
39
+ </script>
40
+
41
+ <style lang="scss">
42
+ @import "~renusify/style/include";
43
+ </style>
@@ -50,6 +50,7 @@ export default {
50
50
  default: 10000,
51
51
  type: Number
52
52
  },
53
+ headers: Object
53
54
  },
54
55
  data() {
55
56
  return {
@@ -110,7 +111,7 @@ export default {
110
111
  Object.assign(par, this.query)
111
112
 
112
113
  }
113
- this.$axios.get(this.url, {params: par}).then(
114
+ this.$axios.get(this.url, {params: par, headers: this.headers}).then(
114
115
  (res) => {
115
116
  this.push(res.data.data, end)
116
117
  this.total = res.data.total
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class="infinite-page">
3
3
  <div class="infinite-page-container" v-scroll="onScroll">
4
- <slot :items="datacollection"></slot>
4
+ <slot :items="datacollection" :total="total"></slot>
5
5
  </div>
6
6
  <r-progress-line color="color-two"
7
7
  v-show="loading"
@@ -23,17 +23,18 @@ export default {
23
23
  required: true,
24
24
  type: String
25
25
  },
26
- query: {
27
- type: Object
28
- },
29
- noItemMsg: {
30
- type: String,
31
- default: 'ITEMS NOT FOUND'
32
- },
33
- distanceLoad: {
34
- type: Number,
35
- default: 150
36
- }
26
+ query: {
27
+ type: Object
28
+ },
29
+ noItemMsg: {
30
+ type: String,
31
+ default: 'ITEMS NOT FOUND'
32
+ },
33
+ distanceLoad: {
34
+ type: Number,
35
+ default: 150
36
+ },
37
+ headers: Object
37
38
  },
38
39
  data() {
39
40
  return {
@@ -75,17 +76,17 @@ export default {
75
76
  if (typeof this.query==='object') {
76
77
  Object.assign(par,{},this.query)
77
78
  }
78
- this.$axios.get(this.url,{params:par}).then(
79
- (res) => {
80
- this.push(res.data.data)
81
- this.total = res.data.total
82
- if (this.total === 0) {
83
- this.noItem = true
84
- }
85
- this.loading = false
86
- }, () => {
87
- this.loading = false
88
- })
79
+ this.$axios.get(this.url, {params: par, headers: this.headers}).then(
80
+ (res) => {
81
+ this.push(res.data.data)
82
+ this.total = res.data.total
83
+ if (this.total === 0) {
84
+ this.noItem = true
85
+ }
86
+ this.loading = false
87
+ }, () => {
88
+ this.loading = false
89
+ })
89
90
  },
90
91
  push(data) {
91
92
  const lng=data.length
@@ -1,16 +1,18 @@
1
1
  <template>
2
2
  <div :class="classes">
3
- <div :class="`list-item h-space-between ${$helper.searchArray(list,text,item_value[text])!==false?'list-item-active color-one-text':''}`"
4
- :key="item_key"
5
- @click.prevent="handle(item_value)"
6
- v-for="(item_value,item_key) in genItems"
7
- v-ripple
8
- >
9
- <slot :item="item_value">
10
- <div class="list-title">{{ item_value[text] }}</div>
11
- <transition name="fade">
12
- <r-icon class="pe-1"
13
- exact
3
+ <div
4
+ class="list-item h-space-between"
5
+ :class="{'list-item-active color-one-text':$helper.searchArray(list,text,item_value[text])!==false}"
6
+ :key="item_key"
7
+ @click.prevent="handle(item_value)"
8
+ v-for="(item_value,item_key) in genItems"
9
+ v-ripple
10
+ >
11
+ <slot :item="item_value">
12
+ <div class="list-title">{{ item_value[text] }}</div>
13
+ <transition name="fade">
14
+ <r-icon class="pe-1"
15
+ exact
14
16
  v-html="$r.icons.check"
15
17
  v-if="(checked&&$helper.searchArray(list,text,item_value[text])!==false)"
16
18
  ></r-icon>
@@ -21,30 +23,29 @@
21
23
  </template>
22
24
 
23
25
  <script>
24
- import './style.scss'
26
+ import './style.scss'
27
+ import Ripple from '../../directive/ripple/index'
25
28
 
26
29
  export default {
27
- name: 'r-list',
28
- props: {
29
- disabled: Boolean,
30
- multiple: Boolean,
31
- min: {type: Number, default: 0},
32
- text: {type: String, default: 'name'},
33
- val: {type: String, default: 'value'},
34
- flat: Boolean,
35
- rounded: Boolean,
36
- subheader: Boolean,
37
- checked: Boolean,
38
- filter: String,
39
- items: Array,
40
- modelValue: {type:[Array, Object]}
41
- },
30
+ name: 'r-list',
31
+ directives: {ripple: Ripple},
32
+ props: {
33
+ disabled: Boolean,
34
+ multiple: Boolean,
35
+ min: {type: Number, default: 0},
36
+ text: {type: String, default: 'name'},
37
+ value: {type: String, default: 'value'},
38
+ flat: Boolean,
39
+ rounded: Boolean,
40
+ subheader: Boolean,
41
+ checked: Boolean,
42
+ filter: String,
43
+ items: Array,
44
+ modelValue: {type: [Array, Object]}
45
+ },
42
46
  computed: {
43
47
  list() {
44
48
  if (this.modelValue) {
45
- if (!this.multiple&&this.modelValue[0]) {
46
- return [this.modelValue[0]]
47
- }
48
49
  return this.modelValue
49
50
  }
50
51
  return []
@@ -96,6 +97,7 @@
96
97
  return
97
98
  }
98
99
  let val = this.list
100
+
99
101
  const index = this.$helper.searchArray(val, this.text, item[this.text])
100
102
 
101
103
  if (index !== false) {