widget.qw 1.0.24 → 1.0.25

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 (101) hide show
  1. package/.env.development +9 -9
  2. package/.env.production +8 -8
  3. package/README.md +73 -73
  4. package/build/style.css +468 -482
  5. package/build/widget.qw.es.js +1628 -2374
  6. package/build/widget.qw.umd.js +1540 -2286
  7. package/index.html +17 -17
  8. package/package.json +47 -47
  9. package/src/App.vue +26 -26
  10. package/src/api/index.js +149 -141
  11. package/src/components/AuditBar.vue +340 -340
  12. package/src/components/BillCard.vue +155 -155
  13. package/src/components/CascaderPicker.vue +87 -87
  14. package/src/components/CascaderPop.vue +319 -330
  15. package/src/components/CheckGroup.vue +113 -113
  16. package/src/components/DatetimePicker/DatetimePop.vue +342 -342
  17. package/src/components/DatetimePicker/index.vue +112 -112
  18. package/src/components/DayDropdown.vue +56 -56
  19. package/src/components/FilePicker.vue +113 -113
  20. package/src/components/Input.vue +71 -71
  21. package/src/components/MonthDropdown.vue +51 -51
  22. package/src/components/MultiPicker.vue +123 -123
  23. package/src/components/SecretNotify.js +5 -5
  24. package/src/components/Sheet.vue +92 -92
  25. package/src/components/SingleApiPicker.vue +112 -112
  26. package/src/components/SinglePicker.vue +102 -102
  27. package/src/components/SingleUserSelector.vue +425 -425
  28. package/src/components/Switch.vue +64 -64
  29. package/src/components/TreePicker.vue +113 -113
  30. package/src/components/UserPicker.vue +106 -106
  31. package/src/components/UserProfile.vue +131 -131
  32. package/src/components/UsersPicker.vue +118 -118
  33. package/src/components/YearDropdown.vue +59 -59
  34. package/src/components/data_selector.vue +280 -280
  35. package/src/components/image_picker.vue +114 -114
  36. package/src/components/images_picker.vue +139 -139
  37. package/src/components/index.js +157 -157
  38. package/src/components/mult_list_selector.vue +155 -155
  39. package/src/components/subdepartment_selector.vue +481 -481
  40. package/src/components/user_selector.vue +639 -639
  41. package/src/components/widget/DataPop.vue +95 -95
  42. package/src/components/widget/TreePop.vue +88 -88
  43. package/src/components/widget/UserPop.vue +347 -347
  44. package/src/main.js +117 -117
  45. package/src/router/index.ts +168 -168
  46. package/src/util/array_util.js +32 -32
  47. package/src/util/auth_util.js +72 -72
  48. package/src/util/bool_util.js +5 -5
  49. package/src/util/bus.js +1 -1
  50. package/src/util/cache_util.js +18 -18
  51. package/src/util/errer_code.js +6 -6
  52. package/src/util/eval_util.js +19 -19
  53. package/src/util/icon_util.js +36 -36
  54. package/src/util/image_util.js +27 -27
  55. package/src/util/index.js +55 -55
  56. package/src/util/num_util.js +70 -70
  57. package/src/util/obj_util.js +28 -28
  58. package/src/util/request.js +73 -73
  59. package/src/util/request_json.js +71 -71
  60. package/src/util/request_json_mute.js +65 -65
  61. package/src/util/request_upload.js +79 -79
  62. package/src/util/route_util.js +31 -31
  63. package/src/util/str_util.js +143 -143
  64. package/src/util/time_util.js +406 -406
  65. package/src/util/toast_util.js +24 -24
  66. package/src/util/tree_util.js +153 -153
  67. package/src/util/validate.js +182 -182
  68. package/src/util/vue_filter.js +223 -223
  69. package/src/views/auditbar/index.vue +65 -65
  70. package/src/views/billcard/index.vue +45 -45
  71. package/src/views/cascaderpicker/index copy.vue +0 -0
  72. package/src/views/cascaderpicker/index.vue +0 -0
  73. package/src/views/cascaderpop/index.vue +90 -90
  74. package/src/views/checkgroup/index.vue +35 -35
  75. package/src/views/dataSelector/index.vue +48 -48
  76. package/src/views/datetimepicker/index.vue +34 -34
  77. package/src/views/daydropdown/index.vue +31 -31
  78. package/src/views/filepicker/index.vue +31 -31
  79. package/src/views/imagepicker/index.vue +31 -31
  80. package/src/views/imagespicker/index.vue +31 -31
  81. package/src/views/input/index.vue +34 -34
  82. package/src/views/monthdropdown/index.vue +31 -31
  83. package/src/views/multListSelector/index.vue +61 -61
  84. package/src/views/multipicker/index.vue +36 -36
  85. package/src/views/productSelector/index.vue +35 -35
  86. package/src/views/projectdropdown/index.vue +31 -31
  87. package/src/views/projectpicker/index.vue +41 -41
  88. package/src/views/secretnotify/index.vue +27 -27
  89. package/src/views/sheet/index.vue +45 -45
  90. package/src/views/singlepicker/index.vue +35 -35
  91. package/src/views/subdepartmentSelector/index.vue +40 -40
  92. package/src/views/switch/index.vue +34 -34
  93. package/src/views/treepicker/index.vue +41 -41
  94. package/src/views/userSelector/index.vue +54 -54
  95. package/src/views/userSelectorNew/index.vue +45 -45
  96. package/src/views/userpicker/index.vue +43 -43
  97. package/src/views/userprofile/index.vue +30 -30
  98. package/src/views/userspicker/index.vue +43 -43
  99. package/src/views/yeardropdown/index.vue +32 -32
  100. package/src/vm/index.js +1 -1
  101. package/vite.config.ts +122 -122
