widget.qw 1.0.83 → 1.0.85

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 (108) hide show
  1. package/.env.development +10 -10
  2. package/.env.production +8 -8
  3. package/README.md +75 -75
  4. package/build/style.css +521 -471
  5. package/build/widget.qw.es.js +253 -84
  6. package/build/widget.qw.umd.js +252 -83
  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 +173 -165
  11. package/src/components/AuditBar.vue +396 -396
  12. package/src/components/BillCard.vue +164 -164
  13. package/src/components/CascaderPicker.vue +132 -132
  14. package/src/components/CascaderPop.vue +375 -371
  15. package/src/components/CheckGroup.vue +113 -113
  16. package/src/components/DatetimeDropdown.vue +62 -0
  17. package/src/components/{DatetimePicker/index.vue → DatetimePicker.vue} +124 -124
  18. package/src/components/DayDropdown.vue +56 -56
  19. package/src/components/FilePicker.vue +169 -169
  20. package/src/components/HeadBar.vue +130 -0
  21. package/src/components/Input.vue +80 -80
  22. package/src/components/MonthDropdown.vue +51 -51
  23. package/src/components/MultiPicker.vue +123 -123
  24. package/src/components/ObjsEditor.vue +334 -334
  25. package/src/components/SecretNotify.js +5 -5
  26. package/src/components/Sheet.vue +92 -92
  27. package/src/components/SingleApiPicker.vue +108 -108
  28. package/src/components/SinglePicker.vue +102 -102
  29. package/src/components/SingleUserSelector.vue +425 -425
  30. package/src/components/Switch.vue +64 -64
  31. package/src/components/TreePicker.vue +113 -113
  32. package/src/components/UserPicker.vue +106 -106
  33. package/src/components/UserProfile.vue +129 -129
  34. package/src/components/UsersPicker.vue +118 -118
  35. package/src/components/YearDropdown.vue +59 -59
  36. package/src/components/data_selector.vue +303 -303
  37. package/src/components/image_picker.vue +123 -123
  38. package/src/components/images_picker.vue +195 -195
  39. package/src/components/index.js +172 -162
  40. package/src/components/mult_list_selector.vue +155 -155
  41. package/src/components/subdepartment_selector.vue +481 -481
  42. package/src/components/user_selector.vue +639 -639
  43. package/src/components/widget/DataPop.vue +95 -95
  44. package/src/components/{DatetimePicker → widget}/DatetimePop.vue +342 -342
  45. package/src/components/widget/TreePop.vue +88 -88
  46. package/src/components/widget/UserPop.vue +347 -347
  47. package/src/main.js +117 -117
  48. package/src/router/index.ts +183 -173
  49. package/src/util/array_util.js +32 -32
  50. package/src/util/auth_util.js +72 -72
  51. package/src/util/bool_util.js +5 -5
  52. package/src/util/bus.js +1 -1
  53. package/src/util/cache_util.js +18 -18
  54. package/src/util/errer_code.js +6 -6
  55. package/src/util/eval_util.js +19 -19
  56. package/src/util/icon_util.js +36 -36
  57. package/src/util/image_util.js +27 -27
  58. package/src/util/index.js +57 -57
  59. package/src/util/num_util.js +70 -70
  60. package/src/util/obj_util.js +28 -28
  61. package/src/util/request.js +73 -73
  62. package/src/util/request_json.js +71 -71
  63. package/src/util/request_json_mute.js +65 -65
  64. package/src/util/request_upload.js +79 -79
  65. package/src/util/route_util.js +31 -31
  66. package/src/util/str_util.js +143 -143
  67. package/src/util/time_util.js +406 -406
  68. package/src/util/toast_util.js +24 -24
  69. package/src/util/tree_util.js +153 -153
  70. package/src/util/uuid_util.js +9 -9
  71. package/src/util/validate.js +182 -182
  72. package/src/util/vue_filter.js +223 -223
  73. package/src/views/auditbar/index.vue +78 -78
  74. package/src/views/billcard/index.vue +48 -48
  75. package/src/views/cascaderpicker/index.vue +0 -0
  76. package/src/views/cascaderpicker/userpicker.vue +183 -0
  77. package/src/views/cascaderpop/index.vue +90 -90
  78. package/src/views/checkgroup/index.vue +35 -35
  79. package/src/views/dataSelector/index.vue +48 -48
  80. package/src/views/datetimedropdown/index.vue +34 -0
  81. package/src/views/datetimepicker/index.vue +34 -34
  82. package/src/views/daydropdown/index.vue +31 -31
  83. package/src/views/filepicker/index.vue +32 -32
  84. package/src/views/headbar/index.vue +28 -0
  85. package/src/views/home/index.vue +0 -0
  86. package/src/views/imagepicker/index.vue +31 -31
  87. package/src/views/imagespicker/index.vue +37 -37
  88. package/src/views/input/index.vue +35 -35
  89. package/src/views/monthdropdown/index.vue +31 -31
  90. package/src/views/multListSelector/index.vue +61 -61
  91. package/src/views/multipicker/index.vue +36 -36
  92. package/src/views/objseditor/index.vue +277 -277
  93. package/src/views/productSelector/index.vue +35 -35
  94. package/src/views/projectpicker/index.vue +41 -41
  95. package/src/views/secretnotify/index.vue +27 -27
  96. package/src/views/sheet/index.vue +45 -45
  97. package/src/views/singlepicker/index.vue +35 -35
  98. package/src/views/subdepartmentSelector/index.vue +40 -40
  99. package/src/views/switch/index.vue +34 -34
  100. package/src/views/treepicker/index.vue +41 -41
  101. package/src/views/userSelector/index.vue +54 -54
  102. package/src/views/userSelectorNew/index.vue +45 -45
  103. package/src/views/userpicker/index.vue +43 -43
  104. package/src/views/userprofile/index.vue +30 -30
  105. package/src/views/userspicker/index.vue +43 -43
  106. package/src/views/yeardropdown/index.vue +32 -32
  107. package/src/vm/index.js +1 -1
  108. package/vite.config.ts +122 -122
