@netang/quasar 0.0.20 → 0.0.21

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/README.md CHANGED
@@ -1,13 +1,12 @@
1
1
  ## Installation
2
2
 
3
3
  ```bash
4
- npm install @netang/admin --save-dev
4
+ npm install @netang/quasar --save-dev
5
5
  ```
6
6
 
7
7
  Install mandatory peer dependencies
8
8
  ```bash
9
- npm install @netang/utils --save-dev
10
- npm install lodash --save-dev
9
+ npm install @netang/utils @netang/vue-utils @netang/node-utils quasar @quasar/extras lodash axios bignumber.js spark-md5 xregexp --save-dev
11
10
  ```
12
11
 
13
12
  ## License
@@ -2,6 +2,7 @@
2
2
  <q-dialog
3
3
  class="n-dialog-proxy"
4
4
  ref="dialogRef"
5
+ v-model="currentModelValue"
5
6
  v-bind="dialogProps"
6
7
  @hide="onDialogHide"
7
8
  >
@@ -23,9 +24,14 @@
23
24
  container
24
25
  >
25
26
  <q-page-container>
27
+ <slot
28
+ v-bind="props"
29
+ v-if="$slots.default"
30
+ />
26
31
  <component
27
32
  :is="comp"
28
33
  v-bind="props"
34
+ v-else
29
35
  />
30
36
  </q-page-container>
31
37
  </q-layout>
@@ -43,7 +49,7 @@
43
49
  </template>
44
50
 
45
51
  <script>
46
- import { ref, computed, defineAsyncComponent, provide } from 'vue'
52
+ import { ref, computed, defineAsyncComponent, provide, watch } from 'vue'
47
53
  import { useDialogPluginComponent, useQuasar } from 'quasar'
48
54
 
49
55
  import routers from '@/router/routers'