@@ -1,91 +1,91 @@
1
- <template>
2
- <div class="page">
3
- <van-button @click="data.isShow=true">弹出</van-button>
4
- <widget-qw-cascader-pop v-model="data.id" v-model:show="data.isShow"
5
- label="零件" placeholder="请选择零件"
6
- :queryNodes="queryNodes" :queryNode="queryNode" @select="onSelect" />
7
- </div>
8
- </template>
9
-
10
- <script setup>
11
- import { onMounted, reactive, watch } from "vue";
12
- import util from '@/util'
13
-
14
- const data = reactive({
15
- auth: 'require',
16
- id: '',
17
- isShow: false,
18
- projectId: 'GnsMl3mO'
19
- })
20
-
21
- const queryNodes = async (params, setNodes) => {
22
- if (!data.projectId)
23
- return
24
-
25
- let p = {
26
- projectId: data.projectId,
27
- hasChildren: false
28
- }
29
-
30
- if (params.keyword)
31
- p.keyword = params.keyword
32
-
33
- if (params.parentId)
34
- p.parentId = params.parentId
35
-
36
- let res = await util.part_children(p)
37
- if (res.code != 200)
38
- return
39
-
40
- let formatNodes = res.data.map(item => {
41
- return {
42
- id: item.id,
43
- label: item.formatName,
44
- formatLabel: item.path,
45
- hasChildren: item.hasChildren,
46
- data: item
47
- }
48
- })
49
- setNodes(formatNodes)
50
- }
51
-
52
- const queryNode = async (setNode) => {
53
- let params = {
54
- id: data.id
55
- }
56
- let res = await util.part_detail(params)
57
- if (res.code != 200)
58
- return
59
-
60
- let formatNode = {
61
- id: res.data.id,
62
- label: res.data.formatName,
63
- formatLabel: item.path,
64
- hasChildren: res.data.hasChildren,
65
- data: res.data
66
- }
67
- setNode(formatNode)
68
- }
69
-
70
- const onSelect=(node)=>{
71
- console.log('onSelect',node)
72
- }
73
-
74
- watch(() => data.id, (newVal, oldVal) => {
75
- console.log(newVal, oldVal)
76
- })
77
- </script>
78
-
79
- <style lang="scss" scoped>
80
- .page {
81
- height: 100vh;
82
- background: #fff;
83
- text-align: center;
84
- background-size: cover;
85
- display: flex;
86
- flex-direction: column;
87
- justify-content: flex-start;
88
- padding: 80px 15px 0 15px;
89
- box-sizing: border-box;
90
- }
1
+ <template>
2
+ <div class="page">
3
+ <van-button @click="data.isShow=true">弹出</van-button>
4
+ <widget-qw-cascader-pop v-model="data.id" v-model:show="data.isShow"
5
+ label="零件" placeholder="请选择零件"
6
+ :queryNodes="queryNodes" :queryNode="queryNode" @select="onSelect" />
7
+ </div>
8
+ </template>
9
+
10
+ <script setup>
11
+ import { onMounted, reactive, watch } from "vue";
12
+ import util from '@/util'
13
+
14
+ const data = reactive({
15
+ auth: 'require',
16
+ id: '',
17
+ isShow: false,
18
+ projectId: 'GnsMl3mO'
19
+ })
20
+
21
+ const queryNodes = async (params, setNodes) => {
22
+ if (!data.projectId)
23
+ return
24
+
25
+ let p = {
26
+ projectId: data.projectId,
27
+ hasChildren: false
28
+ }
29
+
30
+ if (params.keyword)
31
+ p.keyword = params.keyword
32
+
33
+ if (params.parentId)
34
+ p.parentId = params.parentId
35
+
36
+ let res = await util.part_children(p)
37
+ if (res.code != 200)
38
+ return
39
+
40
+ let formatNodes = res.data.map(item => {
41
+ return {
42
+ id: item.id,
43
+ label: item.formatName,
44
+ formatLabel: item.path,
45
+ hasChildren: item.hasChildren,
46
+ data: item
47
+ }
48
+ })
49
+ setNodes(formatNodes)
50
+ }
51
+
52
+ const queryNode = async (setNode) => {
53
+ let params = {
54
+ id: data.id
55
+ }
56
+ let res = await util.part_detail(params)
57
+ if (res.code != 200)
58
+ return
59
+
60
+ let formatNode = {
61
+ id: res.data.id,
62
+ label: res.data.formatName,
63
+ formatLabel: item.path,
64
+ hasChildren: res.data.hasChildren,
65
+ data: res.data
66
+ }
67
+ setNode(formatNode)
68
+ }
69
+
70
+ const onSelect=(node)=>{
71
+ console.log('onSelect',node)
72
+ }
73
+
74
+ watch(() => data.id, (newVal, oldVal) => {
75
+ console.log(newVal, oldVal)
76
+ })
77
+ </script>
78
+
79
+ <style lang="scss" scoped>
80
+ .page {
81
+ height: 100vh;
82
+ background: #fff;
83
+ text-align: center;
84
+ background-size: cover;
85
+ display: flex;
86
+ flex-direction: column;
87
+ justify-content: flex-start;
88
+ padding: 80px 15px 0 15px;
89
+ box-sizing: border-box;
90
+ }
91
91
  </style>