@@ -1,49 +1,49 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-bill-card :category="data.category" :no="data.no" :userState="data.loginUserState"
4
- :processState="data.processState" :fields="data.fields">
5
-
6
- <template #foot>
7
- <div style="text-align: right;">
8
- <van-button type="warning" size="small">警告按钮</van-button>
9
- </div>
10
- </template>
11
- </widget-qw-bill-card>
12
- </div>
13
- </template>
14
-
15
- <script setup>
16
- import { onMounted, reactive, watch } from "vue";
17
-
18
- const data = reactive({
19
- category: '作业单',
20
- no: '123',
21
- loginUserState: 'pass',
22
- processState: 'finish_pass',
23
- fields: [{
24
- title: '字段1',
25
- value: '一号门与二号门之间前花园1',
26
- }, {
27
- title: '字段2',
28
- value: '一号门与二号门之间前花园2',
29
- }]
30
- })
31
-
32
- watch(() => data.codes, (newVal, oldVal) => {
33
- console.log(newVal, oldVal)
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-bill-card :category="data.category" :no="data.no" :userState="data.loginUserState"
4
+ :processState="data.processState" :fields="data.fields">
5
+
6
+ <template #foot>
7
+ <div style="text-align: right;">
8
+ <van-button type="warning" size="small">警告按钮</van-button>
9
+ </div>
10
+ </template>
11
+ </widget-qw-bill-card>
12
+ </div>
13
+ </template>
14
+
15
+ <script setup>
16
+ import { onMounted, reactive, watch } from "vue";
17
+
18
+ const data = reactive({
19
+ category: '作业单',
20
+ no: '123',
21
+ loginUserState: 'pass',
22
+ processState: 'finish_pass',
23
+ fields: [{
24
+ title: '字段1',
25
+ value: '一号门与二号门之间前花园1',
26
+ }, {
27
+ title: '字段2',
28
+ value: '一号门与二号门之间前花园2',
29
+ }]
30
+ })
31
+
32
+ watch(() => data.codes, (newVal, oldVal) => {
33
+ console.log(newVal, oldVal)
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>
Binary file
@@ -0,0 +1,183 @@
1
+ <template>
2
+ <div class="widget">
3
+ <widget-qw-cascader-picker :multiple="props.multiple" v-model="modelValue" :label="props.label"
4
+ :placeholder="props.placeholder" :keywordQueryNode="keywordQueryNode" :idQueryNode="idQueryNode"
5
+ @select="onSelect" :auth="props.auth" />
6
+ </div>
7
+ </template>
8
+
9
+ <script setup>
10
+ import { onMounted, reactive, defineProps, watch } from "vue";
11
+ import util from '@/util'
12
+ import { useVModel } from "@vueuse/core";
13
+
14
+ const props = defineProps({
15
+ modelValue: {
16
+ type: String,
17
+ default: ''
18
+ },
19
+ multiple: {
20
+ type: Boolean,
21
+ default: false
22
+ },
23
+ rootId: {
24
+ type: String,
25
+ default: '1'
26
+ },
27
+ label: {
28
+ type: String,
29
+ default: ''
30
+ },
31
+ placeholder: {
32
+ type: String,
33
+ default: '请选择员工'
34
+ },
35
+ auth: {
36
+ type: String,
37
+ default: 'require'
38
+ }
39
+ })
40
+
41
+ const data = reactive({
42
+ isShow: false,
43
+ })
44
+
45
+ const emit = defineEmits(['update:modelValue', 'select'])
46
+ const modelValue = useVModel(props, 'modelValue', emit)
47
+
48
+ const keywordQueryNode = async (params, setNode) => {
49
+ let p = {
50
+ id: params.id,
51
+ hasUsers: true,
52
+ hasChildren: true
53
+ }
54
+
55
+ if (params.parentId)
56
+ p.parentid = params.parentId
57
+
58
+ if (params.keyword)
59
+ p.keyword = params.keyword
60
+
61
+ //无选中节点时,默认查根节点
62
+ if (!p.id) {
63
+ if (props.rootId) {
64
+ p.id = props.rootId
65
+ p.isReturnParent = false
66
+ }
67
+ }
68
+
69
+ let res = await util.auth_children(p)
70
+ if (res.code != 200)
71
+ return
72
+
73
+ let fn = formatNode(res.data)
74
+ setNode(fn)
75
+ }
76
+
77
+ const idQueryNode = async (params, setNode) => {
78
+ // if (params.hasChildren) {
79
+ let p = {
80
+ id: params.id,
81
+ hasChildren: params.hasChildren,
82
+ hasPaths: true,
83
+ hasUsers: true,
84
+ isReturnParent: params.isReturnParent
85
+ }
86
+
87
+ //无选中节点时,默认查根节点
88
+ if (!p.id) {
89
+ if (props.rootId) {
90
+ p.id = props.rootId
91
+ p.isReturnParent = false
92
+ }
93
+ }
94
+
95
+ let res = await util.auth_children(p)
96
+ if (res.code != 200)
97
+ return
98
+
99
+ let fn = formatNode(res.data)
100
+
101
+ // let selectNode = fn
102
+ // if(params.id != selectNode.id){
103
+ // selectNode = selectNode.children.find(item=>{
104
+ // return item.id == params.id
105
+ // })
106
+ // }
107
+
108
+ setNode(fn)
109
+ // }
110
+ // else {
111
+ // console.log('11111111111',params)
112
+
113
+ // let res = await util.get_wxuser_by_id({ userId: params.id })
114
+ // if (res.code != 200)
115
+ // return
116
+
117
+ // let fn = formatNode(res.data)
118
+ // setNode(fn)
119
+ // }
120
+ }
121
+
122
+ const formatNode = (node) => {
123
+ let res = {}
124
+ //部门
125
+ if (!node.userid) {
126
+ let children = []
127
+ if (node.children && node.children.length > 0)
128
+ children = node.children
129
+ if (node.users && node.users.length > 0)
130
+ children = [...children, ...node.users]
131
+
132
+ res = {
133
+ id: node.id,
134
+ parentId: node.parentid,
135
+ paths: formatNodes(node.paths),
136
+ path: node.path,
137
+ children: formatNodes(children),
138
+ label: node.name,
139
+ hasChildren: node.hasChildren,
140
+ level: node.level,
141
+ data: node,
142
+ canCheck: false,
143
+ canExpand: node.hasChildren || (node.users && node.users.length > 0)
144
+ }
145
+ }
146
+ //员工
147
+ else {
148
+ res = {
149
+ id: node.userid,
150
+ parentId: node.mainDepartment,
151
+ paths: [],
152
+ path: `${node.name}/${node.position}`,
153
+ children: [],
154
+ label: `${node.name}/${node.position}`,
155
+ hasChildren: false,
156
+ level: 1,
157
+ data: node,
158
+ canCheck: true,
159
+ canExpand: false
160
+ }
161
+ }
162
+
163
+ return res
164
+ }
165
+
166
+ const formatNodes = (nodes) => {
167
+ if (!nodes || nodes.length < 1)
168
+ return []
169
+
170
+ let res = nodes.map(item => {
171
+ return formatNode(item)
172
+ })
173
+
174
+ return res
175
+ }
176
+
177
+ const onSelect = (node) => {
178
+ console.log('onSelect', node)
179
+ emit('select', node)
180
+ }
181
+ </script>
182
+
183
+ <style lang="scss" scoped></style>
@@ -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" label="单选数据"
4
- placeholder="单选数据" :auth="formData.auth" />
5
- <widget-qw-data-selector :options="options" v-model="formData.multSelect" 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" label="单选数据"
4
+ placeholder="单选数据" :auth="formData.auth" />
5
+ <widget-qw-data-selector :options="options" v-model="formData.multSelect" 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>
@@ -0,0 +1,34 @@
1
+ <template>
2
+ <div class="page">
3
+ <van-dropdown-menu>
4
+ <WidgetQwDatetimeDropdown v-model="data.date" label="时间" :auth="data.auth" />
5
+ </van-dropdown-menu>
6
+ </div>
7
+ </template>
8
+
9
+ <script setup>
10
+ import { onMounted, reactive, watch } from "vue";
11
+
12
+ const data = reactive({
13
+ auth: 'disabled',
14
+ date: ''
15
+ })
16
+
17
+ watch(() => data.codes, (newVal, oldVal) => {
18
+ console.log(newVal, oldVal)
19
+ })
20
+ </script>
21
+
22
+ <style lang="scss" scoped>
23
+ .page {
24
+ height: 100vh;
25
+ background: #fff;
26
+ text-align: center;
27
+ background-size: cover;
28
+ display: flex;
29
+ flex-direction: column;
30
+ justify-content: flex-start;
31
+ padding: 80px 15px 0 15px;
32
+ box-sizing: border-box;
33
+ }
34
+ </style>