@@ -62,6 +68,11 @@ export default {
62
68
  * 声明属性
63
69
  */
64
70
  props: {
71
+ // 值
72
+ modelValue: {
73
+ type: Boolean,
74
+ default: true,
75
+ },
65
76
  // 对话框传参
66
77
  dialogProps: Object,
67
78
  // 组件标识
@@ -103,25 +114,41 @@ export default {
103
114
  },
104
115
  // 是否全屏
105
116
  fullscreen: Boolean,
117
+ // 页面容器
118
+ pageContainer: {
119
+ type: Boolean,
120
+ default: true,
121
+ },
106
122
  },
107
123
 
108
124
  /**
109
125
  * 声明事件
110
126
  */
111
127
  emits: [
128
+ 'update:modelValue',
112
129
  ...useDialogPluginComponent.emits
113
130
  ],
114
131
 
115
132
  /**
116
133
  * 组合式
117
134
  */
118
- setup(props) {
135
+ setup(props, { emit }) {
119
136
 
120
137
  // ==========【数据】============================================================================================
121
138
 
122
139
  // quasar 对象
123
140
  const $q = useQuasar()
124
141
 
142
+ const currentModelValue = ref(props.modelValue)
143
+
144
+ watch(()=>props.modelValue, function (val) {
145
+ currentModelValue.value = val
146
+ })
147
+
148
+ watch(currentModelValue, function (val) {
149
+ emit('update:modelValue', val)
150
+ })
151
+
125
152
  const {
126
153
  // 对话框节点
127
154
  dialogRef,
@@ -283,6 +310,7 @@ export default {
283
310
  // ==========【返回】=============================================================================================
284
311
 
285
312
  return {
313
+ currentModelValue,
286
314
  // 自定义样式
287
315
  customStyle,
288
316
  // 组件
@@ -108,12 +108,8 @@ export default {
108
108
  const $route = useRoute()
109
109
 
110
110
  // 是否显示
111
- const isShow = ref($q.screen.width < props.breakpoint ? false : props.show)
112
-
113
- // 更新布局数据
114
- $nLayout.update(function(data) {
115
- data[props.side].data = isShow
116
- })
111
+ const isShow = $nLayout.data[props.side].modelValue
112
+ isShow.value = $q.screen.width < props.breakpoint ? false : props.show
117
113
 
118
114
  // 缓存名
119
115
  let cacheName = ''
@@ -97,91 +97,22 @@
97
97
  </q-popup-proxy>
98
98
  </q-field>
99
99
 
100
- <q-dialog v-model="showDialog">
101
- <q-card>
102
- 123123123
103
- <!--<q-table-->
104
- <!-- ref="tableRef"-->
105
- <!-- class="n-table"-->
106
- <!-- style="min-width:500px;max-width:90vw;height: 300px;"-->
107
- <!-- v-model:pagination="tablePagination"-->
108
- <!-- v-model:selected="tableSelected"-->
109
- <!-- :row-key="tableRowKey"-->
110
- <!-- :rows="tableRows"-->
111
- <!-- :columns="tableColumns"-->
112
- <!-- :selection="tableSelection"-->
113
- <!-- :loading="tableLoading"-->
114
- <!-- :rows-per-page-options="tableRowsPerPageOptions"-->
115
- <!-- @row-click="tableRowClick"-->
116
- <!-- @row-dblclick="tableRowDblclick"-->
117
- <!-- @request="tableRequest"-->
118
- <!-- flat-->
119
- <!-- virtual-scroll-->
120
- <!-- dense-->
121
- <!--&gt;-->
122
- <!-- &lt;!&ndash; 图片 &ndash;&gt;-->
123
- <!-- <template-->
124
- <!-- v-for="imgName in tableImgNames"-->
125
- <!-- v-slot:[`body-cell-${imgName}`]="props"-->
126
- <!-- >-->
127
- <!-- <q-td :props="props">-->
128
- <!-- &lt;!&ndash; 缩略图 &ndash;&gt;-->
129
- <!-- <n-thumbnail-->
130
- <!-- :src="props.row[imgName]"-->
131
- <!-- preview-->
132
- <!-- />-->
133
- <!-- </q-td>-->
134
- <!-- </template>-->
135
-
136
- <!-- &lt;!&ndash; 插槽 &ndash;&gt;-->
137
- <!-- <template-->
138
- <!-- v-for="slotName in slotNames"-->
139
- <!-- v-slot:[slotName]="props"-->
140
- <!-- >-->
141
- <!-- <q-td :props="props">-->
142
- <!-- <slot-->
143
- <!-- :name="slotName"-->
144
- <!-- v-bind="props"-->
145
- <!-- />-->
146
- <!-- </q-td>-->
147
- <!-- </template>-->
148
-
149
- <!-- &lt;!&ndash; 合计 &ndash;&gt;-->
150
- <!-- &lt;!&ndash;<template v-slot:bottom-row="props" v-if="tableSummary">&ndash;&gt;-->
151
- <!-- &lt;!&ndash; <n-table-summary&ndash;&gt;-->
152
- <!-- &lt;!&ndash; :props="props"&ndash;&gt;-->
153
- <!-- &lt;!&ndash; :data="tableSummary"&ndash;&gt;-->
154
- <!-- &lt;!&ndash; :selection="tableSelection"&ndash;&gt;-->
155
- <!-- &lt;!&ndash; />&ndash;&gt;-->
156
- <!-- &lt;!&ndash;</template>&ndash;&gt;-->
157
-
158
- <!-- &lt;!&ndash; 翻页 &ndash;&gt;-->
159
- <!-- <template v-slot:pagination="props">-->
160
- <!-- <n-table-pagination-->
161
- <!-- :props="props"-->
162
- <!-- :table-refresh="tableRefresh"-->
163
- <!-- />-->
164
- <!-- </template>-->
165
- <!--</q-table>-->
166
- <!--<q-card-section>-->
167
- <!-- <div class="text-h6">Alert</div>-->
168
- <!--</q-card-section>-->
169
-
170
- <!--<q-card-section class="q-pt-none">-->
171
- <!-- Lorem ipsum dolor sit amet consectetur adipisicing elit. Rerum repellendus sit voluptate voluptas eveniet porro. Rerum blanditiis perferendis totam, ea at omnis vel numquam exercitationem aut, natus minima, porro labore.-->
172
- <!--</q-card-section>-->
173
-
174
- <!--<q-card-actions align="right">-->
175
- <!-- <q-btn flat label="OK" color="primary" v-close-popup />-->
176
- <!--</q-card-actions>-->
177
- </q-card>
178
- </q-dialog>
100
+ <n-dialog
101
+ title="选择商品"
102
+ v-model="showDialog"
103
+ >
104
+ <q-page>
105
+ <n-table
106
+ page-status
107
+ @load="onPopupShow"
108
+ />
109
+ </q-page>
110
+ </n-dialog>
179
111
  </template>
180
112
 
181
113
  <script>
182
- import { ref, reactive, computed, watch, nextTick, onMounted } from 'vue'
183
- import { date as quasarDate } from 'quasar'
184
- import NDialog from "../dialog";
114
+ import { ref, reactive, computed, provide, watch, nextTick, onMounted } from 'vue'
115
+ import { NFieldTableKey } from '../../utils/symbols'
185
116
 
186
117
  export default {
187
118
 
@@ -189,7 +120,7 @@ export default {
189
120
  * 标识
190
121
  */
191
122
  name: 'NFieldTable',
192
- components: {NDialog},
123
+
193
124
  /**
194
125
  * 声明属性
195
126
  */
@@ -267,10 +198,18 @@ export default {
267
198
  rowKey: props.rowKey,
268
199
  // 选择类型, 可选值 single multiple none
269
200
  selection: props.multiple ? 'multiple' : 'none',
270
- // 关闭宫格
271
- showGrid: false,
272
- // 关闭可见列
273
- showVisibleColumns: false,
201
+ // // 关闭宫格
202
+ // showGrid: false,
203
+ // // 关闭可见列
204
+ // showVisibleColumns: false,
205
+ })
206
+
207
+ // ==========【注入】============================================================================================
208
+
209
+ // 向后代注入数据
210
+ provide(NFieldTableKey, {
211
+ // 表格实例
212
+ $table,
274
213
  })
275
214
 
276
215
  // ==========【计算属性】=========================================================================================
@@ -285,6 +224,25 @@ export default {
285
224
  return []
286
225
  })
287
226
 
227
+ /**
228
+ * 获取表格列数据
229
+ */
230
+ // const tableColumns = computed(function () {
231
+ //
232
+ // // 获取原始表格列数据
233
+ // const rawTableColumns = props.route
234
+ // // 如果有路由组件路径
235
+ // ? utils.$table.config(props.route, 'columns')
236
+ // // 否则为自定义表格列数据
237
+ // : props.columns
238
+ //
239
+ // // 如果有原始表格列数据
240
+ // return utils.isValidArray(rawTableColumns)
241
+ // // 克隆原始表格列数据
242
+ // ? _.cloneDeep(rawTableColumns)
243
+ // : []
244
+ // })
245
+
288
246
  // ==========【监听数据】=========================================================================================
289
247
 
290
248
  /**
@@ -301,40 +259,54 @@ export default {
301
259
  */
302
260
  function getTableColumns() {
303
261
 
304
- const columns = []
305
-
306
262
  // 获取原始表格列数据
307
- let rawTableColumns = props.route
263
+ const rawTableColumns = props.route
308
264
  // 如果有路由组件路径
309
265
  ? utils.$table.config(props.route, 'columns')
310
266
  // 否则为自定义表格列数据
311
267
  : props.columns
312
268
 
313
269
  // 如果有原始表格列数据
314
- if (utils.isValidArray(rawTableColumns)) {
315
-
270
+ return utils.isValidArray(rawTableColumns)
316
271
  // 克隆原始表格列数据
317
- rawTableColumns = _.cloneDeep(rawTableColumns)
318
-
319
- // 快捷表格显示的属性名称数组
320
- utils.forEach(props.showKeys, function (key) {
321
- for (const item of rawTableColumns) {
322
- if (item.name === key) {
323
- // 删除搜索字段
324
- if (_.has(item, 'search')) {
325
- delete item.search
326
- }
327
- // 删除可见字段
328
- if (_.has(item, 'visible')) {
329
- delete item.visible
330
- }
331
- columns.push(item)
332
- }
333
- }
334
- })
335
- }
336
-
337
- return columns
272
+ ? _.cloneDeep(rawTableColumns)
273
+ // 否则为空
274
+ : []
275
+
276
+ // const columns = []
277
+ //
278
+ // // 获取原始表格列数据
279
+ // let rawTableColumns = props.route
280
+ // // 如果有路由组件路径
281
+ // ? utils.$table.config(props.route, 'columns')
282
+ // // 否则为自定义表格列数据
283
+ // : props.columns
284
+ //
285
+ // // 如果有原始表格列数据
286
+ // if (utils.isValidArray(rawTableColumns)) {
287
+ //
288
+ // // 克隆原始表格列数据
289
+ // rawTableColumns = _.cloneDeep(rawTableColumns)
290
+ //
291
+ // // 快捷表格显示的属性名称数组
292
+ // utils.forEach(props.showKeys, function (key) {
293
+ // for (const item of rawTableColumns) {
294
+ // if (item.name === key) {
295
+ // // 删除搜索字段
296
+ // if (_.has(item, 'search')) {
297
+ // delete item.search
298
+ // }
299
+ // // 删除可见字段
300
+ // if (_.has(item, 'visible')) {
301
+ // delete item.visible
302
+ // }
303
+ // columns.push(item)
304
+ // }
305
+ // }
306
+ // })
307
+ // }
308
+ //
309
+ // return columns
338
310
  }
339
311
 
340
312
  /**
@@ -394,9 +366,7 @@ export default {
394
366
  * 显示对话框
395
367
  */
396
368
  function onDialog() {
397
-
398
369
  showDialog.value = true
399
- console.log('ssss')
400
370
  }
401
371
 
402
372
  // ==========【生命周期】=========================================================================================
@@ -20,7 +20,7 @@
20
20
  </template>
21
21
 
22
22
  <script>
23
- import { provide } from 'vue'
23
+ import { provide, ref } from 'vue'
24
24
  import { NLayoutKey } from '../../utils/symbols'
25
25
 
26
26
  export default {
@@ -55,17 +55,40 @@ export default {
55
55
 
56
56
  // ==========【注入】============================================================================================
57
57
 
58
+ const leftModelValue = ref(null)
59
+ const rightModelValue = ref(null)
60
+
58
61
  // 布局数据
59
62
  const data = {
60
63
  // 左边侧滑菜单数据
61
64
  left: {
62
65
  // 是否显示
63
- data: null,
66
+ modelValue: leftModelValue,
67
+ // 是否显示切换按钮
68
+ showButton() {
69
+ return leftModelValue.value !== null
70
+ },
71
+ // 切换
72
+ toggle() {
73
+ if (leftModelValue.value !== null) {
74
+ leftModelValue.value = ! leftModelValue.value
75
+ }
76
+ },
64
77
  },
65
78
  // 右边侧滑菜单数据
66
79
  right: {
67
80
  // 是否显示
68
- data: null,
81
+ modelValue: rightModelValue,
82
+ // 是否显示切换按钮
83
+ showButton() {
84
+ return rightModelValue.value !== null
85
+ },
86
+ // 切换
87
+ toggle() {
88
+ if (rightModelValue.value !== null) {
89
+ rightModelValue.value = ! rightModelValue.value
90
+ }
91
+ },
69
92
  },
70
93
  // 权限数据
71
94
  role: {},
@@ -74,22 +97,6 @@ export default {
74
97
  // 上传器
75
98
  uploader: [],
76
99
  }
77
- data.left.show = function() {
78
- return data.left.data !== null ? data.left.data.value : false
79
- }
80
- data.left.toggle = function () {
81
- if (data.left.data !== null) {
82
- data.left.data.value = ! data.left.data.value
83
- }
84
- }
85
- data.right.show = function() {
86
- return data.right.data !== null ? data.right.data.value : false
87
- }
88
- data.right.toggle = function () {
89
- if (data.right.data !== null) {
90
- data.right.data.value = ! data.right.data.value
91
- }
92
- }
93
100
 
94
101
  // 向后代注入数据
95
102
  provide(NLayoutKey, {
@@ -21,7 +21,8 @@
21
21
  :table-refresh="tableRefresh"
22
22
  v-bind="toolbarProps"
23
23
  header
24
- />
24
+ >
25
+ </n-toolbar>
25
26
  <!-- 左侧分类 -->
26
27
  <n-drawer
27
28
  side="left"
@@ -166,9 +167,11 @@
166
167
  </template>
167
168
 
168
169
  <script>
169
- import { ref, onMounted, watch, computed } from 'vue'
170
+ import { ref, onMounted, watch, computed, inject } from 'vue'
170
171
  import { useRoute } from 'vue-router'
171
172
 
173
+ import { NFieldTableKey } from '../../utils/symbols'
174
+
172
175
  export default {
173
176
 
174
177
  /**
@@ -236,6 +239,12 @@ export default {
236
239
  */
237
240
  setup(props, { emit, slots }) {
238
241
 
242
+ // ==========【注入】============================================================================================
243
+
244
+ // 获取文本框表格注入
245
+ const $fieldTable = inject(NFieldTableKey)
246
+ const inFieldTable = !! $fieldTable
247
+
239
248
  // ==========【数据】============================================================================================
240
249
 
241
250
  // 树节点
@@ -264,7 +273,7 @@ export default {
264
273
  }
265
274
 
266
275
  // 创建表格
267
- const $table = utils.$table.create(tableParams)
276
+ const $table = inFieldTable ? $fieldTable.$table : utils.$table.create(tableParams)
268
277
 
269
278
  // ==========【计算属性】==========================================================================================
270
279
 
@@ -11,7 +11,7 @@
11
11
  round
12
12
  flat
13
13
  @click="layoutData.left.toggle"
14
- v-if="hiddenLeft ? ! layoutData.left.show() : (layoutData.left.data !== null)"
14
+ v-if="layoutData.left.showButton()"
15
15
  />
16
16
 
17
17
  <!-- 左边插槽 -->
@@ -99,6 +99,8 @@
99
99
  </q-menu>
100
100
  </q-btn>
101
101
 
102
+ <span>{{layoutData.right.data}}</span>
103
+
102
104
  <!-- 右边按钮-->
103
105
  <q-btn
104
106
  :icon="rightIcon"
@@ -106,7 +108,7 @@
106
108
  round
107
109
  flat
108
110
  @click="layoutData.right.toggle"
109
- v-if="hiddenRight ? ! layoutData.right.show() : (layoutData.right.data !== null)"
111
+ v-if="layoutData.right.showButton()"
110
112
  />
111
113
  </q-toolbar>
112
114
  </container>
@@ -175,20 +177,11 @@ export default {
175
177
  type: String,
176
178
  default: 'format_list_bulleted',
177
179
  },
178
- // 默认隐藏左边(宽屏不显示, 小屏自动显示)
179
- hiddenLeft: Boolean,
180
180
  // 左边图标
181
181
  rightIcon: {
182
182
  type: String,
183
183
  default: 'search',
184
184
  },
185
- // 是否请求权限按钮数据
186
- getRoleBtn: {
187
- type: Boolean,
188
- default: true,
189
- },
190
- // 是否隐藏右边(宽屏不显示, 小屏自动显示)
191
- hiddenRight: Boolean,
192
185
  // 是否头部
193
186
  header: Boolean,
194
187
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netang/quasar",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "description": "netang-quasar",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"
package/utils/$table.js CHANGED
@@ -307,6 +307,10 @@ function create(params) {
307
307
  // 表格搜索数据值
308
308
  const tableSearchValue = ref(firstTableSearchValue)
309
309
 
310
+ watch(tableSearchValue, function (val) {
311
+ console.log('tableSearchValue', val)
312
+ })
313
+
310
314
  // 表格搜索参数
311
315
  const tableSearchOptions = ref()
312
316
 
package/utils/symbols.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export const NLayoutKey = '_n_layout_'
2
2
  export const NDialogKey = '_n_dialog_'
3
+ export const NFieldTableKey = '_n_field_table_'
3
4
  export const NUploaderKey = '_n_uploader_'