@@ -1,36 +1,36 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-check-group
4
- v-model="data.codes"
5
- id="fire_builder_checks"
6
- label="船舶建造师确认内容"
7
- :auth="data.auth" />
8
- </div>
9
- </template>
10
-
11
- <script setup>
12
- import { onMounted, reactive, watch } from "vue";
13
-
14
- const data = reactive({
15
- auth:'require',
16
- codes:null
17
- })
18
-
19
- watch(()=>data.codes,(newVal,oldVal)=>{
20
- console.log(newVal,oldVal)
21
- })
22
- </script>
23
-
24
- <style lang="scss" scoped>
25
- .page {
26
- height: 100vh;
27
- background: #fff;
28
- text-align: center;
29
- background-size: cover;
30
- display: flex;
31
- flex-direction: column;
32
- justify-content: flex-start;
33
- padding: 80px 15px 0 15px;
34
- box-sizing: border-box;
35
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-check-group
4
+ v-model="data.codes"
5
+ id="fire_builder_checks"
6
+ label="船舶建造师确认内容"
7
+ :auth="data.auth" />
8
+ </div>
9
+ </template>
10
+
11
+ <script setup>
12
+ import { onMounted, reactive, watch } from "vue";
13
+
14
+ const data = reactive({
15
+ auth:'require',
16
+ codes:null
17
+ })
18
+
19
+ watch(()=>data.codes,(newVal,oldVal)=>{
20
+ console.log(newVal,oldVal)
21
+ })
22
+ </script>
23
+
24
+ <style lang="scss" scoped>
25
+ .page {
26
+ height: 100vh;
27
+ background: #fff;
28
+ text-align: center;
29
+ background-size: cover;
30
+ display: flex;
31
+ flex-direction: column;
32
+ justify-content: flex-start;
33
+ padding: 80px 15px 0 15px;
34
+ box-sizing: border-box;
35
+ }
36
36
  </style>
@@ -1,49 +1,49 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-data-selector :options="options" v-model="formData.singleSelect" mode="single" label="单选数据"
4
- placeholder="单选数据" :auth="formData.auth" />
5
- <widget-qw-data-selector :options="options" v-model="formData.multSelect" mode="multiple" label="多选数据"
6
- placeholder="多选数据" :required="true" :readonly="false" />
7
- </div>
8
- </template>
9
-
10
- <script setup>
11
- import QueryString from "qs";
12
- import { ref, onMounted, reactive, watch } from "vue";
13
-
14
- const formData = ref({
15
- singleSelect: '',
16
- multSelect: [],
17
- apiSelect: '',
18
- auth: 'option'
19
- })
20
-
21
- // 数据选项
22
- const options = ref([
23
- { text: '火灾', value: '火灾' },
24
- { text: '灼烫', value: '灼烫' },
25
- { text: '触电', value: '触电' },
26
- { text: '中毒和窒息', value: '中毒和窒息' },
27
- { text: '物体打击', value: '物体打击' },
28
- { text: '高处坠落', value: '高处坠落' },
29
- { text: '其他', value: '其他', },
30
- { text: '一号门与二号门之间前花园', value: '一号门与二号门之间前花园' }
31
- ])
32
-
33
- onMounted(() => {
34
- })
35
- </script>
36
-
37
- <style lang="scss" scoped>
38
- .page {
39
- height: 100vh;
40
- background: #fff;
41
- text-align: center;
42
- background-size: cover;
43
- display: flex;
44
- flex-direction: column;
45
- justify-content: flex-start;
46
- padding: 80px 15px 0 15px;
47
- box-sizing: border-box;
48
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-data-selector :options="options" v-model="formData.singleSelect" mode="single" label="单选数据"
4
+ placeholder="单选数据" :auth="formData.auth" />
5
+ <widget-qw-data-selector :options="options" v-model="formData.multSelect" mode="multiple" label="多选数据"
6
+ placeholder="多选数据" :required="true" :readonly="false" />
7
+ </div>
8
+ </template>
9
+
10
+ <script setup>
11
+ import QueryString from "qs";
12
+ import { ref, onMounted, reactive, watch } from "vue";
13
+
14
+ const formData = ref({
15
+ singleSelect: '',
16
+ multSelect: [],
17
+ apiSelect: '',
18
+ auth: 'option'
19
+ })
20
+
21
+ // 数据选项
22
+ const options = ref([
23
+ { text: '火灾', value: '火灾' },
24
+ { text: '灼烫', value: '灼烫' },
25
+ { text: '触电', value: '触电' },
26
+ { text: '中毒和窒息', value: '中毒和窒息' },
27
+ { text: '物体打击', value: '物体打击' },
28
+ { text: '高处坠落', value: '高处坠落' },
29
+ { text: '其他', value: '其他', },
30
+ { text: '一号门与二号门之间前花园', value: '一号门与二号门之间前花园' }
31
+ ])
32
+
33
+ onMounted(() => {
34
+ })
35
+ </script>
36
+
37
+ <style lang="scss" scoped>
38
+ .page {
39
+ height: 100vh;
40
+ background: #fff;
41
+ text-align: center;
42
+ background-size: cover;
43
+ display: flex;
44
+ flex-direction: column;
45
+ justify-content: flex-start;
46
+ padding: 80px 15px 0 15px;
47
+ box-sizing: border-box;
48
+ }
49
49
  </style>
@@ -1,35 +1,35 @@
1
- <template>
2
- <div class="page">
3
- <WidgetQwDatetimePicker
4
- v-model="data.date"
5
- label="时间"
6
- :auth="data.auth" />
7
- </div>
8
- </template>
9
-
10
- <script setup>
11
- import { onMounted, reactive, watch } from "vue";
12
-
13
- const data = reactive({
14
- auth:'require',
15
- date:'2025-01-01 01:02:03'
16
- })
17
-
18
- watch(()=>data.codes,(newVal,oldVal)=>{
19
- console.log(newVal,oldVal)
20
- })
21
- </script>
22
-
23
- <style lang="scss" scoped>
24
- .page {
25
- height: 100vh;
26
- background: #fff;
27
- text-align: center;
28
- background-size: cover;
29
- display: flex;
30
- flex-direction: column;
31
- justify-content: flex-start;
32
- padding: 80px 15px 0 15px;
33
- box-sizing: border-box;
34
- }
1
+ <template>
2
+ <div class="page">
3
+ <WidgetQwDatetimePicker
4
+ v-model="data.date"
5
+ label="时间"
6
+ :auth="data.auth" />
7
+ </div>
8
+ </template>
9
+
10
+ <script setup>
11
+ import { onMounted, reactive, watch } from "vue";
12
+
13
+ const data = reactive({
14
+ auth:'require',
15
+ date:'2025-01-01 01:02:03'
16
+ })
17
+
18
+ watch(()=>data.codes,(newVal,oldVal)=>{
19
+ console.log(newVal,oldVal)
20
+ })
21
+ </script>
22
+
23
+ <style lang="scss" scoped>
24
+ .page {
25
+ height: 100vh;
26
+ background: #fff;
27
+ text-align: center;
28
+ background-size: cover;
29
+ display: flex;
30
+ flex-direction: column;
31
+ justify-content: flex-start;
32
+ padding: 80px 15px 0 15px;
33
+ box-sizing: border-box;
34
+ }
35
35
  </style>
@@ -1,31 +1,31 @@
1
- <template>
2
- <div class="page">
3
- <van-dropdown-menu>
4
- <widget-qw-day-dropdown v-model="formData.day" year="2025" month="2" />
5
- </van-dropdown-menu>
6
- </div>
7
- </template>
8
-
9
- <script setup>
10
- import { reactive, onMounted } from "vue";
11
- const formData = reactive({
12
- day: 0
13
- })
14
-
15
- onMounted(() => {
16
- })
17
- </script>
18
-
19
- <style lang="scss" scoped>
20
- .page {
21
- height: 100vh;
22
- background: #fff;
23
- text-align: center;
24
- background-size: cover;
25
- display: flex;
26
- flex-direction: column;
27
- justify-content: flex-start;
28
- padding: 80px 15px 0 15px;
29
- box-sizing: border-box;
30
- }
31
- </style>
1
+ <template>
2
+ <div class="page">
3
+ <van-dropdown-menu>
4
+ <widget-qw-day-dropdown v-model="formData.day" year="2025" month="2" />
5
+ </van-dropdown-menu>
6
+ </div>
7
+ </template>
8
+
9
+ <script setup>
10
+ import { reactive, onMounted } from "vue";
11
+ const formData = reactive({
12
+ day: 0
13
+ })
14
+
15
+ onMounted(() => {
16
+ })
17
+ </script>
18
+
19
+ <style lang="scss" scoped>
20
+ .page {
21
+ height: 100vh;
22
+ background: #fff;
23
+ text-align: center;
24
+ background-size: cover;
25
+ display: flex;
26
+ flex-direction: column;
27
+ justify-content: flex-start;
28
+ padding: 80px 15px 0 15px;
29
+ box-sizing: border-box;
30
+ }
31
+ </style>
@@ -1,32 +1,32 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-file-picker label="文件" v-model="data.url" :auth="data.auth" accept=".xls,.xlsx" />
4
- </div>
5
- </template>
6
-
7
- <script setup>
8
- import { onMounted, reactive, watch } from "vue";
9
-
10
- const data = reactive({
11
- auth:'readonly',
12
- url: 'https://1.pdf'
13
- })
14
-
15
- watch(()=>data.url,(newVal,oldVal)=>{
16
- console.log(newVal,oldVal)
17
- })
18
- </script>
19
-
20
- <style lang="scss" scoped>
21
- .page {
22
- height: 100vh;
23
- background: #fff;
24
- text-align: center;
25
- background-size: cover;
26
- display: flex;
27
- flex-direction: column;
28
- justify-content: flex-start;
29
- padding: 80px 15px 0 15px;
30
- box-sizing: border-box;
31
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-file-picker label="文件" v-model="data.url" :auth="data.auth" accept=".xls,.xlsx" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { onMounted, reactive, watch } from "vue";
9
+
10
+ const data = reactive({
11
+ auth:'readonly',
12
+ url: 'https://1.pdf'
13
+ })
14
+
15
+ watch(()=>data.url,(newVal,oldVal)=>{
16
+ console.log(newVal,oldVal)
17
+ })
18
+ </script>
19
+
20
+ <style lang="scss" scoped>
21
+ .page {
22
+ height: 100vh;
23
+ background: #fff;
24
+ text-align: center;
25
+ background-size: cover;
26
+ display: flex;
27
+ flex-direction: column;
28
+ justify-content: flex-start;
29
+ padding: 80px 15px 0 15px;
30
+ box-sizing: border-box;
31
+ }
32
32
  </style>
@@ -1,32 +1,32 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-image-picker label="图片" v-model="data.url" :auth="data.auth" />
4
- </div>
5
- </template>
6
-
7
- <script setup>
8
- import { onMounted, reactive, watch } from "vue";
9
-
10
- const data = reactive({
11
- auth:'require',
12
- url: ''
13
- })
14
-
15
- watch(()=>data.url,(newVal,oldVal)=>{
16
- console.log(newVal,oldVal)
17
- })
18
- </script>
19
-
20
- <style lang="scss" scoped>
21
- .page {
22
- height: 100vh;
23
- background: #fff;
24
- text-align: center;
25
- background-size: cover;
26
- display: flex;
27
- flex-direction: column;
28
- justify-content: flex-start;
29
- padding: 80px 15px 0 15px;
30
- box-sizing: border-box;
31
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-image-picker label="图片" v-model="data.url" :auth="data.auth" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { onMounted, reactive, watch } from "vue";
9
+
10
+ const data = reactive({
11
+ auth:'require',
12
+ url: ''
13
+ })
14
+
15
+ watch(()=>data.url,(newVal,oldVal)=>{
16
+ console.log(newVal,oldVal)
17
+ })
18
+ </script>
19
+
20
+ <style lang="scss" scoped>
21
+ .page {
22
+ height: 100vh;
23
+ background: #fff;
24
+ text-align: center;
25
+ background-size: cover;
26
+ display: flex;
27
+ flex-direction: column;
28
+ justify-content: flex-start;
29
+ padding: 80px 15px 0 15px;
30
+ box-sizing: border-box;
31
+ }
32
32
  </style>
@@ -1,32 +1,32 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-images-picker label="图片列表" v-model="data.urls" :auth="data.auth" />
4
- </div>
5
- </template>
6
-
7
- <script setup>
8
- import { onMounted, reactive, watch } from "vue";
9
-
10
- const data = reactive({
11
- auth:'require',
12
- urls: ''
13
- })
14
-
15
- watch(()=>data.url,(newVal,oldVal)=>{
16
- console.log(newVal,oldVal)
17
- })
18
- </script>
19
-
20
- <style lang="scss" scoped>
21
- .page {
22
- height: 100vh;
23
- background: #fff;
24
- text-align: center;
25
- background-size: cover;
26
- display: flex;
27
- flex-direction: column;
28
- justify-content: flex-start;
29
- padding: 80px 15px 0 15px;
30
- box-sizing: border-box;
31
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-images-picker label="图片列表" v-model="data.urls" :auth="data.auth" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { onMounted, reactive, watch } from "vue";
9
+
10
+ const data = reactive({
11
+ auth:'require',
12
+ urls: ''
13
+ })
14
+
15
+ watch(()=>data.url,(newVal,oldVal)=>{
16
+ console.log(newVal,oldVal)
17
+ })
18
+ </script>
19
+
20
+ <style lang="scss" scoped>
21
+ .page {
22
+ height: 100vh;
23
+ background: #fff;
24
+ text-align: center;
25
+ background-size: cover;
26
+ display: flex;
27
+ flex-direction: column;
28
+ justify-content: flex-start;
29
+ padding: 80px 15px 0 15px;
30
+ box-sizing: border-box;
31
+ }
32
32
  </style>